diff mbox

[6/7] ARM: pxa3xx: add generic DT machine code

Message ID 1343233066-15397-7-git-send-email-zonque@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Daniel Mack July 25, 2012, 4:17 p.m. UTC
Add a DT_MACHINE_START entry for PXA3xx machines and a auxdata table for
some of the devices. This file can be extended to also support pxa2xx
boards.

Signed-off-by: Daniel Mack <zonque@gmail.com>
---
 arch/arm/mach-pxa/Kconfig  |   12 +++++++++
 arch/arm/mach-pxa/Makefile |    3 +++
 arch/arm/mach-pxa/pxa-dt.c |   61 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 76 insertions(+)
 create mode 100644 arch/arm/mach-pxa/pxa-dt.c

Comments

Arnd Bergmann July 25, 2012, 5:34 p.m. UTC | #1
On Wednesday 25 July 2012, Daniel Mack wrote:
> Add a DT_MACHINE_START entry for PXA3xx machines and a auxdata table for
> some of the devices. This file can be extended to also support pxa2xx
> boards.
> 
> Signed-off-by: Daniel Mack <zonque@gmail.com>
> ---
>  arch/arm/mach-pxa/Kconfig  |   12 +++++++++
>  arch/arm/mach-pxa/Makefile |    3 +++
>  arch/arm/mach-pxa/pxa-dt.c |   61 ++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 76 insertions(+)

The code looks good, but I wonder if it would be better to add it to the pxa3xx.c
file instead. One more comment:


> +static const char *pxa3xx_dt_board_compat[] __initdata = {
> +       "mrvl,pxa3xx",
> +};

We should try to avoid wildcards in compatible properties but rather be
more specific. I would use separate values for pxa300/310/320/920/930/935
that you could all list here if they have the same auxdata lookup table.

	Arnd
Daniel Mack July 25, 2012, 6:07 p.m. UTC | #2
On 25.07.2012 19:34, Arnd Bergmann wrote:
> On Wednesday 25 July 2012, Daniel Mack wrote:
>> Add a DT_MACHINE_START entry for PXA3xx machines and a auxdata table for
>> some of the devices. This file can be extended to also support pxa2xx
>> boards.
>>
>> Signed-off-by: Daniel Mack <zonque@gmail.com>
>> ---
>>  arch/arm/mach-pxa/Kconfig  |   12 +++++++++
>>  arch/arm/mach-pxa/Makefile |    3 +++
>>  arch/arm/mach-pxa/pxa-dt.c |   61 ++++++++++++++++++++++++++++++++++++++++++++
>>  3 files changed, 76 insertions(+)
> 
> The code looks good, but I wonder if it would be better to add it to the pxa3xx.c
> file instead. One more comment:

Well, I though having tham separated from the generic code will make
things cleaner and also save us one #ifdef.

>> +static const char *pxa3xx_dt_board_compat[] __initdata = {
>> +       "mrvl,pxa3xx",
>> +};
> 
> We should try to avoid wildcards in compatible properties but rather be
> more specific. I would use separate values for pxa300/310/320/920/930/935
> that you could all list here if they have the same auxdata lookup table.

Ok, makes sense. I'm not sure about 920/930/935, so I'll leave them out
for now. Whoever successfully tests these can easly add that lines.

I'll wait for some more feedback and then resubmit the whole thing.


Thanks for the review, much appreciated.


Daniel
Arnd Bergmann July 25, 2012, 7:04 p.m. UTC | #3
On Wednesday 25 July 2012, Daniel Mack wrote:
> On 25.07.2012 19:34, Arnd Bergmann wrote:
> > On Wednesday 25 July 2012, Daniel Mack wrote:
> >> Add a DT_MACHINE_START entry for PXA3xx machines and a auxdata table for
> >> some of the devices. This file can be extended to also support pxa2xx
> >> boards.
> >>
> >> Signed-off-by: Daniel Mack <zonque@gmail.com>
> >> ---
> >>  arch/arm/mach-pxa/Kconfig  |   12 +++++++++
> >>  arch/arm/mach-pxa/Makefile |    3 +++
> >>  arch/arm/mach-pxa/pxa-dt.c |   61 ++++++++++++++++++++++++++++++++++++++++++++
> >>  3 files changed, 76 insertions(+)
> > 
> > The code looks good, but I wonder if it would be better to add it to the pxa3xx.c
> > file instead. One more comment:
> 
> Well, I though having tham separated from the generic code will make
> things cleaner and also save us one #ifdef.

For new platforms that are DT-only we usually keep everything in one file,
but you're right that it makes some sense to have it separate while most
people use non-DT board files.

