diff mbox

[v2,1/9] ARM: PRIMA2: add CSR SiRFmarco device tree .dts

Message ID 1358315610-25001-1-git-send-email-Barry.Song@csr.com (mailing list archive)
State New, archived
Headers show

Commit Message

Barry Song Jan. 16, 2013, 5:53 a.m. UTC
From: Barry Song <Baohua.Song@csr.com>

SiRFmarco is a dual-core cortex-a9 SMP SoC from CSR. this patch
adds the .dtsi and a basic evb board .dts for it.

Signed-off-by: Barry Song <Baohua.Song@csr.com>
Cc: Mark Rutland <mark.rutland@arm.com>
---
 arch/arm/boot/dts/marco-evb.dts |   51 +++
 arch/arm/boot/dts/marco.dtsi    |  756 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 807 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/boot/dts/marco-evb.dts
 create mode 100644 arch/arm/boot/dts/marco.dtsi

Comments

Mark Rutland Jan. 16, 2013, 11:37 a.m. UTC | #1
Hello,

This looks pretty good. I've tried to give a more thorough review this time,
so hopefully these comments should be my last.

On Wed, Jan 16, 2013 at 05:53:27AM +0000, Barry Song wrote:
> From: Barry Song <Baohua.Song@csr.com>
>
> SiRFmarco is a dual-core cortex-a9 SMP SoC from CSR. this patch
> adds the .dtsi and a basic evb board .dts for it.
>
> Signed-off-by: Barry Song <Baohua.Song@csr.com>
> Cc: Mark Rutland <mark.rutland@arm.com>
> ---
>  arch/arm/boot/dts/marco-evb.dts |   51 +++
>  arch/arm/boot/dts/marco.dtsi    |  756 +++++++++++++++++++++++++++++++++++++++
>  2 files changed, 807 insertions(+), 0 deletions(-)
>  create mode 100644 arch/arm/boot/dts/marco-evb.dts
>  create mode 100644 arch/arm/boot/dts/marco.dtsi
>
> diff --git a/arch/arm/boot/dts/marco-evb.dts b/arch/arm/boot/dts/marco-evb.dts
> new file mode 100644
> index 0000000..4e68d3c
> --- /dev/null
> +++ b/arch/arm/boot/dts/marco-evb.dts
> @@ -0,0 +1,51 @@
> +/*
> + * DTS file for CSR SiRFmarco Evaluation Board
> + *
> + * Copyright (c) 2012 Cambridge Silicon Radio Limited, a CSR plc group company.
> + *
> + * Licensed under GPLv2 or later.
> + */
> +
> +/dts-v1/;
> +
> +/include/ "marco.dtsi"
> +
> +/ {
> +       model = "CSR SiRFmarco Evaluation Board";
> +       compatible = "sirf,marco", "sirf,marco-cb";

Shouldn't "sirf,marco-cb" come before "sirf,marco", so we have the most
specific match first?

It would also be nice if both compatible strings were documented.

> +
> +       memory {
> +               reg = <0x40000000 0x60000000>;
> +       };
> +
> +       axi {
> +               peri-iobg {
> +                       uart1: uart@cc060000 {
> +                               status = "okay";
> +                       };
> +                       i2c0: i2c@cc0e0000 {
> +                             status = "okay";
> +                             fpga-cpld@4d {
> +                                     compatible = "sirf,fpga-cpld";
> +                                     reg = <0x4d>;
> +                             };
> +                       };
> +                       spi1: spi@cc170000 {
> +                               status = "okay";
> +                               pinctrl-names = "default";
> +                               pinctrl-0 = <&spi1_pins_a>;
> +                               spi@0 {
> +                                       compatible = "spidev";
> +                                       reg = <0>;
> +                                       spi-max-frequency = <1000000>;
> +                               };
> +                       };
> +                       pci-iobg {
> +                               sd0: sdhci@cd000000 {
> +                                       bus-width = <8>;
> +                                       status = "okay";
> +                               };
> +                       };
> +               };
> +       };
> +};
> diff --git a/arch/arm/boot/dts/marco.dtsi b/arch/arm/boot/dts/marco.dtsi
> new file mode 100644
> index 0000000..d6bad50
> --- /dev/null
> +++ b/arch/arm/boot/dts/marco.dtsi
> @@ -0,0 +1,756 @@
> +/*
> + * DTS file for CSR SiRFmarco SoC
> + *
> + * Copyright (c) 2012 Cambridge Silicon Radio Limited, a CSR plc group company.
> + *
> + * Licensed under GPLv2 or later.
> + */
> +
> +/include/ "skeleton.dtsi"
> +/ {
> +       compatible = "sirf,marco";
> +       #address-cells = <1>;
> +       #size-cells = <1>;
> +       interrupt-parent = <&gic>;
> +
> +       cpus {
> +               #address-cells = <1>;
> +               #size-cells = <0>;
> +
> +               cpu@0 {
> +                       device_type = "cpu";
> +                       compatible = "arm,cortex-a9";
> +                       reg = <0>;
> +               };
> +               cpu@1 {
> +                       device_type = "cpu";
> +                       compatible = "arm,cortex-a9";
> +                       reg = <1>;
> +               };
> +       };

Nice to see the reg properties present :)

Do the CPUs support the performance monitors extension, and if so are
interrupts wired up?

If so it'd be nice to see a pmu node:

pmu {
	compatible = "arm,cortex-a9-pmu";
	interrupts = <cpu0-irq>,
		     <cpu1-irq>;
};

