From: Rajendra Nayak rnayak@codeaurora.org
commit a4501bac0e553bed117b7e1b166d49731caf7260 upstream.
dev_pm_opp_set_rate() can now be called with freq = 0 in order to either drop performance or bandwidth votes or to disable regulators on platforms which support them.
In such cases, a subsequent call to dev_pm_opp_set_rate() with the same frequency ends up returning early because 'old_freq == freq'
Instead make it fall through and put back the dropped performance and bandwidth votes and/or enable back the regulators.
Cc: v5.3+ stable@vger.kernel.org # v5.3+ Fixes: cd7ea582866f ("opp: Make dev_pm_opp_set_rate() handle freq = 0 to drop performance votes") Reported-by: Sajida Bhanu sbhanu@codeaurora.org Reviewed-by: Sibi Sankar sibis@codeaurora.org Reported-by: Matthias Kaehlcke mka@chromium.org Tested-by: Matthias Kaehlcke mka@chromium.org Reviewed-by: Stephen Boyd sboyd@kernel.org Signed-off-by: Rajendra Nayak rnayak@codeaurora.org [ Viresh: Don't skip clk_set_rate() and massaged changelog ] Signed-off-by: Viresh Kumar viresh.kumar@linaro.org [ Viresh: Updated the patch to apply to v5.4 ] Signed-off-by: Viresh Kumar viresh.kumar@linaro.org --- drivers/opp/core.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/opp/core.c b/drivers/opp/core.c index 9ff0538ee83a..518442be638d 100644 --- a/drivers/opp/core.c +++ b/drivers/opp/core.c @@ -843,10 +843,12 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
/* Return early if nothing to do */ if (old_freq == freq) { - dev_dbg(dev, "%s: old/new frequencies (%lu Hz) are same, nothing to do\n", - __func__, freq); - ret = 0; - goto put_opp_table; + if (!opp_table->required_opp_tables) { + dev_dbg(dev, "%s: old/new frequencies (%lu Hz) are same, nothing to do\n", + __func__, freq); + ret = 0; + goto put_opp_table; + } }
temp_freq = old_freq;
On Mon, Aug 24, 2020 at 02:52:23PM +0530, Viresh Kumar wrote:
From: Rajendra Nayak rnayak@codeaurora.org
commit a4501bac0e553bed117b7e1b166d49731caf7260 upstream.
dev_pm_opp_set_rate() can now be called with freq = 0 in order to either drop performance or bandwidth votes or to disable regulators on platforms which support them.
In such cases, a subsequent call to dev_pm_opp_set_rate() with the same frequency ends up returning early because 'old_freq == freq'
Instead make it fall through and put back the dropped performance and bandwidth votes and/or enable back the regulators.
Cc: v5.3+ stable@vger.kernel.org # v5.3+ Fixes: cd7ea582866f ("opp: Make dev_pm_opp_set_rate() handle freq = 0 to drop performance votes") Reported-by: Sajida Bhanu sbhanu@codeaurora.org Reviewed-by: Sibi Sankar sibis@codeaurora.org Reported-by: Matthias Kaehlcke mka@chromium.org Tested-by: Matthias Kaehlcke mka@chromium.org Reviewed-by: Stephen Boyd sboyd@kernel.org Signed-off-by: Rajendra Nayak rnayak@codeaurora.org [ Viresh: Don't skip clk_set_rate() and massaged changelog ] Signed-off-by: Viresh Kumar viresh.kumar@linaro.org [ Viresh: Updated the patch to apply to v5.4 ] Signed-off-by: Viresh Kumar viresh.kumar@linaro.org
drivers/opp/core.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
This too is already in the 5.7 and 5.4 queues, why add it again?
thanks,
greg k-h
On 24-08-20, 18:10, Greg KH wrote:
On Mon, Aug 24, 2020 at 02:52:23PM +0530, Viresh Kumar wrote:
From: Rajendra Nayak rnayak@codeaurora.org
commit a4501bac0e553bed117b7e1b166d49731caf7260 upstream.
dev_pm_opp_set_rate() can now be called with freq = 0 in order to either drop performance or bandwidth votes or to disable regulators on platforms which support them.
In such cases, a subsequent call to dev_pm_opp_set_rate() with the same frequency ends up returning early because 'old_freq == freq'
Instead make it fall through and put back the dropped performance and bandwidth votes and/or enable back the regulators.
Cc: v5.3+ stable@vger.kernel.org # v5.3+ Fixes: cd7ea582866f ("opp: Make dev_pm_opp_set_rate() handle freq = 0 to drop performance votes") Reported-by: Sajida Bhanu sbhanu@codeaurora.org Reviewed-by: Sibi Sankar sibis@codeaurora.org Reported-by: Matthias Kaehlcke mka@chromium.org Tested-by: Matthias Kaehlcke mka@chromium.org Reviewed-by: Stephen Boyd sboyd@kernel.org Signed-off-by: Rajendra Nayak rnayak@codeaurora.org [ Viresh: Don't skip clk_set_rate() and massaged changelog ] Signed-off-by: Viresh Kumar viresh.kumar@linaro.org [ Viresh: Updated the patch to apply to v5.4 ] Signed-off-by: Viresh Kumar viresh.kumar@linaro.org
drivers/opp/core.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
This too is already in the 5.7 and 5.4 queues, why add it again?
Same here, your bot reported that patch failed to apply for 5.4 and 5.7, again rightly so as I was required to modify the patch a little bit and so I have added another signed-off and details.
linux-stable-mirror@lists.linaro.org