]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 6.1
authorSasha Levin <sashal@kernel.org>
Sat, 24 Feb 2024 03:37:43 +0000 (22:37 -0500)
committerSasha Levin <sashal@kernel.org>
Sat, 24 Feb 2024 03:37:43 +0000 (22:37 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-6.1/pmdomain-mediatek-fix-race-conditions-with-genpd.patch [new file with mode: 0644]
queue-6.1/pmdomain-renesas-r8a77980-sysc-cr7-must-be-always-on.patch [new file with mode: 0644]
queue-6.1/series

diff --git a/queue-6.1/pmdomain-mediatek-fix-race-conditions-with-genpd.patch b/queue-6.1/pmdomain-mediatek-fix-race-conditions-with-genpd.patch
new file mode 100644 (file)
index 0000000..70eede7
--- /dev/null
@@ -0,0 +1,80 @@
+From 9764a2012aae4964ff1f8eb7cdc5da7edff5da0a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 Dec 2023 15:36:15 +0200
+Subject: pmdomain: mediatek: fix race conditions with genpd
+
+From: Eugen Hristev <eugen.hristev@collabora.com>
+
+[ Upstream commit c41336f4d69057cbf88fed47951379b384540df5 ]
+
+If the power domains are registered first with genpd and *after that*
+the driver attempts to power them on in the probe sequence, then it is
+possible that a race condition occurs if genpd tries to power them on
+in the same time.
+The same is valid for powering them off before unregistering them
+from genpd.
+Attempt to fix race conditions by first removing the domains from genpd
+and *after that* powering down domains.
+Also first power up the domains and *after that* register them
+to genpd.
+
+Fixes: 59b644b01cf4 ("soc: mediatek: Add MediaTek SCPSYS power domains")
+Signed-off-by: Eugen Hristev <eugen.hristev@collabora.com>
+Cc: stable@vger.kernel.org
+Link: https://lore.kernel.org/r/20231225133615.78993-1-eugen.hristev@collabora.com
+Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/soc/mediatek/mtk-pm-domains.c | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/soc/mediatek/mtk-pm-domains.c b/drivers/soc/mediatek/mtk-pm-domains.c
+index 474b272f9b02d..832adb570b501 100644
+--- a/drivers/soc/mediatek/mtk-pm-domains.c
++++ b/drivers/soc/mediatek/mtk-pm-domains.c
+@@ -499,6 +499,11 @@ static int scpsys_add_subdomain(struct scpsys *scpsys, struct device_node *paren
+                       goto err_put_node;
+               }
++              /* recursive call to add all subdomains */
++              ret = scpsys_add_subdomain(scpsys, child);
++              if (ret)
++                      goto err_put_node;
++
+               ret = pm_genpd_add_subdomain(parent_pd, child_pd);
+               if (ret) {
+                       dev_err(scpsys->dev, "failed to add %s subdomain to parent %s\n",
+@@ -508,11 +513,6 @@ static int scpsys_add_subdomain(struct scpsys *scpsys, struct device_node *paren
+                       dev_dbg(scpsys->dev, "%s add subdomain: %s\n", parent_pd->name,
+                               child_pd->name);
+               }
+-
+-              /* recursive call to add all subdomains */
+-              ret = scpsys_add_subdomain(scpsys, child);
+-              if (ret)
+-                      goto err_put_node;
+       }
+       return 0;
+@@ -526,9 +526,6 @@ static void scpsys_remove_one_domain(struct scpsys_domain *pd)
+ {
+       int ret;
+-      if (scpsys_domain_is_on(pd))
+-              scpsys_power_off(&pd->genpd);
+-
+       /*
+        * We're in the error cleanup already, so we only complain,
+        * but won't emit another error on top of the original one.
+@@ -538,6 +535,8 @@ static void scpsys_remove_one_domain(struct scpsys_domain *pd)
+               dev_err(pd->scpsys->dev,
+                       "failed to remove domain '%s' : %d - state may be inconsistent\n",
+                       pd->genpd.name, ret);
++      if (scpsys_domain_is_on(pd))
++              scpsys_power_off(&pd->genpd);
+       clk_bulk_put(pd->num_clks, pd->clks);
+       clk_bulk_put(pd->num_subsys_clks, pd->subsys_clks);
+-- 
+2.43.0
+
diff --git a/queue-6.1/pmdomain-renesas-r8a77980-sysc-cr7-must-be-always-on.patch b/queue-6.1/pmdomain-renesas-r8a77980-sysc-cr7-must-be-always-on.patch
new file mode 100644 (file)
index 0000000..8b5af8f
--- /dev/null
@@ -0,0 +1,47 @@
+From 7bd09fa4e55c2611dde86f11a2409574af3cb09d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 12 Jan 2024 17:33:55 +0100
+Subject: pmdomain: renesas: r8a77980-sysc: CR7 must be always on
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Geert Uytterhoeven <geert+renesas@glider.be>
+
+[ Upstream commit f0e4a1356466ec1858ae8e5c70bea2ce5e55008b ]
+
+The power domain containing the Cortex-R7 CPU core on the R-Car V3H SoC
+must always be in power-on state, unlike on other SoCs in the R-Car Gen3
+family.  See Table 9.4 "Power domains" in the R-Car Series, 3rd
+Generation Hardware User’s Manual Rev.1.00 and later.
+
+Fix this by marking the domain as a CPU domain without control
+registers, so the driver will not touch it.
+
+Fixes: 41d6d8bd8ae9 ("soc: renesas: rcar-sysc: add R8A77980 support")
+Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
+Cc: stable@vger.kernel.org
+Link: https://lore.kernel.org/r/fdad9a86132d53ecddf72b734dac406915c4edc0.1705076735.git.geert+renesas@glider.be
+Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/soc/renesas/r8a77980-sysc.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/soc/renesas/r8a77980-sysc.c b/drivers/soc/renesas/r8a77980-sysc.c
+index 39ca84a67daad..621e411fc9991 100644
+--- a/drivers/soc/renesas/r8a77980-sysc.c
++++ b/drivers/soc/renesas/r8a77980-sysc.c
+@@ -25,7 +25,8 @@ static const struct rcar_sysc_area r8a77980_areas[] __initconst = {
+         PD_CPU_NOCR },
+       { "ca53-cpu3",  0x200, 3, R8A77980_PD_CA53_CPU3, R8A77980_PD_CA53_SCU,
+         PD_CPU_NOCR },
+-      { "cr7",        0x240, 0, R8A77980_PD_CR7,      R8A77980_PD_ALWAYS_ON },
++      { "cr7",        0x240, 0, R8A77980_PD_CR7,      R8A77980_PD_ALWAYS_ON,
++        PD_CPU_NOCR },
+       { "a3ir",       0x180, 0, R8A77980_PD_A3IR,     R8A77980_PD_ALWAYS_ON },
+       { "a2ir0",      0x400, 0, R8A77980_PD_A2IR0,    R8A77980_PD_A3IR },
+       { "a2ir1",      0x400, 1, R8A77980_PD_A2IR1,    R8A77980_PD_A3IR },
+-- 
+2.43.0
+
index a16811ff739beb4fbdb76f33bdaf983d423bc88c..c7d84e4bf95e42c667ccf07d2c6ba4d97c8a8e0d 100644 (file)
@@ -79,3 +79,5 @@ drm-amdgpu-reset-gpu-for-s3-suspend-abort-case.patch
 smb-client-set-correct-d_type-for-reparse-points-und.patch
 virtio-blk-ensure-no-requests-in-virtqueues-before-d.patch
 smb3-clarify-mount-warning.patch
+pmdomain-mediatek-fix-race-conditions-with-genpd.patch
+pmdomain-renesas-r8a77980-sysc-cr7-must-be-always-on.patch