> +
> +       axi {
> +               compatible = "simple-bus";
> +               #address-cells = <1>;
> +               #size-cells = <1>;
> +               ranges = <0x40000000 0x40000000 0xa0000000>;
> +
> +               l2-cache-controller@c0030000 {
> +                       compatible = "sirf,marco-pl310-cache", "arm,pl310-cache";
> +                       reg = <0xc0030000 0x1000>;
> +                       interrupts = <0 59 0>;
> +                       arm,tag-latency = <1 1 1>;
> +                       arm,data-latency = <1 1 1>;
> +                       arm,filter-ranges = <0x40000000 0x80000000>;
> +               };
> +
> +               gic: interrupt-controller@c0011000 {
> +                       compatible = "arm,cortex-a9-gic";
> +                       interrupt-controller;
> +                       #interrupt-cells = <3>;
> +                       reg = <0xc0011000 0x1000>,
> +                             <0xc0010100 0x0100>;
> +               };
> +
> +               rstc-iobg {
> +                       compatible = "simple-bus";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       ranges = <0xc2000000 0xc2000000 0x1000000>;
> +
> +                       reset-controller@c2000000 {
> +                               compatible = "sirf,marco-rstc";
> +                               reg = <0xc2000000 0x10000>;
> +                       };
> +               };
> +
> +               sys-iobg {
> +                       compatible = "simple-bus";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       ranges = <0xc3000000 0xc3000000 0x1000000>;
> +
> +                       clock-controller@c3000000 {
> +                               compatible = "sirf,marco-clkc";
> +                               reg = <0xc3000000 0x1000>;
> +                               interrupts = <0 3 0>;
> +                       };
> +
> +                       rsc-controller@c3010000 {
> +                               compatible = "sirf,marco-rsc";
> +                               reg = <0xc3010000 0x1000>;
> +                       };

I assume an update for the clk-prima2 driver is going out in a separate series
to enable these compatible strings?

Is the hardware backwards compatible with the prima2 variant? If so, you could
append the sirf,prima2 variant to the compatible lists and save a lot of churn
in drivers.

> +               };
> +
> +               mem-iobg {
> +                       compatible = "simple-bus";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       ranges = <0xc4000000 0xc4000000 0x1000000>;
> +
> +                       memory-controller@c4000000 {
> +                               compatible = "sirf,marco-memc";
> +                               reg = <0xc4000000 0x10000>;
> +                               interrupts = <0 27 0>;
> +                       };

Again, if this is compatible with the prima2 variant, it'd be good to append
the prima2 variant's compatible string.

> +               };
> +
> +               disp-iobg0 {
> +                       compatible = "simple-bus";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       ranges = <0xc5000000 0xc5000000 0x1000000>;
> +
> +                       display0@c5000000 {
> +                               compatible = "sirf,marco-lcd";
> +                               reg = <0xc5000000 0x10000>;
> +                               interrupts = <0 30 0>;
> +                       };
> +
> +                       vpp0@c5010000 {
> +                               compatible = "sirf,marco-vpp";
> +                               reg = <0xc5010000 0x10000>;
> +                               interrupts = <0 31 0>;
> +                       };

And again, though I can't find any string matching "sirf,.*-lcd" or
"sirf,.*-vpp" in v3.8-rc3.

> +               };
> +
> +               disp-iobg1 {
> +                       compatible = "simple-bus";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       ranges = <0xc6000000 0xc6000000 0x1000000>;
> +
> +                       display1@c6000000 {
> +                               compatible = "sirf,marco-lcd";
> +                               reg = <0xc6000000 0x10000>;
> +                               interrupts = <0 62 0>;
> +                       };
> +
> +                       vpp1@c6010000 {
> +                               compatible = "sirf,marco-vpp";
> +                               reg = <0xc6010000 0x10000>;
> +                               interrupts = <0 63 0>;
> +                       };

And again.

> +               };
> +
> +               graphics-iobg {
> +                       compatible = "simple-bus";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       ranges = <0xc8000000 0xc8000000 0x1000000>;
> +
> +                       graphics@c8000000 {
> +                               compatible = "powervr,sgx540";
> +                               reg = <0xc8000000 0x1000000>;
> +                               interrupts = <0 6 0>;
> +                       };
> +               };
> +
> +               multimedia-iobg {
> +                       compatible = "simple-bus";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       ranges = <0xc9000000 0xc9000000 0x1000000>;
> +
> +                       multimedia@a0000000 {
> +                               compatible = "sirf,marco-video-codec";

And again. I'll stop with the compatible string pedantry here, but if any
hardware with a "sirf,marco-.*" string is compatible with a prima2 variant,
it'd be good to append the prima2 string to the end of the compatible list.

> +                               reg = <0xc9000000 0x1000000>;
> +                               interrupts = <0 5 0>;
> +                       };
> +               };
> +
> +               dsp-iobg {
> +                       compatible = "simple-bus";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       ranges = <0xca000000 0xca000000 0x2000000>;
> +
> +                       dspif@ca000000 {
> +                               compatible = "sirf,marco-dspif";
> +                               reg = <0xca000000 0x10000>;
> +                               interrupts = <0 9 0>;
> +                       };
> +
> +                       gps@ca010000 {
> +                               compatible = "sirf,marco-gps";
> +                               reg = <0xca010000 0x10000>;
> +                               interrupts = <0 7 0>;
> +                       };
> +
> +                       dsp@cb000000 {
> +                               compatible = "sirf,marco-dsp";
> +                               reg = <0xcb000000 0x1000000>;
> +                               interrupts = <0 8 0>;
> +                       };
> +               };
> +
> +               peri-iobg {
> +                       compatible = "simple-bus";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       ranges = <0xcc000000 0xcc000000 0x2000000>;
> +
> +                       timer@cc020000 {
> +                               compatible = "sirf,marco-tick";
> +                               reg = <0xcc020000 0x1000>;
> +                               interrupts = <0 0 0>,
> +                                          <0 1 0>,
> +                                          <0 2 0>,
> +                                          <0 49 0>,
> +                                          <0 50 0>,
> +                                          <0 51 0>;
> +                       };
> +
> +                       nand@cc030000 {
> +                               compatible = "sirf,marco-nand";
> +                               reg = <0xcc030000 0x10000>;
> +                               interrupts = <0 41 0>;
> +                       };
> +
> +                       audio@cc040000 {
> +                               compatible = "sirf,marco-audio";
> +                               reg = <0xcc040000 0x10000>;
> +                               interrupts = <0 35 0>;
> +                       };
> +
> +                       uart0: uart@cc050000 {
> +                               cell-index = <0>;
> +                               compatible = "sirf,marco-uart";
> +                               reg = <0xcc050000 0x1000>;
> +                               interrupts = <0 17 0>;
> +                               fifosize = <128>;
> +                               status = "disabled";
> +                       };
> +
> +                       uart1: uart@cc060000 {
> +                               cell-index = <1>;
> +                               compatible = "sirf,marco-uart";
> +                               reg = <0xcc060000 0x1000>;
> +                               interrupts = <0 18 0>;
> +                               fifosize = <32>;
> +                               status = "disabled";
> +                       };
> +
> +                       uart2: uart@cc070000 {
> +                               cell-index = <2>;
> +                               compatible = "sirf,marco-uart";
> +                               reg = <0xcc070000 0x1000>;
> +                               interrupts = <0 19 0>;
> +                               fifosize = <128>;
> +                               status = "disabled";
> +                       };
> +
> +                       uart3: uart@cc190000 {
> +                               cell-index = <3>;
> +                               compatible = "sirf,marco-uart";
> +                               reg = <0xcc190000 0x1000>;
> +                               interrupts = <0 66 0>;
> +                               fifosize = <128>;
> +                               status = "disabled";
> +                       };
> +
> +                       uart4: uart@cc1a0000 {
> +                               cell-index = <4>;
> +                               compatible = "sirf,marco-uart";
> +                               reg = <0xcc1a0000 0x1000>;
> +                               interrupts = <0 69 0>;
> +                               fifosize = <128>;
> +                               status = "disabled";
> +                       };
> +
> +                       usp0: usp@cc080000 {
> +                               cell-index = <0>;
> +                               compatible = "sirf,marco-usp";
> +                               reg = <0xcc080000 0x10000>;
> +                               interrupts = <0 20 0>;
> +                               status = "disabled";
> +                       };
> +
> +                       usp1: usp@cc090000 {
> +                               cell-index = <1>;
> +                               compatible = "sirf,marco-usp";
> +                               reg = <0xcc090000 0x10000>;
> +                               interrupts = <0 21 0>;
> +                               status = "disabled";
> +                       };
> +
> +                       usp2: usp@cc0a0000 {
> +                               cell-index = <2>;
> +                               compatible = "sirf,marco-usp";
> +                               reg = <0xcc0a0000 0x10000>;
> +                               interrupts = <0 22 0>;
> +                               status = "disabled";
> +                       };
> +
> +                       dmac0: dma-controller@cc0b0000 {
> +                               cell-index = <0>;
> +                               compatible = "sirf,marco-dmac";
> +                               reg = <0xcc0b0000 0x10000>;
> +                               interrupts = <0 12 0>;
> +                       };
> +
> +                       dmac1: dma-controller@cc160000 {
> +                               cell-index = <1>;
> +                               compatible = "sirf,marco-dmac";
> +                               reg = <0xcc160000 0x10000>;
> +                               interrupts = <0 13 0>;
> +                       };
> +
> +                       vip@cc0c0000 {
> +                               compatible = "sirf,marco-vip";
> +                               reg = <0xcc0c0000 0x10000>;
> +                       };
> +
> +                       spi0: spi@cc0d0000 {
> +                               cell-index = <0>;
> +                               compatible = "sirf,marco-spi";
> +                               reg = <0xcc0d0000 0x10000>;
> +                               interrupts = <0 15 0>;
> +                               sirf,spi-num-chipselects = <1>;
> +                               cs-gpios = <&gpio 0 0>;
> +                               sirf,spi-dma-rx-channel = <25>;
> +                               sirf,spi-dma-tx-channel = <20>;
> +                               #address-cells = <1>;
> +                               #size-cells = <0>;
> +                               status = "disabled";
> +                       };
> +
> +                       spi1: spi@cc170000 {
> +                               cell-index = <1>;
> +                               compatible = "sirf,marco-spi";
> +                               reg = <0xcc170000 0x10000>;
> +                               interrupts = <0 16 0>;
> +                               sirf,spi-num-chipselects = <1>;
> +                               cs-gpios = <&gpio 0 0>;
> +                               sirf,spi-dma-rx-channel = <12>;
> +                               sirf,spi-dma-tx-channel = <13>;
> +                               #address-cells = <1>;
> +                               #size-cells = <0>;
> +                               status = "disabled";
> +                       };
> +
> +                       i2c0: i2c@cc0e0000 {
> +                               cell-index = <0>;
> +                               compatible = "sirf,marco-i2c";
> +                               reg = <0xcc0e0000 0x10000>;
> +                               interrupts = <0 24 0>;
> +                               #address-cells = <1>;
> +                               #size-cells = <0>;
> +                               status = "disabled";
> +                       };
> +
> +                       i2c1: i2c@cc0f0000 {
> +                               cell-index = <1>;
> +                               compatible = "sirf,marco-i2c";
> +                               reg = <0xcc0f0000 0x10000>;
> +                               interrupts = <0 25 0>;
> +                               #address-cells = <1>;
> +                               #size-cells = <0>;
> +                               status = "disabled";
> +                       };
> +
> +                       tsc@cc110000 {
> +                               compatible = "sirf,marco-tsc";
> +                               reg = <0xcc110000 0x10000>;
> +                               interrupts = <0 33 0>;
> +                       };
> +
> +                       gpio: pinctrl@cc120000 {
> +                               #gpio-cells = <2>;
> +                               #interrupt-cells = <2>;
> +                               compatible = "sirf,marco-pinctrl";

It would be nice if there were a patch adding the "sirf,marco-pinctrl"
compatible string to the pinctrl/pinctrl-sirf.txt devicetree binding doc (given
the pinctrl-sirf driver handles the string already).

> +                               reg = <0xcc120000 0x10000>;
> +                               interrupts = <0 43 0>,
> +                                          <0 44 0>,
> +                                          <0 45 0>,
> +                                          <0 46 0>,
> +                                          <0 47 0>;
> +                               gpio-controller;
> +                               interrupt-controller;
> +
> +                               lcd_16pins_a: lcd0@0 {

Is the lcd0 name special to the driver/subsystem?

If not, it would be nice to change lcd0@N to lcd0_N -- ePAPR says the
unit-address should match the reg property, and if there's no reg property the
unit-address must be omitted.

The same goes for all the remaining nodes within gpio.

> +                                       lcd {
> +                                               sirf,pins = "lcd_16bitsgrp";
> +                                               sirf,function = "lcd_16bits";
> +                                       };
> +                               };
> +                               lcd_18pins_a: lcd0@1 {
> +                                       lcd {
> +                                               sirf,pins = "lcd_18bitsgrp";
> +                                               sirf,function = "lcd_18bits";
> +                                       };
> +                               };
> +                               lcd_24pins_a: lcd0@2 {
> +                                       lcd {
> +                                               sirf,pins = "lcd_24bitsgrp";
> +                                               sirf,function = "lcd_24bits";
> +                                       };
> +                               };
> +                               lcdrom_pins_a: lcdrom0@0 {
> +                                       lcd {
> +                                               sirf,pins = "lcdromgrp";
> +                                               sirf,function = "lcdrom";
> +                                       };
> +                               };
> +                               uart0_pins_a: uart0@0 {
> +                                       uart {
> +                                               sirf,pins = "uart0grp";
> +                                               sirf,function = "uart0";
> +                                       };
> +                               };
> +                               uart1_pins_a: uart1@0 {
> +                                       uart {
> +                                               sirf,pins = "uart1grp";
> +                                               sirf,function = "uart1";
> +                                       };
> +                               };
> +                               uart2_pins_a: uart2@0 {
> +                                       uart {
> +                                               sirf,pins = "uart2grp";
> +                                               sirf,function = "uart2";
> +                                       };
> +                               };
> +                               uart2_noflow_pins_a: uart2@1 {
> +                                       uart {
> +                                               sirf,pins = "uart2_nostreamctrlgrp";
> +                                               sirf,function = "uart2_nostreamctrl";
> +                                       };
> +                               };
> +                               spi0_pins_a: spi0@0 {
> +                                       spi {
> +                                               sirf,pins = "spi0grp";
> +                                               sirf,function = "spi0";
> +                                       };
> +                               };
> +                               spi1_pins_a: spi1@0 {
> +                                       spi {
> +                                               sirf,pins = "spi1grp";
> +                                               sirf,function = "spi1";
> +                                       };
> +                               };
> +                               i2c0_pins_a: i2c0@0 {
> +                                       i2c {
> +                                               sirf,pins = "i2c0grp";
> +                                               sirf,function = "i2c0";
> +                                       };
> +                               };
> +                               i2c1_pins_a: i2c1@0 {
> +                                       i2c {
> +                                               sirf,pins = "i2c1grp";
> +                                               sirf,function = "i2c1";
> +                                       };
> +                               };
> +                               pwm0_pins_a: pwm0@0 {
> +                                       pwm {
> +                                               sirf,pins = "pwm0grp";
> +                                               sirf,function = "pwm0";
> +                                       };
> +                               };
> +                               pwm1_pins_a: pwm1@0 {
> +                                       pwm {
> +                                               sirf,pins = "pwm1grp";
> +                                               sirf,function = "pwm1";
> +                                       };
> +                               };
> +                               pwm2_pins_a: pwm2@0 {
> +                                       pwm {
> +                                               sirf,pins = "pwm2grp";
> +                                               sirf,function = "pwm2";
> +                                       };
> +                               };
> +                               pwm3_pins_a: pwm3@0 {
> +                                       pwm {
> +                                               sirf,pins = "pwm3grp";
> +                                               sirf,function = "pwm3";
> +                                       };
> +                               };
> +                               gps_pins_a: gps@0 {
> +                                       gps {
> +                                               sirf,pins = "gpsgrp";
> +                                               sirf,function = "gps";
> +                                       };
> +                               };
> +                               vip_pins_a: vip@0 {
> +                                       vip {
> +                                               sirf,pins = "vipgrp";
> +                                               sirf,function = "vip";
> +                                       };
> +                               };
> +                               sdmmc0_pins_a: sdmmc0@0 {
> +                                       sdmmc0 {
> +                                               sirf,pins = "sdmmc0grp";
> +                                               sirf,function = "sdmmc0";
> +                                       };
> +                               };
> +                               sdmmc1_pins_a: sdmmc1@0 {
> +                                       sdmmc1 {
> +                                               sirf,pins = "sdmmc1grp";
> +                                               sirf,function = "sdmmc1";
> +                                       };
> +                               };
> +                               sdmmc2_pins_a: sdmmc2@0 {
> +                                       sdmmc2 {
> +                                               sirf,pins = "sdmmc2grp";
> +                                               sirf,function = "sdmmc2";
> +                                       };
> +                               };
> +                               sdmmc3_pins_a: sdmmc3@0 {
> +                                       sdmmc3 {
> +                                               sirf,pins = "sdmmc3grp";
> +                                               sirf,function = "sdmmc3";
> +                                       };
> +                               };
> +                               sdmmc4_pins_a: sdmmc4@0 {
> +                                       sdmmc4 {
> +                                               sirf,pins = "sdmmc4grp";
> +                                               sirf,function = "sdmmc4";
> +                                       };
> +                               };
> +                               sdmmc5_pins_a: sdmmc5@0 {
> +                                       sdmmc5 {
> +                                               sirf,pins = "sdmmc5grp";
> +                                               sirf,function = "sdmmc5";
> +                                       };
> +                               };
> +                               i2s_pins_a: i2s@0 {
> +                                       i2s {
> +                                               sirf,pins = "i2sgrp";
> +                                               sirf,function = "i2s";
> +                                       };
> +                               };
> +                               ac97_pins_a: ac97@0 {
> +                                       ac97 {
> +                                               sirf,pins = "ac97grp";
> +                                               sirf,function = "ac97";
> +                                       };
> +                               };
> +                               nand_pins_a: nand@0 {
> +                                       nand {
> +                                               sirf,pins = "nandgrp";
> +                                               sirf,function = "nand";
> +                                       };
> +                               };
> +                               usp0_pins_a: usp0@0 {
> +                                       usp0 {
> +                                               sirf,pins = "usp0grp";
> +                                               sirf,function = "usp0";
> +                                       };
> +                               };
> +                               usp1_pins_a: usp1@0 {
> +                                       usp1 {
> +                                               sirf,pins = "usp1grp";
> +                                               sirf,function = "usp1";
> +                                       };
> +                               };
> +                               usp2_pins_a: usp2@0 {
> +                                       usp2 {
> +                                               sirf,pins = "usp2grp";
> +                                               sirf,function = "usp2";
> +                                       };
> +                               };
> +                               usb0_utmi_drvbus_pins_a: usb0_utmi_drvbus@0 {
> +                                       usb0_utmi_drvbus {
> +                                               sirf,pins = "usb0_utmi_drvbusgrp";
> +                                               sirf,function = "usb0_utmi_drvbus";
> +                                       };
> +                               };
> +                               usb1_utmi_drvbus_pins_a: usb1_utmi_drvbus@0 {
> +                                       usb1_utmi_drvbus {
> +                                               sirf,pins = "usb1_utmi_drvbusgrp";
> +                                               sirf,function = "usb1_utmi_drvbus";
> +                                       };
> +                               };
> +                               warm_rst_pins_a: warm_rst@0 {
> +                                       warm_rst {
> +                                               sirf,pins = "warm_rstgrp";
> +                                               sirf,function = "warm_rst";
> +                                       };
> +                               };
> +                               pulse_count_pins_a: pulse_count@0 {
> +                                       pulse_count {
> +                                               sirf,pins = "pulse_countgrp";
> +                                               sirf,function = "pulse_count";
> +                                       };
> +                               };
> +                               cko0_rst_pins_a: cko0_rst@0 {
> +                                       cko0_rst {
> +                                               sirf,pins = "cko0_rstgrp";
> +                                               sirf,function = "cko0_rst";
> +                                       };
> +                               };
> +                               cko1_rst_pins_a: cko1_rst@0 {
> +                                       cko1_rst {
> +                                               sirf,pins = "cko1_rstgrp";
> +                                               sirf,function = "cko1_rst";
> +                                       };
> +                               };
> +                       };
> +
> +                       pwm@cc130000 {
> +                               compatible = "sirf,marco-pwm";
> +                               reg = <0xcc130000 0x10000>;
> +                       };
> +
> +                       efusesys@cc140000 {
> +                               compatible = "sirf,marco-efuse";
> +                               reg = <0xcc140000 0x10000>;
> +                       };
> +
> +                       pulsec@cc150000 {
> +                               compatible = "sirf,marco-pulsec";
> +                               reg = <0xcc150000 0x10000>;
> +                               interrupts = <0 48 0>;
> +                       };
> +
> +                       pci-iobg {
> +                               compatible = "sirf,marco-pciiobg", "simple-bus";
> +                               #address-cells = <1>;
> +                               #size-cells = <1>;
> +                               ranges = <0xcd000000 0xcd000000 0x1000000>;
> +
> +                               sd0: sdhci@cd000000 {
> +                                       cell-index = <0>;
> +                                       compatible = "sirf,marco-sdhc";
> +                                       reg = <0xcd000000 0x100000>;
> +                                       interrupts = <0 38 0>;
> +                                       status = "disabled";
> +                               };
> +
> +                               sd1: sdhci@cd100000 {
> +                                       cell-index = <1>;
> +                                       compatible = "sirf,marco-sdhc";
> +                                       reg = <0xcd100000 0x100000>;
> +                                       interrupts = <0 38 0>;
> +                                       status = "disabled";
> +                               };
> +
> +                               sd2: sdhci@cd200000 {
> +                                       cell-index = <2>;
> +                                       compatible = "sirf,marco-sdhc";
> +                                       reg = <0xcd200000 0x100000>;
> +                                       interrupts = <0 23 0>;
> +                                       status = "disabled";
> +                               };
> +
> +                               sd3: sdhci@cd300000 {
> +                                       cell-index = <3>;
> +                                       compatible = "sirf,marco-sdhc";
> +                                       reg = <0xcd300000 0x100000>;
> +                                       interrupts = <0 23 0>;
> +                                       status = "disabled";
> +                               };
> +
> +                               sd4: sdhci@cd400000 {
> +                                       cell-index = <4>;
> +                                       compatible = "sirf,marco-sdhc";
> +                                       reg = <0xcd400000 0x100000>;
> +                                       interrupts = <0 39 0>;
> +                                       status = "disabled";
> +                               };
> +
> +                               sd5: sdhci@cd500000 {
> +                                       cell-index = <5>;
> +                                       compatible = "sirf,marco-sdhc";
> +                                       reg = <0xcd500000 0x100000>;
> +                                       interrupts = <0 39 0>;
> +                                       status = "disabled";
> +                               };
> +
> +                               pci-copy@cd900000 {
> +                                       compatible = "sirf,marco-pcicp";
> +                                       reg = <0xcd900000 0x100000>;
> +                                       interrupts = <0 40 0>;
> +                               };
> +
> +                               rom-interface@cda00000 {
> +                                       compatible = "sirf,marco-romif";
> +                                       reg = <0xcda00000 0x100000>;
> +                               };
> +                       };
> +               };
> +
> +               rtc-iobg {
> +                       compatible = "sirf,marco-rtciobg", "sirf-marco-rtciobg-bus";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       reg = <0xc1000000 0x10000>;
> +
> +                       gpsrtc@1000 {
> +                               compatible = "sirf,marco-gpsrtc";
> +                               reg = <0x1000 0x1000>;
> +                               interrupts = <0 55 0>,
> +                                          <0 56 0>,
> +                                          <0 57 0>;
> +                       };
> +
> +                       sysrtc@2000 {
> +                               compatible = "sirf,marco-sysrtc";
> +                               reg = <0x2000 0x1000>;
> +                               interrupts = <0 52 0>,
> +                                          <0 53 0>,
> +                                          <0 54 0>;
> +                       };
> +
> +                       pwrc@3000 {
> +                               compatible = "sirf,marco-pwrc";
> +                               reg = <0x3000 0x1000>;
> +                               interrupts = <0 32 0>;
> +                       };
> +               };
> +
> +               uus-iobg {
> +                       compatible = "simple-bus";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       ranges = <0xce000000 0xce000000 0x1000000>;
> +
> +                       usb0: usb@ce000000 {
> +                               compatible = "chipidea,ci13611a-marco";
> +                               reg = <0xce000000 0x10000>;
> +                               interrupts = <0 10 0>;
> +                       };
> +
> +                       usb1: usb@ce010000 {
> +                               compatible = "chipidea,ci13611a-marco";
> +                               reg = <0xce010000 0x10000>;
> +                               interrupts = <0 11 0>;
> +                       };
> +
> +                       security@ce020000 {
> +                               compatible = "sirf,marco-security";
> +                               reg = <0xce020000 0x10000>;
> +                               interrupts = <0 42 0>;
> +                       };
> +               };
> +
> +               can-iobg {
> +                       compatible = "simple-bus";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       ranges = <0xd0000000 0xd0000000 0x1000000>;
> +
> +                       can0: can@d0000000 {
> +                               compatible = "sirf,marco-can";
> +                               reg = <0xd0000000 0x10000>;
> +                       };
> +
> +                       can1: can@d0010000 {
> +                               compatible = "sirf,marco-can";
> +                               reg = <0xd0010000 0x10000>;
> +                       };
> +               };
> +
> +               lvds-iobg {
> +                       compatible = "simple-bus";
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       ranges = <0xd1000000 0xd1000000 0x1000000>;
> +
> +                       lvds@d1000000 {
> +                               compatible = "sirf,marco-lvds";
> +                               reg = <0xd1000000 0x10000>;
> +                               interrupts = <0 64 0>;
> +                       };
> +               };
> +       };
> +};

If you're able to deal with all that, you can add:

Reviewed-by: Mark Rutland <mark.rutland@arm.com>

For the compatible strings, it would be good if those devices which need
special treatment compared to prima2 (and thus can't fall back on the prima2
compatible strings) were listed in the commit message to aid review. Either
that or list the ones which are compatible, whichever list is shorter.

Thanks,
Mark.
Barry Song Jan. 21, 2013, 2:44 a.m. UTC | #2
Hi Mark,
thanks very much for reviewing.

2013/1/16 Mark Rutland <mark.rutland@arm.com>:
> Hello,
>
> This looks pretty good. I've tried to give a more thorough review this time,
> so hopefully these comments should be my last.
>
> On Wed, Jan 16, 2013 at 05:53:27AM +0000, Barry Song wrote:
>> From: Barry Song <Baohua.Song@csr.com>
>>
>> SiRFmarco is a dual-core cortex-a9 SMP SoC from CSR. this patch
>> adds the .dtsi and a basic evb board .dts for it.
>>
>> Signed-off-by: Barry Song <Baohua.Song@csr.com>
>> Cc: Mark Rutland <mark.rutland@arm.com>
>> ---
>>  arch/arm/boot/dts/marco-evb.dts |   51 +++
>>  arch/arm/boot/dts/marco.dtsi    |  756 +++++++++++++++++++++++++++++++++++++++
>>  2 files changed, 807 insertions(+), 0 deletions(-)
>>  create mode 100644 arch/arm/boot/dts/marco-evb.dts
>>  create mode 100644 arch/arm/boot/dts/marco.dtsi
>>
>> diff --git a/arch/arm/boot/dts/marco-evb.dts b/arch/arm/boot/dts/marco-evb.dts
>> new file mode 100644
>> index 0000000..4e68d3c
>> --- /dev/null
>> +++ b/arch/arm/boot/dts/marco-evb.dts
>> @@ -0,0 +1,51 @@
>> +/*
>> + * DTS file for CSR SiRFmarco Evaluation Board
>> + *
>> + * Copyright (c) 2012 Cambridge Silicon Radio Limited, a CSR plc group company.
>> + *
>> + * Licensed under GPLv2 or later.
>> + */
>> +
>> +/dts-v1/;
>> +
>> +/include/ "marco.dtsi"
>> +
>> +/ {
>> +       model = "CSR SiRFmarco Evaluation Board";
>> +       compatible = "sirf,marco", "sirf,marco-cb";
>
> Shouldn't "sirf,marco-cb" come before "sirf,marco", so we have the most
> specific match first?

agree.
>
> It would also be nice if both compatible strings were documented.

will have it in Documentation/devicetree/bindings/arm/sirf.txt

>
>> +
>> +       memory {
>> +               reg = <0x40000000 0x60000000>;
>> +       };
>> +
>> +       axi {
>> +               peri-iobg {
>> +                       uart1: uart@cc060000 {
>> +                               status = "okay";
>> +                       };
>> +                       i2c0: i2c@cc0e0000 {
>> +                             status = "okay";
>> +                             fpga-cpld@4d {
>> +                                     compatible = "sirf,fpga-cpld";
>> +                                     reg = <0x4d>;
>> +                             };
>> +                       };
>> +                       spi1: spi@cc170000 {
>> +                               status = "okay";
>> +                               pinctrl-names = "default";
>> +                               pinctrl-0 = <&spi1_pins_a>;
>> +                               spi@0 {
>> +                                       compatible = "spidev";
>> +                                       reg = <0>;
>> +                                       spi-max-frequency = <1000000>;
>> +                               };
>> +                       };
>> +                       pci-iobg {
>> +                               sd0: sdhci@cd000000 {
>> +                                       bus-width = <8>;
>> +                                       status = "okay";
>> +                               };
>> +                       };
>> +               };
>> +       };
>> +};
>> diff --git a/arch/arm/boot/dts/marco.dtsi b/arch/arm/boot/dts/marco.dtsi
>> new file mode 100644
>> index 0000000..d6bad50
>> --- /dev/null
>> +++ b/arch/arm/boot/dts/marco.dtsi
>> @@ -0,0 +1,756 @@
>> +/*
>> + * DTS file for CSR SiRFmarco SoC
>> + *
>> + * Copyright (c) 2012 Cambridge Silicon Radio Limited, a CSR plc group company.
>> + *
>> + * Licensed under GPLv2 or later.
>> + */
>> +
>> +/include/ "skeleton.dtsi"
>> +/ {
>> +       compatible = "sirf,marco";
>> +       #address-cells = <1>;
>> +       #size-cells = <1>;
>> +       interrupt-parent = <&gic>;
>> +
>> +       cpus {
>> +               #address-cells = <1>;
>> +               #size-cells = <0>;
>> +
>> +               cpu@0 {
>> +                       device_type = "cpu";
>> +                       compatible = "arm,cortex-a9";
>> +                       reg = <0>;
>> +               };
>> +               cpu@1 {
>> +                       device_type = "cpu";
>> +                       compatible = "arm,cortex-a9";
>> +                       reg = <1>;
>> +               };
>> +       };
>
> Nice to see the reg properties present :)
>
> Do the CPUs support the performance monitors extension, and if so are
> interrupts wired up?
>
> If so it'd be nice to see a pmu node:
>
> pmu {
>         compatible = "arm,cortex-a9-pmu";
>         interrupts = <cpu0-irq>,
>                      <cpu1-irq>;
> };
>