> >> +static const char *pxa3xx_dt_board_compat[] __initdata = {
> >> +       "mrvl,pxa3xx",
> >> +};
> > 
> > We should try to avoid wildcards in compatible properties but rather be
> > more specific. I would use separate values for pxa300/310/320/920/930/935
> > that you could all list here if they have the same auxdata lookup table.
> 
> Ok, makes sense. I'm not sure about 920/930/935, so I'll leave them out
> for now. Whoever successfully tests these can easly add that lines.

Sounds good.

	Arnd
diff mbox

Patch

diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
index fe2d1f8..8e6288d 100644
--- a/arch/arm/mach-pxa/Kconfig
+++ b/arch/arm/mach-pxa/Kconfig
@@ -25,6 +25,18 @@  config PXA_V7_MACH_AUTO
 if !ARCH_PXA_V7
 comment "Intel/Marvell Dev Platforms (sorted by hardware release time)"
 
+config MACH_PXA3XX_DT
+	bool "Support PXA3xx platforms from device tree"
+	select PXA3xx
+	select CPU_PXA300
+	select POWER_SUPPLY
+	select HAVE_PWM
+	select USE_OF
+	help
+	  Include support for Marvell PXA3xx based platforms using
+	  the device tree. Needn't select any other machine while
+	  MACH_PXA3XX_DT is enabled.
+
 config ARCH_LUBBOCK
 	bool "Intel DBPXA250 Development Platform (aka Lubbock)"
 	select PXA25x
diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
index be0f7df..2bedc9e 100644
--- a/arch/arm/mach-pxa/Makefile
+++ b/arch/arm/mach-pxa/Makefile
@@ -26,6 +26,9 @@  obj-$(CONFIG_CPU_PXA930)	+= pxa930.o
 
 # NOTE: keep the order of boards in accordance to their order in Kconfig
 
+# Device Tree support
+obj-$(CONFIG_MACH_PXA3XX_DT)	+= pxa-dt.o
+
 # Intel/Marvell Dev Platforms
 obj-$(CONFIG_ARCH_LUBBOCK)	+= lubbock.o
 obj-$(CONFIG_MACH_MAINSTONE)	+= mainstone.o
diff --git a/arch/arm/mach-pxa/pxa-dt.c b/arch/arm/mach-pxa/pxa-dt.c
new file mode 100644
index 0000000..b46618e
--- /dev/null
+++ b/arch/arm/mach-pxa/pxa-dt.c
@@ -0,0 +1,61 @@ 
+/*
+ *  linux/arch/arm/mach-pxa/pxa-dt.c
+ *
+ *  Copyright (C) 2012 Daniel Mack
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  publishhed by the Free Software Foundation.
+ */
+
+#include <linux/irq.h>
+#include <linux/irqdomain.h>
+#include <linux/of_irq.h>
+#include <linux/of_platform.h>
+#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),
+	OF_DEV_AUXDATA("mrvl,pxa-uart",		0x40700000, "pxa2xx-uart.2", NULL),
+	OF_DEV_AUXDATA("mrvl,pxa-uart",		0x41600000, "pxa2xx-uart.3", NULL),
+	OF_DEV_AUXDATA("mrvl,pxa-mmc",		0x41100000, "pxa2xx-mci.0", NULL),
+	OF_DEV_AUXDATA("mrvl,pxa-gpio",		0x40e00000, "pxa-gpio", NULL),
+	OF_DEV_AUXDATA("mrvl,pxa-ohci",		0x4c000000, "pxa27x-ohci", NULL),
+	OF_DEV_AUXDATA("mrvl,pxa-i2c",		0x40301680, "pxa2xx-i2c.0", NULL),
+	OF_DEV_AUXDATA("mrvl,pwri2c",		0x40f500c0, "pxa3xx-i2c.1", NULL),
+	OF_DEV_AUXDATA("mrvl,pxa3xx-nand",	0x43100000, "pxa3xx-nand", NULL),
+	{}
+};
+
+static void __init pxa3xx_dt_init(void)
+{
+	of_platform_populate(NULL, of_default_bus_match_table,
+			     pxa3xx_auxdata_lookup, NULL);
+}
+
+static const char *pxa3xx_dt_board_compat[] __initdata = {
+	"mrvl,pxa3xx",
+	NULL,
+};
+#endif
+
+#ifdef CONFIG_PXA3xx
+DT_MACHINE_START(PXA_DT, "Marvell PXA3xx (Device Tree Support)")
+	.map_io		= pxa3xx_map_io,
+	.init_irq	= pxa3xx_dt_init_irq,
+	.handle_irq	= pxa3xx_handle_irq,
+	.timer		= &pxa_timer,
+	.restart	= pxa_restart,
+	.init_machine	= pxa3xx_dt_init,
+	.dt_compat	= pxa3xx_dt_board_compat,
+MACHINE_END
+#endif