linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Collins <collinsd@codeaurora.org>
To: Douglas Anderson <dianders@chromium.org>, broonie@kernel.org
Cc: linux-arm-msm@vger.kernel.org, bjorn.andersson@linaro.org,
	swboyd@chromium.org, Liam Girdwood <lgirdwood@gmail.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/4] regulator: core: If consumers don't call regulator_set_load() assume max
Date: Tue, 14 Aug 2018 11:30:34 -0700	[thread overview]
Message-ID: <bf70f01d-41ac-dcdc-b503-5e0eb1e70329@codeaurora.org> (raw)
In-Reply-To: <20180814170617.100087-2-dianders@chromium.org>

Hello Doug,

On 08/14/2018 10:06 AM, Douglas Anderson wrote:
> Not all regulator consumers call regulator_set_load().  On some
> regulators (like on RPMh-regulator) this could be bad since the
> regulator framework will treat this as if consumer needs no load.
> It's much better to assume that a dumb client needs the maximum
> possible load so we get correctness first.
> 
> Signed-off-by: Douglas Anderson <dianders@chromium.org>
> ---

The behavior introduced by this patch seems like an undesirable hack to
me.  It goes against the general philosophy within the regulator framework
of taking no action unless directed to do so by an explicit consumer
request (or special device tree property).  We should assume that
consumers make requests to meet their needs instead of assuming that they
are missing important votes required by their hardware.


>  drivers/regulator/core.c     | 10 +++++++++-
>  drivers/regulator/internal.h |  1 +
>  2 files changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
> index 6ed568b96c0e..a4da68775b49 100644
> --- a/drivers/regulator/core.c
> +++ b/drivers/regulator/core.c
> @@ -732,6 +732,7 @@ static int drms_uA_update(struct regulator_dev *rdev)
>  	struct regulator *sibling;
>  	int current_uA = 0, output_uV, input_uV, err;
>  	unsigned int mode;
> +	bool any_unset = false;
>  
>  	lockdep_assert_held_once(&rdev->mutex);
>  
> @@ -751,11 +752,17 @@ static int drms_uA_update(struct regulator_dev *rdev)
>  		return -EINVAL;
>  
>  	/* calc total requested load */
> -	list_for_each_entry(sibling, &rdev->consumer_list, list)
> +	list_for_each_entry(sibling, &rdev->consumer_list, list) {
>  		current_uA += sibling->uA_load;
> +		if (!sibling->uA_load_set)
> +			any_unset = true;
> +	}
>  
>  	current_uA += rdev->constraints->system_load;
>  
> +	if (any_unset)
> +		current_uA = INT_MAX;
> +

This check will incorrectly result in a constant load request of INT_MAX
for all regulators that have at least one child regulator.  This is the
case because such child regulators are present in rdev->consumer_list and
because regulator_set_load() requests are not propagated up to parent
regulators.  Thus, the regulator structs for child regulators will always
have uA_load==0 and uA_load_set==false.

Take care,
David

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

  reply	other threads:[~2018-08-14 18:30 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-14 17:06 [PATCH 0/4] regulator: core: A few useful patches for regulators that need load set Douglas Anderson
2018-08-14 17:06 ` [PATCH 1/4] regulator: core: If consumers don't call regulator_set_load() assume max Douglas Anderson
2018-08-14 18:30   ` David Collins [this message]
2018-08-14 20:03     ` Doug Anderson
2018-08-14 21:59       ` David Collins
2018-08-14 23:56         ` Doug Anderson
2018-08-15  1:32           ` David Collins
2018-08-15 11:13           ` Mark Brown
2018-08-16 20:07             ` Doug Anderson
2018-08-16 20:58               ` David Collins
2018-08-16 21:03                 ` Doug Anderson
2018-08-15 11:06       ` Mark Brown
2018-08-15 10:57   ` Mark Brown
2018-08-17 21:36   ` Bjorn Andersson
2018-08-20 17:18     ` Mark Brown
2018-08-14 17:06 ` [PATCH 2/4] regulator: core: Add the opmode to regulator_summary Douglas Anderson
2018-08-14 17:06 ` [PATCH 3/4] regulator: core: Add consumer-requested load in regulator_summary Douglas Anderson
2018-08-14 17:06 ` [PATCH 4/4] regulator: core: Add locking to debugfs regulator_summary Douglas Anderson

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=bf70f01d-41ac-dcdc-b503-5e0eb1e70329@codeaurora.org \
    --to=collinsd@codeaurora.org \
    --cc=bjorn.andersson@linaro.org \
    --cc=broonie@kernel.org \
    --cc=dianders@chromium.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=swboyd@chromium.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).