On 1/15/2021 8:13 PM, Bjorn Andersson wrote:
On Thu 24 Dec 05:12 CST 2020, Roja Rani Yarubandi wrote:
@@ -629,6 +658,16 @@ static int __maybe_unused geni_i2c_runtime_suspend(struct device *dev)
struct geni_i2c_dev *gi2c = dev_get_drvdata(dev);
disable_irq(gi2c->irq);
+
+ /* Drop the assigned performance state */
+ if (gi2c->assigned_pstate) {
+ ret = dev_pm_genpd_set_performance_state(dev, 0);
+ if (ret) {
+ dev_err(dev, "Failed to set performance state\n");
+ return ret;
+ }
+ }
+
Ulf, Viresh, I think we discussed this at the time of introducing the
performance states.
The client's state does not affect if its performance_state should
be included in the calculation of the aggregated performance_state, so
each driver that needs to keep some minimum performance state needs to
have these two snippets.
Would it not make sense to on enable/disable re-evaluate the
performance_state and potentially reconfigure the hardware
automatically?
I agree, this will be repeated across multiple drivers which would
need some minimal vote while they are active, handling this during
genpd enable/disable in genpd core makes sense.
Regards,
Bjorn
ret = geni_se_resources_off(&gi2c->se);
if (ret) {
enable_irq(gi2c->irq);
@@ -654,6 +693,16 @@ static int __maybe_unused geni_i2c_runtime_resume(struct device *dev)
if (ret)
return ret;
+ /* Set the assigned performance state */
+ if (gi2c->assigned_pstate) {
+ ret = dev_pm_genpd_set_performance_state(dev,
+ gi2c->assigned_pstate);
+ if (ret) {
+ dev_err(dev, "Failed to set performance state\n");
+ return ret;
+ }
+ }
+
enable_irq(gi2c->irq);
gi2c->suspended = 0;
return 0;
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation