From: Maulik Shah <mkshah@codeaurora.org>
To: swboyd@chromium.org, mka@chromium.org, evgreen@chromium.org,
bjorn.andersson@linaro.org
Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org,
agross@kernel.org, dianders@chromium.org, rnayak@codeaurora.org,
ilina@codeaurora.org, lsrao@codeaurora.org,
Maulik Shah <mkshah@codeaurora.org>,
Taniya Das <tdas@codeaurora.org>,
Odelu Kukatla <okukatla@codeaurora.org>,
Kiran Gunda <kgunda@codeaurora.org>,
Sibi Sankar <sibis@codeaurora.org>
Subject: [PATCH v13 5/5] drivers: qcom: Update rpmh clients to use start and end transactions
Date: Mon, 9 Mar 2020 15:00:36 +0530 [thread overview]
Message-ID: <1583746236-13325-6-git-send-email-mkshah@codeaurora.org> (raw)
In-Reply-To: <1583746236-13325-1-git-send-email-mkshah@codeaurora.org>
Update all rpmh clients to start using rpmh_start_transaction() and
rpmh_end_transaction().
Cc: Taniya Das <tdas@codeaurora.org>
Cc: Odelu Kukatla <okukatla@codeaurora.org>
Cc: Kiran Gunda <kgunda@codeaurora.org>
Cc: Sibi Sankar <sibis@codeaurora.org>
Signed-off-by: Maulik Shah <mkshah@codeaurora.org>
---
drivers/clk/qcom/clk-rpmh.c | 21 ++++++++++++++-------
drivers/interconnect/qcom/bcm-voter.c | 13 +++++++++----
drivers/regulator/qcom-rpmh-regulator.c | 4 ++++
drivers/soc/qcom/rpmhpd.c | 11 +++++++++--
4 files changed, 36 insertions(+), 13 deletions(-)
diff --git a/drivers/clk/qcom/clk-rpmh.c b/drivers/clk/qcom/clk-rpmh.c
index 12bd871..16f68d4 100644
--- a/drivers/clk/qcom/clk-rpmh.c
+++ b/drivers/clk/qcom/clk-rpmh.c
@@ -154,22 +154,27 @@ static int clk_rpmh_send_aggregate_command(struct clk_rpmh *c)
cmd_state = c->aggr_state;
on_val = c->res_on_val;
+ rpmh_start_transaction(c->dev);
+
for (; state <= RPMH_ACTIVE_ONLY_STATE; state++) {
if (has_state_changed(c, state)) {
if (cmd_state & BIT(state))
cmd.data = on_val;
ret = rpmh_write_async(c->dev, state, &cmd, 1);
- if (ret) {
- dev_err(c->dev, "set %s state of %s failed: (%d)\n",
- !state ? "sleep" :
- state == RPMH_WAKE_ONLY_STATE ?
- "wake" : "active", c->res_name, ret);
- return ret;
- }
+ if (ret)
+ break;
}
}
+ ret |= rpmh_end_transaction(c->dev);
+ if (ret) {
+ dev_err(c->dev, "set %s state of %s failed: (%d)\n",
+ !state ? "sleep" : state == RPMH_WAKE_ONLY_STATE ?
+ "wake" : "active", c->res_name, ret);
+ return ret;
+ }
+
c->last_sent_aggr_state = c->aggr_state;
c->peer->last_sent_aggr_state = c->last_sent_aggr_state;
@@ -267,7 +272,9 @@ static int clk_rpmh_bcm_send_cmd(struct clk_rpmh *c, bool enable)
cmd.addr = c->res_addr;
cmd.data = BCM_TCS_CMD(1, enable, 0, cmd_state);
+ rpmh_start_transaction(c->dev);
ret = rpmh_write_async(c->dev, RPMH_ACTIVE_ONLY_STATE, &cmd, 1);
+ ret |= rpmh_end_transaction(c->dev);
if (ret) {
dev_err(c->dev, "set active state of %s failed: (%d)\n",
c->res_name, ret);
diff --git a/drivers/interconnect/qcom/bcm-voter.c b/drivers/interconnect/qcom/bcm-voter.c
index 2adfde8..fbe18b2 100644
--- a/drivers/interconnect/qcom/bcm-voter.c
+++ b/drivers/interconnect/qcom/bcm-voter.c
@@ -263,7 +263,9 @@ int qcom_icc_bcm_voter_commit(struct bcm_voter *voter)
tcs_list_gen(&voter->commit_list, QCOM_ICC_BUCKET_AMC, cmds, commit_idx);
if (!commit_idx[0])
- goto out;
+ goto end;
+
+ rpmh_start_transaction(voter-dev);
ret = rpmh_invalidate(voter->dev);
if (ret) {
@@ -312,12 +314,15 @@ int qcom_icc_bcm_voter_commit(struct bcm_voter *voter)
tcs_list_gen(&voter->commit_list, QCOM_ICC_BUCKET_SLEEP, cmds, commit_idx);
ret = rpmh_write_batch(voter->dev, RPMH_SLEEP_STATE, cmds, commit_idx);
- if (ret) {
+ if (ret)
pr_err("Error sending SLEEP RPMH requests (%d)\n", ret);
- goto out;
- }
out:
+ ret = rpmh_end_transaction(voter-dev);
+ if (ret)
+ pr_err("Error ending rpmh transaction (%d)\n", ret);
+
+end:
list_for_each_entry_safe(bcm, bcm_tmp, &voter->commit_list, list)
list_del_init(&bcm->list);
diff --git a/drivers/regulator/qcom-rpmh-regulator.c b/drivers/regulator/qcom-rpmh-regulator.c
index c86ad40..f4b9176 100644
--- a/drivers/regulator/qcom-rpmh-regulator.c
+++ b/drivers/regulator/qcom-rpmh-regulator.c
@@ -163,12 +163,16 @@ static int rpmh_regulator_send_request(struct rpmh_vreg *vreg,
{
int ret;
+ rpmh_start_transaction(vreg->dev);
+
if (wait_for_ack || vreg->always_wait_for_ack)
ret = rpmh_write(vreg->dev, RPMH_ACTIVE_ONLY_STATE, cmd, 1);
else
ret = rpmh_write_async(vreg->dev, RPMH_ACTIVE_ONLY_STATE, cmd,
1);
+ ret |= rpmh_end_transaction(vreg->dev);
+
return ret;
}
diff --git a/drivers/soc/qcom/rpmhpd.c b/drivers/soc/qcom/rpmhpd.c
index 4d264d0..0e9d204 100644
--- a/drivers/soc/qcom/rpmhpd.c
+++ b/drivers/soc/qcom/rpmhpd.c
@@ -193,19 +193,26 @@ static const struct of_device_id rpmhpd_match_table[] = {
static int rpmhpd_send_corner(struct rpmhpd *pd, int state,
unsigned int corner, bool sync)
{
+ int ret;
struct tcs_cmd cmd = {
.addr = pd->addr,
.data = corner,
};
+ rpmh_start_transaction(pd->dev);
+
/*
* Wait for an ack only when we are increasing the
* perf state of the power domain
*/
if (sync)
- return rpmh_write(pd->dev, state, &cmd, 1);
+ ret = rpmh_write(pd->dev, state, &cmd, 1);
else
- return rpmh_write_async(pd->dev, state, &cmd, 1);
+ ret = rpmh_write_async(pd->dev, state, &cmd, 1);
+
+ ret |= rpmh_end_transaction(pd->dev);
+
+ return ret;
}
static void to_active_sleep(struct rpmhpd *pd, unsigned int corner,
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
next prev parent reply other threads:[~2020-03-09 9:31 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-09 9:30 [PATCH v13 0/4] Invoke rpmh_flush for non OSI targets Maulik Shah
2020-03-09 9:30 ` [PATCH v13 1/5] arm64: dts: qcom: sc7180: Add cpuidle low power states Maulik Shah
2020-03-09 9:30 ` [PATCH v13 2/5] soc: qcom: rpmh: Update dirty flag only when data changes Maulik Shah
2020-03-09 23:42 ` Doug Anderson
2020-03-13 8:53 ` Maulik Shah
2020-03-09 9:30 ` [PATCH v13 3/5] soc: qcom: rpmh: Invalidate SLEEP and WAKE TCSes before flushing new data Maulik Shah
2020-03-09 23:42 ` Doug Anderson
2020-03-10 11:09 ` Maulik Shah
2020-03-09 9:30 ` [PATCH v13 4/5] soc: qcom: rpmh: Invoke rpmh_flush() for dirty caches Maulik Shah
2020-03-09 23:43 ` Doug Anderson
2020-03-10 11:19 ` Maulik Shah
2020-03-10 15:46 ` Doug Anderson
2020-03-11 6:36 ` Maulik Shah
2020-03-11 23:06 ` Doug Anderson
[not found] ` <5a5274ac-41f4-b06d-ff49-c00cef67aa7f@codeaurora.org>
2020-03-12 15:11 ` Doug Anderson
2020-03-25 17:15 ` Maulik Shah
2020-03-26 18:08 ` Doug Anderson
2020-03-09 9:30 ` Maulik Shah [this message]
2020-03-09 23:44 ` [PATCH v13 5/5] drivers: qcom: Update rpmh clients to use start and end transactions Doug Anderson
2020-03-10 11:46 ` Maulik Shah
2020-03-10 15:46 ` Doug Anderson
2020-03-11 23:02 ` Doug Anderson
2020-03-09 23:42 ` [PATCH v13 0/4] Invoke rpmh_flush for non OSI targets Doug Anderson
2020-03-10 11:49 ` Maulik Shah
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1583746236-13325-6-git-send-email-mkshah@codeaurora.org \
--to=mkshah@codeaurora.org \
--cc=agross@kernel.org \
--cc=bjorn.andersson@linaro.org \
--cc=dianders@chromium.org \
--cc=evgreen@chromium.org \
--cc=ilina@codeaurora.org \
--cc=kgunda@codeaurora.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lsrao@codeaurora.org \
--cc=mka@chromium.org \
--cc=okukatla@codeaurora.org \
--cc=rnayak@codeaurora.org \
--cc=sibis@codeaurora.org \
--cc=swboyd@chromium.org \
--cc=tdas@codeaurora.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.