* [PATCH] reset: mchp: sparx5: Fix for lan966x
@ 2025-02-24 9:29 Horatiu Vultur
2025-02-24 13:04 ` Herve Codina
0 siblings, 1 reply; 3+ messages in thread
From: Horatiu Vultur @ 2025-02-24 9:29 UTC (permalink / raw)
To: p.zabel, Steen.Hegelund, daniel.machon, UNGLinuxDriver,
herve.codina
Cc: linux-arm-kernel, linux-kernel, Horatiu Vultur
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
region also for other devices.
Fixes: 0426a920d6269c ("reset: mchp: sparx5: Map cpu-syscon locally in case of LAN966x")
Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
---
drivers/reset/reset-microchip-sparx5.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/drivers/reset/reset-microchip-sparx5.c b/drivers/reset/reset-microchip-sparx5.c
index aa5464be7053b..5a75f9833a91a 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,17 @@ 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;
- base = devm_of_iomap(dev, syscon_np, 0, &size);
- if (IS_ERR(base))
- return ERR_CAST(base);
+ if (of_address_to_resource(syscon_np, 0, &res))
+ return ERR_PTR(-ENOMEM);
- regmap_config.max_register = size - 4;
+ base = of_iomap(syscon_np, 0);
+ if (!base)
+ return ERR_PTR(-ENOMEM);
+
+ regmap_config.max_register = resource_size(&res) - 4;
return devm_regmap_init_mmio(dev, base, ®map_config);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] reset: mchp: sparx5: Fix for lan966x
2025-02-24 9:29 [PATCH] reset: mchp: sparx5: Fix for lan966x Horatiu Vultur
@ 2025-02-24 13:04 ` Herve Codina
2025-02-25 9:59 ` Horatiu Vultur
0 siblings, 1 reply; 3+ messages in thread
From: Herve Codina @ 2025-02-24 13:04 UTC (permalink / raw)
To: Horatiu Vultur
Cc: p.zabel, Steen.Hegelund, daniel.machon, UNGLinuxDriver,
linux-arm-kernel, linux-kernel
Hi Horatiu,
On Mon, 24 Feb 2025 10:29:23 +0100
Horatiu Vultur <horatiu.vultur@microchip.com> wrote:
> 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
> region also for other devices.
>
> Fixes: 0426a920d6269c ("reset: mchp: sparx5: Map cpu-syscon locally in case of LAN966x")
> Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
> ---
> drivers/reset/reset-microchip-sparx5.c | 14 +++++++++-----
> 1 file changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/reset/reset-microchip-sparx5.c b/drivers/reset/reset-microchip-sparx5.c
> index aa5464be7053b..5a75f9833a91a 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,17 @@ 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;
>
> - base = devm_of_iomap(dev, syscon_np, 0, &size);
> - if (IS_ERR(base))
> - return ERR_CAST(base);
> + if (of_address_to_resource(syscon_np, 0, &res))
> + return ERR_PTR(-ENOMEM);
>
> - regmap_config.max_register = size - 4;
> + base = of_iomap(syscon_np, 0);
> + if (!base)
> + return ERR_PTR(-ENOMEM);
> +
> + regmap_config.max_register = resource_size(&res) - 4;
>
> return devm_regmap_init_mmio(dev, base, ®map_config);
> }
In the Lan966x PCI device use case, the reset driver can be loaded, unloaded
and re-loaded.
When the driver is unloaded, resources have to be released and so with a
call to of_iomap(), a call to iounmap() is needed.
Maybe .remove() function in this driver should handle the needed iounmap()
call.
Best regards,
Hervé
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] reset: mchp: sparx5: Fix for lan966x
2025-02-24 13:04 ` Herve Codina
@ 2025-02-25 9:59 ` Horatiu Vultur
0 siblings, 0 replies; 3+ messages in thread
From: Horatiu Vultur @ 2025-02-25 9:59 UTC (permalink / raw)
To: Herve Codina
Cc: p.zabel, Steen.Hegelund, daniel.machon, UNGLinuxDriver,
linux-arm-kernel, linux-kernel
The 02/24/2025 14:04, Herve Codina wrote:
>
> Hi Horatiu,
Hi Herve,
>
> On Mon, 24 Feb 2025 10:29:23 +0100
> Horatiu Vultur <horatiu.vultur@microchip.com> wrote:
>
> > 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
> > region also for other devices.
> >
> > Fixes: 0426a920d6269c ("reset: mchp: sparx5: Map cpu-syscon locally in case of LAN966x")
> > Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
> > ---
> > drivers/reset/reset-microchip-sparx5.c | 14 +++++++++-----
> > 1 file changed, 9 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/reset/reset-microchip-sparx5.c b/drivers/reset/reset-microchip-sparx5.c
> > index aa5464be7053b..5a75f9833a91a 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,17 @@ 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;
> >
> > - base = devm_of_iomap(dev, syscon_np, 0, &size);
> > - if (IS_ERR(base))
> > - return ERR_CAST(base);
> > + if (of_address_to_resource(syscon_np, 0, &res))
> > + return ERR_PTR(-ENOMEM);
> >
> > - regmap_config.max_register = size - 4;
> > + base = of_iomap(syscon_np, 0);
> > + if (!base)
> > + return ERR_PTR(-ENOMEM);
> > +
> > + regmap_config.max_register = resource_size(&res) - 4;
> >
> > return devm_regmap_init_mmio(dev, base, ®map_config);
> > }
>
> In the Lan966x PCI device use case, the reset driver can be loaded, unloaded
> and re-loaded.
>
> When the driver is unloaded, resources have to be released and so with a
> call to of_iomap(), a call to iounmap() is needed.
>
> Maybe .remove() function in this driver should handle the needed iounmap()
> call.
Thanks for the comments.
I think you are right. I will update this in the next version.
>
> Best regards,
> Hervé
--
/Horatiu
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-02-25 11:23 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-24 9:29 [PATCH] reset: mchp: sparx5: Fix for lan966x Horatiu Vultur
2025-02-24 13:04 ` Herve Codina
2025-02-25 9:59 ` Horatiu Vultur
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).