Browse Source

ath79: skip reset control for syscon devices

Fix the issue of exclusive reset controller acquisition failure on
kernel 6.6.

Signed-off-by: Shiji Yang <[email protected]>
Shiji Yang 1 năm trước cách đây
mục cha
commit
26390b5361

+ 2 - 0
target/linux/ath79/dts/ath79.dtsi

@@ -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";

+ 37 - 0
target/linux/ath79/patches-6.6/820-mfd-syscon-support-skip-reset-control-for-syscon-devices.patch

@@ -0,0 +1,37 @@
+From: Shiji Yang <[email protected]>
+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 <[email protected]>
+---
+ 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;