as there is a driver arch/arm/kernel/perf_event_cpu.c commited on Jul
29 2012, pmu nodes are really necessary if there is one in SoC.
the problem is we are using a fpga,  and not sure the final design, so
i'd like to keep this and some following detailed IC issues you
comment to the future fixes.

>> +
>> +       axi {
>> +               compatible = "simple-bus";
>> +               #address-cells = <1>;
>> +               #size-cells = <1>;
>> +               ranges = <0x40000000 0x40000000 0xa0000000>;
>> +
>> +               l2-cache-controller@c0030000 {
>> +                       compatible = "sirf,marco-pl310-cache", "arm,pl310-cache";
>> +                       reg = <0xc0030000 0x1000>;
>> +                       interrupts = <0 59 0>;
>> +                       arm,tag-latency = <1 1 1>;
>> +                       arm,data-latency = <1 1 1>;
>> +                       arm,filter-ranges = <0x40000000 0x80000000>;
>> +               };
>> +
>> +               gic: interrupt-controller@c0011000 {
>> +                       compatible = "arm,cortex-a9-gic";
>> +                       interrupt-controller;
>> +                       #interrupt-cells = <3>;
>> +                       reg = <0xc0011000 0x1000>,
>> +                             <0xc0010100 0x0100>;
>> +               };
>> +
>> +               rstc-iobg {
>> +                       compatible = "simple-bus";
>> +                       #address-cells = <1>;
>> +                       #size-cells = <1>;
>> +                       ranges = <0xc2000000 0xc2000000 0x1000000>;
>> +
>> +                       reset-controller@c2000000 {
>> +                               compatible = "sirf,marco-rstc";
>> +                               reg = <0xc2000000 0x10000>;
>> +                       };
>> +               };
>> +
>> +               sys-iobg {
>> +                       compatible = "simple-bus";
>> +                       #address-cells = <1>;
>> +                       #size-cells = <1>;
>> +                       ranges = <0xc3000000 0xc3000000 0x1000000>;
>> +
>> +                       clock-controller@c3000000 {
>> +                               compatible = "sirf,marco-clkc";
>> +                               reg = <0xc3000000 0x1000>;
>> +                               interrupts = <0 3 0>;
>> +                       };
>> +
>> +                       rsc-controller@c3010000 {
>> +                               compatible = "sirf,marco-rsc";
>> +                               reg = <0xc3010000 0x1000>;
>> +                       };
>
> I assume an update for the clk-prima2 driver is going out in a separate series
> to enable these compatible strings?

yes. there are more PLLs, dividers and clk gates in marco than prima2.
i'll have seperate patches for them, for the moment, i can't as clk
tree is not included in the fpga.

>
> Is the hardware backwards compatible with the prima2 variant? If so, you could
> append the sirf,prima2 variant to the compatible lists and save a lot of churn
> in drivers.

not completely compatible. for the performance consideration, marco
has splitted many shared registers to SET/CLEAR pair to avoid frequent
read-modify-write.

>
>> +               };
>> +
>> +               mem-iobg {
>> +                       compatible = "simple-bus";
>> +                       #address-cells = <1>;
>> +                       #size-cells = <1>;
>> +                       ranges = <0xc4000000 0xc4000000 0x1000000>;
>> +
>> +                       memory-controller@c4000000 {
>> +                               compatible = "sirf,marco-memc";
>> +                               reg = <0xc4000000 0x10000>;
>> +                               interrupts = <0 27 0>;
>> +                       };
>
> Again, if this is compatible with the prima2 variant, it'd be good to append
> the prima2 variant's compatible string.
>
>> +               };
>> +
>> +               disp-iobg0 {
>> +                       compatible = "simple-bus";
>> +                       #address-cells = <1>;
>> +                       #size-cells = <1>;
>> +                       ranges = <0xc5000000 0xc5000000 0x1000000>;
>> +
>> +                       display0@c5000000 {
>> +                               compatible = "sirf,marco-lcd";
>> +                               reg = <0xc5000000 0x10000>;
>> +                               interrupts = <0 30 0>;
>> +                       };
>> +
>> +                       vpp0@c5010000 {
>> +                               compatible = "sirf,marco-vpp";
>> +                               reg = <0xc5010000 0x10000>;
>> +                               interrupts = <0 31 0>;
>> +                       };
>
> And again, though I can't find any string matching "sirf,.*-lcd" or
> "sirf,.*-vpp" in v3.8-rc3.

i'd like to leave the confirmation of them to the day IC is fixed and
related drivers are begun.
for the moment, all teams need a basic Linux infrasture and baseline
to move things ahead.

>
>> +               };
>> +
>> +               disp-iobg1 {
>> +                       compatible = "simple-bus";
>> +                       #address-cells = <1>;
>> +                       #size-cells = <1>;
>> +                       ranges = <0xc6000000 0xc6000000 0x1000000>;
>> +
>> +                       display1@c6000000 {
>> +                               compatible = "sirf,marco-lcd";
>> +                               reg = <0xc6000000 0x10000>;
>> +                               interrupts = <0 62 0>;
>> +                       };
>> +
>> +                       vpp1@c6010000 {
>> +                               compatible = "sirf,marco-vpp";
>> +                               reg = <0xc6010000 0x10000>;
>> +                               interrupts = <0 63 0>;
>> +                       };
>
> And again.
>
>> +               };
>> +
>> +               graphics-iobg {
>> +                       compatible = "simple-bus";
>> +                       #address-cells = <1>;
>> +                       #size-cells = <1>;
>> +                       ranges = <0xc8000000 0xc8000000 0x1000000>;
>> +
>> +                       graphics@c8000000 {
>> +                               compatible = "powervr,sgx540";
>> +                               reg = <0xc8000000 0x1000000>;
>> +                               interrupts = <0 6 0>;
>> +                       };
>> +               };
>> +
>> +               multimedia-iobg {
>> +                       compatible = "simple-bus";
>> +                       #address-cells = <1>;
>> +                       #size-cells = <1>;
>> +                       ranges = <0xc9000000 0xc9000000 0x1000000>;
>> +
>> +                       multimedia@a0000000 {
>> +                               compatible = "sirf,marco-video-codec";
>
> And again. I'll stop with the compatible string pedantry here, but if any
> hardware with a "sirf,marco-.*" string is compatible with a prima2 variant,
> it'd be good to append the prima2 string to the end of the compatible list.

agree.

>
>> +                               reg = <0xc9000000 0x1000000>;
>> +                               interrupts = <0 5 0>;
>> +                       };
>> +               };
>> +
>> +               dsp-iobg {
>> +                       compatible = "simple-bus";
>> +                       #address-cells = <1>;
>> +                       #size-cells = <1>;
>> +                       ranges = <0xca000000 0xca000000 0x2000000>;
>> +
>> +                       dspif@ca000000 {
>> +                               compatible = "sirf,marco-dspif";
>> +                               reg = <0xca000000 0x10000>;
>> +                               interrupts = <0 9 0>;
>> +                       };
>> +
>> +                       gps@ca010000 {
>> +                               compatible = "sirf,marco-gps";
>> +                               reg = <0xca010000 0x10000>;
>> +                               interrupts = <0 7 0>;
>> +                       };
>> +
>> +                       dsp@cb000000 {
>> +                               compatible = "sirf,marco-dsp";
>> +                               reg = <0xcb000000 0x1000000>;
>> +                               interrupts = <0 8 0>;
>> +                       };
>> +               };
>> +
>> +               peri-iobg {
>> +                       compatible = "simple-bus";
>> +                       #address-cells = <1>;
>> +                       #size-cells = <1>;
>> +                       ranges = <0xcc000000 0xcc000000 0x2000000>;
>> +
>> +                       timer@cc020000 {
>> +                               compatible = "sirf,marco-tick";
>> +                               reg = <0xcc020000 0x1000>;
>> +                               interrupts = <0 0 0>,
>> +                                          <0 1 0>,
>> +                                          <0 2 0>,
>> +                                          <0 49 0>,
>> +                                          <0 50 0>,
>> +                                          <0 51 0>;
>> +                       };
>> +
>> +                       nand@cc030000 {
>> +                               compatible = "sirf,marco-nand";
>> +                               reg = <0xcc030000 0x10000>;
>> +                               interrupts = <0 41 0>;
>> +                       };
>> +
>> +                       audio@cc040000 {
>> +                               compatible = "sirf,marco-audio";
>> +                               reg = <0xcc040000 0x10000>;
>> +                               interrupts = <0 35 0>;
>> +                       };
>> +
>> +                       uart0: uart@cc050000 {
>> +                               cell-index = <0>;
>> +                               compatible = "sirf,marco-uart";
>> +                               reg = <0xcc050000 0x1000>;
>> +                               interrupts = <0 17 0>;
>> +                               fifosize = <128>;
>> +                               status = "disabled";
>> +                       };
>> +
>> +                       uart1: uart@cc060000 {
>> +                               cell-index = <1>;
>> +                               compatible = "sirf,marco-uart";
>> +                               reg = <0xcc060000 0x1000>;
>> +                               interrupts = <0 18 0>;
>> +                               fifosize = <32>;
>> +                               status = "disabled";
>> +                       };
>> +
>> +                       uart2: uart@cc070000 {
>> +                               cell-index = <2>;
>> +                               compatible = "sirf,marco-uart";
>> +                               reg = <0xcc070000 0x1000>;
>> +                               interrupts = <0 19 0>;
>> +                               fifosize = <128>;
>> +                               status = "disabled";
>> +                       };
>> +
>> +                       uart3: uart@cc190000 {
>> +                               cell-index = <3>;
>> +                               compatible = "sirf,marco-uart";
>> +                               reg = <0xcc190000 0x1000>;
>> +                               interrupts = <0 66 0>;
>> +                               fifosize = <128>;
>> +                               status = "disabled";
>> +                       };
>> +
>> +                       uart4: uart@cc1a0000 {
>> +                               cell-index = <4>;
>> +                               compatible = "sirf,marco-uart";
>> +                               reg = <0xcc1a0000 0x1000>;
>> +                               interrupts = <0 69 0>;
>> +                               fifosize = <128>;
>> +                               status = "disabled";
>> +                       };
>> +
>> +                       usp0: usp@cc080000 {
>> +                               cell-index = <0>;
>> +                               compatible = "sirf,marco-usp";
>> +                               reg = <0xcc080000 0x10000>;
>> +                               interrupts = <0 20 0>;
>> +                               status = "disabled";
>> +                       };
>> +
>> +                       usp1: usp@cc090000 {
>> +                               cell-index = <1>;
>> +                               compatible = "sirf,marco-usp";
>> +                               reg = <0xcc090000 0x10000>;
>> +                               interrupts = <0 21 0>;
>> +                               status = "disabled";
>> +                       };
>> +
>> +                       usp2: usp@cc0a0000 {
>> +                               cell-index = <2>;
>> +                               compatible = "sirf,marco-usp";
>> +                               reg = <0xcc0a0000 0x10000>;
>> +                               interrupts = <0 22 0>;
>> +                               status = "disabled";
>> +                       };
>> +
>> +                       dmac0: dma-controller@cc0b0000 {
>> +                               cell-index = <0>;
>> +                               compatible = "sirf,marco-dmac";
>> +                               reg = <0xcc0b0000 0x10000>;
>> +                               interrupts = <0 12 0>;
>> +                       };
>> +
>> +                       dmac1: dma-controller@cc160000 {
>> +                               cell-index = <1>;
>> +                               compatible = "sirf,marco-dmac";
>> +                               reg = <0xcc160000 0x10000>;
>> +                               interrupts = <0 13 0>;
>> +                       };
>> +
>> +                       vip@cc0c0000 {
>> +                               compatible = "sirf,marco-vip";
>> +                               reg = <0xcc0c0000 0x10000>;
>> +                       };
>> +
>> +                       spi0: spi@cc0d0000 {
>> +                               cell-index = <0>;
>> +                               compatible = "sirf,marco-spi";
>> +                               reg = <0xcc0d0000 0x10000>;
>> +                               interrupts = <0 15 0>;
>> +                               sirf,spi-num-chipselects = <1>;
>> +                               cs-gpios = <&gpio 0 0>;
>> +                               sirf,spi-dma-rx-channel = <25>;
>> +                               sirf,spi-dma-tx-channel = <20>;
>> +                               #address-cells = <1>;
>> +                               #size-cells = <0>;
>> +                               status = "disabled";
>> +                       };
>> +
>> +                       spi1: spi@cc170000 {
>> +                               cell-index = <1>;
>> +                               compatible = "sirf,marco-spi";
>> +                               reg = <0xcc170000 0x10000>;
>> +                               interrupts = <0 16 0>;
>> +                               sirf,spi-num-chipselects = <1>;
>> +                               cs-gpios = <&gpio 0 0>;
>> +                               sirf,spi-dma-rx-channel = <12>;
>> +                               sirf,spi-dma-tx-channel = <13>;
>> +                               #address-cells = <1>;
>> +                               #size-cells = <0>;
>> +                               status = "disabled";
>> +                       };
>> +
>> +                       i2c0: i2c@cc0e0000 {
>> +                               cell-index = <0>;
>> +                               compatible = "sirf,marco-i2c";
>> +                               reg = <0xcc0e0000 0x10000>;
>> +                               interrupts = <0 24 0>;
>> +                               #address-cells = <1>;
>> +                               #size-cells = <0>;
>> +                               status = "disabled";
>> +                       };
>> +
>> +                       i2c1: i2c@cc0f0000 {
>> +                               cell-index = <1>;
>> +                               compatible = "sirf,marco-i2c";
>> +                               reg = <0xcc0f0000 0x10000>;
>> +                               interrupts = <0 25 0>;
>> +                               #address-cells = <1>;
>> +                               #size-cells = <0>;
>> +                               status = "disabled";
>> +                       };
>> +
>> +                       tsc@cc110000 {
>> +                               compatible = "sirf,marco-tsc";
>> +                               reg = <0xcc110000 0x10000>;
>> +                               interrupts = <0 33 0>;
>> +                       };
>> +
>> +                       gpio: pinctrl@cc120000 {
>> +                               #gpio-cells = <2>;
>> +                               #interrupt-cells = <2>;
>> +                               compatible = "sirf,marco-pinctrl";
>
> It would be nice if there were a patch adding the "sirf,marco-pinctrl"
> compatible string to the pinctrl/pinctrl-sirf.txt devicetree binding doc (given
> the pinctrl-sirf driver handles the string already).

yes. definitely there will be when i make pinctrl-sirf completely work
on marco, for the moment, it is not verifiable as pinmux is not
enabled in the fpga.

>
>> +                               reg = <0xcc120000 0x10000>;
>> +                               interrupts = <0 43 0>,
>> +                                          <0 44 0>,
>> +                                          <0 45 0>,
>> +                                          <0 46 0>,
>> +                                          <0 47 0>;
>> +                               gpio-controller;
>> +                               interrupt-controller;
>> +
>> +                               lcd_16pins_a: lcd0@0 {
>
> Is the lcd0 name special to the driver/subsystem?
>
> If not, it would be nice to change lcd0@N to lcd0_N -- ePAPR says the
> unit-address should match the reg property, and if there's no reg property the
> unit-address must be omitted.

agree. it seems prima2.dtsi has the same issue. i'll have a fix for
prima2 as well.
we will still have some chances to change the pinmux mapping in the
marco.dtsi in the future with the fix of ic.

>
> The same goes for all the remaining nodes within gpio.
>
>> +                                       lcd {
>> +                                               sirf,pins = "lcd_16bitsgrp";
>> +                                               sirf,function = "lcd_16bits";
>> +                                       };
>> +                               };
>> +                               lcd_18pins_a: lcd0@1 {
>> +                                       lcd {
>> +                                               sirf,pins = "lcd_18bitsgrp";
>> +                                               sirf,function = "lcd_18bits";
>> +                                       };
>> +                               };
>> +                               lcd_24pins_a: lcd0@2 {
>> +                                       lcd {
>> +                                               sirf,pins = "lcd_24bitsgrp";
>> +                                               sirf,function = "lcd_24bits";
>> +                                       };
>> +                               };
>> +                               lcdrom_pins_a: lcdrom0@0 {
>> +                                       lcd {
>> +                                               sirf,pins = "lcdromgrp";
>> +                                               sirf,function = "lcdrom";
>> +                                       };
>> +                               };
>> +                               uart0_pins_a: uart0@0 {
>> +                                       uart {
>> +                                               sirf,pins = "uart0grp";
>> +                                               sirf,function = "uart0";
>> +                                       };
>> +                               };
>> +                               uart1_pins_a: uart1@0 {
>> +                                       uart {
>> +                                               sirf,pins = "uart1grp";
>> +                                               sirf,function = "uart1";
>> +                                       };
>> +                               };
>> +                               uart2_pins_a: uart2@0 {
>> +                                       uart {
>> +                                               sirf,pins = "uart2grp";
>> +                                               sirf,function = "uart2";
>> +                                       };
>> +                               };
>> +                               uart2_noflow_pins_a: uart2@1 {
>> +                                       uart {
>> +                                               sirf,pins = "uart2_nostreamctrlgrp";
>> +                                               sirf,function = "uart2_nostreamctrl";
>> +                                       };
>> +                               };
>> +                               spi0_pins_a: spi0@0 {
>> +                                       spi {
>> +                                               sirf,pins = "spi0grp";
>> +                                               sirf,function = "spi0";
>> +                                       };
>> +                               };
>> +                               spi1_pins_a: spi1@0 {
>> +                                       spi {
>> +                                               sirf,pins = "spi1grp";
>> +                                               sirf,function = "spi1";
>> +                                       };
>> +                               };
>> +                               i2c0_pins_a: i2c0@0 {
>> +                                       i2c {
>> +                                               sirf,pins = "i2c0grp";
>> +                                               sirf,function = "i2c0";
>> +                                       };
>> +                               };
>> +                               i2c1_pins_a: i2c1@0 {
>> +                                       i2c {
>> +                                               sirf,pins = "i2c1grp";
>> +                                               sirf,function = "i2c1";
>> +                                       };
>> +                               };
>> +                               pwm0_pins_a: pwm0@0 {
>> +                                       pwm {
>> +                                               sirf,pins = "pwm0grp";
>> +                                               sirf,function = "pwm0";
>> +                                       };
>> +                               };
>> +                               pwm1_pins_a: pwm1@0 {
>> +                                       pwm {
>> +                                               sirf,pins = "pwm1grp";
>> +                                               sirf,function = "pwm1";
>> +                                       };
>> +                               };
>> +                               pwm2_pins_a: pwm2@0 {
>> +                                       pwm {
>> +                                               sirf,pins = "pwm2grp";
>> +                                               sirf,function = "pwm2";
>> +                                       };
>> +                               };
>> +                               pwm3_pins_a: pwm3@0 {
>> +                                       pwm {
>> +                                               sirf,pins = "pwm3grp";
>> +                                               sirf,function = "pwm3";
>> +                                       };
>> +                               };
>> +                               gps_pins_a: gps@0 {
>> +                                       gps {
>> +                                               sirf,pins = "gpsgrp";
>> +                                               sirf,function = "gps";
>> +                                       };
>> +                               };
>> +                               vip_pins_a: vip@0 {
>> +                                       vip {
>> +                                               sirf,pins = "vipgrp";
>> +                                               sirf,function = "vip";
>> +                                       };
>> +                               };
>> +                               sdmmc0_pins_a: sdmmc0@0 {
>> +                                       sdmmc0 {
>> +                                               sirf,pins = "sdmmc0grp";
>> +                                               sirf,function = "sdmmc0";
>> +                                       };
>> +                               };
>> +                               sdmmc1_pins_a: sdmmc1@0 {
>> +                                       sdmmc1 {
>> +                                               sirf,pins = "sdmmc1grp";
>> +                                               sirf,function = "sdmmc1";
>> +                                       };
>> +                               };
>> +                               sdmmc2_pins_a: sdmmc2@0 {
>> +                                       sdmmc2 {
>> +                                               sirf,pins = "sdmmc2grp";
>> +                                               sirf,function = "sdmmc2";
>> +                                       };
>> +                               };
>> +                               sdmmc3_pins_a: sdmmc3@0 {
>> +                                       sdmmc3 {
>> +                                               sirf,pins = "sdmmc3grp";
>> +                                               sirf,function = "sdmmc3";
>> +                                       };
>> +                               };
>> +                               sdmmc4_pins_a: sdmmc4@0 {
>> +                                       sdmmc4 {
>> +                                               sirf,pins = "sdmmc4grp";
>> +                                               sirf,function = "sdmmc4";
>> +                                       };
>> +                               };
>> +                               sdmmc5_pins_a: sdmmc5@0 {
>> +                                       sdmmc5 {
>> +                                               sirf,pins = "sdmmc5grp";
>> +                                               sirf,function = "sdmmc5";
>> +                                       };
>> +                               };
>> +                               i2s_pins_a: i2s@0 {
>> +                                       i2s {
>> +                                               sirf,pins = "i2sgrp";
>> +                                               sirf,function = "i2s";
>> +                                       };
>> +                               };
>> +                               ac97_pins_a: ac97@0 {
>> +                                       ac97 {
>> +                                               sirf,pins = "ac97grp";
>> +                                               sirf,function = "ac97";
>> +                                       };
>> +                               };
>> +                               nand_pins_a: nand@0 {
>> +                                       nand {
>> +                                               sirf,pins = "nandgrp";
>> +                                               sirf,function = "nand";
>> +                                       };
>> +                               };
>> +                               usp0_pins_a: usp0@0 {
>> +                                       usp0 {
>> +                                               sirf,pins = "usp0grp";
>> +                                               sirf,function = "usp0";
>> +                                       };
>> +                               };
>> +                               usp1_pins_a: usp1@0 {
>> +                                       usp1 {
>> +                                               sirf,pins = "usp1grp";
>> +                                               sirf,function = "usp1";
>> +                                       };
>> +                               };
>> +                               usp2_pins_a: usp2@0 {
>> +                                       usp2 {
>> +                                               sirf,pins = "usp2grp";
>> +                                               sirf,function = "usp2";
>> +                                       };
>> +                               };
>> +                               usb0_utmi_drvbus_pins_a: usb0_utmi_drvbus@0 {
>> +                                       usb0_utmi_drvbus {
>> +                                               sirf,pins = "usb0_utmi_drvbusgrp";
>> +                                               sirf,function = "usb0_utmi_drvbus";
>> +                                       };
>> +                               };
>> +                               usb1_utmi_drvbus_pins_a: usb1_utmi_drvbus@0 {
>> +                                       usb1_utmi_drvbus {
>> +                                               sirf,pins = "usb1_utmi_drvbusgrp";
>> +                                               sirf,function = "usb1_utmi_drvbus";
>> +                                       };
>> +                               };
>> +                               warm_rst_pins_a: warm_rst@0 {
>> +                                       warm_rst {
>> +                                               sirf,pins = "warm_rstgrp";
>> +                                               sirf,function = "warm_rst";
>> +                                       };
>> +                               };
>> +                               pulse_count_pins_a: pulse_count@0 {
>> +                                       pulse_count {
>> +                                               sirf,pins = "pulse_countgrp";
>> +                                               sirf,function = "pulse_count";
>> +                                       };
>> +                               };
>> +                               cko0_rst_pins_a: cko0_rst@0 {
>> +                                       cko0_rst {
>> +                                               sirf,pins = "cko0_rstgrp";
>> +                                               sirf,function = "cko0_rst";
>> +                                       };
>> +                               };
>> +                               cko1_rst_pins_a: cko1_rst@0 {
>> +                                       cko1_rst {
>> +                                               sirf,pins = "cko1_rstgrp";
>> +                                               sirf,function = "cko1_rst";
>> +                                       };
>> +                               };
>> +                       };
>> +
>> +                       pwm@cc130000 {
>> +                               compatible = "sirf,marco-pwm";
>> +                               reg = <0xcc130000 0x10000>;
>> +                       };
>> +
>> +                       efusesys@cc140000 {
>> +                               compatible = "sirf,marco-efuse";
>> +                               reg = <0xcc140000 0x10000>;
>> +                       };
>> +
>> +                       pulsec@cc150000 {
>> +                               compatible = "sirf,marco-pulsec";
>> +                               reg = <0xcc150000 0x10000>;
>> +                               interrupts = <0 48 0>;
>> +                       };
>> +
>> +                       pci-iobg {
>> +                               compatible = "sirf,marco-pciiobg", "simple-bus";
>> +                               #address-cells = <1>;
>> +                               #size-cells = <1>;
>> +                               ranges = <0xcd000000 0xcd000000 0x1000000>;
>> +
>> +                               sd0: sdhci@cd000000 {
>> +                                       cell-index = <0>;
>> +                                       compatible = "sirf,marco-sdhc";
>> +                                       reg = <0xcd000000 0x100000>;
>> +                                       interrupts = <0 38 0>;
>> +                                       status = "disabled";
>> +                               };
>> +
>> +                               sd1: sdhci@cd100000 {
>> +                                       cell-index = <1>;
>> +                                       compatible = "sirf,marco-sdhc";
>> +                                       reg = <0xcd100000 0x100000>;
>> +                                       interrupts = <0 38 0>;
>> +                                       status = "disabled";
>> +                               };
>> +
>> +                               sd2: sdhci@cd200000 {
>> +                                       cell-index = <2>;
>> +                                       compatible = "sirf,marco-sdhc";
>> +                                       reg = <0xcd200000 0x100000>;
>> +                                       interrupts = <0 23 0>;
>> +                                       status = "disabled";
>> +                               };
>> +
>> +                               sd3: sdhci@cd300000 {
>> +                                       cell-index = <3>;
>> +                                       compatible = "sirf,marco-sdhc";
>> +                                       reg = <0xcd300000 0x100000>;
>> +                                       interrupts = <0 23 0>;
>> +                                       status = "disabled";
>> +                               };
>> +
>> +                               sd4: sdhci@cd400000 {
>> +                                       cell-index = <4>;
>> +                                       compatible = "sirf,marco-sdhc";
>> +                                       reg = <0xcd400000 0x100000>;
>> +                                       interrupts = <0 39 0>;
>> +                                       status = "disabled";
>> +                               };
>> +
>> +                               sd5: sdhci@cd500000 {
>> +                                       cell-index = <5>;
>> +                                       compatible = "sirf,marco-sdhc";
>> +                                       reg = <0xcd500000 0x100000>;
>> +                                       interrupts = <0 39 0>;
>> +                                       status = "disabled";
>> +                               };
>> +
>> +                               pci-copy@cd900000 {
>> +                                       compatible = "sirf,marco-pcicp";
>> +                                       reg = <0xcd900000 0x100000>;
>> +                                       interrupts = <0 40 0>;
>> +                               };
>> +
>> +                               rom-interface@cda00000 {
>> +                                       compatible = "sirf,marco-romif";
>> +                                       reg = <0xcda00000 0x100000>;
>> +                               };
>> +                       };
>> +               };
>> +
>> +               rtc-iobg {
>> +                       compatible = "sirf,marco-rtciobg", "sirf-marco-rtciobg-bus";
>> +                       #address-cells = <1>;
>> +                       #size-cells = <1>;
>> +                       reg = <0xc1000000 0x10000>;
>> +
>> +                       gpsrtc@1000 {
>> +                               compatible = "sirf,marco-gpsrtc";
>> +                               reg = <0x1000 0x1000>;
>> +                               interrupts = <0 55 0>,
>> +                                          <0 56 0>,
>> +                                          <0 57 0>;
>> +                       };
>> +
>> +                       sysrtc@2000 {
>> +                               compatible = "sirf,marco-sysrtc";
>> +                               reg = <0x2000 0x1000>;
>> +                               interrupts = <0 52 0>,
>> +                                          <0 53 0>,
>> +                                          <0 54 0>;
>> +                       };
>> +
>> +                       pwrc@3000 {
>> +                               compatible = "sirf,marco-pwrc";
>> +                               reg = <0x3000 0x1000>;
>> +                               interrupts = <0 32 0>;
>> +                       };
>> +               };
>> +
>> +               uus-iobg {
>> +                       compatible = "simple-bus";
>> +                       #address-cells = <1>;
>> +                       #size-cells = <1>;
>> +                       ranges = <0xce000000 0xce000000 0x1000000>;
>> +
>> +                       usb0: usb@ce000000 {
>> +                               compatible = "chipidea,ci13611a-marco";
>> +                               reg = <0xce000000 0x10000>;
>> +                               interrupts = <0 10 0>;
>> +                       };
>> +
>> +                       usb1: usb@ce010000 {
>> +                               compatible = "chipidea,ci13611a-marco";
>> +                               reg = <0xce010000 0x10000>;
>> +                               interrupts = <0 11 0>;
>> +                       };
>> +
>> +                       security@ce020000 {
>> +                               compatible = "sirf,marco-security";
>> +                               reg = <0xce020000 0x10000>;
>> +                               interrupts = <0 42 0>;
>> +                       };
>> +               };
>> +
>> +               can-iobg {
>> +                       compatible = "simple-bus";
>> +                       #address-cells = <1>;
>> +                       #size-cells = <1>;
>> +                       ranges = <0xd0000000 0xd0000000 0x1000000>;
>> +
>> +                       can0: can@d0000000 {
>> +                               compatible = "sirf,marco-can";
>> +                               reg = <0xd0000000 0x10000>;
>> +                       };
>> +
>> +                       can1: can@d0010000 {
>> +                               compatible = "sirf,marco-can";
>> +                               reg = <0xd0010000 0x10000>;
>> +                       };
>> +               };
>> +
>> +               lvds-iobg {
>> +                       compatible = "simple-bus";
>> +                       #address-cells = <1>;
>> +                       #size-cells = <1>;
>> +                       ranges = <0xd1000000 0xd1000000 0x1000000>;
>> +
>> +                       lvds@d1000000 {
>> +                               compatible = "sirf,marco-lvds";
>> +                               reg = <0xd1000000 0x10000>;
>> +                               interrupts = <0 64 0>;
>> +                       };
>> +               };
>> +       };
>> +};
>
> If you're able to deal with all that, you can add:
>
> Reviewed-by: Mark Rutland <mark.rutland@arm.com>
>
> For the compatible strings, it would be good if those devices which need
> special treatment compared to prima2 (and thus can't fall back on the prima2
> compatible strings) were listed in the commit message to aid review. Either
> that or list the ones which are compatible, whichever list is shorter.

