Skip to contentSkip to conversation

Add support for pxa27x device-tree machine

PATCH Superseded Robert Jarzmik 3 participants 11 messages Oct 12, 2014 – Nov 3, 2014

Subsystems (3)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore

Robert Jarzmik

author maintainer
#0 lore raw

v2 cover Add support for pxa27x device-tree machine

Hi,

This is the second version of this patchset, to provide a device-tree machine support for pxa27x.

Since latest review by Arnd :
- patches 1, 3 and 4 were ok
- patch 2 was respined

Cheers.

--
Robert

Robert Jarzmik (4):
arm: pxa: add device-tree irq init for pxa27x
arm: pxa: move init functions into generic.h
arm: pxa: remove unecessary includes from pxa-dt
arm: pxa: add pxa27x device-tree support

 arch/arm/mach-pxa/Kconfig               | 11 ++++++
 arch/arm/mach-pxa/Makefile              |  1 +
 arch/arm/mach-pxa/generic.h             | 65 +++++++++++++++++++++------------
 arch/arm/mach-pxa/include/mach/pxa25x.h |  8 ----
 arch/arm/mach-pxa/include/mach/pxa27x.h |  4 --
 arch/arm/mach-pxa/include/mach/pxa3xx.h |  5 ---
 arch/arm/mach-pxa/pxa-dt.c              | 18 +++++++--
 arch/arm/mach-pxa/pxa27x.c              |  5 +++
 8 files changed, 74 insertions(+), 43 deletions(-)
Signature · 1 line
2.1.0
author maintainer
#1 lore raw

PATCH v2 1/4 arm: pxa: add device-tree irq init for pxa27x

Add the initializer for irqs in a device-tree machine on a pxa27x.

---
 arch/arm/mach-pxa/pxa27x.c | 5 +++++
 1 file changed, 5 insertions(+)
arch/arm/mach-pxa/pxa27x.c +5 -0
index b040d7d..8ca62e2 100644
@@ -398,6 +398,11 @@ void __init pxa27x_init_irq(void)
 	pxa_init_irq(34, pxa27x_set_wake);
 }
 
