]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
pmdomain: samsung: Rework legacy splash-screen handover workaround
authorMarek Szyprowski <m.szyprowski@samsung.com>
Mon, 27 Oct 2025 12:55:15 +0000 (13:55 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 4 Nov 2025 16:16:05 +0000 (17:16 +0100)
Limit the workaround for the lack of the proper splash-screen handover
handling to the legacy ARM 32bit systems and replace forcing a sync_state
by explicite power domain shutdown. This approach lets compiler to
optimize it out on newer ARM 64bit systems.

Suggested-by: Ulf Hansson <ulf.hansson@linaro.org>
Fixes: 0745658aebbe ("pmdomain: samsung: Fix splash-screen handover by enforcing a sync_state")
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Cc: stable@vger.kernel.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/pmdomain/samsung/exynos-pm-domains.c

index f53e1bd2479807988f969774b4b7b4c5739c1aba..5c3aa898308793d424fb761c58ca01ba2580aeb5 100644 (file)
@@ -128,6 +128,15 @@ static int exynos_pd_probe(struct platform_device *pdev)
        pd->pd.power_on = exynos_pd_power_on;
        pd->local_pwr_cfg = pm_domain_cfg->local_pwr_cfg;
 
+       /*
+        * Some Samsung platforms with bootloaders turning on the splash-screen
+        * and handing it over to the kernel, requires the power-domains to be
+        * reset during boot.
+        */
+       if (IS_ENABLED(CONFIG_ARM) &&
+           of_device_is_compatible(np, "samsung,exynos4210-pd"))
+               exynos_pd_power_off(&pd->pd);
+
        on = readl_relaxed(pd->base + 0x4) & pd->local_pwr_cfg;
 
        pm_genpd_init(&pd->pd, NULL, !on);
@@ -146,15 +155,6 @@ static int exynos_pd_probe(struct platform_device *pdev)
                                parent.np, child.np);
        }
 
-       /*
-        * Some Samsung platforms with bootloaders turning on the splash-screen
-        * and handing it over to the kernel, requires the power-domains to be
-        * reset during boot. As a temporary hack to manage this, let's enforce
-        * a sync_state.
-        */
-       if (!ret)
-               of_genpd_sync_state(np);
-
        pm_runtime_enable(dev);
        return ret;
 }