Message ID | bdd7c02a561bc0655e9dfd4586f42774f2347ca1.1312560476.git.nicolas.ferre@atmel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Aug 05, 2011 at 05:24:53PM +0100, Nicolas Ferre wrote: > Add basic device tree support for at91sam9g45 SoC family and the > at91sam9m10g45ek board. > DT is been used to describe the at91sam9g45 SoC memory and AIC. It also > adds the dmaengine driver. > > Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Hi Nicolas, Looks like a great start. I was glad we could work on this last week. Some comments below. > --- > arch/arm/mach-at91/Kconfig | 8 ++++++ > arch/arm/mach-at91/Makefile.boot | 2 + > arch/arm/mach-at91/at91sam9g45_devices.c | 3 +- > arch/arm/mach-at91/board-sam9m10g45ek.c | 36 ++++++++++++++++++++++++++++++ > 4 files changed, 48 insertions(+), 1 deletions(-) > > diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig > index 2248467..973c725 100644 > --- a/arch/arm/mach-at91/Kconfig > +++ b/arch/arm/mach-at91/Kconfig > @@ -407,6 +407,14 @@ config MACH_AT91SAM9M10G45EK > "ES" at the end of the name means that this board is an > Engineering Sample. > > +config MACH_AT91SAM9M10G45EK_DT > + bool "Atmel AT91SAM9M10G45-EK Evaluation Kits with device-tree support" > + select USE_OF > + select MACH_AT91SAM9M10G45EK > + help > + Select this if you want to experiment device-tree with > + Atmel's AT91SAM9M10G45-EK Evaluation Kit. > + Now, while I push strongly for .dts files to avoid 'generic' specification, the actual board support code should try to be as generic as possible. You may want to consider naming this "MACH_AT91_DT" here. (more below) > endif > > # ---------------------------------------------------------- > diff --git a/arch/arm/mach-at91/Makefile.boot b/arch/arm/mach-at91/Makefile.boot > index 3462b81..78d384f 100644 > --- a/arch/arm/mach-at91/Makefile.boot > +++ b/arch/arm/mach-at91/Makefile.boot > @@ -16,3 +16,5 @@ else > params_phys-y := 0x20000100 > initrd_phys-y := 0x20410000 > endif > + > +dtb-$(CONFIG_MACH_AT91SAM9M10G45EK_DT) += at91sam9m10g45ek.dtb > diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c > index 600bffb..ff3b7fc 100644 > --- a/arch/arm/mach-at91/at91sam9g45_devices.c > +++ b/arch/arm/mach-at91/at91sam9g45_devices.c > @@ -35,7 +35,8 @@ > * HDMAC - AHB DMA Controller > * -------------------------------------------------------------------- */ > > -#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE) > +#if (defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)) \ > + && !defined(CONFIG_OF) You'll need to rework this. Turning on CONFIG_OF should not disable booting using the old method. > static u64 hdmac_dmamask = DMA_BIT_MASK(32); > > static struct at_dma_platform_data atdma_pdata = { > diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c > index ad234cc..99e8617 100644 > --- a/arch/arm/mach-at91/board-sam9m10g45ek.c > +++ b/arch/arm/mach-at91/board-sam9m10g45ek.c > @@ -26,6 +26,10 @@ > #include <linux/clk.h> > #include <linux/atmel-mci.h> > > +#include <linux/irqdomain.h> > +#include <linux/of_irq.h> > +#include <linux/of_platform.h> device tree #includes are no different from other includes, You can mis them in with the rest of the linux/ #include statements. > + > #include <mach/hardware.h> > #include <video/atmel_lcdc.h> > > @@ -413,6 +417,38 @@ static void __init ek_board_init(void) > at91_pwm_leds(ek_pwm_led, ARRAY_SIZE(ek_pwm_led)); > } > > +#if defined(CONFIG_OF) > +static const struct of_device_id aic_of_match[] __initconst = { > + { .compatible = "atmel,aic", }, > + {}, > +}; > + > +static void __init at91sam9g45_dt_device_init(void) > +{ > + irq_domain_generate_simple(aic_of_match, 0xfffff000, 0); > + > + of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); > + > + /* remaining initialization */ > + ek_board_init(void) > +} Following from my comment earlier, this is fine for the proof of concept, but it isn't ready for mainline. For mainline you'll need to get enough devices working with DT to boot the board without calling (ek_board_init()), and then add a new board file which only calls of_platform_populate(). To get started, you'll probably only need serial working. Other driver can be fixed up one at a time until the DT support is at the same level as the old board files. At that point the old method can be removed from the tree without any regressions. g.
On 08/07/2011 04:57 AM, Grant Likely wrote: > On Fri, Aug 05, 2011 at 05:24:53PM +0100, Nicolas Ferre wrote: >> Add basic device tree support for at91sam9g45 SoC family and the >> at91sam9m10g45ek board. >> DT is been used to describe the at91sam9g45 SoC memory and AIC. It also >> adds the dmaengine driver. >> >> Signed-off-by: Nicolas Ferre<nicolas.ferre@atmel.com> > > Hi Nicolas, > > Looks like a great start. I was glad we could work on this last week. Yes, that was enriching. > Some comments below. I will have to rework this series for sure but I have limited access to my git tree/emails this week... I plan to come back to this next week. >> --- >> arch/arm/mach-at91/Kconfig | 8 ++++++ >> arch/arm/mach-at91/Makefile.boot | 2 + >> arch/arm/mach-at91/at91sam9g45_devices.c | 3 +- >> arch/arm/mach-at91/board-sam9m10g45ek.c | 36 ++++++++++++++++++++++++++++++ >> 4 files changed, 48 insertions(+), 1 deletions(-) [..] Best regards,
diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig index 2248467..973c725 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig @@ -407,6 +407,14 @@ config MACH_AT91SAM9M10G45EK "ES" at the end of the name means that this board is an Engineering Sample. +config MACH_AT91SAM9M10G45EK_DT + bool "Atmel AT91SAM9M10G45-EK Evaluation Kits with device-tree support" + select USE_OF + select MACH_AT91SAM9M10G45EK + help + Select this if you want to experiment device-tree with + Atmel's AT91SAM9M10G45-EK Evaluation Kit. + endif # ---------------------------------------------------------- diff --git a/arch/arm/mach-at91/Makefile.boot b/arch/arm/mach-at91/Makefile.boot index 3462b81..78d384f 100644 --- a/arch/arm/mach-at91/Makefile.boot +++ b/arch/arm/mach-at91/Makefile.boot @@ -16,3 +16,5 @@ else params_phys-y := 0x20000100 initrd_phys-y := 0x20410000 endif + +dtb-$(CONFIG_MACH_AT91SAM9M10G45EK_DT) += at91sam9m10g45ek.dtb diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index 600bffb..ff3b7fc 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c @@ -35,7 +35,8 @@ * HDMAC - AHB DMA Controller * -------------------------------------------------------------------- */ -#if defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE) +#if (defined(CONFIG_AT_HDMAC) || defined(CONFIG_AT_HDMAC_MODULE)) \ + && !defined(CONFIG_OF) static u64 hdmac_dmamask = DMA_BIT_MASK(32); static struct at_dma_platform_data atdma_pdata = { diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c index ad234cc..99e8617 100644 --- a/arch/arm/mach-at91/board-sam9m10g45ek.c +++ b/arch/arm/mach-at91/board-sam9m10g45ek.c @@ -26,6 +26,10 @@ #include <linux/clk.h> #include <linux/atmel-mci.h> +#include <linux/irqdomain.h> +#include <linux/of_irq.h> +#include <linux/of_platform.h> + #include <mach/hardware.h> #include <video/atmel_lcdc.h> @@ -413,6 +417,38 @@ static void __init ek_board_init(void) at91_pwm_leds(ek_pwm_led, ARRAY_SIZE(ek_pwm_led)); } +#if defined(CONFIG_OF) +static const struct of_device_id aic_of_match[] __initconst = { + { .compatible = "atmel,aic", }, + {}, +}; + +static void __init at91sam9g45_dt_device_init(void) +{ + irq_domain_generate_simple(aic_of_match, 0xfffff000, 0); + + of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); + + /* remaining initialization */ + ek_board_init(void) +} + +static const char *at91_dt_board_compat[] __initdata = { + "atmel,at91sam9m10g45ek", + NULL +}; + +DT_MACHINE_START(at91sam9m10g45ek_dt, "Atmel AT91SAM9M10G45-EK (Device Tree)") + /* Maintainer: Atmel */ + .timer = &at91sam926x_timer, + .map_io = at91_map_io, + .init_early = ek_init_early, + .init_irq = at91_init_irq_default, + .init_machine = at91sam9g45_dt_device_init, + .dt_compat = at91_dt_board_compat, +MACHINE_END +#endif + MACHINE_START(AT91SAM9M10G45EK, "Atmel AT91SAM9M10G45-EK") /* Maintainer: Atmel */ .timer = &at91sam926x_timer,
Add basic device tree support for at91sam9g45 SoC family and the at91sam9m10g45ek board. DT is been used to describe the at91sam9g45 SoC memory and AIC. It also adds the dmaengine driver. Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> --- arch/arm/mach-at91/Kconfig | 8 ++++++ arch/arm/mach-at91/Makefile.boot | 2 + arch/arm/mach-at91/at91sam9g45_devices.c | 3 +- arch/arm/mach-at91/board-sam9m10g45ek.c | 36 ++++++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 1 deletions(-)