[PATCH 24/27] ARM: pxa: move over to MULTIARCH

Sascha Hauer s.hauer at pengutronix.de
Sun Aug 16 10:56:44 PDT 2026


PXA was one of the architectures left in the "ARM system type" choice,
so a build could contain it or another architecture, never both.

Nothing about the SoC support requires that anymore, but its initcalls
did: the restart handler and the poweroff handler were registered
unconditionally and go straight at PXA registers, which on a multiarch
build would run on whatever else is in the image. Guard both with
of_machine_is_compatible() and move the architecture out of the choice.

For that to work the board has to identify as a PXA3xx. The SoC device
tree include says so, but a board that overrides the root compatible has
to keep it in its list.

While at it, drop the separate device_initcall() for
pxa_detect_reset_source(): pxa3xx_init() already calls it, so the reset
source was detected twice.

Assisted-by: Claude Opus 5
Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 arch/arm/Kconfig           | 16 ++++++++--------
 arch/arm/mach-pxa/common.c |  4 ++++
 arch/arm/mach-pxa/pxa3xx.c |  6 ++++--
 3 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 106f3d559e..6a4825fe33 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -118,14 +118,6 @@ config ARCH_MXS
 	select COMMON_CLK
 	select HAS_DEBUG_LL
 
-config ARCH_PXA
-	bool "Intel/Marvell PXA based"
-	depends on 32BIT
-	select GPIOLIB
-	select HAS_DEBUG_LL
-	select OFTREE
-	select OFDEVICE
-
 config ARCH_SOCFPGA
 	bool "Altera SOCFPGA"
 	select HAS_DEBUG_LL
@@ -188,6 +180,14 @@ config ARCH_K3
 	select COMMON_CLK_OF_PROVIDER
 	select PM_GENERIC_DOMAINS
 
+config ARCH_PXA
+	bool "Intel/Marvell PXA based"
+	depends on 32BIT
+	select GPIOLIB
+	select HAS_DEBUG_LL
+	select OFTREE
+	select OFDEVICE
+
 config ARCH_SUNXI
 	bool "Allwinner (sunxi) SoCs"
 	depends on ARCH_MULTIARCH
diff --git a/arch/arm/mach-pxa/common.c b/arch/arm/mach-pxa/common.c
index 1da1b58054..fea570c5fa 100644
--- a/arch/arm/mach-pxa/common.c
+++ b/arch/arm/mach-pxa/common.c
@@ -13,6 +13,7 @@
  */
 
 #include <common.h>
+#include <of.h>
 #include <init.h>
 #include <restart.h>
 #include <mach/pxa/pxa-regs.h>
@@ -42,6 +43,9 @@ static void __noreturn pxa_restart_soc(struct restart_handler *rst,
 
 static int restart_register_feature(void)
 {
+	if (!of_machine_is_compatible("marvell,pxa3xx"))
+		return 0;
+
 	restart_handler_register_fn("soc-wdt", pxa_restart_soc);
 
 	return 0;
diff --git a/arch/arm/mach-pxa/pxa3xx.c b/arch/arm/mach-pxa/pxa3xx.c
index ea84efc8b0..6edc55481e 100644
--- a/arch/arm/mach-pxa/pxa3xx.c
+++ b/arch/arm/mach-pxa/pxa3xx.c
@@ -13,6 +13,7 @@
  */
 
 #include <common.h>
+#include <of.h>
 #include <init.h>
 #include <poweroff.h>
 #include <reset_source.h>
@@ -47,8 +48,6 @@ void pxa_clear_reset_source(void)
 	ARSR = ARSR_GPR | ARSR_LPMR | ARSR_WDT | ARSR_HWR;
 }
 
-device_initcall(pxa_detect_reset_source);
-
 static void __noreturn pxa3xx_poweroff(struct poweroff_handler *handler,
 				       unsigned long flags)
 {
@@ -62,6 +61,9 @@ static void __noreturn pxa3xx_poweroff(struct poweroff_handler *handler,
 
 static int pxa3xx_init(void)
 {
+	if (!of_machine_is_compatible("marvell,pxa3xx"))
+		return 0;
+
 	poweroff_handler_register_fn(pxa3xx_poweroff);
 
 	pxa_detect_reset_source();

-- 
2.47.3




More information about the barebox mailing list