Thread (5 messages) 5 messages, 3 authors, 2025-02-27

Re: [PATCH v3] reset: mchp: sparx5: Fix for lan966x

From: Horatiu Vultur <horatiu.vultur@microchip.com>
Date: 2025-02-27 08:54:05
Also in: lkml

The 02/26/2025 17:32, Philipp Zabel wrote:

Hi,
On Mi, 2025-02-26 at 15:46 +0100, Horatiu Vultur wrote:
quoted
With the blamed commit it seems that lan966x doesn't seem to boot
anymore when the internal CPU is used.
The reason seems to be the usage of the devm_of_iomap, if we replace
this with of_iomap, this seems to fix the issue as we use the same
            ^^^^^^^^
The is not accurate anymore.
Good catch. I will update in the next version.
quoted
region also for other devices.

Fixes: 0426a920d6269c ("reset: mchp: sparx5: Map cpu-syscon locally in case of LAN966x")
Reviewed-by: Herve Codina <herve.codina@bootlin.com>
Tested-by: Herve Codina <herve.codina@bootlin.com>
Is this still correct?
quoted
Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
---
v2->v3:
- forward error from of_address_to_resource
- use devm_ioremap instead of_iomap
v1->v2:
- make sure to use iounmap when driver is removed
---
 drivers/reset/reset-microchip-sparx5.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/drivers/reset/reset-microchip-sparx5.c b/drivers/reset/reset-microchip-sparx5.c
index aa5464be7053b..176b3f46e9243 100644
--- a/drivers/reset/reset-microchip-sparx5.c
+++ b/drivers/reset/reset-microchip-sparx5.c
@@ -8,6 +8,7 @@
  */
 #include <linux/mfd/syscon.h>
 #include <linux/of.h>
+#include <linux/of_address.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
 #include <linux/property.h>
@@ -72,14 +73,19 @@ static struct regmap *mchp_lan966x_syscon_to_regmap(struct device *dev,
                                                  struct device_node *syscon_np)
 {
      struct regmap_config regmap_config = mchp_lan966x_syscon_regmap_config;
-     resource_size_t size;
+     struct resource res;
      void __iomem *base;
+     int err;
+
+     err = of_address_to_resource(syscon_np, 0, &res);
+     if (err)
+             return ERR_PTR(err);

-     base = devm_of_iomap(dev, syscon_np, 0, &size);
-     if (IS_ERR(base))
-             return ERR_CAST(base);
It would be nice to add a comment here that devm_of_iomap() can't be
used because the resource is shared with other devices. Do you know
which ones?
Yes, I will add a comment in the next version.
Looking at the device trees (lan966x.dtsi), it looks like it is shared
with the clock driver (clks).
Otherwise, this looks good to me.


regards
Philipp
-- 
/Horatiu
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help