yes. almost all can handled except some detailed and compatible
hardware  isssues, as i want to leave them to the day ic is fixed and
related drivers are begun.
for the moment, building the infrasture is necessary as other teams
can build their drivers and verified apps on it.

>
> Thanks,
> Mark.
>
-barry
diff mbox

Patch

diff --git a/arch/arm/boot/dts/marco-evb.dts b/arch/arm/boot/dts/marco-evb.dts
new file mode 100644
index 0000000..4e68d3c
--- /dev/null
+++ b/arch/arm/boot/dts/marco-evb.dts
@@ -0,0 +1,51 @@ 
+/*
+ * DTS file for CSR SiRFmarco Evaluation Board
+ *
+ * Copyright (c) 2012 Cambridge Silicon Radio Limited, a CSR plc group company.
+ *
+ * Licensed under GPLv2 or later.
+ */
+
+/dts-v1/;
+
+/include/ "marco.dtsi"
+
+/ {
+	model = "CSR SiRFmarco Evaluation Board";
+	compatible = "sirf,marco", "sirf,marco-cb";
+
+	memory {
+		reg = <0x40000000 0x60000000>;
+	};
+
+	axi {
+		peri-iobg {
+			uart1: uart@cc060000 {
+				status = "okay";
+			};
+			i2c0: i2c@cc0e0000 {
+			      status = "okay";
+			      fpga-cpld@4d {
+				      compatible = "sirf,fpga-cpld";
+				      reg = <0x4d>;
+			      };
+			};
+			spi1: spi@cc170000 {
+				status = "okay";
+				pinctrl-names = "default";
+				pinctrl-0 = <&spi1_pins_a>;
+				spi@0 {
+					compatible = "spidev";
+					reg = <0>;
+					spi-max-frequency = <1000000>;
+				};
+			};
+			pci-iobg {
+				sd0: sdhci@cd000000 {
+					bus-width = <8>;
+					status = "okay";
+				};
+			};
+		};
+	};
+};
diff --git a/arch/arm/boot/dts/marco.dtsi b/arch/arm/boot/dts/marco.dtsi
new file mode 100644
index 0000000..d6bad50
--- /dev/null
+++ b/arch/arm/boot/dts/marco.dtsi
@@ -0,0 +1,756 @@ 
+/*
+ * DTS file for CSR SiRFmarco SoC
+ *
+ * Copyright (c) 2012 Cambridge Silicon Radio Limited, a CSR plc group company.
+ *
+ * Licensed under GPLv2 or later.
+ */
+
+/include/ "skeleton.dtsi"
+/ {
+	compatible = "sirf,marco";
+	#address-cells = <1>;
+	#size-cells = <1>;
+	interrupt-parent = <&gic>;
+
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cpu@0 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a9";
+			reg = <0>;
+		};
+		cpu@1 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a9";
+			reg = <1>;
+		};
+	};
+
+	axi {
+		compatible = "simple-bus";
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges = <0x40000000 0x40000000 0xa0000000>;
+
+		l2-cache-controller@c0030000 {
+			compatible = "sirf,marco-pl310-cache", "arm,pl310-cache";
+			reg = <0xc0030000 0x1000>;
+			interrupts = <0 59 0>;
+			arm,tag-latency = <1 1 1>;
+			arm,data-latency = <1 1 1>;
+			arm,filter-ranges = <0x40000000 0x80000000>;
+		};
+
+		gic: interrupt-controller@c0011000 {
+			compatible = "arm,cortex-a9-gic";
+			interrupt-controller;
+			#interrupt-cells = <3>;
+			reg = <0xc0011000 0x1000>,
+			      <0xc0010100 0x0100>;
+		};
+
+		rstc-iobg {
+			compatible = "simple-bus";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0xc2000000 0xc2000000 0x1000000>;
+
+			reset-controller@c2000000 {
+				compatible = "sirf,marco-rstc";
+				reg = <0xc2000000 0x10000>;
+			};
+		};
+
+		sys-iobg {
+			compatible = "simple-bus";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0xc3000000 0xc3000000 0x1000000>;
+
+			clock-controller@c3000000 {
+				compatible = "sirf,marco-clkc";
+				reg = <0xc3000000 0x1000>;
+				interrupts = <0 3 0>;
+			};
+
+			rsc-controller@c3010000 {
+				compatible = "sirf,marco-rsc";
+				reg = <0xc3010000 0x1000>;
+			};
+		};
+
+		mem-iobg {
+			compatible = "simple-bus";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0xc4000000 0xc4000000 0x1000000>;
+
+			memory-controller@c4000000 {
+				compatible = "sirf,marco-memc";
+				reg = <0xc4000000 0x10000>;
+				interrupts = <0 27 0>;
+			};
+		};
+
+		disp-iobg0 {
+			compatible = "simple-bus";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0xc5000000 0xc5000000 0x1000000>;
+
+			display0@c5000000 {
+				compatible = "sirf,marco-lcd";
+				reg = <0xc5000000 0x10000>;
+				interrupts = <0 30 0>;
+			};
+
+			vpp0@c5010000 {
+				compatible = "sirf,marco-vpp";
+				reg = <0xc5010000 0x10000>;
+				interrupts = <0 31 0>;
+			};
+		};
+
+		disp-iobg1 {
+			compatible = "simple-bus";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0xc6000000 0xc6000000 0x1000000>;
+
+			display1@c6000000 {
+				compatible = "sirf,marco-lcd";
+				reg = <0xc6000000 0x10000>;
+				interrupts = <0 62 0>;
+			};
+
+			vpp1@c6010000 {
+				compatible = "sirf,marco-vpp";
+				reg = <0xc6010000 0x10000>;
+				interrupts = <0 63 0>;
+			};
+		};
+
+		graphics-iobg {
+			compatible = "simple-bus";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0xc8000000 0xc8000000 0x1000000>;
+
+			graphics@c8000000 {
+				compatible = "powervr,sgx540";
+				reg = <0xc8000000 0x1000000>;
+				interrupts = <0 6 0>;
+			};
+		};
+
+		multimedia-iobg {
+			compatible = "simple-bus";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0xc9000000 0xc9000000 0x1000000>;
+
+			multimedia@a0000000 {
+				compatible = "sirf,marco-video-codec";
+				reg = <0xc9000000 0x1000000>;
+				interrupts = <0 5 0>;
+			};
+		};
+
+		dsp-iobg {
+			compatible = "simple-bus";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0xca000000 0xca000000 0x2000000>;
+
+			dspif@ca000000 {
+				compatible = "sirf,marco-dspif";
+				reg = <0xca000000 0x10000>;
+				interrupts = <0 9 0>;
+			};
+
+			gps@ca010000 {
+				compatible = "sirf,marco-gps";
+				reg = <0xca010000 0x10000>;
+				interrupts = <0 7 0>;
+			};
+
+			dsp@cb000000 {
+				compatible = "sirf,marco-dsp";
+				reg = <0xcb000000 0x1000000>;
+				interrupts = <0 8 0>;
+			};
+		};
+
+		peri-iobg {
+			compatible = "simple-bus";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0xcc000000 0xcc000000 0x2000000>;
+
+			timer@cc020000 {
+				compatible = "sirf,marco-tick";
+				reg = <0xcc020000 0x1000>;
+				interrupts = <0 0 0>,
+					   <0 1 0>,
+					   <0 2 0>,
+					   <0 49 0>,
+					   <0 50 0>,
+					   <0 51 0>;
+			};
+
+			nand@cc030000 {
+				compatible = "sirf,marco-nand";
+				reg = <0xcc030000 0x10000>;
+				interrupts = <0 41 0>;
+			};
+
+			audio@cc040000 {
+				compatible = "sirf,marco-audio";
+				reg = <0xcc040000 0x10000>;
+				interrupts = <0 35 0>;
+			};
+
+			uart0: uart@cc050000 {
+				cell-index = <0>;
+				compatible = "sirf,marco-uart";
+				reg = <0xcc050000 0x1000>;
+				interrupts = <0 17 0>;
+				fifosize = <128>;
+				status = "disabled";
+			};
+
+			uart1: uart@cc060000 {
+				cell-index = <1>;
+				compatible = "sirf,marco-uart";
+				reg = <0xcc060000 0x1000>;
+				interrupts = <0 18 0>;
+				fifosize = <32>;
+				status = "disabled";
+			};
+
+			uart2: uart@cc070000 {
+				cell-index = <2>;
+				compatible = "sirf,marco-uart";
+				reg = <0xcc070000 0x1000>;
+				interrupts = <0 19 0>;
+				fifosize = <128>;
+				status = "disabled";
+			};
+
+			uart3: uart@cc190000 {
+				cell-index = <3>;
+				compatible = "sirf,marco-uart";
+				reg = <0xcc190000 0x1000>;
+				interrupts = <0 66 0>;
+				fifosize = <128>;
+				status = "disabled";
+			};
+
+			uart4: uart@cc1a0000 {
+				cell-index = <4>;
+				compatible = "sirf,marco-uart";
+				reg = <0xcc1a0000 0x1000>;
+				interrupts = <0 69 0>;
+				fifosize = <128>;
+				status = "disabled";
+			};
+
+			usp0: usp@cc080000 {
+				cell-index = <0>;
+				compatible = "sirf,marco-usp";
+				reg = <0xcc080000 0x10000>;
+				interrupts = <0 20 0>;
+				status = "disabled";
+			};
+
+			usp1: usp@cc090000 {
+				cell-index = <1>;
+				compatible = "sirf,marco-usp";
+				reg = <0xcc090000 0x10000>;
+				interrupts = <0 21 0>;
+				status = "disabled";
+			};
+
+			usp2: usp@cc0a0000 {
+				cell-index = <2>;
+				compatible = "sirf,marco-usp";
+				reg = <0xcc0a0000 0x10000>;
+				interrupts = <0 22 0>;
+				status = "disabled";
+			};
+
+			dmac0: dma-controller@cc0b0000 {
+				cell-index = <0>;
+				compatible = "sirf,marco-dmac";
+				reg = <0xcc0b0000 0x10000>;
+				interrupts = <0 12 0>;
+			};
+
+			dmac1: dma-controller@cc160000 {
+				cell-index = <1>;
+				compatible = "sirf,marco-dmac";
+				reg = <0xcc160000 0x10000>;
+				interrupts = <0 13 0>;
+			};
+
+			vip@cc0c0000 {
+				compatible = "sirf,marco-vip";
+				reg = <0xcc0c0000 0x10000>;
+			};
+
+			spi0: spi@cc0d0000 {
+				cell-index = <0>;
+				compatible = "sirf,marco-spi";
+				reg = <0xcc0d0000 0x10000>;
+				interrupts = <0 15 0>;
+				sirf,spi-num-chipselects = <1>;
+				cs-gpios = <&gpio 0 0>;
+				sirf,spi-dma-rx-channel = <25>;
+				sirf,spi-dma-tx-channel = <20>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+				status = "disabled";
+			};
+
+			spi1: spi@cc170000 {
+				cell-index = <1>;
+				compatible = "sirf,marco-spi";
+				reg = <0xcc170000 0x10000>;
+				interrupts = <0 16 0>;
+				sirf,spi-num-chipselects = <1>;
+				cs-gpios = <&gpio 0 0>;
+				sirf,spi-dma-rx-channel = <12>;
+				sirf,spi-dma-tx-channel = <13>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+				status = "disabled";
+			};
+
+			i2c0: i2c@cc0e0000 {
+				cell-index = <0>;
+				compatible = "sirf,marco-i2c";
+				reg = <0xcc0e0000 0x10000>;
+				interrupts = <0 24 0>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+				status = "disabled";
+			};
+
+			i2c1: i2c@cc0f0000 {
+				cell-index = <1>;
+				compatible = "sirf,marco-i2c";
+				reg = <0xcc0f0000 0x10000>;
+				interrupts = <0 25 0>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+				status = "disabled";
+			};
+
+			tsc@cc110000 {
+				compatible = "sirf,marco-tsc";
+				reg = <0xcc110000 0x10000>;
+				interrupts = <0 33 0>;
+			};
+
+			gpio: pinctrl@cc120000 {
+				#gpio-cells = <2>;
+				#interrupt-cells = <2>;
+				compatible = "sirf,marco-pinctrl";
+				reg = <0xcc120000 0x10000>;
+				interrupts = <0 43 0>,
+					   <0 44 0>,
+					   <0 45 0>,
+					   <0 46 0>,
+					   <0 47 0>;
+				gpio-controller;
+				interrupt-controller;
+
+				lcd_16pins_a: lcd0@0 {
+					lcd {
+						sirf,pins = "lcd_16bitsgrp";
+						sirf,function = "lcd_16bits";
+					};
+				};
+				lcd_18pins_a: lcd0@1 {
+					lcd {
+						sirf,pins = "lcd_18bitsgrp";
+						sirf,function = "lcd_18bits";
+					};
+				};
+				lcd_24pins_a: lcd0@2 {
+					lcd {
+						sirf,pins = "lcd_24bitsgrp";
+						sirf,function = "lcd_24bits";
+					};
+				};
+				lcdrom_pins_a: lcdrom0@0 {
+					lcd {
+						sirf,pins = "lcdromgrp";
+						sirf,function = "lcdrom";
+					};
+				};
+				uart0_pins_a: uart0@0 {
+					uart {
+						sirf,pins = "uart0grp";
+						sirf,function = "uart0";
+					};
+				};
+				uart1_pins_a: uart1@0 {
+					uart {
+						sirf,pins = "uart1grp";
+						sirf,function = "uart1";
+					};
+				};
+				uart2_pins_a: uart2@0 {
+					uart {
+						sirf,pins = "uart2grp";
+						sirf,function = "uart2";
+					};
+				};
+				uart2_noflow_pins_a: uart2@1 {
+					uart {
+						sirf,pins = "uart2_nostreamctrlgrp";
+						sirf,function = "uart2_nostreamctrl";
+					};
+				};
+				spi0_pins_a: spi0@0 {
+					spi {
+						sirf,pins = "spi0grp";
+						sirf,function = "spi0";
+					};
+				};
+				spi1_pins_a: spi1@0 {
+					spi {
+						sirf,pins = "spi1grp";
+						sirf,function = "spi1";
+					};
+				};
+				i2c0_pins_a: i2c0@0 {
+					i2c {
+						sirf,pins = "i2c0grp";
+						sirf,function = "i2c0";
+					};
+				};
+				i2c1_pins_a: i2c1@0 {
+					i2c {
+						sirf,pins = "i2c1grp";
+						sirf,function = "i2c1";
+					};
+				};
+				pwm0_pins_a: pwm0@0 {
+				        pwm {
+				                sirf,pins = "pwm0grp";
+				                sirf,function = "pwm0";
+				        };
+				};
+				pwm1_pins_a: pwm1@0 {
+				        pwm {
+				                sirf,pins = "pwm1grp";
+				                sirf,function = "pwm1";
+				        };
+				};
+				pwm2_pins_a: pwm2@0 {
+				        pwm {
+				                sirf,pins = "pwm2grp";
+				                sirf,function = "pwm2";
+				        };
+				};
+				pwm3_pins_a: pwm3@0 {
+				        pwm {
+				                sirf,pins = "pwm3grp";
+				                sirf,function = "pwm3";
+				        };
+				};
+				gps_pins_a: gps@0 {
+				        gps {
+				                sirf,pins = "gpsgrp";
+				                sirf,function = "gps";
+				        };
+				};
+				vip_pins_a: vip@0 {
+				        vip {
+				                sirf,pins = "vipgrp";
+				                sirf,function = "vip";
+				        };
+				};
+				sdmmc0_pins_a: sdmmc0@0 {
+				        sdmmc0 {
+				                sirf,pins = "sdmmc0grp";
+				                sirf,function = "sdmmc0";
+				        };
+				};
+				sdmmc1_pins_a: sdmmc1@0 {
+				        sdmmc1 {
+				                sirf,pins = "sdmmc1grp";
+				                sirf,function = "sdmmc1";
+				        };
+				};
+				sdmmc2_pins_a: sdmmc2@0 {
+				        sdmmc2 {
+				                sirf,pins = "sdmmc2grp";
+				                sirf,function = "sdmmc2";
+				        };
+				};
+				sdmmc3_pins_a: sdmmc3@0 {
+				        sdmmc3 {
+				                sirf,pins = "sdmmc3grp";
+				                sirf,function = "sdmmc3";
+				        };
+				};
+				sdmmc4_pins_a: sdmmc4@0 {
+				        sdmmc4 {
+				                sirf,pins = "sdmmc4grp";
+				                sirf,function = "sdmmc4";
+				        };
+				};
+				sdmmc5_pins_a: sdmmc5@0 {
+				        sdmmc5 {
+				                sirf,pins = "sdmmc5grp";
+				                sirf,function = "sdmmc5";
+				        };
+				};
+				i2s_pins_a: i2s@0 {
+				        i2s {
+				                sirf,pins = "i2sgrp";
+				                sirf,function = "i2s";
+				        };
+				};
+				ac97_pins_a: ac97@0 {
+				        ac97 {
+				                sirf,pins = "ac97grp";
+				                sirf,function = "ac97";
+				        };
+				};
+				nand_pins_a: nand@0 {
+				        nand {
+				                sirf,pins = "nandgrp";
+				                sirf,function = "nand";
+				        };
+				};
+				usp0_pins_a: usp0@0 {
+				        usp0 {
+				                sirf,pins = "usp0grp";
+				                sirf,function = "usp0";
+				        };
+				};
+				usp1_pins_a: usp1@0 {
+				        usp1 {
+				                sirf,pins = "usp1grp";
+				                sirf,function = "usp1";
+				        };
+				};
+				usp2_pins_a: usp2@0 {
+				        usp2 {
+				                sirf,pins = "usp2grp";
+				                sirf,function = "usp2";
+				        };
+				};
+				usb0_utmi_drvbus_pins_a: usb0_utmi_drvbus@0 {
+				        usb0_utmi_drvbus {
+				                sirf,pins = "usb0_utmi_drvbusgrp";
+				                sirf,function = "usb0_utmi_drvbus";
+				        };
+				};
+				usb1_utmi_drvbus_pins_a: usb1_utmi_drvbus@0 {
+				        usb1_utmi_drvbus {
+				                sirf,pins = "usb1_utmi_drvbusgrp";
+				                sirf,function = "usb1_utmi_drvbus";
+				        };
+				};
+				warm_rst_pins_a: warm_rst@0 {
+				        warm_rst {
+				                sirf,pins = "warm_rstgrp";
+				                sirf,function = "warm_rst";
+				        };
+				};
+				pulse_count_pins_a: pulse_count@0 {
+				        pulse_count {
+				                sirf,pins = "pulse_countgrp";
+				                sirf,function = "pulse_count";
+				        };
+				};
+				cko0_rst_pins_a: cko0_rst@0 {
+				        cko0_rst {
+				                sirf,pins = "cko0_rstgrp";
+				                sirf,function = "cko0_rst";
+				        };
+				};
+				cko1_rst_pins_a: cko1_rst@0 {
+				        cko1_rst {
+				                sirf,pins = "cko1_rstgrp";
+				                sirf,function = "cko1_rst";
+				        };
+				};
+			};
+
+			pwm@cc130000 {
+				compatible = "sirf,marco-pwm";
+				reg = <0xcc130000 0x10000>;
+			};
+
+			efusesys@cc140000 {
+				compatible = "sirf,marco-efuse";
+				reg = <0xcc140000 0x10000>;
+			};
+
+			pulsec@cc150000 {
+				compatible = "sirf,marco-pulsec";
+				reg = <0xcc150000 0x10000>;
+				interrupts = <0 48 0>;
+			};
+
+			pci-iobg {
+				compatible = "sirf,marco-pciiobg", "simple-bus";
+				#address-cells = <1>;
+				#size-cells = <1>;
+				ranges = <0xcd000000 0xcd000000 0x1000000>;
+
+				sd0: sdhci@cd000000 {
+					cell-index = <0>;
+					compatible = "sirf,marco-sdhc";
+					reg = <0xcd000000 0x100000>;
+					interrupts = <0 38 0>;
+					status = "disabled";
+				};
+
+				sd1: sdhci@cd100000 {
+					cell-index = <1>;
+					compatible = "sirf,marco-sdhc";
+					reg = <0xcd100000 0x100000>;
+					interrupts = <0 38 0>;
+					status = "disabled";
+				};
+
+				sd2: sdhci@cd200000 {
+					cell-index = <2>;
+					compatible = "sirf,marco-sdhc";
+					reg = <0xcd200000 0x100000>;
+					interrupts = <0 23 0>;
+					status = "disabled";
+				};
+
+				sd3: sdhci@cd300000 {
+					cell-index = <3>;
+					compatible = "sirf,marco-sdhc";
+					reg = <0xcd300000 0x100000>;
+					interrupts = <0 23 0>;
+					status = "disabled";
+				};
+
+				sd4: sdhci@cd400000 {
+					cell-index = <4>;
+					compatible = "sirf,marco-sdhc";
+					reg = <0xcd400000 0x100000>;
+					interrupts = <0 39 0>;
+					status = "disabled";
+				};
+
+				sd5: sdhci@cd500000 {
+					cell-index = <5>;
+					compatible = "sirf,marco-sdhc";
+					reg = <0xcd500000 0x100000>;
+					interrupts = <0 39 0>;
+					status = "disabled";
+				};
+
+				pci-copy@cd900000 {
+					compatible = "sirf,marco-pcicp";
+					reg = <0xcd900000 0x100000>;
+					interrupts = <0 40 0>;
+				};
+
+				rom-interface@cda00000 {
+					compatible = "sirf,marco-romif";
+					reg = <0xcda00000 0x100000>;
+				};
+			};
+		};
+
+		rtc-iobg {
+			compatible = "sirf,marco-rtciobg", "sirf-marco-rtciobg-bus";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			reg = <0xc1000000 0x10000>;
+
+			gpsrtc@1000 {
+				compatible = "sirf,marco-gpsrtc";
+				reg = <0x1000 0x1000>;
+				interrupts = <0 55 0>,
+					   <0 56 0>,
+					   <0 57 0>;
+			};
+
+			sysrtc@2000 {
+				compatible = "sirf,marco-sysrtc";
+				reg = <0x2000 0x1000>;
+				interrupts = <0 52 0>,
+					   <0 53 0>,
+					   <0 54 0>;
+			};
+
+			pwrc@3000 {
+				compatible = "sirf,marco-pwrc";
+				reg = <0x3000 0x1000>;
+				interrupts = <0 32 0>;
+			};
+		};
+
+		uus-iobg {
+			compatible = "simple-bus";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0xce000000 0xce000000 0x1000000>;
+
+			usb0: usb@ce000000 {
+				compatible = "chipidea,ci13611a-marco";
+				reg = <0xce000000 0x10000>;
+				interrupts = <0 10 0>;
+			};
+
+			usb1: usb@ce010000 {
+				compatible = "chipidea,ci13611a-marco";
+				reg = <0xce010000 0x10000>;
+				interrupts = <0 11 0>;
+			};
+
+			security@ce020000 {
+				compatible = "sirf,marco-security";
+				reg = <0xce020000 0x10000>;
+				interrupts = <0 42 0>;
+			};
+		};
+
+		can-iobg {
+			compatible = "simple-bus";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0xd0000000 0xd0000000 0x1000000>;
+
+			can0: can@d0000000 {
+				compatible = "sirf,marco-can";
+				reg = <0xd0000000 0x10000>;
+			};
+
+			can1: can@d0010000 {
+				compatible = "sirf,marco-can";
+				reg = <0xd0010000 0x10000>;
+			};
+		};
+
+		lvds-iobg {
+			compatible = "simple-bus";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0xd1000000 0xd1000000 0x1000000>;
+
+			lvds@d1000000 {
+				compatible = "sirf,marco-lvds";
+				reg = <0xd1000000 0x10000>;
+				interrupts = <0 64 0>;
+			};
+		};
+	};
+};