diff mbox series

[2/2] power/domain: meson-ee-pwrc: make sure to not enable a domain twice

Message ID 20241009-u-boot-topic-fix-hdmi-v1-2-2479cd90c4ea@linaro.org
State Accepted
Commit bfa89c503f37604388083095341be23af21669f7
Headers show
Series ARM: mach-meson: fix HDMI since DT update to v6.11 | expand

Commit Message

Neil Armstrong Oct. 9, 2024, 9:15 a.m. UTC
The upstream Device Tree for GXBB/GXL/G12A was updated with VPU domain
shared between the VPU and HDMI node, causing a double enable.

Simply store the enable state and avoid enabling twice, fixing
HDMI output on all platforms.

Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
---
 drivers/power/domain/meson-ee-pwrc.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

Comments

Jaehoon Chung Oct. 22, 2024, 11:19 p.m. UTC | #1
> -----Original Message-----
> From: Neil Armstrong <neil.armstrong@linaro.org>
> Sent: Wednesday, October 9, 2024 6:15 PM
> To: Lukasz Majewski <lukma@denx.de>; Sean Anderson <seanga2@gmail.com>; Tom Rini <trini@konsulko.com>;
> Jaehoon Chung <jh80.chung@samsung.com>
> Cc: u-boot-amlogic@groups.io; u-boot@lists.denx.de; Neil Armstrong <neil.armstrong@linaro.org>
> Subject: [PATCH 2/2] power/domain: meson-ee-pwrc: make sure to not enable a domain twice
>
> The upstream Device Tree for GXBB/GXL/G12A was updated with VPU domain
> shared between the VPU and HDMI node, causing a double enable.
>
> Simply store the enable state and avoid enabling twice, fixing
> HDMI output on all platforms.
>
> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>

Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>

Best Regards,
Jaehoon Chung

> ---
>  drivers/power/domain/meson-ee-pwrc.c | 15 +++++++++++++--
>  1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/power/domain/meson-ee-pwrc.c b/drivers/power/domain/meson-ee-pwrc.c
> index 20e9f32b381..4d9f3bba644 100644
> --- a/drivers/power/domain/meson-ee-pwrc.c
> +++ b/drivers/power/domain/meson-ee-pwrc.c
> @@ -60,6 +60,7 @@ struct meson_ee_pwrc_domain_desc {
>  	unsigned int mem_pd_count;
>  	struct meson_ee_pwrc_mem_domain *mem_pd;
>  	bool (*get_power)(struct power_domain *power_domain);
> +	bool enabled;
>  };
>
>  struct meson_ee_pwrc_domain_data {
> @@ -306,6 +307,8 @@ static int meson_ee_pwrc_off(struct power_domain *power_domain)
>  		clk_disable_bulk(&priv->clks);
>  	}
>
> +	pwrc_domain->enabled = false;
> +
>  	return 0;
>  }
>
> @@ -317,6 +320,9 @@ static int meson_ee_pwrc_on(struct power_domain *power_domain)
>
>  	pwrc_domain = &priv->data->domains[power_domain->id];
>
> +	if (pwrc_domain->enabled)
> +		return 0;
> +
>  	if (pwrc_domain->top_pd)
>  		regmap_update_bits(priv->regmap_ao,
>  				   pwrc_domain->top_pd->sleep_reg,
> @@ -347,8 +353,13 @@ static int meson_ee_pwrc_on(struct power_domain *power_domain)
>  			return ret;
>  	}
>
> -	if (pwrc_domain->clk_names_count)
> -		return clk_enable_bulk(&priv->clks);
> +	if (pwrc_domain->clk_names_count) {
> +		ret = clk_enable_bulk(&priv->clks);
> +		if (ret)
> +			return ret;
> +	}
> +
> +	pwrc_domain->enabled = true;
>
>  	return 0;
>  }
>
> --
> 2.34.1
diff mbox series

Patch

diff --git a/drivers/power/domain/meson-ee-pwrc.c b/drivers/power/domain/meson-ee-pwrc.c
index 20e9f32b381..4d9f3bba644 100644
--- a/drivers/power/domain/meson-ee-pwrc.c
+++ b/drivers/power/domain/meson-ee-pwrc.c
@@ -60,6 +60,7 @@  struct meson_ee_pwrc_domain_desc {
 	unsigned int mem_pd_count;
 	struct meson_ee_pwrc_mem_domain *mem_pd;
 	bool (*get_power)(struct power_domain *power_domain);
+	bool enabled;
 };
 
 struct meson_ee_pwrc_domain_data {
@@ -306,6 +307,8 @@  static int meson_ee_pwrc_off(struct power_domain *power_domain)
 		clk_disable_bulk(&priv->clks);
 	}
 
+	pwrc_domain->enabled = false;
+
 	return 0;
 }
 
@@ -317,6 +320,9 @@  static int meson_ee_pwrc_on(struct power_domain *power_domain)
 
 	pwrc_domain = &priv->data->domains[power_domain->id];
 
+	if (pwrc_domain->enabled)
+		return 0;
+
 	if (pwrc_domain->top_pd)
 		regmap_update_bits(priv->regmap_ao,
 				   pwrc_domain->top_pd->sleep_reg,
@@ -347,8 +353,13 @@  static int meson_ee_pwrc_on(struct power_domain *power_domain)
 			return ret;
 	}
 
-	if (pwrc_domain->clk_names_count)
-		return clk_enable_bulk(&priv->clks);
+	if (pwrc_domain->clk_names_count) {
+		ret = clk_enable_bulk(&priv->clks);
+		if (ret)
+			return ret;
+	}
+
+	pwrc_domain->enabled = true;
 
 	return 0;
 }