+void __init pxa27x_dt_init_irq(void)
+{
+	pxa_dt_irq_init(pxa27x_set_wake);
+}
+
 static struct map_desc pxa27x_io_desc[] __initdata = {
 	{	/* Mem Ctl */
 		.virtual	= (unsigned long)SMEMC_VIRT,
Signature · 1 line
2.1.0
#2 lore raw

PATCH v2 1/4 arm: pxa: add device-tree irq init for pxa27x

Quoted 12 lines · Robert Jarzmik

Add the initializer for irqs in a device-tree machine on a pxa27x.

---
 arch/arm/mach-pxa/pxa27x.c | 5 +++++
 1 file changed, 5 insertions(+)
arch/arm/mach-pxa/pxa27x.c +0 -0
index b040d7d..8ca62e2 100644

arch/arm/mach-pxa/pxa27x.c void __init pxa27x_init_irq(void) · line 404

Quoted 7 lines
arch/arm/mach-pxa/pxa27x.c +4 -0
@@ -398,6 +398,11 @@ void __init pxa27x_init_irq(void)
 	pxa_init_irq(34, pxa27x_set_wake);
 }
 
+void __init pxa27x_dt_init_irq(void)
+{
+	pxa_dt_irq_init(pxa27x_set_wake);
+}

Should this also add a user of this function?

Mark.

Quoted 13 lines
arch/arm/mach-pxa/pxa27x.c +1 -0
+
 static struct map_desc pxa27x_io_desc[] __initdata = {
 	{	/* Mem Ctl */
 		.virtual	= (unsigned long)SMEMC_VIRT,
Signature · 7 lines
2.1.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
author maintainer
#3 lore raw

PATCH v2 1/4 arm: pxa: add device-tree irq init for pxa27x

Quoted 16 lines · Mark Rutland
Quoted 15 lines · Robert Jarzmik

Add the initializer for irqs in a device-tree machine on a pxa27x.

---
 arch/arm/mach-pxa/pxa27x.c | 5 +++++
 1 file changed, 5 insertions(+)
arch/arm/mach-pxa/pxa27x.c +0 -0
index b040d7d..8ca62e2 100644
@@ -398,6 +398,11 @@ void __init pxa27x_init_irq(void)
 	pxa_init_irq(34, pxa27x_set_wake);
 }
 
Quoted 6 lines

arch/arm/mach-pxa/pxa27x.c void __init pxa27x_init_irq(void) · line 404

Quoted 4 lines
arch/arm/mach-pxa/pxa27x.c +4 -0
+void __init pxa27x_dt_init_irq(void)
+{
+	pxa_dt_irq_init(pxa27x_set_wake);
+}

Should this also add a user of this function?

Well, patches 1, 2, 3 are preparing patch 4.
And patch 4 is adding the user of this function.

I could meld this in patch 4, but it looks cleaner for me to split the function creation, and pxa27x dt support in 2 distinct patches.

Cheers

--
Robert

author maintainer
#4 lore raw

PATCH v2 2/4 arm: pxa: move init functions into generic.h

In reply to Robert Jarzmik

In order to have a unique .c file for all pxa variants device-tree definitions, all the initialization functions for MACHINE_START and DT_MACHINE_START have been put together into generic.h.

The alternative would have been one pxaXXX-dt.c file per variant.

The move is necessary because each include/mach/pxaXXX.h includes the variant register descriptions which intersects and conflicts one with each other.

The change is a preparation for pxa-dt.c to support multiple pxa, ie. pxa3xx and pxa27x.

The machine files including mach/pxaXXX.h all include generic.h, which guarantees no regression should be introduced.

---
Since v1: Arnd's review:
- removed some ifdefs for function prototypes
- moved ifdefs for get_freq_XXX() to the end for future removal

---
 arch/arm/mach-pxa/generic.h             | 65 +++++++++++++++++++++------------
 arch/arm/mach-pxa/include/mach/pxa25x.h |  8 ----
 arch/arm/mach-pxa/include/mach/pxa27x.h |  4 --
 arch/arm/mach-pxa/include/mach/pxa3xx.h |  5 ---
 4 files changed, 42 insertions(+), 40 deletions(-)
arch/arm/mach-pxa/generic.h +42 -23
index 8963984..7a9fa1a 100644
@@ -13,11 +13,11 @@
 
 struct irq_data;
 
-extern void pxa_timer_init(void);
-
-extern void __init pxa_map_io(void);
-
 extern unsigned int get_clk_frequency_khz(int info);
+extern void __init pxa_dt_irq_init(int (*fn)(struct irq_data *,
+					     unsigned int));
+extern void __init pxa_map_io(void);
+extern void pxa_timer_init(void);
 
 #define SET_BANK(__nr,__start,__size) \
 	mi->bank[__nr].start = (__start), \
@@ -25,6 +25,43 @@ extern unsigned int get_clk_frequency_khz(int info);
 
 #define ARRAY_AND_SIZE(x)	(x), ARRAY_SIZE(x)
 
+#define pxa25x_handle_irq icip_handle_irq
+extern void __init pxa25x_init_irq(void);
+extern void __init pxa25x_map_io(void);
+extern void __init pxa26x_init_irq(void);
+
+#define pxa27x_handle_irq ichp_handle_irq
+extern void __init pxa27x_dt_init_irq(void);
+extern unsigned	pxa27x_get_clk_frequency_khz(int);
+extern void __init pxa27x_init_irq(void);
+extern void __init pxa27x_map_io(void);
+
+#define pxa3xx_handle_irq ichp_handle_irq
+extern void __init pxa3xx_dt_init_irq(void);
+extern void __init pxa3xx_init_irq(void);
+extern void __init pxa3xx_map_io(void);
+
+extern struct syscore_ops pxa_irq_syscore_ops;
+extern struct syscore_ops pxa2xx_mfp_syscore_ops;
+extern struct syscore_ops pxa3xx_mfp_syscore_ops;
+
+void __init pxa_set_ffuart_info(void *info);
+void __init pxa_set_btuart_info(void *info);
+void __init pxa_set_stuart_info(void *info);
+void __init pxa_set_hwuart_info(void *info);
+
+void pxa_restart(enum reboot_mode, const char *);
+
+#if defined(CONFIG_PXA25x) || defined(CONFIG_PXA27x)
+extern void pxa2xx_clear_reset_status(unsigned int);
+#else
+static inline void pxa2xx_clear_reset_status(unsigned int mask) {}
+#endif
+
+/*
+ * Once fully converted to the clock framework, all these functions should be
+ * removed, and replaced with a clk_get(NULL, "core").
+ */
 #ifdef CONFIG_PXA25x
 extern unsigned pxa25x_get_clk_frequency_khz(int);
 #else
@@ -32,30 +69,12 @@ extern unsigned pxa25x_get_clk_frequency_khz(int);
 #endif
 
 #ifdef CONFIG_PXA27x
-extern unsigned pxa27x_get_clk_frequency_khz(int);
 #else
 #define pxa27x_get_clk_frequency_khz(x)		(0)
 #endif
 
-#if defined(CONFIG_PXA25x) || defined(CONFIG_PXA27x)
-extern void pxa2xx_clear_reset_status(unsigned int);
-#else
-static inline void pxa2xx_clear_reset_status(unsigned int mask) {}
-#endif
-
 #ifdef CONFIG_PXA3xx
-extern unsigned pxa3xx_get_clk_frequency_khz(int);
+extern unsigned	pxa3xx_get_clk_frequency_khz(int);
 #else
 #define pxa3xx_get_clk_frequency_khz(x)		(0)
 #endif
-
-extern struct syscore_ops pxa_irq_syscore_ops;
-extern struct syscore_ops pxa2xx_mfp_syscore_ops;
-extern struct syscore_ops pxa3xx_mfp_syscore_ops;
-
-void __init pxa_set_ffuart_info(void *info);
-void __init pxa_set_btuart_info(void *info);
-void __init pxa_set_stuart_info(void *info);
-void __init pxa_set_hwuart_info(void *info);
-
-void pxa_restart(enum reboot_mode, const char *);
arch/arm/mach-pxa/include/mach/pxa25x.h +0 -8
index 3ac0baa..5a34175 100644
@@ -6,12 +6,4 @@
 #include <mach/mfp-pxa25x.h>
 #include <mach/irqs.h>
 
-extern void __init pxa25x_map_io(void);
-extern void __init pxa25x_init_irq(void);
-#ifdef CONFIG_CPU_PXA26x
-extern void __init pxa26x_init_irq(void);
-#endif
-
-#define pxa25x_handle_irq	icip_handle_irq
-
 #endif /* __MACH_PXA25x_H */
arch/arm/mach-pxa/include/mach/pxa27x.h +0 -4
index 7cff640..599b925 100644
@@ -19,11 +19,7 @@
 #define ARB_CORE_PARK		(1<<24)	   /* Be parked with core when idle */
 #define ARB_LOCK_FLAG		(1<<23)	   /* Only Locking masters gain access to the bus */
 
-extern void __init pxa27x_map_io(void);
-extern void __init pxa27x_init_irq(void);
 extern int __init pxa27x_set_pwrmode(unsigned int mode);
 extern void pxa27x_cpu_pm_enter(suspend_state_t state);
 
-#define pxa27x_handle_irq	ichp_handle_irq
-
 #endif /* __MACH_PXA27x_H */
arch/arm/mach-pxa/include/mach/pxa3xx.h +0 -5
index 6dd7fa1..b4143fb 100644
@@ -5,9 +5,4 @@
 #include <mach/pxa3xx-regs.h>
 #include <mach/irqs.h>
 
-extern void __init pxa3xx_map_io(void);
-extern void __init pxa3xx_init_irq(void);
-
-#define pxa3xx_handle_irq	ichp_handle_irq
-
 #endif /* __MACH_PXA3XX_H */
Signature · 1 line
2.1.0
author maintainer
#5 lore raw

PATCH v2 3/4 arm: pxa: remove unecessary includes from pxa-dt

In reply to Robert Jarzmik

As the init functions necessary for machine init have moved to generic.h, remove the unecessary includes and prototypes definitions from pxa-dt.c.

This removes the include of mach/pxaXXX-regs.h, and make pxa-dt generic enough to accept other pxa variants.

---
 arch/arm/mach-pxa/pxa-dt.c | 3 ---
 1 file changed, 3 deletions(-)
arch/arm/mach-pxa/pxa-dt.c +0 -3
index f6a2c4b..b070196 100644
@@ -15,13 +15,10 @@
 #include <asm/mach/arch.h>
 #include <asm/mach/time.h>
 #include <mach/irqs.h>
-#include <mach/pxa3xx.h>
 
 #include "generic.h"
 
 #ifdef CONFIG_PXA3xx
-extern void __init pxa3xx_dt_init_irq(void);
-
 static const struct of_dev_auxdata pxa3xx_auxdata_lookup[] __initconst = {
 	OF_DEV_AUXDATA("mrvl,pxa-uart",		0x40100000, "pxa2xx-uart.0", NULL),
 	OF_DEV_AUXDATA("mrvl,pxa-uart",		0x40200000, "pxa2xx-uart.1", NULL),
Signature · 1 line
2.1.0
author maintainer
#6 lore raw

PATCH v2 4/4 arm: pxa: add pxa27x device-tree support

In reply to Robert Jarzmik

Add a device-tree machine entry (DT_MACHINE_START) for pxa27x based platforms.

---
 arch/arm/mach-pxa/Kconfig  | 11 +++++++++++
 arch/arm/mach-pxa/Makefile |  1 +
 arch/arm/mach-pxa/pxa-dt.c | 15 +++++++++++++++
 3 files changed, 27 insertions(+)
arch/arm/mach-pxa/Kconfig +11 -0
index e6690a4..83efe91 100644
@@ -4,6 +4,17 @@ menu "Intel PXA2xx/PXA3xx Implementations"
 
 comment "Intel/Marvell Dev Platforms (sorted by hardware release time)"
 
+config MACH_PXA27X_DT
+	bool "Support PXA27x platforms from device tree"
+	select CPU_PXA27x
+	select POWER_SUPPLY
+	select PXA27x
+	select USE_OF
+	help
+	  Include support for Marvell PXA27x based platforms using
+	  the device tree. Needn't select any other machine while
+	  MACH_PXA27X_DT is enabled.
+
 config MACH_PXA3XX_DT
 	bool "Support PXA3xx platforms from device tree"
 	select CPU_PXA300
arch/arm/mach-pxa/Makefile +1 -0
index 2fe1824..eb0bf76 100644
@@ -21,6 +21,7 @@ obj-$(CONFIG_CPU_PXA930)	+= pxa930.o
 
 # Device Tree support
 obj-$(CONFIG_MACH_PXA3XX_DT)	+= pxa-dt.o
+obj-$(CONFIG_MACH_PXA27X_DT)	+= pxa-dt.o
 
 # Intel/Marvell Dev Platforms
 obj-$(CONFIG_ARCH_LUBBOCK)	+= lubbock.o
arch/arm/mach-pxa/pxa-dt.c +15 -0
index b070196..7e0e5bd 100644
@@ -58,3 +58,18 @@ DT_MACHINE_START(PXA_DT, "Marvell PXA3xx (Device Tree Support)")
 	.dt_compat	= pxa3xx_dt_board_compat,
 MACHINE_END
 #endif
+
+#ifdef CONFIG_PXA27x
+static const char * const pxa27x_dt_board_compat[] __initconst = {
+	"marvell,pxa270",
+	NULL,
+};
+
+DT_MACHINE_START(PXA27X_DT, "Marvell PXA2xx (Device Tree Support)")
+	.map_io		= pxa27x_map_io,
+	.init_irq	= pxa27x_dt_init_irq,
+	.handle_irq	= pxa27x_handle_irq,
+	.restart	= pxa_restart,
+	.dt_compat	= pxa27x_dt_board_compat,
+MACHINE_END
+#endif
Signature · 1 line
2.1.0
author maintainer
#7 lore raw

v2 cover Add support for pxa27x device-tree machine

In reply to Robert Jarzmik
Quoted 8 lines · Robert Jarzmik

Hi,

This is the second version of this patchset, to provide a device-tree machine support for pxa27x.

Since latest review by Arnd :
- patches 1, 3 and 4 were ok
- patch 2 was respined

Okay, let's see where we stand.
Mark, do my answer on patch 1/4 was good enough, or would you rather have patch 1/4 melt into patch 4/4 ? I don't care going one way or the other around, so just tell me.

Arnd, if the patches are good to go, could I have an ack ?

Cheers.

--
Robert

#8 lore raw

v2 cover Add support for pxa27x device-tree machine

Quoted 11 lines · On Thursday 30 October 2014 07:55:48 Robert Jarzmik wrote:
Quoted 8 lines · Robert Jarzmik

Hi,

This is the second version of this patchset, to provide a device-tree machine support for pxa27x.

Since latest review by Arnd :
- patches 1, 3 and 4 were ok
- patch 2 was respined

Quoted 6 lines

Okay, let's see where we stand.
Mark, do my answer on patch 1/4 was good enough, or would you rather have patch 1/4 melt into patch 4/4 ? I don't care going one way or the other around, so just tell me.

Arnd, if the patches are good to go, could I have an ack ?

Whole series

author maintainer
#9 lore raw

v2 cover Add support for pxa27x device-tree machine

Quoted 4 lines · Arnd Bergmann

On Thursday 30 October 2014 07:55:48 Robert Jarzmik wrote:
Whole series

Thanks Arnd.

Unfortunately my checkers caught a flaw in the non-device tree case :
- pxa27x_dt_init_irq() is defined, even if unused
- it calls pxa_dt_irq_init(), which is conditionaly defined on CONFIG_OF => breaks non DT builds

So I'll have to enclose this function in a #if defined(CONFIG_OF), and respin patch 1.

Cheers.

Signature · 1 line
Robert
#10 lore raw

v2 cover Add support for pxa27x device-tree machine

Quoted 8 lines · On Monday 03 November 2014 08:32:57 Robert Jarzmik wrote:
Quoted 4 lines · Arnd Bergmann

On Thursday 30 October 2014 07:55:48 Robert Jarzmik wrote:
Whole series

Thanks Arnd.

Quoted 7 lines

Unfortunately my checkers caught a flaw in the non-device tree case :
- pxa27x_dt_init_irq() is defined, even if unused
- it calls pxa_dt_irq_init(), which is conditionaly defined on CONFIG_OF => breaks non DT builds

So I'll have to enclose this function in a #if defined(CONFIG_OF), and respin patch 1.

Please make it use

	if (IS_ENABLED(CONFIG_OF))
		pxa_dt_irq_init(pxa27x_set_wake);

so we get the build-time coverage.

Arnd