pmdomain: qcom: rpmpd: Set GENPD_FLAG_ACTIVE_WAKEUP
authorStephan Gerhold <stephan.gerhold@kernkonzept.com>
Tue, 14 Nov 2023 10:07:45 +0000 (11:07 +0100)
committerViresh Kumar <viresh.kumar@linaro.org>
Thu, 23 Nov 2023 07:38:01 +0000 (13:08 +0530)
Set GENPD_FLAG_ACTIVE_WAKEUP for all RPM power domains so that power
domains necessary for wakeup/"awake path" devices are kept on across
suspend.

This is needed for example for the *_AO ("active-only") variants of the
RPMPDs used by the CPU. Those should maintain their votes also across
system suspend to ensure the CPU can keep running for the whole suspend
process (ending in a firmware call). When the RPM firmware detects that
the CPUs are in a deep idle state it will drop those votes automatically.

Signed-off-by: Stephan Gerhold <stephan.gerhold@kernkonzept.com>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
drivers/pmdomain/qcom/rpmpd.c

index 07590a3ef19c26c3e2d80b1e74caaf94ee41076b..7796d65f96e8cfea2b6ef22e3a299e459585f543 100644 (file)
@@ -1044,6 +1044,7 @@ static int rpmpd_probe(struct platform_device *pdev)
                rpmpds[i]->pd.power_off = rpmpd_power_off;
                rpmpds[i]->pd.power_on = rpmpd_power_on;
                rpmpds[i]->pd.set_performance_state = rpmpd_set_performance;
+               rpmpds[i]->pd.flags = GENPD_FLAG_ACTIVE_WAKEUP;
                pm_genpd_init(&rpmpds[i]->pd, NULL, true);
 
                data->domains[i] = &rpmpds[i]->pd;