* [PATCH v2 1/3] mtd: nand: atmel: Defer probe if SRAM is missing
2025-11-20 21:37 [PATCH v2 0/3] at91: Remove of_platform_default_populate() calls Rob Herring (Arm)
@ 2025-11-20 21:37 ` Rob Herring (Arm)
2025-11-21 14:15 ` Miquel Raynal
2025-11-20 21:37 ` [PATCH v2 2/3] ARM: at91: Move PM init functions to .init_late hook Rob Herring
` (2 subsequent siblings)
3 siblings, 1 reply; 10+ messages in thread
From: Rob Herring (Arm) @ 2025-11-20 21:37 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Nicolas Ferre, Alexandre Belloni, Claudiu Beznea, Russell King
Cc: linux-mtd, linux-arm-kernel, linux-kernel
The Atmel NAND controller driver depends on an SRAM pool and has an
implicit assumption that the SRAM pool has already been created.
Changing the initcall ordering can break this. Unfortunately, fw_devlink
can't save us here as there's not a standard property to track the
dependency. So it's up to deferring probe to save us.
Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
---
drivers/mtd/nand/raw/atmel/nand-controller.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/mtd/nand/raw/atmel/nand-controller.c b/drivers/mtd/nand/raw/atmel/nand-controller.c
index 83ba4ebd02d4..e60998eb754b 100644
--- a/drivers/mtd/nand/raw/atmel/nand-controller.c
+++ b/drivers/mtd/nand/raw/atmel/nand-controller.c
@@ -2306,7 +2306,7 @@ atmel_hsmc_nand_controller_init(struct atmel_hsmc_nand_controller *nc)
"atmel,nfc-sram", 0);
if (!nc->sram.pool) {
dev_err(nc->base.dev, "Missing SRAM\n");
- return -ENOMEM;
+ return -EPROBE_DEFER;
}
nc->sram.virt = (void __iomem *)gen_pool_dma_alloc(nc->sram.pool,
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH v2 1/3] mtd: nand: atmel: Defer probe if SRAM is missing
2025-11-20 21:37 ` [PATCH v2 1/3] mtd: nand: atmel: Defer probe if SRAM is missing Rob Herring (Arm)
@ 2025-11-21 14:15 ` Miquel Raynal
0 siblings, 0 replies; 10+ messages in thread
From: Miquel Raynal @ 2025-11-21 14:15 UTC (permalink / raw)
To: Rob Herring (Arm)
Cc: Richard Weinberger, Vignesh Raghavendra, Nicolas Ferre,
Alexandre Belloni, Claudiu Beznea, Russell King, linux-mtd,
linux-arm-kernel, linux-kernel
Hello Rob,
> diff --git a/drivers/mtd/nand/raw/atmel/nand-controller.c b/drivers/mtd/nand/raw/atmel/nand-controller.c
> index 83ba4ebd02d4..e60998eb754b 100644
> --- a/drivers/mtd/nand/raw/atmel/nand-controller.c
> +++ b/drivers/mtd/nand/raw/atmel/nand-controller.c
> @@ -2306,7 +2306,7 @@ atmel_hsmc_nand_controller_init(struct atmel_hsmc_nand_controller *nc)
> "atmel,nfc-sram", 0);
> if (!nc->sram.pool) {
> dev_err(nc->base.dev, "Missing SRAM\n");
> - return -ENOMEM;
> + return -EPROBE_DEFER;
I am totally fine with the idea of probe deferral, however I think the
policy is to avoid making noise when this happens. The dev_err() call is
no longer relevant there. You can either lower it to dev_dbg() manually
or, at your convenience, return with:
return dev_err_probe(nc->base.dev, "Missing SRAM\n", -EPROBE_DEFER);
Thanks,
Miquèl
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 2/3] ARM: at91: Move PM init functions to .init_late hook
2025-11-20 21:37 [PATCH v2 0/3] at91: Remove of_platform_default_populate() calls Rob Herring (Arm)
2025-11-20 21:37 ` [PATCH v2 1/3] mtd: nand: atmel: Defer probe if SRAM is missing Rob Herring (Arm)
@ 2025-11-20 21:37 ` Rob Herring
2025-11-22 15:37 ` Claudiu Beznea
2025-11-20 21:37 ` [PATCH v2 3/3] ARM: at91: remove unnecessary of_platform_default_populate calls Rob Herring (Arm)
2025-12-12 17:37 ` [PATCH v2 0/3] at91: Remove of_platform_default_populate() calls Alexandre Belloni
3 siblings, 1 reply; 10+ messages in thread
From: Rob Herring @ 2025-11-20 21:37 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Nicolas Ferre, Alexandre Belloni, Claudiu Beznea, Russell King
Cc: linux-mtd, linux-arm-kernel, linux-kernel
Move the AT91 PM init functions to .init_late hook to ensure driver
dependencies have probed.
Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: linux-arm-kernel@lists.infradead.org
Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
---
v2:
- new patch
---
arch/arm/mach-at91/at91rm9200.c | 3 +--
arch/arm/mach-at91/at91sam9.c | 3 +--
arch/arm/mach-at91/sam9x60.c | 3 +--
arch/arm/mach-at91/sam9x7.c | 3 +--
arch/arm/mach-at91/sama5.c | 2 +-
arch/arm/mach-at91/sama7.c | 3 +--
6 files changed, 6 insertions(+), 11 deletions(-)
diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c
index 4f8186211619..2ac564eb8bbb 100644
--- a/arch/arm/mach-at91/at91rm9200.c
+++ b/arch/arm/mach-at91/at91rm9200.c
@@ -17,8 +17,6 @@
static void __init at91rm9200_dt_device_init(void)
{
of_platform_default_populate(NULL, NULL, NULL);
-
- at91rm9200_pm_init();
}
static const char *const at91rm9200_dt_board_compat[] __initconst = {
@@ -27,6 +25,7 @@ static const char *const at91rm9200_dt_board_compat[] __initconst = {
};
DT_MACHINE_START(at91rm9200_dt, "Atmel AT91RM9200")
+ .init_late = at91rm9200_pm_init,
.init_machine = at91rm9200_dt_device_init,
.dt_compat = at91rm9200_dt_board_compat,
MACHINE_END
diff --git a/arch/arm/mach-at91/at91sam9.c b/arch/arm/mach-at91/at91sam9.c
index 7e572189a5eb..cf07cba4ee5d 100644
--- a/arch/arm/mach-at91/at91sam9.c
+++ b/arch/arm/mach-at91/at91sam9.c
@@ -17,8 +17,6 @@
static void __init at91sam9_init(void)
{
of_platform_default_populate(NULL, NULL, NULL);
-
- at91sam9_pm_init();
}
static const char *const at91_dt_board_compat[] __initconst = {
@@ -28,6 +26,7 @@ static const char *const at91_dt_board_compat[] __initconst = {
DT_MACHINE_START(at91sam_dt, "Atmel AT91SAM9")
/* Maintainer: Atmel */
+ .init_late = at91sam9_pm_init,
.init_machine = at91sam9_init,
.dt_compat = at91_dt_board_compat,
MACHINE_END
diff --git a/arch/arm/mach-at91/sam9x60.c b/arch/arm/mach-at91/sam9x60.c
index d8c739d25458..a31beaaeffcd 100644
--- a/arch/arm/mach-at91/sam9x60.c
+++ b/arch/arm/mach-at91/sam9x60.c
@@ -18,8 +18,6 @@
static void __init sam9x60_init(void)
{
of_platform_default_populate(NULL, NULL, NULL);
-
- sam9x60_pm_init();
}
static const char *const sam9x60_dt_board_compat[] __initconst = {
@@ -29,6 +27,7 @@ static const char *const sam9x60_dt_board_compat[] __initconst = {
DT_MACHINE_START(sam9x60_dt, "Microchip SAM9X60")
/* Maintainer: Microchip */
+ .init_late = sam9x60_pm_init,
.init_machine = sam9x60_init,
.dt_compat = sam9x60_dt_board_compat,
MACHINE_END
diff --git a/arch/arm/mach-at91/sam9x7.c b/arch/arm/mach-at91/sam9x7.c
index e1ff30b5b09b..0c73f7fefd4f 100644
--- a/arch/arm/mach-at91/sam9x7.c
+++ b/arch/arm/mach-at91/sam9x7.c
@@ -17,8 +17,6 @@
static void __init sam9x7_init(void)
{
of_platform_default_populate(NULL, NULL, NULL);
-
- sam9x7_pm_init();
}
static const char * const sam9x7_dt_board_compat[] __initconst = {
@@ -28,6 +26,7 @@ static const char * const sam9x7_dt_board_compat[] __initconst = {
DT_MACHINE_START(sam9x7_dt, "Microchip SAM9X7")
/* Maintainer: Microchip */
+ .init_late = sam9x7_pm_init,
.init_machine = sam9x7_init,
.dt_compat = sam9x7_dt_board_compat,
MACHINE_END
diff --git a/arch/arm/mach-at91/sama5.c b/arch/arm/mach-at91/sama5.c
index bf2b5c6a18c6..efae697ce29c 100644
--- a/arch/arm/mach-at91/sama5.c
+++ b/arch/arm/mach-at91/sama5.c
@@ -33,7 +33,6 @@ static void __init sama5_secure_cache_init(void)
static void __init sama5_dt_device_init(void)
{
of_platform_default_populate(NULL, NULL, NULL);
- sama5_pm_init();
}
static const char *const sama5_dt_board_compat[] __initconst = {
@@ -43,6 +42,7 @@ static const char *const sama5_dt_board_compat[] __initconst = {
DT_MACHINE_START(sama5_dt, "Atmel SAMA5")
/* Maintainer: Atmel */
+ .init_late = sama5_pm_init,
.init_machine = sama5_dt_device_init,
.dt_compat = sama5_dt_board_compat,
MACHINE_END
diff --git a/arch/arm/mach-at91/sama7.c b/arch/arm/mach-at91/sama7.c
index bd43733ede18..3e28727f2a8e 100644
--- a/arch/arm/mach-at91/sama7.c
+++ b/arch/arm/mach-at91/sama7.c
@@ -17,8 +17,6 @@
static void __init sama7_dt_device_init(void)
{
of_platform_default_populate(NULL, NULL, NULL);
- sama7_pm_init();
-}
static const char *const sama7_dt_board_compat[] __initconst = {
"microchip,sama7",
@@ -27,6 +25,7 @@ static const char *const sama7_dt_board_compat[] __initconst = {
DT_MACHINE_START(sama7_dt, "Microchip SAMA7")
/* Maintainer: Microchip */
+ .init_late = sama7_pm_init,
.init_machine = sama7_dt_device_init,
.dt_compat = sama7_dt_board_compat,
MACHINE_END
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH v2 2/3] ARM: at91: Move PM init functions to .init_late hook
2025-11-20 21:37 ` [PATCH v2 2/3] ARM: at91: Move PM init functions to .init_late hook Rob Herring
@ 2025-11-22 15:37 ` Claudiu Beznea
2025-12-09 22:39 ` Rob Herring
0 siblings, 1 reply; 10+ messages in thread
From: Claudiu Beznea @ 2025-11-22 15:37 UTC (permalink / raw)
To: Rob Herring, Miquel Raynal, Richard Weinberger,
Vignesh Raghavendra, Nicolas Ferre, Alexandre Belloni,
Russell King
Cc: linux-mtd, linux-arm-kernel, linux-kernel
Hi, Rob,
On 11/20/25 23:37, Rob Herring wrote:
> Move the AT91 PM init functions to .init_late hook to ensure driver
> dependencies have probed.
>
> Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Cc: linux-arm-kernel@lists.infradead.org
> Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
'From: Rob Herring <robh@kernel.org>' != 'Signed-off-by: Rob Herring (Arm)
<robh@kernel.org>
> ---
> v2:
> - new patch
> ---
> arch/arm/mach-at91/at91rm9200.c | 3 +--
> arch/arm/mach-at91/at91sam9.c | 3 +--
> arch/arm/mach-at91/sam9x60.c | 3 +--
> arch/arm/mach-at91/sam9x7.c | 3 +--
> arch/arm/mach-at91/sama5.c | 2 +-
> arch/arm/mach-at91/sama7.c | 3 +--
> 6 files changed, 6 insertions(+), 11 deletions(-)
>
> diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c
> index 4f8186211619..2ac564eb8bbb 100644
> --- a/arch/arm/mach-at91/at91rm9200.c
> +++ b/arch/arm/mach-at91/at91rm9200.c
> @@ -17,8 +17,6 @@
> static void __init at91rm9200_dt_device_init(void)
> {
> of_platform_default_populate(NULL, NULL, NULL);
> -
> - at91rm9200_pm_init();
> }
>
> static const char *const at91rm9200_dt_board_compat[] __initconst = {
> @@ -27,6 +25,7 @@ static const char *const at91rm9200_dt_board_compat[] __initconst = {
> };
>
> DT_MACHINE_START(at91rm9200_dt, "Atmel AT91RM9200")
> + .init_late = at91rm9200_pm_init,
> .init_machine = at91rm9200_dt_device_init,
> .dt_compat = at91rm9200_dt_board_compat,
> MACHINE_END
> diff --git a/arch/arm/mach-at91/at91sam9.c b/arch/arm/mach-at91/at91sam9.c
> index 7e572189a5eb..cf07cba4ee5d 100644
> --- a/arch/arm/mach-at91/at91sam9.c
> +++ b/arch/arm/mach-at91/at91sam9.c
> @@ -17,8 +17,6 @@
> static void __init at91sam9_init(void)
> {
> of_platform_default_populate(NULL, NULL, NULL);
> -
> - at91sam9_pm_init();
> }
>
> static const char *const at91_dt_board_compat[] __initconst = {
> @@ -28,6 +26,7 @@ static const char *const at91_dt_board_compat[] __initconst = {
>
> DT_MACHINE_START(at91sam_dt, "Atmel AT91SAM9")
> /* Maintainer: Atmel */
> + .init_late = at91sam9_pm_init,
> .init_machine = at91sam9_init,
> .dt_compat = at91_dt_board_compat,
> MACHINE_END
> diff --git a/arch/arm/mach-at91/sam9x60.c b/arch/arm/mach-at91/sam9x60.c
> index d8c739d25458..a31beaaeffcd 100644
> --- a/arch/arm/mach-at91/sam9x60.c
> +++ b/arch/arm/mach-at91/sam9x60.c
> @@ -18,8 +18,6 @@
> static void __init sam9x60_init(void)
> {
> of_platform_default_populate(NULL, NULL, NULL);
> -
> - sam9x60_pm_init();
> }
>
> static const char *const sam9x60_dt_board_compat[] __initconst = {
> @@ -29,6 +27,7 @@ static const char *const sam9x60_dt_board_compat[] __initconst = {
>
> DT_MACHINE_START(sam9x60_dt, "Microchip SAM9X60")
> /* Maintainer: Microchip */
> + .init_late = sam9x60_pm_init,
> .init_machine = sam9x60_init,
> .dt_compat = sam9x60_dt_board_compat,
> MACHINE_END
> diff --git a/arch/arm/mach-at91/sam9x7.c b/arch/arm/mach-at91/sam9x7.c
> index e1ff30b5b09b..0c73f7fefd4f 100644
> --- a/arch/arm/mach-at91/sam9x7.c
> +++ b/arch/arm/mach-at91/sam9x7.c
> @@ -17,8 +17,6 @@
> static void __init sam9x7_init(void)
> {
> of_platform_default_populate(NULL, NULL, NULL);
> -
> - sam9x7_pm_init();
> }
>
> static const char * const sam9x7_dt_board_compat[] __initconst = {
> @@ -28,6 +26,7 @@ static const char * const sam9x7_dt_board_compat[] __initconst = {
>
> DT_MACHINE_START(sam9x7_dt, "Microchip SAM9X7")
> /* Maintainer: Microchip */
> + .init_late = sam9x7_pm_init,
> .init_machine = sam9x7_init,
> .dt_compat = sam9x7_dt_board_compat,
> MACHINE_END
> diff --git a/arch/arm/mach-at91/sama5.c b/arch/arm/mach-at91/sama5.c
> index bf2b5c6a18c6..efae697ce29c 100644
> --- a/arch/arm/mach-at91/sama5.c
> +++ b/arch/arm/mach-at91/sama5.c
> @@ -33,7 +33,6 @@ static void __init sama5_secure_cache_init(void)
> static void __init sama5_dt_device_init(void)
> {
> of_platform_default_populate(NULL, NULL, NULL);
> - sama5_pm_init();
> }
>
> static const char *const sama5_dt_board_compat[] __initconst = {
> @@ -43,6 +42,7 @@ static const char *const sama5_dt_board_compat[] __initconst = {
>
> DT_MACHINE_START(sama5_dt, "Atmel SAMA5")
> /* Maintainer: Atmel */
> + .init_late = sama5_pm_init,
> .init_machine = sama5_dt_device_init,
> .dt_compat = sama5_dt_board_compat,
> MACHINE_END
> diff --git a/arch/arm/mach-at91/sama7.c b/arch/arm/mach-at91/sama7.c
> index bd43733ede18..3e28727f2a8e 100644
> --- a/arch/arm/mach-at91/sama7.c
> +++ b/arch/arm/mach-at91/sama7.c
> @@ -17,8 +17,6 @@
> static void __init sama7_dt_device_init(void)
> {
> of_platform_default_populate(NULL, NULL, NULL);
> - sama7_pm_init();
> -}
} was dropped as well.
Thank you,
Claudiu
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [PATCH v2 2/3] ARM: at91: Move PM init functions to .init_late hook
2025-11-22 15:37 ` Claudiu Beznea
@ 2025-12-09 22:39 ` Rob Herring
2025-12-10 8:04 ` Claudiu Beznea
0 siblings, 1 reply; 10+ messages in thread
From: Rob Herring @ 2025-12-09 22:39 UTC (permalink / raw)
To: Claudiu Beznea
Cc: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Nicolas Ferre, Alexandre Belloni, Russell King, linux-mtd,
linux-arm-kernel, linux-kernel
On Sat, Nov 22, 2025 at 9:37 AM Claudiu Beznea <claudiu.beznea@tuxon.dev> wrote:
>
> Hi, Rob,
>
> On 11/20/25 23:37, Rob Herring wrote:
> > Move the AT91 PM init functions to .init_late hook to ensure driver
> > dependencies have probed.
> >
> > Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
> > Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> > Cc: linux-arm-kernel@lists.infradead.org
> > Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
>
> 'From: Rob Herring <robh@kernel.org>' != 'Signed-off-by: Rob Herring (Arm)
> <robh@kernel.org>
Before I respin, any feedback on whether this series actually works or not?
Rob
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/3] ARM: at91: Move PM init functions to .init_late hook
2025-12-09 22:39 ` Rob Herring
@ 2025-12-10 8:04 ` Claudiu Beznea
0 siblings, 0 replies; 10+ messages in thread
From: Claudiu Beznea @ 2025-12-10 8:04 UTC (permalink / raw)
To: Rob Herring
Cc: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Nicolas Ferre, Alexandre Belloni, Russell King, linux-mtd,
linux-arm-kernel, linux-kernel
Hi, Rob,
On 12/10/25 00:39, Rob Herring wrote:
> On Sat, Nov 22, 2025 at 9:37 AM Claudiu Beznea <claudiu.beznea@tuxon.dev> wrote:
>>
>> Hi, Rob,
>>
>> On 11/20/25 23:37, Rob Herring wrote:
>>> Move the AT91 PM init functions to .init_late hook to ensure driver
>>> dependencies have probed.
>>>
>>> Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
>>> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
>>> Cc: linux-arm-kernel@lists.infradead.org
>>> Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
>>
>> 'From: Rob Herring <robh@kernel.org>' != 'Signed-off-by: Rob Herring (Arm)
>> <robh@kernel.org>
>
> Before I respin, any feedback on whether this series actually works or not?
I've tested it on SAMA7G5-EK and SAM9X60-EK boards and it works.
Thank you,
Claudiu
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 3/3] ARM: at91: remove unnecessary of_platform_default_populate calls
2025-11-20 21:37 [PATCH v2 0/3] at91: Remove of_platform_default_populate() calls Rob Herring (Arm)
2025-11-20 21:37 ` [PATCH v2 1/3] mtd: nand: atmel: Defer probe if SRAM is missing Rob Herring (Arm)
2025-11-20 21:37 ` [PATCH v2 2/3] ARM: at91: Move PM init functions to .init_late hook Rob Herring
@ 2025-11-20 21:37 ` Rob Herring (Arm)
2025-11-22 15:37 ` Claudiu Beznea
2025-12-12 17:37 ` [PATCH v2 0/3] at91: Remove of_platform_default_populate() calls Alexandre Belloni
3 siblings, 1 reply; 10+ messages in thread
From: Rob Herring (Arm) @ 2025-11-20 21:37 UTC (permalink / raw)
To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Nicolas Ferre, Alexandre Belloni, Claudiu Beznea, Russell King
Cc: linux-mtd, linux-arm-kernel, linux-kernel
The DT core will call of_platform_default_populate, so it is not
necessary for machine specific code to call it unless there are custom
match entries, auxdata or parent device. Neither of those apply here, so
remove the call.
Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: linux-arm-kernel@lists.infradead.org
Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
---
v2:
- Dust off and rebase to 6.18-rc1
- Add new platforms added since v1
---
arch/arm/mach-at91/at91rm9200.c | 9 ---------
arch/arm/mach-at91/at91sam9.c | 9 ---------
arch/arm/mach-at91/sam9x60.c | 9 ---------
arch/arm/mach-at91/sam9x7.c | 9 ---------
arch/arm/mach-at91/sama5.c | 19 ++-----------------
arch/arm/mach-at91/sama7.c | 8 --------
6 files changed, 2 insertions(+), 61 deletions(-)
diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c
index 2ac564eb8bbb..d15997fff5d7 100644
--- a/arch/arm/mach-at91/at91rm9200.c
+++ b/arch/arm/mach-at91/at91rm9200.c
@@ -7,18 +7,10 @@
* 2012 Joachim Eastwood <manabian@gmail.com>
*/
-#include <linux/of.h>
-#include <linux/of_platform.h>
-
#include <asm/mach/arch.h>
#include "generic.h"
-static void __init at91rm9200_dt_device_init(void)
-{
- of_platform_default_populate(NULL, NULL, NULL);
-}
-
static const char *const at91rm9200_dt_board_compat[] __initconst = {
"atmel,at91rm9200",
NULL
@@ -26,6 +18,5 @@ static const char *const at91rm9200_dt_board_compat[] __initconst = {
DT_MACHINE_START(at91rm9200_dt, "Atmel AT91RM9200")
.init_late = at91rm9200_pm_init,
- .init_machine = at91rm9200_dt_device_init,
.dt_compat = at91rm9200_dt_board_compat,
MACHINE_END
diff --git a/arch/arm/mach-at91/at91sam9.c b/arch/arm/mach-at91/at91sam9.c
index cf07cba4ee5d..b9d2909d1b65 100644
--- a/arch/arm/mach-at91/at91sam9.c
+++ b/arch/arm/mach-at91/at91sam9.c
@@ -6,19 +6,11 @@
* 2011 Nicolas Ferre <nicolas.ferre@atmel.com>
*/
-#include <linux/of.h>
-#include <linux/of_platform.h>
-
#include <asm/mach/arch.h>
#include <asm/system_misc.h>
#include "generic.h"
-static void __init at91sam9_init(void)
-{
- of_platform_default_populate(NULL, NULL, NULL);
-}
-
static const char *const at91_dt_board_compat[] __initconst = {
"atmel,at91sam9",
NULL
@@ -27,6 +19,5 @@ static const char *const at91_dt_board_compat[] __initconst = {
DT_MACHINE_START(at91sam_dt, "Atmel AT91SAM9")
/* Maintainer: Atmel */
.init_late = at91sam9_pm_init,
- .init_machine = at91sam9_init,
.dt_compat = at91_dt_board_compat,
MACHINE_END
diff --git a/arch/arm/mach-at91/sam9x60.c b/arch/arm/mach-at91/sam9x60.c
index a31beaaeffcd..744bab2cbb92 100644
--- a/arch/arm/mach-at91/sam9x60.c
+++ b/arch/arm/mach-at91/sam9x60.c
@@ -7,19 +7,11 @@
* Author: Claudiu Beznea <claudiu.beznea@microchip.com>
*/
-#include <linux/of.h>
-#include <linux/of_platform.h>
-
#include <asm/mach/arch.h>
#include <asm/system_misc.h>
#include "generic.h"
-static void __init sam9x60_init(void)
-{
- of_platform_default_populate(NULL, NULL, NULL);
-}
-
static const char *const sam9x60_dt_board_compat[] __initconst = {
"microchip,sam9x60",
NULL
@@ -28,6 +20,5 @@ static const char *const sam9x60_dt_board_compat[] __initconst = {
DT_MACHINE_START(sam9x60_dt, "Microchip SAM9X60")
/* Maintainer: Microchip */
.init_late = sam9x60_pm_init,
- .init_machine = sam9x60_init,
.dt_compat = sam9x60_dt_board_compat,
MACHINE_END
diff --git a/arch/arm/mach-at91/sam9x7.c b/arch/arm/mach-at91/sam9x7.c
index 0c73f7fefd4f..166c8625509d 100644
--- a/arch/arm/mach-at91/sam9x7.c
+++ b/arch/arm/mach-at91/sam9x7.c
@@ -7,18 +7,10 @@
* Author: Varshini Rajendran <varshini.rajendran@microchip.com>
*/
-#include <linux/of.h>
-#include <linux/of_platform.h>
-
#include <asm/mach/arch.h>
#include "generic.h"
-static void __init sam9x7_init(void)
-{
- of_platform_default_populate(NULL, NULL, NULL);
-}
-
static const char * const sam9x7_dt_board_compat[] __initconst = {
"microchip,sam9x7",
NULL
@@ -27,6 +19,5 @@ static const char * const sam9x7_dt_board_compat[] __initconst = {
DT_MACHINE_START(sam9x7_dt, "Microchip SAM9X7")
/* Maintainer: Microchip */
.init_late = sam9x7_pm_init,
- .init_machine = sam9x7_init,
.dt_compat = sam9x7_dt_board_compat,
MACHINE_END
diff --git a/arch/arm/mach-at91/sama5.c b/arch/arm/mach-at91/sama5.c
index efae697ce29c..e56022f00800 100644
--- a/arch/arm/mach-at91/sama5.c
+++ b/arch/arm/mach-at91/sama5.c
@@ -6,9 +6,6 @@
* 2013 Ludovic Desroches <ludovic.desroches@atmel.com>
*/
-#include <linux/of.h>
-#include <linux/of_platform.h>
-
#include <asm/hardware/cache-l2x0.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
@@ -30,11 +27,6 @@ static void __init sama5_secure_cache_init(void)
outer_cache.write_sec = sama5_l2c310_write_sec;
}
-static void __init sama5_dt_device_init(void)
-{
- of_platform_default_populate(NULL, NULL, NULL);
-}
-
static const char *const sama5_dt_board_compat[] __initconst = {
"atmel,sama5",
NULL
@@ -43,7 +35,6 @@ static const char *const sama5_dt_board_compat[] __initconst = {
DT_MACHINE_START(sama5_dt, "Atmel SAMA5")
/* Maintainer: Atmel */
.init_late = sama5_pm_init,
- .init_machine = sama5_dt_device_init,
.dt_compat = sama5_dt_board_compat,
MACHINE_END
@@ -54,17 +45,11 @@ static const char *const sama5_alt_dt_board_compat[] __initconst = {
DT_MACHINE_START(sama5_alt_dt, "Atmel SAMA5")
/* Maintainer: Atmel */
- .init_machine = sama5_dt_device_init,
+ .init_late = sama5_pm_init,
.dt_compat = sama5_alt_dt_board_compat,
.l2c_aux_mask = ~0UL,
MACHINE_END
-static void __init sama5d2_init(void)
-{
- of_platform_default_populate(NULL, NULL, NULL);
- sama5d2_pm_init();
-}
-
static const char *const sama5d2_compat[] __initconst = {
"atmel,sama5d2",
NULL
@@ -72,8 +57,8 @@ static const char *const sama5d2_compat[] __initconst = {
DT_MACHINE_START(sama5d2, "Atmel SAMA5")
/* Maintainer: Atmel */
- .init_machine = sama5d2_init,
.init_early = sama5_secure_cache_init,
+ .init_late = sama5d2_pm_init,
.dt_compat = sama5d2_compat,
.l2c_aux_mask = ~0UL,
MACHINE_END
diff --git a/arch/arm/mach-at91/sama7.c b/arch/arm/mach-at91/sama7.c
index 3e28727f2a8e..f56828d61199 100644
--- a/arch/arm/mach-at91/sama7.c
+++ b/arch/arm/mach-at91/sama7.c
@@ -6,18 +6,11 @@
*
*/
-#include <linux/of.h>
-#include <linux/of_platform.h>
-
#include <asm/mach/arch.h>
#include <asm/system_misc.h>
#include "generic.h"
-static void __init sama7_dt_device_init(void)
-{
- of_platform_default_populate(NULL, NULL, NULL);
-
static const char *const sama7_dt_board_compat[] __initconst = {
"microchip,sama7",
NULL
@@ -26,7 +19,6 @@ static const char *const sama7_dt_board_compat[] __initconst = {
DT_MACHINE_START(sama7_dt, "Microchip SAMA7")
/* Maintainer: Microchip */
.init_late = sama7_pm_init,
- .init_machine = sama7_dt_device_init,
.dt_compat = sama7_dt_board_compat,
MACHINE_END
--
2.51.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH v2 3/3] ARM: at91: remove unnecessary of_platform_default_populate calls
2025-11-20 21:37 ` [PATCH v2 3/3] ARM: at91: remove unnecessary of_platform_default_populate calls Rob Herring (Arm)
@ 2025-11-22 15:37 ` Claudiu Beznea
0 siblings, 0 replies; 10+ messages in thread
From: Claudiu Beznea @ 2025-11-22 15:37 UTC (permalink / raw)
To: Rob Herring (Arm), Miquel Raynal, Richard Weinberger,
Vignesh Raghavendra, Nicolas Ferre, Alexandre Belloni,
Russell King
Cc: linux-mtd, linux-arm-kernel, linux-kernel
Hi, Rob,
On 11/20/25 23:37, Rob Herring (Arm) wrote:
> The DT core will call of_platform_default_populate, so it is not
> necessary for machine specific code to call it unless there are custom
> match entries, auxdata or parent device. Neither of those apply here, so
> remove the call.
>
> Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Cc: linux-arm-kernel@lists.infradead.org
> Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
> ---
> v2:
> - Dust off and rebase to 6.18-rc1
> - Add new platforms added since v1
> ---
> arch/arm/mach-at91/at91rm9200.c | 9 ---------
> arch/arm/mach-at91/at91sam9.c | 9 ---------
> arch/arm/mach-at91/sam9x60.c | 9 ---------
> arch/arm/mach-at91/sam9x7.c | 9 ---------
> arch/arm/mach-at91/sama5.c | 19 ++-----------------
> arch/arm/mach-at91/sama7.c | 8 --------
> 6 files changed, 2 insertions(+), 61 deletions(-)
>
[ ...]
> diff --git a/arch/arm/mach-at91/sama5.c b/arch/arm/mach-at91/sama5.c
> index efae697ce29c..e56022f00800 100644
> --- a/arch/arm/mach-at91/sama5.c
> +++ b/arch/arm/mach-at91/sama5.c
> @@ -6,9 +6,6 @@
> * 2013 Ludovic Desroches <ludovic.desroches@atmel.com>
> */
>
> -#include <linux/of.h>
> -#include <linux/of_platform.h>
> -
> #include <asm/hardware/cache-l2x0.h>
> #include <asm/mach/arch.h>
> #include <asm/mach/map.h>
> @@ -30,11 +27,6 @@ static void __init sama5_secure_cache_init(void)
> outer_cache.write_sec = sama5_l2c310_write_sec;
> }
>
> -static void __init sama5_dt_device_init(void)
> -{
> - of_platform_default_populate(NULL, NULL, NULL);
> -}
> -
> static const char *const sama5_dt_board_compat[] __initconst = {
> "atmel,sama5",
> NULL
> @@ -43,7 +35,6 @@ static const char *const sama5_dt_board_compat[] __initconst = {
> DT_MACHINE_START(sama5_dt, "Atmel SAMA5")
> /* Maintainer: Atmel */
> .init_late = sama5_pm_init,
> - .init_machine = sama5_dt_device_init,
> .dt_compat = sama5_dt_board_compat,
> MACHINE_END
>
> @@ -54,17 +45,11 @@ static const char *const sama5_alt_dt_board_compat[] __initconst = {
>
> DT_MACHINE_START(sama5_alt_dt, "Atmel SAMA5")
> /* Maintainer: Atmel */
> - .init_machine = sama5_dt_device_init,
> + .init_late = sama5_pm_init,
Should this be in the previous patch?
> .dt_compat = sama5_alt_dt_board_compat,
> .l2c_aux_mask = ~0UL,
> MACHINE_END
>
> -static void __init sama5d2_init(void)
> -{
> - of_platform_default_populate(NULL, NULL, NULL);
> - sama5d2_pm_init();
> -}
> -
> static const char *const sama5d2_compat[] __initconst = {
> "atmel,sama5d2",
> NULL
> @@ -72,8 +57,8 @@ static const char *const sama5d2_compat[] __initconst = {
>
> DT_MACHINE_START(sama5d2, "Atmel SAMA5")
> /* Maintainer: Atmel */
> - .init_machine = sama5d2_init,
> .init_early = sama5_secure_cache_init,
> + .init_late = sama5d2_pm_init,
Should this be in the previous patch?
Thank you,
Claudiu
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 0/3] at91: Remove of_platform_default_populate() calls
2025-11-20 21:37 [PATCH v2 0/3] at91: Remove of_platform_default_populate() calls Rob Herring (Arm)
` (2 preceding siblings ...)
2025-11-20 21:37 ` [PATCH v2 3/3] ARM: at91: remove unnecessary of_platform_default_populate calls Rob Herring (Arm)
@ 2025-12-12 17:37 ` Alexandre Belloni
3 siblings, 0 replies; 10+ messages in thread
From: Alexandre Belloni @ 2025-12-12 17:37 UTC (permalink / raw)
To: Rob Herring (Arm)
Cc: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra,
Nicolas Ferre, Claudiu Beznea, Russell King, linux-mtd,
linux-arm-kernel, linux-kernel
On 20/11/2025 15:37:49-0600, Rob Herring (Arm) wrote:
> This is another attempt at removing of_platform_default_populate() calls
> on at91 platforms. The last attempts were in 2018[1] and 2023[2]. The
> problems reported are PM and NAND failures. Both of these depend on SRAM
> pool which doesn't have any fw_devlink tracking. Also, the PM code is
> not a driver, so fw_devlink wouldn't help. For the NAND driver, we can
> simply defer probe. For the PM init, we can move it to the .late_init
> hook.
>
> Rob
>
> [1] https://lore.kernel.org/all/20180712192222.32481-1-robh@kernel.org/
> [2] https://lore.kernel.org/all/3908fa6f-dc33-4aac-c21f-4a676a3a6b23@microchip.com/
>
> Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
For the whole series:
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Tested-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
I tested on at91rm9200, at91sam9m10 and sama5d3 which is a
representative sample of the older platforms.
I tested suspend/resume successfully on at91sam9m10 and sama5d3.
at91rm9200 is not waking up but this is not caused by the series.
> ---
> Rob Herring (1):
> ARM: at91: Move PM init functions to .init_late hook
>
> Rob Herring (Arm) (2):
> mtd: nand: atmel: Defer probe if SRAM is missing
> ARM: at91: remove unnecessary of_platform_default_populate calls
>
> arch/arm/mach-at91/at91rm9200.c | 12 +-----------
> arch/arm/mach-at91/at91sam9.c | 12 +-----------
> arch/arm/mach-at91/sam9x60.c | 12 +-----------
> arch/arm/mach-at91/sam9x7.c | 12 +-----------
> arch/arm/mach-at91/sama5.c | 21 +++------------------
> arch/arm/mach-at91/sama7.c | 11 +----------
> drivers/mtd/nand/raw/atmel/nand-controller.c | 2 +-
> 7 files changed, 9 insertions(+), 73 deletions(-)
> ---
> base-commit: 3a8660878839faadb4f1a6dd72c3179c1df56787
> change-id: 20251120-at91-probe-20fbce9a6d1b
>
> Best regards,
> --
> Rob Herring (Arm) <robh@kernel.org>
>
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 10+ messages in thread