On Fri, Jul 08, 2011 at 06:20:28PM +0800, Haojian Zhuang wrote: > Add DTS file to support brownstone & ttc-dkb. > > Signed-off-by: Haojian Zhuang <haojian.zhu...@marvell.com>
Hi Haojian. Overall, the patch series is moving in the right direction. I've made a lot of comments, but they shouldn't be difficult to resolve. I look forward to seeing the next version of the series. Comments below... > --- > arch/arm/boot/dts/mmp2-brownstone.dts | 319 > +++++++++++++++++++++++++++++++++ > arch/arm/boot/dts/ttc-dkb.dts | 176 ++++++++++++++++++ > arch/arm/mach-mmp/brownstone.c | 66 ++----- > arch/arm/mach-mmp/ttc_dkb.c | 21 ++- > 4 files changed, 530 insertions(+), 52 deletions(-) > create mode 100644 arch/arm/boot/dts/mmp2-brownstone.dts > create mode 100644 arch/arm/boot/dts/ttc-dkb.dts > > diff --git a/arch/arm/boot/dts/mmp2-brownstone.dts > b/arch/arm/boot/dts/mmp2-brownstone.dts > new file mode 100644 > index 0000000..5fdabc3 > --- /dev/null > +++ b/arch/arm/boot/dts/mmp2-brownstone.dts > @@ -0,0 +1,319 @@ > +/dts-v1/; > + > +/include/ "skeleton.dtsi" > + > +/ { > + model = "Marvell MMP2 Brownstone"; > + compatible = "mrvl,mmp2-brownstone", "mrvl,armada610-brownstone"; You've already heard me harp on this, but I'll say it one more time and then shut up. Every new compatible property must be documented as to what it means. > + interrupt-parent = <&mmp_intc>; > + > + memory { > + reg = <0x00000000 0x20000000>; > + }; > + > + chosen { > + bootargs = "console=ttyS2,38400 root=/dev/nfs > nfsroot=192.168.1.100:192.168.1.101::255.255.255.0::eth0:on"; > + linux,stdout-path = &uart2; > + }; > + > + soc@d4000000 { > + compatible = "mrvl,mmp2", "mrvl,armada610", "simple-bus"; > + device_type = "soc"; Drop device_type. > + #address-cells = <1>; > + #size-cells = <1>; > + ranges; > + > + mmp_intc: interrupt-controller@d4282000 { > + compatible = "mrvl,mmp-intc"; > + /*device_type = "intc";*/ Even the commented out device_type should be removed. :-) > + interrupt-controller; > + #interrupt-cells = <1>; > + /* > + * interrupts: irq index of parent's irq domain > + */ > + interrupts = <0>; Drop this property. Linux gets to decide what the first irq should be. It isn't a characteristic of hardware, and 'interrupts' already has a strict definition. > + interrupt-parent = <&mmp_intc>; Drop this, it doesn't make sense for an interrupt controller to claim itself as its interrupt parent. > + sub-interrupts = <64>; What is this for? > + > + /* enable bits in conf register */ > + enable_mask = <0x20>; Convention is to not use underscore '_' in property names. Use a dash '-' instead. > + > + /* reg: <offset & size> */ > + reg = <0xd4282000 0x400>; > + }; > + > + mux_intc4: interrupt-controller@d4282150 { > + compatible = "mrvl,mux-intc"; > + #address-cells = <1>; > + #size-cells = <1>; > + #interrupt-cells = <1>; > + interrupt-controller; > + interrupts = <4>; > + interrupt-parent = <&mmp_intc>; This line can be dropped since the root node already has mmp_intc as the default interrupt parent. > + sub-interrupts = <2>; > + reg = <0xd4282150 0>; > + status-mask = <0x150 0x168>; > + /* mfp register & interrupt index */ > + mfp-edge-interrupt = <0xd401e2c4 1>; > + }; [...] > + gpio: gpio-controller { > + compatible = "pxa,gpio"; mrvl,pxa255-gpio, or similar. > + gpio-controller; > + reg = < > + 0xd4019000 0xb0 > + 0xd4019004 0xb0 > + 0xd4019008 0xb0 > + 0xd4019100 0xb0 > + 0xd4019104 0xb0 > + 0xd4019108 0xb0>; This looks wrong. The address ranges overlap. Why not simply: <0xd4019000 0x200>; > + > + /* gpio-clk-value: <offset & value> */ > + gpio-clk-value = <0xd4015038 0x3>; > + > + /* gpio-mask: <offset & value> */ > + gpio-mask = < > + 0xd401909c 0xffffffff > + 0xd40190a0 0xffffffff > + 0xd40190a4 0xffffffff > + 0xd401919c 0xffffffff > + 0xd40191a0 0xffffffff > + 0xd40191a4 0xffffffff>; > + gpio-pins = <0 192>; > + #interrupt-cells = <1>; > + interrupt-controller; > + interrupts = <49>; > + interrupt-parent = <&mmp_intc>; > + sub-interrupts = <192>; > + }; [...] > diff --git a/arch/arm/mach-mmp/brownstone.c b/arch/arm/mach-mmp/brownstone.c > index 7bb78fd..c9848ad 100644 > --- a/arch/arm/mach-mmp/brownstone.c > +++ b/arch/arm/mach-mmp/brownstone.c > @@ -12,6 +12,9 @@ > > #include <linux/init.h> > #include <linux/kernel.h> > +#include <linux/of.h> > +#include <linux/of_fdt.h> > +#include <linux/of_platform.h> > #include <linux/platform_device.h> > #include <linux/io.h> > #include <linux/gpio.h> > @@ -105,30 +108,6 @@ static unsigned long brownstone_pin_config[] __initdata > = { > GPIO89_GPIO, > }; > > -static struct regulator_consumer_supply max8649_supply[] = { > - REGULATOR_SUPPLY("vcc_core", NULL), > -}; > - > -static struct regulator_init_data max8649_init_data = { > - .constraints = { > - .name = "vcc_core range", > - .min_uV = 1150000, > - .max_uV = 1280000, > - .always_on = 1, > - .boot_on = 1, > - .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE, > - }, > - .num_consumer_supplies = 1, > - .consumer_supplies = &max8649_supply[0], > -}; > - > -static struct max8649_platform_data brownstone_max8649_info = { > - .mode = 2, /* VID1 = 1, VID0 = 0 */ > - .extclk = 0, > - .ramp_timing = MAX8649_RAMP_32MV, > - .regulator = &max8649_init_data, > -}; > - > static struct regulator_consumer_supply brownstone_v_5vp_supplies[] = { > REGULATOR_SUPPLY("v_5vp", NULL), > }; > @@ -158,47 +137,38 @@ static struct platform_device brownstone_v_5vp_device = > { > }, > }; > > -static struct max8925_platform_data brownstone_max8925_info = { > - .irq_base = IRQ_BOARD_START, > -}; > - > -static struct i2c_board_info brownstone_twsi1_info[] = { > - [0] = { > - .type = "max8649", > - .addr = 0x60, > - .platform_data = &brownstone_max8649_info, > - }, > - [1] = { > - .type = "max8925", > - .addr = 0x3c, > - .irq = IRQ_MMP2_PMIC, > - .platform_data = &brownstone_max8925_info, > - }, > -}; > - > static struct sdhci_pxa_platdata mmp2_sdh_platdata_mmc0 = { > .max_speed = 25000000, > }; > > +static __initdata struct of_device_id of_bus_ids[] = { > + { .compatible = "simple-bus", }, > + {}, > +}; > + > static void __init brownstone_init(void) > { > mfp_config(ARRAY_AND_SIZE(brownstone_pin_config)); > > - /* on-chip devices */ > - mmp2_add_uart(1); > - mmp2_add_uart(3); > - mmp2_add_twsi(1, NULL, ARRAY_AND_SIZE(brownstone_twsi1_info)); > + if (of_platform_bus_probe(NULL, of_bus_ids, NULL) < 0) > + BUG(); > + > mmp2_add_sdhost(0, &mmp2_sdh_platdata_mmc0); /* SD/MMC */ > > /* enable 5v regulator */ > platform_device_register(&brownstone_v_5vp_device); > } > > +static const char *brownstone_dt_match[] __initdata = { > + "mrvl,mmp2-brownstone", > + NULL, > +}; > + > MACHINE_START(BROWNSTONE, "Brownstone Development Platform") > /* Maintainer: Haojian Zhuang <haojian.zhu...@marvell.com> */ > .map_io = mmp_map_io, > - .nr_irqs = BROWNSTONE_NR_IRQS, > - .init_irq = mmp2_init_irq, > + .init_irq = mmp_init_intc, > .timer = &mmp2_timer, > .init_machine = brownstone_init, > + .dt_compat = brownstone_dt_match, > MACHINE_END I suggest instead of directly modifying the brownstone board file, create a new DT board file, make it support the brownstone and other boards, than then remove the old board files when the DT implementation is equal to the non-dt version. > diff --git a/arch/arm/mach-mmp/ttc_dkb.c b/arch/arm/mach-mmp/ttc_dkb.c > index e411039..c19b4dc 100644 > --- a/arch/arm/mach-mmp/ttc_dkb.c > +++ b/arch/arm/mach-mmp/ttc_dkb.c > @@ -10,6 +10,9 @@ > > #include <linux/init.h> > #include <linux/kernel.h> > +#include <linux/of.h> > +#include <linux/of_fdt.h> > +#include <linux/of_platform.h> > #include <linux/platform_device.h> > #include <linux/mtd/mtd.h> > #include <linux/mtd/partitions.h> > @@ -113,21 +116,31 @@ static struct platform_device *ttc_dkb_devices[] = { > &ttc_dkb_device_onenand, > }; > > +static __initdata struct of_device_id of_bus_ids[] = { > + { .compatible = "simple-bus", }, > + {}, > +}; > + > static void __init ttc_dkb_init(void) > { > mfp_config(ARRAY_AND_SIZE(ttc_dkb_pin_config)); > > - /* on-chip devices */ > - pxa910_add_uart(1); > + if (of_platform_bus_probe(NULL, of_bus_ids, NULL) < 0) > + BUG(); > > /* off-chip devices */ > platform_add_devices(ARRAY_AND_SIZE(ttc_dkb_devices)); > } > > +static const char *ttc_dkb_dt_match[] __initdata = { > + "mrvl,ttc-dkb", > + NULL, > +}; > + > MACHINE_START(TTC_DKB, "PXA910-based TTC_DKB Development Platform") > .map_io = mmp_map_io, > - .nr_irqs = TTCDKB_NR_IRQS, > - .init_irq = pxa910_init_irq, > + .init_irq = mmp_init_intc, > .timer = &pxa910_timer, > .init_machine = ttc_dkb_init, > + .dt_compat = ttc_dkb_dt_match, > MACHINE_END > -- > 1.5.6.5 > _______________________________________________ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss