From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Avaneesh Kumar Dwivedi <akdwived@codeaurora.org>
Cc: sboyd@codeaurora.org, agross@codeaurora.org,
linux-arm-msm@vger.kernel.org
Subject: Re: [RESEND PATCH v4 3/7] remoteproc: qcom: Modify regulator enable and disable interface
Date: Thu, 8 Dec 2016 18:44:42 -0800 [thread overview]
Message-ID: <20161209024442.GQ30492@tuxbot> (raw)
In-Reply-To: <1479981638-32069-4-git-send-email-akdwived@codeaurora.org>
On Thu 24 Nov 02:00 PST 2016, Avaneesh Kumar Dwivedi wrote:
> Regulator enable routine will get additional input parameter of
> regulator info and count, It will read regulator info and will do
> appropriate voltage and load configuration before turning them up.
> Also separate out disable interface into proxy and active disable
> so that on arrival of handover interrupt proxy regulators alone
> could be voted out.
>
> Signed-off-by: Avaneesh Kumar Dwivedi <akdwived@codeaurora.org>
> ---
> drivers/remoteproc/qcom_q6v5_pil.c | 113 ++++++++++++++++++++++++++++---------
> 1 file changed, 86 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/remoteproc/qcom_q6v5_pil.c b/drivers/remoteproc/qcom_q6v5_pil.c
> index b0f0fcf..06d5bb2 100644
> --- a/drivers/remoteproc/qcom_q6v5_pil.c
> +++ b/drivers/remoteproc/qcom_q6v5_pil.c
> @@ -126,7 +126,6 @@ struct q6v5 {
> struct qcom_smem_state *state;
> unsigned stop_bit;
>
> - struct regulator_bulk_data supply[4];
>
> struct clk *ahb_clk;
> struct clk *axi_clk;
> @@ -160,13 +159,6 @@ enum {
> Q5V56_1_5_0, /*hexagon on msm8996*/
> };
>
> -enum {
> - Q6V5_SUPPLY_CX,
> - Q6V5_SUPPLY_MX,
> - Q6V5_SUPPLY_MSS,
> - Q6V5_SUPPLY_PLL,
> -};
> -
> static int q6v5_regulator_init(struct device *dev,
> struct reg_info *regs, char **reg_str, int volatage_load[][2])
> {
> @@ -206,35 +198,93 @@ static int q6v5_regulator_init(struct device *dev,
> return reg_count;
> }
>
> -static int q6v5_regulator_enable(struct q6v5 *qproc)
> +static int q6v5_regulator_enable(struct q6v5 *qproc,
> + struct reg_info *regs, int count)
> {
> - struct regulator *mss = qproc->supply[Q6V5_SUPPLY_MSS].consumer;
> - struct regulator *mx = qproc->supply[Q6V5_SUPPLY_MX].consumer;
> - int ret;
> + int i, rc = 0;
One variable per line, no need to replace "ret" with "rc" and no need to
initialize it to 0 as it won't be read before written in any code path.
> +
> + for (i = 0; i < count; i++) {
> + if (regs[i].uV > 0) {
> + rc = regulator_set_voltage(regs[i].reg,
> + regs[i].uV, INT_MAX);
> + if (rc) {
> + dev_err(qproc->dev,
> + "Failed to request voltage for %d.\n",
> + i);
> + goto err;
> + }
> + }
>
> - /* TODO: Q6V5_SUPPLY_CX is supposed to be set to super-turbo here */
> + if (regs[i].uA > 0) {
> + rc = regulator_set_load(regs[i].reg,
> + regs[i].uA);
> + if (rc < 0) {
> + dev_err(qproc->dev, "Failed to set regulator mode\n");
> + goto err;
> + }
> + }
>
> - ret = regulator_set_voltage(mx, 1050000, INT_MAX);
> - if (ret)
> - return ret;
> + rc = regulator_enable(regs[i].reg);
> + if (rc) {
> + dev_err(qproc->dev, "Regulator enable failed\n");
> + goto err;
> + }
> + }
> +
> + return 0;
> +err:
> + for (; i >= 0; i--) {
> + if (regs[i].uV > 0)
> + regulator_set_voltage(regs[i].reg, 0, INT_MAX);
>
> - regulator_set_voltage(mss, 1000000, 1150000);
> + if (regs[i].uA > 0)
> + regulator_set_load(regs[i].reg, 0);
> +
> + regulator_disable(regs[i].reg);
> + }
>
> - return regulator_bulk_enable(ARRAY_SIZE(qproc->supply), qproc->supply);
> + return rc;
> }
>
> -static void q6v5_regulator_disable(struct q6v5 *qproc)
> +static void q6v5_proxy_regulator_disable(struct q6v5 *qproc)
Please have follow the same scheme as for enable, with a function taking
the list of regulators and count.
> {
> - struct regulator *mss = qproc->supply[Q6V5_SUPPLY_MSS].consumer;
> - struct regulator *mx = qproc->supply[Q6V5_SUPPLY_MX].consumer;
> + int i;
> + struct reg_info *regs = qproc->proxy_regs;
>
> - /* TODO: Q6V5_SUPPLY_CX corner votes should be released */
> + for (i = 0; i < qproc->proxy_reg_count; i++) {
> + if (regs[i].uV > 0)
> + regulator_set_voltage(regs[i].reg, 0, INT_MAX);
>
> - regulator_bulk_disable(ARRAY_SIZE(qproc->supply), qproc->supply);
> - regulator_set_voltage(mx, 0, INT_MAX);
> - regulator_set_voltage(mss, 0, 1150000);
> + if (regs[i].uA > 0)
> + regulator_set_load(regs[i].reg, 0);
> +
> + regulator_disable(regs[i].reg);
> + }
> }
>
> +static void q6v5_active_regulator_disable(struct q6v5 *qproc)
> +{
> + int i;
> + struct reg_info *regs = qproc->active_regs;
> +
> + for (i = 0; i < qproc->active_reg_count; i++) {
> + if (regs[i].uV > 0)
> + regulator_set_voltage(regs[i].reg, 0, INT_MAX);
> +
> + if (regs[i].uA > 0)
> + regulator_set_load(regs[i].reg, 0);
> +
> + regulator_disable(regs[i].reg);
> + }
> +}
> +
> +static void q6v5_regulator_disable(struct q6v5 *qproc)
> +{
> + q6v5_proxy_regulator_disable(qproc);
> + q6v5_active_regulator_disable(qproc);
> +}
> +
> +
> static int q6v5_load(struct rproc *rproc, const struct firmware *fw)
> {
> struct q6v5 *qproc = rproc->priv;
> @@ -524,12 +574,19 @@ static int q6v5_start(struct rproc *rproc)
> struct q6v5 *qproc = (struct q6v5 *)rproc->priv;
> int ret;
>
> - ret = q6v5_regulator_enable(qproc);
> + ret = q6v5_regulator_enable(qproc, qproc->proxy_regs,
> + qproc->proxy_reg_count);
Align indentation with parenthesis on previous line.
> if (ret) {
> - dev_err(qproc->dev, "failed to enable supplies\n");
> + dev_err(qproc->dev, "failed to enable proxy supplies\n");
> return ret;
> }
>
> + ret = q6v5_regulator_enable(qproc, qproc->active_regs,
> + qproc->active_reg_count);
> + if (ret) {
> + dev_err(qproc->dev, "failed to enable supplies\n");
> + goto disable_proxy_reg;
> + }
> ret = reset_control_deassert(qproc->mss_restart);
> if (ret) {
> dev_err(qproc->dev, "failed to deassert mss restart\n");
> @@ -600,6 +657,8 @@ static int q6v5_start(struct rproc *rproc)
> disable_vdd:
> q6v5_regulator_disable(qproc);
Here you disable both active and proxy regulators, then you call
through...
>
> +disable_proxy_reg:
> + q6v5_proxy_regulator_disable(qproc);
...and once again disable proxy regulators.
Remove q6v5_regulator_disable() and just call the active and proxy
disable functions directly.
> return ret;
> }
>
Regards,
Bjorn
next prev parent reply other threads:[~2016-12-09 2:44 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-24 10:00 [RESEND PATCH v4 0/7]remoteproc: qcom: Add support to hexagon v56 1.5.0 in qcom hexagon rproc driver Avaneesh Kumar Dwivedi
2016-11-24 10:00 ` [RESEND PATCH v4 1/7] remoteproc: qcom: Add and initialize private data for hexagon dsp Avaneesh Kumar Dwivedi
2016-12-08 21:37 ` Bjorn Andersson
2016-12-09 11:42 ` Dwivedi, Avaneesh Kumar (avani)
2016-12-09 19:32 ` Bjorn Andersson
2016-11-24 10:00 ` [RESEND PATCH v4 2/7] remoteproc: qcom: Initialize proxy and active clock's and regulator's Avaneesh Kumar Dwivedi
2016-12-09 2:36 ` Bjorn Andersson
2016-12-09 15:53 ` Dwivedi, Avaneesh Kumar (avani)
2016-11-24 10:00 ` [RESEND PATCH v4 3/7] remoteproc: qcom: Modify regulator enable and disable interface Avaneesh Kumar Dwivedi
2016-12-09 2:44 ` Bjorn Andersson [this message]
2016-12-12 8:21 ` Dwivedi, Avaneesh Kumar (avani)
2016-11-24 10:00 ` [RESEND PATCH v4 4/7] remoteproc: qcom: Modify clock enable and disable routine Avaneesh Kumar Dwivedi
2016-12-09 2:57 ` Bjorn Andersson
2016-12-12 8:23 ` Dwivedi, Avaneesh Kumar (avani)
2016-11-24 10:00 ` [RESEND PATCH v4 5/7] remoteproc: qcom: Modify reset sequence for hexagon to support v56 1.5.0 Avaneesh Kumar Dwivedi
2016-12-09 4:35 ` Bjorn Andersson
2016-12-12 12:45 ` Dwivedi, Avaneesh Kumar (avani)
2016-12-13 18:09 ` Bjorn Andersson
2016-12-13 19:45 ` Dwivedi, Avaneesh Kumar (avani)
2016-12-13 22:07 ` Bjorn Andersson
2016-12-14 15:50 ` Dwivedi, Avaneesh Kumar (avani)
2016-12-14 20:13 ` Bjorn Andersson
2016-11-24 10:00 ` [RESEND PATCH v4 6/7] remoteproc: qcom: Modify stop routine to limit MX current for v56 1.5 Avaneesh Kumar Dwivedi
2016-12-09 4:42 ` Bjorn Andersson
2016-12-12 13:04 ` Dwivedi, Avaneesh Kumar (avani)
2016-11-24 10:00 ` [RESEND PATCH v4 7/7] clk: qcom: Add GCC_MSS_RESET support to reset MSS in v56 1.5.0 Avaneesh Kumar Dwivedi
2016-12-08 19:51 ` Bjorn Andersson
2016-12-12 13:05 ` Dwivedi, Avaneesh Kumar (avani)
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=20161209024442.GQ30492@tuxbot \
--to=bjorn.andersson@linaro.org \
--cc=agross@codeaurora.org \
--cc=akdwived@codeaurora.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=sboyd@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).