ath79: skip reset control for syscon devices
authorShiji Yang <yangshiji66@qq.com>
Sat, 16 Mar 2024 00:39:16 +0000 (08:39 +0800)
committerHauke Mehrtens <hauke@hauke-m.de>
Thu, 9 May 2024 21:53:02 +0000 (23:53 +0200)
Fix the issue of exclusive reset controller acquisition failure on
kernel 6.6.

Signed-off-by: Shiji Yang <yangshiji66@qq.com>
target/linux/ath79/dts/ath79.dtsi
target/linux/ath79/patches-6.6/820-mfd-syscon-support-skip-reset-control-for-syscon-devices.patch [new file with mode: 0644]

index 89d905841423acb4565b4e38f9ae619394b65837..8849d729ac7d475ba351552ae16cef7fc24e66b5 100644 (file)
@@ -52,6 +52,7 @@
 
                        interrupts = <4>;
                        phy-mode = "mii";
+                       syscon-no-reset;
 
                        mdio0: mdio {
                                status = "disabled";
@@ -75,6 +76,7 @@
 
                        interrupts = <5>;
                        phy-mode = "mii";
+                       syscon-no-reset;
 
                        mdio1: mdio {
                                status = "disabled";
diff --git a/target/linux/ath79/patches-6.6/820-mfd-syscon-support-skip-reset-control-for-syscon-devices.patch b/target/linux/ath79/patches-6.6/820-mfd-syscon-support-skip-reset-control-for-syscon-devices.patch
new file mode 100644 (file)
index 0000000..c73c844
--- /dev/null
@@ -0,0 +1,37 @@
+From: Shiji Yang <yangshiji66@outlook.com>
+Date: Wed, 13 Mar 2024 22:36:31 +0800
+Subject: [PATCH] mfd: syscon: support skip reset control for syscon devices
+
+Some platform device drivers(e.g. ag71xx) expect exclusive reset
+control. Fetching reset controller for syscon[1] will break these
+drivers. This patch introduces a new property 'syscon-no-reset'
+to skip it.
+
+[1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit?id=7d1e3bd94828ad9fc86f55253cd6fec8edd65394
+
+Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
+---
+ drivers/mfd/syscon.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/mfd/syscon.c
++++ b/drivers/mfd/syscon.c
+@@ -52,7 +52,7 @@ static struct syscon *of_syscon_register
+       int ret;
+       struct regmap_config syscon_config = syscon_regmap_config;
+       struct resource res;
+-      struct reset_control *reset;
++      struct reset_control *reset = NULL;
+       syscon = kzalloc(sizeof(*syscon), GFP_KERNEL);
+       if (!syscon)
+@@ -134,7 +134,8 @@ static struct syscon *of_syscon_register
+                               goto err_attach_clk;
+               }
+-              reset = of_reset_control_get_optional_exclusive(np, NULL);
++              if (!of_property_read_bool(np, "syscon-no-reset"))
++                      reset = of_reset_control_get_optional_exclusive(np, NULL);
+               if (IS_ERR(reset)) {
+                       ret = PTR_ERR(reset);
+                       goto err_attach_clk;