Re: [PATCH v2] pmdomain: qcom: rpmhpd: Skip retention level for Power Domains

From: Ulf Hansson
Date: Tue Jul 09 2024 - 07:15:21 EST


On Tue, 25 Jun 2024 at 06:33, Taniya Das <quic_tdas@xxxxxxxxxxx> wrote:
>
> In the cases where the power domain connected to logics is allowed to
> transition from a level(L)-->power collapse(0)-->retention(1) or
> vice versa retention(1)-->power collapse(0)-->level(L) will cause the
> logic to lose the configurations. The ARC does not support retention
> to collapse transition on MxC rails.
>
> The targets from SM8450 onwards the PLL logics of clock controllers are
> connected to MxC rails and the recommended configurations are carried
> out during the clock controller probes. The MxC transition as mentioned
> above should be skipped to ensure the PLL settings are intact across
> clock controller power on & off.
>
> On older targets that do not split MX into MxA and MxC does not collapse
> the logic and it is parked always at RETENTION, thus this issue is never
> observed on those targets.
>
> Cc: stable@xxxxxxxxxxxxxxx # v5.17
> Reviewed-by: Bjorn Andersson <andersson@xxxxxxxxxx>
> Signed-off-by: Taniya Das <quic_tdas@xxxxxxxxxxx>

Applied for fixes, thanks!

Kind regards
Uffe


> ---
> [Changes in v2]: Incorporate the comments in the commit text.
> ---
> drivers/pmdomain/qcom/rpmhpd.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/drivers/pmdomain/qcom/rpmhpd.c b/drivers/pmdomain/qcom/rpmhpd.c
> index de9121ef4216..d2cb4271a1ca 100644
> --- a/drivers/pmdomain/qcom/rpmhpd.c
> +++ b/drivers/pmdomain/qcom/rpmhpd.c
> @@ -40,6 +40,7 @@
> * @addr: Resource address as looped up using resource name from
> * cmd-db
> * @state_synced: Indicator that sync_state has been invoked for the rpmhpd resource
> + * @skip_retention_level: Indicate that retention level should not be used for the power domain
> */
> struct rpmhpd {
> struct device *dev;
> @@ -56,6 +57,7 @@ struct rpmhpd {
> const char *res_name;
> u32 addr;
> bool state_synced;
> + bool skip_retention_level;
> };
>
> struct rpmhpd_desc {
> @@ -173,6 +175,7 @@ static struct rpmhpd mxc = {
> .pd = { .name = "mxc", },
> .peer = &mxc_ao,
> .res_name = "mxc.lvl",
> + .skip_retention_level = true,
> };
>
> static struct rpmhpd mxc_ao = {
> @@ -180,6 +183,7 @@ static struct rpmhpd mxc_ao = {
> .active_only = true,
> .peer = &mxc,
> .res_name = "mxc.lvl",
> + .skip_retention_level = true,
> };
>
> static struct rpmhpd nsp = {
> @@ -819,6 +823,9 @@ static int rpmhpd_update_level_mapping(struct rpmhpd *rpmhpd)
> return -EINVAL;
>
> for (i = 0; i < rpmhpd->level_count; i++) {
> + if (rpmhpd->skip_retention_level && buf[i] == RPMH_REGULATOR_LEVEL_RETENTION)
> + continue;
> +
> rpmhpd->level[i] = buf[i];
>
> /* Remember the first corner with non-zero level */
>
> ---
> base-commit: 62c97045b8f720c2eac807a5f38e26c9ed512371
> change-id: 20240625-avoid_mxc_retention-b095a761d981
>
> Best regards,
> --
> Taniya Das <quic_tdas@xxxxxxxxxxx>
>