Re: [PATCH v2] soc: xilinx: Set CAP_UNUSABLE requirement for versal while powering down domain

From: Michal Simek
Date: Thu Sep 26 2019 - 06:10:15 EST


On 26. 08. 19 22:30, Jolly Shah wrote:
> From: Tejas Patel <tejas.patel@xxxxxxxxxx>
>
> For "0" requirement which is used to inform firmware that device is
> not required currently by master, Versal PLM (Platform Loader and
> Manager) which runs on Platform Management Controller and is responsible
> platform management of devices that disables clock, power it down
> and reset the device. genpd_power_off() is being called during runtime
> suspend also. So, if any device goes to runtime suspend state during
> resumes it needs to be re-initialized again. It is possible that
> drivers do not reinitialize device upon resume from runtime suspend
> every time ans so dont want it to be powered down or get reset
> during runtime suspend.
>
> In Versal PLM new PM_CAP_UNUSABLE capability is added, which disables
> clock only and avoids power down and reset during runtime suspend. Power
> and reset will be gated with core suspend.So, this patch sets
> CAPABILITY_UNUSABLE requirement during gpd_power_off()
> if platform is other than zynqmp.
>
> Signed-off-by: Tejas Patel <tejas.patel@xxxxxxxxxx>
> Signed-off-by: Jolly Shah <jolly.shah@xxxxxxxxxx>
> ---

Where is the version log?

> drivers/soc/xilinx/zynqmp_pm_domains.c | 10 ++++++++--
> include/linux/firmware/xlnx-zynqmp.h | 3 ++-
> 2 files changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/soc/xilinx/zynqmp_pm_domains.c b/drivers/soc/xilinx/zynqmp_pm_domains.c
> index 600f57c..23d90cb 100644
> --- a/drivers/soc/xilinx/zynqmp_pm_domains.c
> +++ b/drivers/soc/xilinx/zynqmp_pm_domains.c
> @@ -2,7 +2,7 @@
> /*
> * ZynqMP Generic PM domain support
> *
> - * Copyright (C) 2015-2018 Xilinx, Inc.
> + * Copyright (C) 2015-2019 Xilinx, Inc.
> *
> * Davorin Mista <davorin.mista@xxxxxxxxxx>
> * Jolly Shah <jollys@xxxxxxxxxx>
> @@ -25,6 +25,8 @@
>
> static const struct zynqmp_eemi_ops *eemi_ops;
>
> +static int min_capability;
> +
> /**
> * struct zynqmp_pm_domain - Wrapper around struct generic_pm_domain
> * @gpd: Generic power domain
> @@ -106,7 +108,7 @@ static int zynqmp_gpd_power_off(struct generic_pm_domain *domain)
> int ret;
> struct pm_domain_data *pdd, *tmp;
> struct zynqmp_pm_domain *pd;
> - u32 capabilities = 0;
> + u32 capabilities = min_capability;
> bool may_wakeup;
>
> if (!eemi_ops->set_requirement)
> @@ -283,6 +285,10 @@ static int zynqmp_gpd_probe(struct platform_device *pdev)
> if (!domains)
> return -ENOMEM;
>
> + if (!of_device_is_compatible(dev->parent->of_node,
> + "xlnx,zynqmp-firmware"))
> + min_capability = ZYNQMP_PM_CAPABILITY_UNUSABLE;

I have not a problem with this patch but versal firmware is not wired in
firmware yet that's why this code shouldn't be called at all.

Can you please wire it?

Thanks,
Michal