Re: [PATCH] clk: gcc-sc8280xp: use retention for USB power domains

From: Konrad Dybcio
Date: Thu Sep 29 2022 - 19:38:35 EST




On 29.09.2022 18:11, Johan Hovold wrote:
> Since commit d399723950c4 ("clk: qcom: gdsc: Fix the handling of
> PWRSTS_RET support) retention mode can be used on sc8280xp to maintain
> state during suspend instead of leaving the domain always on.
>
> This is needed to eventually allow the parent CX domain to be powered
> down during suspend.
>
> Signed-off-by: Johan Hovold <johan+linaro@xxxxxxxxxx>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxx>

Konrad
> drivers/clk/qcom/gcc-sc8280xp.c | 13 +++----------
> 1 file changed, 3 insertions(+), 10 deletions(-)
>
> While we're not yet able to fully test this (since we're not hitting CX
> power down) this can still go in as we'll need it in some form
> eventually.
>
> Note that the PCIe domains should remain always-on until we have driver
> support for suspend in place.
>
> Johan
>
>
> diff --git a/drivers/clk/qcom/gcc-sc8280xp.c b/drivers/clk/qcom/gcc-sc8280xp.c
> index 7768e6901dcc..a18ed88f3b82 100644
> --- a/drivers/clk/qcom/gcc-sc8280xp.c
> +++ b/drivers/clk/qcom/gcc-sc8280xp.c
> @@ -6843,17 +6843,12 @@ static struct gdsc ufs_phy_gdsc = {
> .pwrsts = PWRSTS_OFF_ON,
> };
>
> -/*
> - * The Qualcomm DWC3 driver suspend implementation appears to be incomplete
> - * for sc8280xp so keep the USB power domains always-on for now.
> - */
> static struct gdsc usb30_mp_gdsc = {
> .gdscr = 0xab004,
> .pd = {
> .name = "usb30_mp_gdsc",
> },
> - .pwrsts = PWRSTS_OFF_ON,
> - .flags = ALWAYS_ON,
> + .pwrsts = PWRSTS_RET_ON,
> };
>
> static struct gdsc usb30_prim_gdsc = {
> @@ -6861,8 +6856,7 @@ static struct gdsc usb30_prim_gdsc = {
> .pd = {
> .name = "usb30_prim_gdsc",
> },
> - .pwrsts = PWRSTS_OFF_ON,
> - .flags = ALWAYS_ON,
> + .pwrsts = PWRSTS_RET_ON,
> };
>
> static struct gdsc usb30_sec_gdsc = {
> @@ -6870,8 +6864,7 @@ static struct gdsc usb30_sec_gdsc = {
> .pd = {
> .name = "usb30_sec_gdsc",
> },
> - .pwrsts = PWRSTS_OFF_ON,
> - .flags = ALWAYS_ON,
> + .pwrsts = PWRSTS_RET_ON,
> };
>
> static struct clk_regmap *gcc_sc8280xp_clocks[] = {