diff mbox series

[V2,13/13] soc: imx: gpcv2: move reset assert after requesting domain power up

Message ID 20210506010440.7016-14-peng.fan@oss.nxp.com
State Superseded
Headers show
Series soc: imx: gpcv2: support i.MX8MM | expand

Commit Message

Peng Fan (OSS) May 6, 2021, 1:04 a.m. UTC
From: Peng Fan <peng.fan@nxp.com>


The i.MX8MM VPU power up sequence is a bit special, it must follow:
1. request power up
2. reset assert
3. reset deassert

This change in this patch will not affect other domains, because
the power domain default is in asserted state, unless bootloader
deassert the reset. It also applies to GPU power domain.

Signed-off-by: Peng Fan <peng.fan@nxp.com>

---
 drivers/soc/imx/gpcv2.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

-- 
2.30.0

Comments

Frieder Schrempf May 6, 2021, 6:56 a.m. UTC | #1
On 06.05.21 03:04, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>

> 

> The i.MX8MM VPU power up sequence is a bit special, it must follow:

> 1. request power up

> 2. reset assert

> 3. reset deassert

> 

> This change in this patch will not affect other domains, because

> the power domain default is in asserted state, unless bootloader

> deassert the reset. It also applies to GPU power domain.

> 

> Signed-off-by: Peng Fan <peng.fan@nxp.com>


I don't really like that there is a dependency on TF-A/bootloader as we never really know what they will do, but from my point of view the approach is ok and it seems to work properly as far as I have tested it (only with GPU).

Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de>

Tested-by: Frieder Schrempf <frieder.schrempf@kontron.de>


> ---

>  drivers/soc/imx/gpcv2.c | 4 ++--

>  1 file changed, 2 insertions(+), 2 deletions(-)

> 

> diff --git a/drivers/soc/imx/gpcv2.c b/drivers/soc/imx/gpcv2.c

> index 65b562cbcc6d..325a34833ffa 100644

> --- a/drivers/soc/imx/gpcv2.c

> +++ b/drivers/soc/imx/gpcv2.c

> @@ -217,8 +217,6 @@ static int imx_pgc_power_up(struct generic_pm_domain *genpd)

>  		goto out_regulator_disable;

>  	}

>  

> -	reset_control_assert(domain->reset);

> -

>  	if (domain->bits.pxx) {

>  		/* request the domain to power up */

>  		regmap_update_bits(domain->regmap, GPC_PU_PGC_SW_PUP_REQ,

> @@ -241,6 +239,8 @@ static int imx_pgc_power_up(struct generic_pm_domain *genpd)

>  				  GPC_PGC_CTRL_PCR);

>  	}

>  

> +	reset_control_assert(domain->reset);

> +

>  	/* delay for reset to propagate */

>  	udelay(5);

>  

>
diff mbox series

Patch

diff --git a/drivers/soc/imx/gpcv2.c b/drivers/soc/imx/gpcv2.c
index 65b562cbcc6d..325a34833ffa 100644
--- a/drivers/soc/imx/gpcv2.c
+++ b/drivers/soc/imx/gpcv2.c
@@ -217,8 +217,6 @@  static int imx_pgc_power_up(struct generic_pm_domain *genpd)
 		goto out_regulator_disable;
 	}
 
-	reset_control_assert(domain->reset);
-
 	if (domain->bits.pxx) {
 		/* request the domain to power up */
 		regmap_update_bits(domain->regmap, GPC_PU_PGC_SW_PUP_REQ,
@@ -241,6 +239,8 @@  static int imx_pgc_power_up(struct generic_pm_domain *genpd)
 				  GPC_PGC_CTRL_PCR);
 	}
 
+	reset_control_assert(domain->reset);
+
 	/* delay for reset to propagate */
 	udelay(5);