Merge branch 'lpc32xx/defconfig' of git://git.antcom.de/linux-2.6 into next/soc
authorOlof Johansson <olof@lixom.net>
Wed, 3 Apr 2013 01:33:58 +0000 (18:33 -0700)
committerOlof Johansson <olof@lixom.net>
Wed, 3 Apr 2013 01:33:58 +0000 (18:33 -0700)
* 'lpc32xx/defconfig' of git://git.antcom.de/linux-2.6: (604 commits)
  ARM: LPC32xx: defconfig update: Cleanup (EXPERIMENTAL)
  ARM: LPC32xx: defconfig update: Remove the museum NAND option
  ARM: LPC32xx: defconfig update: Default drivers and cleanup
  ARM: LPC32xx: defconfig update: gpio and keys
  + Linux 3.9-rc4

Signed-off-by: Olof Johansson <olof@lixom.net>
Conflicts:
arch/arm/Kconfig

67 files changed:
Documentation/devicetree/bindings/arm/bcm/bcm,kona-timer.txt [new file with mode: 0644]
arch/arm/Kconfig
arch/arm/boot/dts/Makefile
arch/arm/boot/dts/atlas6-evb.dts [new file with mode: 0644]
arch/arm/boot/dts/atlas6.dtsi [new file with mode: 0644]
arch/arm/boot/dts/bcm11351.dtsi
arch/arm/boot/dts/r8a7779.dtsi [new file with mode: 0644]
arch/arm/boot/dts/sama5d3.dtsi [new file with mode: 0644]
arch/arm/boot/dts/sama5d31ek.dts [new file with mode: 0644]
arch/arm/boot/dts/sama5d33ek.dts [new file with mode: 0644]
arch/arm/boot/dts/sama5d34ek.dts [new file with mode: 0644]
arch/arm/boot/dts/sama5d35ek.dts [new file with mode: 0644]
arch/arm/boot/dts/sama5d3xcm.dtsi [new file with mode: 0644]
arch/arm/boot/dts/sama5d3xdm.dtsi [new file with mode: 0644]
arch/arm/boot/dts/sama5d3xmb.dtsi [new file with mode: 0644]
arch/arm/configs/ape6evm_defconfig [new file with mode: 0644]
arch/arm/configs/armadillo800eva_defconfig
arch/arm/configs/at91_dt_defconfig
arch/arm/configs/at91sam9260_defconfig
arch/arm/configs/at91sam9g20_defconfig
arch/arm/configs/at91sam9g45_defconfig
arch/arm/configs/kzm9g_defconfig
arch/arm/configs/mackerel_defconfig
arch/arm/configs/marzen_defconfig
arch/arm/configs/sama5_defconfig [new file with mode: 0644]
arch/arm/configs/u8500_defconfig
arch/arm/mach-at91/Kconfig
arch/arm/mach-at91/Kconfig.non_dt [new file with mode: 0644]
arch/arm/mach-at91/Makefile
arch/arm/mach-at91/at91rm9200.c
arch/arm/mach-at91/at91sam9260.c
arch/arm/mach-at91/at91sam9261.c
arch/arm/mach-at91/at91sam9263.c
arch/arm/mach-at91/at91sam9g45.c
arch/arm/mach-at91/at91sam9n12.c
arch/arm/mach-at91/at91sam9rl.c
arch/arm/mach-at91/at91sam9x5.c
arch/arm/mach-at91/board-dt-rm9200.c [moved from arch/arm/mach-at91/board-rm9200-dt.c with 100% similarity]
arch/arm/mach-at91/board-dt-sam9.c [moved from arch/arm/mach-at91/board-dt.c with 100% similarity]
arch/arm/mach-at91/board-dt-sama5.c [new file with mode: 0644]
arch/arm/mach-at91/clock.c
arch/arm/mach-at91/clock.h
arch/arm/mach-at91/include/mach/at91_pmc.h
arch/arm/mach-at91/include/mach/cpu.h
arch/arm/mach-at91/include/mach/sama5d3.h [new file with mode: 0644]
arch/arm/mach-at91/sama5d3.c [new file with mode: 0644]
arch/arm/mach-at91/setup.c
arch/arm/mach-at91/soc.h
arch/arm/mach-prima2/Kconfig
arch/arm/mach-prima2/common.c
arch/arm/mach-shmobile/Makefile
arch/arm/mach-shmobile/clock-r8a7740.c
arch/arm/mach-shmobile/clock-r8a7779.c
arch/arm/mach-shmobile/clock-sh73a0.c
arch/arm/mach-shmobile/headsmp-scu.S [moved from arch/arm/mach-shmobile/headsmp-sh73a0.S with 85% similarity]
arch/arm/mach-shmobile/hotplug.c [deleted file]
arch/arm/mach-shmobile/include/mach/common.h
arch/arm/mach-shmobile/include/mach/irqs.h
arch/arm/mach-shmobile/intc-r8a7779.c
arch/arm/mach-shmobile/intc-sh73a0.c
arch/arm/mach-shmobile/setup-emev2.c
arch/arm/mach-shmobile/setup-r8a7779.c
arch/arm/mach-shmobile/setup-sh73a0.c
arch/arm/mach-shmobile/smp-emev2.c
arch/arm/mach-shmobile/smp-r8a7779.c
arch/arm/mach-shmobile/smp-sh73a0.c
arch/arm/mach-ux500/cache-l2x0.c

diff --git a/Documentation/devicetree/bindings/arm/bcm/bcm,kona-timer.txt b/Documentation/devicetree/bindings/arm/bcm/bcm,kona-timer.txt
new file mode 100644 (file)
index 0000000..59fa6e6
--- /dev/null
@@ -0,0 +1,19 @@
+Broadcom Kona Family timer
+-----------------------------------------------------
+This timer is used in the following Broadcom SoCs:
+ BCM11130, BCM11140, BCM11351, BCM28145, BCM28155
+
+Required properties:
+- compatible : "bcm,kona-timer"
+- reg : Register range for the timer
+- interrupts : interrupt for the timer
+- clock-frequency: frequency that the clock operates
+
+Example:
+       timer@35006000 {
+               compatible = "bcm,kona-timer";
+               reg = <0x35006000 0x1000>;
+               interrupts = <0x0 7 0x4>;
+               clock-frequency = <32768>;
+       };
+
index 13b7394..1e8742b 100644 (file)
@@ -1660,7 +1660,7 @@ config ARCH_NR_GPIO
        int
        default 1024 if ARCH_SHMOBILE || ARCH_TEGRA
        default 512 if SOC_OMAP5
-       default 355 if ARCH_U8500
+       default 392 if ARCH_U8500
        default 288 if ARCH_VT8500 || ARCH_SUNXI
        default 264 if MACH_H4700
        default 0
index 9c62558..234e78f 100644 (file)
@@ -31,6 +31,11 @@ dtb-$(CONFIG_ARCH_AT91) += at91sam9g25ek.dtb
 dtb-$(CONFIG_ARCH_AT91) += at91sam9g35ek.dtb
 dtb-$(CONFIG_ARCH_AT91) += at91sam9x25ek.dtb
 dtb-$(CONFIG_ARCH_AT91) += at91sam9x35ek.dtb
+# sama5d3
+dtb-$(CONFIG_ARCH_AT91)        += sama5d31ek.dtb
+dtb-$(CONFIG_ARCH_AT91)        += sama5d33ek.dtb
+dtb-$(CONFIG_ARCH_AT91)        += sama5d34ek.dtb
+dtb-$(CONFIG_ARCH_AT91)        += sama5d35ek.dtb
 
 dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb
 dtb-$(CONFIG_ARCH_BCM) += bcm11351-brt.dtb
diff --git a/arch/arm/boot/dts/atlas6-evb.dts b/arch/arm/boot/dts/atlas6-evb.dts
new file mode 100644 (file)
index 0000000..ab042ca
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * DTS file for CSR SiRFatlas6 Evaluation Board
+ *
+ * Copyright (c) 2012 Cambridge Silicon Radio Limited, a CSR plc group company.
+ *
+ * Licensed under GPLv2 or later.
+ */
+
+/dts-v1/;
+
+/include/ "atlas6.dtsi"
+
+/ {
+       model = "CSR SiRFatlas6 Evaluation Board";
+       compatible = "sirf,atlas6-cb", "sirf,atlas6";
+
+       memory {
+               reg = <0x00000000 0x20000000>;
+       };
+
+       axi {
+               peri-iobg {
+                       uart@b0060000 {
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&uart1_pins_a>;
+                       };
+                       spi@b00d0000 {
+                               status = "okay";
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&spi0_pins_a>;
+                               spi@0 {
+                                       compatible = "spidev";
+                                       reg = <0>;
+                                       spi-max-frequency = <1000000>;
+                               };
+                       };
+                       spi@b0170000 {
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&spi1_pins_a>;
+                       };
+                       i2c0: i2c@b00e0000 {
+                               status = "okay";
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&i2c0_pins_a>;
+                               lcd@40 {
+                                       compatible = "sirf,lcd";
+                                       reg = <0x40>;
+                               };
+                       };
+
+               };
+               disp-iobg {
+                       lcd@90010000 {
+                               status = "okay";
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&lcd_24pins_a>;
+                       };
+               };
+       };
+       display: display@0 {
+           panels {
+               panel0: panel@0 {
+                       panel-name = "Innolux TFT";
+                       hactive = <800>;
+                       vactive = <480>;
+                       left_margin = <20>;
+                       right_margin = <234>;
+                       upper_margin = <3>;
+                       lower_margin = <41>;
+                       hsync_len = <3>;
+                       vsync_len = <2>;
+                       pixclock = <33264000>;
+                       sync = <3>;
+                       timing = <0x88>;
+                       };
+           };
+       };
+};
diff --git a/arch/arm/boot/dts/atlas6.dtsi b/arch/arm/boot/dts/atlas6.dtsi
new file mode 100644 (file)
index 0000000..7d1a279
--- /dev/null
@@ -0,0 +1,668 @@
+/*
+ * DTS file for CSR SiRFatlas6 SoC
+ *
+ * Copyright (c) 2012 Cambridge Silicon Radio Limited, a CSR plc group company.
+ *
+ * Licensed under GPLv2 or later.
+ */
+
+/include/ "skeleton.dtsi"
+/ {
+       compatible = "sirf,atlas6";
+       #address-cells = <1>;
+       #size-cells = <1>;
+       interrupt-parent = <&intc>;
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               cpu@0 {
+                       reg = <0x0>;
+                       d-cache-line-size = <32>;
+                       i-cache-line-size = <32>;
+                       d-cache-size = <32768>;
+                       i-cache-size = <32768>;
+                       /* from bootloader */
+                       timebase-frequency = <0>;
+                       bus-frequency = <0>;
+                       clock-frequency = <0>;
+               };
+       };
+
+       axi {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges = <0x40000000 0x40000000 0x80000000>;
+
+               intc: interrupt-controller@80020000 {
+                       #interrupt-cells = <1>;
+                       interrupt-controller;
+                       compatible = "sirf,prima2-intc";
+                       reg = <0x80020000 0x1000>;
+               };
+
+               sys-iobg {
+                       compatible = "simple-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0x88000000 0x88000000 0x40000>;
+
+                       clks: clock-controller@88000000 {
+                               compatible = "sirf,atlas6-clkc";
+                               reg = <0x88000000 0x1000>;
+                               interrupts = <3>;
+                               #clock-cells = <1>;
+                       };
+
+                       reset-controller@88010000 {
+                               compatible = "sirf,prima2-rstc";
+                               reg = <0x88010000 0x1000>;
+                       };
+
+                       rsc-controller@88020000 {
+                               compatible = "sirf,prima2-rsc";
+                               reg = <0x88020000 0x1000>;
+                       };
+               };
+
+               mem-iobg {
+                       compatible = "simple-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0x90000000 0x90000000 0x10000>;
+
+                       memory-controller@90000000 {
+                               compatible = "sirf,prima2-memc";
+                               reg = <0x90000000 0x10000>;
+                               interrupts = <27>;
+                               clocks = <&clks 5>;
+                       };
+               };
+
+               disp-iobg {
+                       compatible = "simple-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0x90010000 0x90010000 0x30000>;
+
+                       lcd@90010000 {
+                               compatible = "sirf,prima2-lcd";
+                               reg = <0x90010000 0x20000>;
+                               interrupts = <30>;
+                               clocks = <&clks 34>;
+                               display=<&display>;
+                               /* later transfer to pwm */
+                               bl-gpio = <&gpio 7 0>;
+                               default-panel = <&panel0>;
+                       };
+
+                       vpp@90020000 {
+                               compatible = "sirf,prima2-vpp";
+                               reg = <0x90020000 0x10000>;
+                               interrupts = <31>;
+                               clocks = <&clks 35>;
+                       };
+               };
+
+               graphics-iobg {
+                       compatible = "simple-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0x98000000 0x98000000 0x8000000>;
+
+                       graphics@98000000 {
+                               compatible = "powervr,sgx510";
+                               reg = <0x98000000 0x8000000>;
+                               interrupts = <6>;
+                               clocks = <&clks 32>;
+                       };
+               };
+
+               dsp-iobg {
+                       compatible = "simple-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0xa8000000 0xa8000000 0x2000000>;
+
+                       dspif@a8000000 {
+                               compatible = "sirf,prima2-dspif";
+                               reg = <0xa8000000 0x10000>;
+                               interrupts = <9>;
+                       };
+
+                       gps@a8010000 {
+                               compatible = "sirf,prima2-gps";
+                               reg = <0xa8010000 0x10000>;
+                               interrupts = <7>;
+                               clocks = <&clks 9>;
+                       };
+
+                       dsp@a9000000 {
+                               compatible = "sirf,prima2-dsp";
+                               reg = <0xa9000000 0x1000000>;
+                               interrupts = <8>;
+                               clocks = <&clks 8>;
+                       };
+               };
+
+               peri-iobg {
+                       compatible = "simple-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0xb0000000 0xb0000000 0x180000>,
+                              <0x56000000 0x56000000 0x1b00000>;
+
+                       timer@b0020000 {
+                               compatible = "sirf,prima2-tick";
+                               reg = <0xb0020000 0x1000>;
+                               interrupts = <0>;
+                       };
+
+                       nand@b0030000 {
+                               compatible = "sirf,prima2-nand";
+                               reg = <0xb0030000 0x10000>;
+                               interrupts = <41>;
+                               clocks = <&clks 26>;
+                       };
+
+                       audio@b0040000 {
+                               compatible = "sirf,prima2-audio";
+                               reg = <0xb0040000 0x10000>;
+                               interrupts = <35>;
+                               clocks = <&clks 27>;
+                       };
+
+                       uart0: uart@b0050000 {
+                               cell-index = <0>;
+                               compatible = "sirf,prima2-uart";
+                               reg = <0xb0050000 0x1000>;
+                               interrupts = <17>;
+                               fifosize = <128>;
+                               clocks = <&clks 13>;
+                       };
+
+                       uart1: uart@b0060000 {
+                               cell-index = <1>;
+                               compatible = "sirf,prima2-uart";
+                               reg = <0xb0060000 0x1000>;
+                               interrupts = <18>;
+                               fifosize = <32>;
+                               clocks = <&clks 14>;
+                       };
+
+                       uart2: uart@b0070000 {
+                               cell-index = <2>;
+                               compatible = "sirf,prima2-uart";
+                               reg = <0xb0070000 0x1000>;
+                               interrupts = <19>;
+                               fifosize = <128>;
+                               clocks = <&clks 15>;
+                       };
+
+                       usp0: usp@b0080000 {
+                               cell-index = <0>;
+                               compatible = "sirf,prima2-usp";
+                               reg = <0xb0080000 0x10000>;
+                               interrupts = <20>;
+                               clocks = <&clks 28>;
+                       };
+
+                       usp1: usp@b0090000 {
+                               cell-index = <1>;
+                               compatible = "sirf,prima2-usp";
+                               reg = <0xb0090000 0x10000>;
+                               interrupts = <21>;
+                               clocks = <&clks 29>;
+                       };
+
+                       dmac0: dma-controller@b00b0000 {
+                               cell-index = <0>;
+                               compatible = "sirf,prima2-dmac";
+                               reg = <0xb00b0000 0x10000>;
+                               interrupts = <12>;
+                               clocks = <&clks 24>;
+                       };
+
+                       dmac1: dma-controller@b0160000 {
+                               cell-index = <1>;
+                               compatible = "sirf,prima2-dmac";
+                               reg = <0xb0160000 0x10000>;
+                               interrupts = <13>;
+                               clocks = <&clks 25>;
+                       };
+
+                       vip@b00C0000 {
+                               compatible = "sirf,prima2-vip";
+                               reg = <0xb00C0000 0x10000>;
+                               clocks = <&clks 31>;
+                       };
+
+                       spi0: spi@b00d0000 {
+                               cell-index = <0>;
+                               compatible = "sirf,prima2-spi";
+                               reg = <0xb00d0000 0x10000>;
+                               interrupts = <15>;
+                               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>;
+                               clocks = <&clks 19>;
+                               status = "disabled";
+                       };
+
+                       spi1: spi@b0170000 {
+                               cell-index = <1>;
+                               compatible = "sirf,prima2-spi";
+                               reg = <0xb0170000 0x10000>;
+                               interrupts = <16>;
+                               clocks = <&clks 20>;
+                               status = "disabled";
+                       };
+
+                       i2c0: i2c@b00e0000 {
+                               cell-index = <0>;
+                               compatible = "sirf,prima2-i2c";
+                               reg = <0xb00e0000 0x10000>;
+                               interrupts = <24>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clks 17>;
+                       };
+
+                       i2c1: i2c@b00f0000 {
+                               cell-index = <1>;
+                               compatible = "sirf,prima2-i2c";
+                               reg = <0xb00f0000 0x10000>;
+                               interrupts = <25>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               clocks = <&clks 18>;
+                       };
+
+                       tsc@b0110000 {
+                               compatible = "sirf,prima2-tsc";
+                               reg = <0xb0110000 0x10000>;
+                               interrupts = <33>;
+                               clocks = <&clks 16>;
+                       };
+
+                       gpio: pinctrl@b0120000 {
+                               #gpio-cells = <2>;
+                               #interrupt-cells = <2>;
+                               compatible = "sirf,atlas6-pinctrl";
+                               reg = <0xb0120000 0x10000>;
+                               interrupts = <43 44 45 46 47>;
+                               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";
+                                        };
+                                };
+                               pwm4_pins_a: pwm4@0 {
+                                        pwm {
+                                                sirf,pins = "pwm4grp";
+                                                sirf,function = "pwm4";
+                                        };
+                                };
+                                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";
+                                        };
+                                };
+                               sdmmc2_nowp_pins_a: sdmmc2_nowp@0 {
+                                        sdmmc2_nowp {
+                                                sirf,pins = "sdmmc2_nowpgrp";
+                                                sirf,function = "sdmmc2_nowp";
+                                        };
+                                };
+                                sdmmc3_pins_a: sdmmc3@0 {
+                                        sdmmc3 {
+                                                sirf,pins = "sdmmc3grp";
+                                                sirf,function = "sdmmc3";
+                                        };
+                                };
+                                sdmmc5_pins_a: sdmmc5@0 {
+                                        sdmmc5 {
+                                                sirf,pins = "sdmmc5grp";
+                                                sirf,function = "sdmmc5";
+                                        };
+                                };
+                                i2s_pins_a: i2s@0 {
+                                        i2s {
+                                                sirf,pins = "i2sgrp";
+                                                sirf,function = "i2s";
+                                        };
+                                };
+                               i2s_no_din_pins_a: i2s_no_din@0 {
+                                        i2s_no_din {
+                                                sirf,pins = "i2s_no_dingrp";
+                                                sirf,function = "i2s_no_din";
+                                        };
+                                };
+                               i2s_6chn_pins_a: i2s_6chn@0 {
+                                        i2s_6chn {
+                                                sirf,pins = "i2s_6chngrp";
+                                                sirf,function = "i2s_6chn";
+                                        };
+                                };
+                                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";
+                                        };
+                                };
+                                usb0_upli_drvbus_pins_a: usb0_upli_drvbus@0 {
+                                        usb0_upli_drvbus {
+                                                sirf,pins = "usb0_upli_drvbusgrp";
+                                                sirf,function = "usb0_upli_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@b0130000 {
+                               compatible = "sirf,prima2-pwm";
+                               reg = <0xb0130000 0x10000>;
+                               clocks = <&clks 21>;
+                       };
+
+                       efusesys@b0140000 {
+                               compatible = "sirf,prima2-efuse";
+                               reg = <0xb0140000 0x10000>;
+                               clocks = <&clks 22>;
+                       };
+
+                       pulsec@b0150000 {
+                               compatible = "sirf,prima2-pulsec";
+                               reg = <0xb0150000 0x10000>;
+                               interrupts = <48>;
+                               clocks = <&clks 23>;
+                       };
+
+                       pci-iobg {
+                               compatible = "sirf,prima2-pciiobg", "simple-bus";
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+                               ranges = <0x56000000 0x56000000 0x1b00000>;
+
+                               sd0: sdhci@56000000 {
+                                       cell-index = <0>;
+                                       compatible = "sirf,prima2-sdhc";
+                                       reg = <0x56000000 0x100000>;
+                                       interrupts = <38>;
+                                       bus-width = <8>;
+                                       clocks = <&clks 36>;
+                               };
+
+                               sd1: sdhci@56100000 {
+                                       cell-index = <1>;
+                                       compatible = "sirf,prima2-sdhc";
+                                       reg = <0x56100000 0x100000>;
+                                       interrupts = <38>;
+                                       status = "disabled";
+                                       clocks = <&clks 36>;
+                               };
+
+                               sd2: sdhci@56200000 {
+                                       cell-index = <2>;
+                                       compatible = "sirf,prima2-sdhc";
+                                       reg = <0x56200000 0x100000>;
+                                       interrupts = <23>;
+                                       status = "disabled";
+                                       clocks = <&clks 37>;
+                               };
+
+                               sd3: sdhci@56300000 {
+                                       cell-index = <3>;
+                                       compatible = "sirf,prima2-sdhc";
+                                       reg = <0x56300000 0x100000>;
+                                       interrupts = <23>;
+                                       status = "disabled";
+                                       clocks = <&clks 37>;
+                               };
+
+                               sd5: sdhci@56500000 {
+                                       cell-index = <5>;
+                                       compatible = "sirf,prima2-sdhc";
+                                       reg = <0x56500000 0x100000>;
+                                       interrupts = <39>;
+                                       status = "disabled";
+                                       clocks = <&clks 38>;
+                               };
+
+                               pci-copy@57900000 {
+                                       compatible = "sirf,prima2-pcicp";
+                                       reg = <0x57900000 0x100000>;
+                                       interrupts = <40>;
+                               };
+
+                               rom-interface@57a00000 {
+                                       compatible = "sirf,prima2-romif";
+                                       reg = <0x57a00000 0x100000>;
+                               };
+                       };
+               };
+
+               rtc-iobg {
+                       compatible = "sirf,prima2-rtciobg", "sirf-prima2-rtciobg-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       reg = <0x80030000 0x10000>;
+
+                       gpsrtc@1000 {
+                               compatible = "sirf,prima2-gpsrtc";
+                               reg = <0x1000 0x1000>;
+                               interrupts = <55 56 57>;
+                       };
+
+                       sysrtc@2000 {
+                               compatible = "sirf,prima2-sysrtc";
+                               reg = <0x2000 0x1000>;
+                               interrupts = <52 53 54>;
+                       };
+
+                       pwrc@3000 {
+                               compatible = "sirf,prima2-pwrc";
+                               reg = <0x3000 0x1000>;
+                               interrupts = <32>;
+                       };
+               };
+
+               uus-iobg {
+                       compatible = "simple-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0xb8000000 0xb8000000 0x40000>;
+
+                       usb0: usb@b00e0000 {
+                               compatible = "chipidea,ci13611a-prima2";
+                               reg = <0xb8000000 0x10000>;
+                               interrupts = <10>;
+                               clocks = <&clks 40>;
+                       };
+
+                       usb1: usb@b00f0000 {
+                               compatible = "chipidea,ci13611a-prima2";
+                               reg = <0xb8010000 0x10000>;
+                               interrupts = <11>;
+                               clocks = <&clks 41>;
+                       };
+
+                       security@b00f0000 {
+                               compatible = "sirf,prima2-security";
+                               reg = <0xb8030000 0x10000>;
+                               interrupts = <42>;
+                               clocks = <&clks 7>;
+                       };
+               };
+       };
+};
index ad13588..8f71f40 100644 (file)
                    cache-unified;
                    cache-level = <2>;
        };
+
+       timer@35006000 {
+               compatible = "bcm,kona-timer";
+               reg = <0x35006000 0x1000>;
+               interrupts = <0x0 7 0x4>;
+               clock-frequency = <32768>;
+       };
+
 };
diff --git a/arch/arm/boot/dts/r8a7779.dtsi b/arch/arm/boot/dts/r8a7779.dtsi
new file mode 100644 (file)
index 0000000..fe5c6f2
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Device Tree Source for Renesas r8a7779
+ *
+ * Copyright (C) 2013 Renesas Solutions Corp.
+ * Copyright (C) 2013 Simon Horman
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+/include/ "skeleton.dtsi"
+
+/ {
+       compatible = "renesas,r8a7779";
+
+       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>;
+               };
+               cpu@2 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a9";
+                       reg = <2>;
+               };
+               cpu@3 {
+                       device_type = "cpu";
+                       compatible = "arm,cortex-a9";
+                       reg = <3>;
+               };
+       };
+
+        gic: interrupt-controller@f0001000 {
+                compatible = "arm,cortex-a9-gic";
+                #interrupt-cells = <3>;
+                interrupt-controller;
+                reg = <0xf0001000 0x1000>,
+                      <0xf0000100 0x100>;
+        };
+
+       i2c0: i2c@0xffc70000 {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               compatible = "renesas,rmobile-iic";
+               reg = <0xffc70000 0x1000>;
+               interrupt-parent = <&gic>;
+               interrupts = <0 79 0x4>;
+       };
+
+       i2c1: i2c@0xffc71000 {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               compatible = "renesas,rmobile-iic";
+               reg = <0xffc71000 0x1000>;
+               interrupt-parent = <&gic>;
+               interrupts = <0 82 0x4>;
+       };
+
+       i2c2: i2c@0xffc72000 {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               compatible = "renesas,rmobile-iic";
+               reg = <0xffc72000 0x1000>;
+               interrupt-parent = <&gic>;
+               interrupts = <0 80 0x4>;
+       };
+
+       i2c3: i2c@0xffc73000 {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               compatible = "renesas,rmobile-iic";
+               reg = <0xffc73000 0x1000>;
+               interrupt-parent = <&gic>;
+               interrupts = <0 81 0x4>;
+       };
+
+       thermal@ffc48000 {
+               compatible = "renesas,rcar-thermal";
+               reg = <0xffc48000 0x38>;
+       };
+
+       sata: sata@fc600000 {
+               compatible = "renesas,rcar-sata";
+               reg = <0xfc600000 0x2000>;
+               interrupt-parent = <&gic>;
+               interrupts = <0 100 0x4>;
+       };
+};
diff --git a/arch/arm/boot/dts/sama5d3.dtsi b/arch/arm/boot/dts/sama5d3.dtsi
new file mode 100644 (file)
index 0000000..39b0458
--- /dev/null
@@ -0,0 +1,1031 @@
+/*
+ * sama5d3.dtsi - Device Tree Include file for SAMA5D3 family SoC
+ *                applies to SAMA5D31, SAMA5D33, SAMA5D34, SAMA5D35 SoC
+ *
+ *  Copyright (C) 2013 Atmel,
+ *                2013 Ludovic Desroches <ludovic.desroches@atmel.com>
+ *
+ * Licensed under GPLv2 or later.
+ */
+
+/include/ "skeleton.dtsi"
+
+/ {
+       model = "Atmel SAMA5D3 family SoC";
+       compatible = "atmel,sama5d3", "atmel,sama5";
+       interrupt-parent = <&aic>;
+
+       aliases {
+               serial0 = &dbgu;
+               serial1 = &usart0;
+               serial2 = &usart1;
+               serial3 = &usart2;
+               serial4 = &usart3;
+               gpio0 = &pioA;
+               gpio1 = &pioB;
+               gpio2 = &pioC;
+               gpio3 = &pioD;
+               gpio4 = &pioE;
+               tcb0 = &tcb0;
+               tcb1 = &tcb1;
+               i2c0 = &i2c0;
+               i2c1 = &i2c1;
+               i2c2 = &i2c2;
+               ssc0 = &ssc0;
+               ssc1 = &ssc1;
+       };
+       cpus {
+               cpu@0 {
+                       compatible = "arm,cortex-a5";
+               };
+       };
+
+       memory {
+               reg = <0x20000000 0x8000000>;
+       };
+
+       ahb {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               apb {
+                       compatible = "simple-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges;
+
+                       mmc0: mmc@f0000000 {
+                               compatible = "atmel,hsmci";
+                               reg = <0xf0000000 0x600>;
+                               interrupts = <21 4 0>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_dat4_7>;
+                               status = "disabled";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                       };
+
+                       spi0: spi@f0004000 {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               compatible = "atmel,at91sam9x5-spi";
+                               reg = <0xf0004000 0x100>;
+                               interrupts = <24 4 3>;
+                               cs-gpios = <&pioD 13 0
+                                           &pioD 14 0 /* conflicts with SCK0 and CANRX0 */
+                                           &pioD 15 0 /* conflicts with CTS0 and CANTX0 */
+                                           &pioD 16 0 /* conflicts with RTS0 and PWMFI3 */
+                                          >;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_spi0>;
+                               status = "disabled";
+                       };
+
+                       ssc0: ssc@f0008000 {
+                               compatible = "atmel,at91sam9g45-ssc";
+                               reg = <0xf0008000 0x4000>;
+                               interrupts = <38 4 4>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_ssc0_tx &pinctrl_ssc0_rx>;
+                               status = "disabled";
+                       };
+
+                       can0: can@f000c000 {
+                               compatible = "atmel,at91sam9x5-can";
+                               reg = <0xf000c000 0x300>;
+                               interrupts = <40 4 3>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_can0_rx_tx>;
+                               status = "disabled";
+                       };
+
+                       tcb0: timer@f0010000 {
+                               compatible = "atmel,at91sam9x5-tcb";
+                               reg = <0xf0010000 0x100>;
+                               interrupts = <26 4 0>;
+                       };
+
+                       i2c0: i2c@f0014000 {
+                               compatible = "atmel,at91sam9x5-i2c";
+                               reg = <0xf0014000 0x4000>;
+                               interrupts = <18 4 6>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_i2c0>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       i2c1: i2c@f0018000 {
+                               compatible = "atmel,at91sam9x5-i2c";
+                               reg = <0xf0018000 0x4000>;
+                               interrupts = <19 4 6>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_i2c1>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       usart0: serial@f001c000 {
+                               compatible = "atmel,at91sam9260-usart";
+                               reg = <0xf001c000 0x100>;
+                               interrupts = <12 4 5>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_usart0>;
+                               status = "disabled";
+                       };
+
+                       usart1: serial@f0020000 {
+                               compatible = "atmel,at91sam9260-usart";
+                               reg = <0xf0020000 0x100>;
+                               interrupts = <13 4 5>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_usart1>;
+                               status = "disabled";
+                       };
+
+                       macb0: ethernet@f0028000 {
+                               compatible = "cnds,pc302-gem", "cdns,gem";
+                               reg = <0xf0028000 0x100>;
+                               interrupts = <34 4 3>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_macb0_data_rgmii &pinctrl_macb0_signal_rgmii>;
+                               status = "disabled";
+                       };
+
+                       isi: isi@f0034000 {
+                               compatible = "atmel,at91sam9g45-isi";
+                               reg = <0xf0034000 0x4000>;
+                               interrupts = <37 4 5>;
+                               status = "disabled";
+                       };
+
+                       mmc1: mmc@f8000000 {
+                               compatible = "atmel,hsmci";
+                               reg = <0xf8000000 0x600>;
+                               interrupts = <22 4 0>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3>;
+                               status = "disabled";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                       };
+
+                       mmc2: mmc@f8004000 {
+                               compatible = "atmel,hsmci";
+                               reg = <0xf8004000 0x600>;
+                               interrupts = <23 4 0>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_mmc2_clk_cmd_dat0 &pinctrl_mmc2_dat1_3>;
+                               status = "disabled";
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                       };
+
+                       spi1: spi@f8008000 {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               compatible = "atmel,at91sam9x5-spi";
+                               reg = <0xf8008000 0x100>;
+                               interrupts = <25 4 3>;
+                               cs-gpios = <&pioC 25 0
+                                           &pioC 26 0 /* conflitcs with TWD1 and ISI_D11 */
+                                           &pioC 27 0 /* conflitcs with TWCK1 and ISI_D10 */
+                                           &pioC 28 0 /* conflitcs with PWMFI0 and ISI_D9 */
+                                          >;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_spi1>;
+                               status = "disabled";
+                       };
+
+                       ssc1: ssc@f800c000 {
+                               compatible = "atmel,at91sam9g45-ssc";
+                               reg = <0xf800c000 0x4000>;
+                               interrupts = <39 4 4>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_ssc1_tx &pinctrl_ssc1_rx>;
+                               status = "disabled";
+                       };
+
+                       can1: can@f8010000 {
+                               compatible = "atmel,at91sam9x5-can";
+                               reg = <0xf8010000 0x300>;
+                               interrupts = <41 4 3>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_can1_rx_tx>;
+                       };
+
+                       tcb1: timer@f8014000 {
+                               compatible = "atmel,at91sam9x5-tcb";
+                               reg = <0xf8014000 0x100>;
+                               interrupts = <27 4 0>;
+                       };
+
+                       adc0: adc@f8018000 {
+                               compatible = "atmel,at91sam9260-adc";
+                               reg = <0xf8018000 0x100>;
+                               interrupts = <29 4 5>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <
+                                       &pinctrl_adc0_adtrg
+                                       &pinctrl_adc0_ad0
+                                       &pinctrl_adc0_ad1
+                                       &pinctrl_adc0_ad2
+                                       &pinctrl_adc0_ad3
+                                       &pinctrl_adc0_ad4
+                                       &pinctrl_adc0_ad5
+                                       &pinctrl_adc0_ad6
+                                       &pinctrl_adc0_ad7
+                                       &pinctrl_adc0_ad8
+                                       &pinctrl_adc0_ad9
+                                       &pinctrl_adc0_ad10
+                                       &pinctrl_adc0_ad11
+                                       >;
+                               atmel,adc-channel-base = <0x50>;
+                               atmel,adc-channels-used = <0xfff>;
+                               atmel,adc-drdy-mask = <0x1000000>;
+                               atmel,adc-num-channels = <12>;
+                               atmel,adc-startup-time = <40>;
+                               atmel,adc-status-register = <0x30>;
+                               atmel,adc-trigger-register = <0xc0>;
+                               atmel,adc-use-external;
+                               atmel,adc-vref = <3000>;
+                               atmel,adc-res = <10 12>;
+                               atmel,adc-res-names = "lowres", "highres";
+                               status = "disabled";
+
+                               trigger@0 {
+                                       trigger-name = "external-rising";
+                                       trigger-value = <0x1>;
+                                       trigger-external;
+                               };
+                               trigger@1 {
+                                       trigger-name = "external-falling";
+                                       trigger-value = <0x2>;
+                                       trigger-external;
+                               };
+                               trigger@2 {
+                                       trigger-name = "external-any";
+                                       trigger-value = <0x3>;
+                                       trigger-external;
+                               };
+                               trigger@3 {
+                                       trigger-name = "continuous";
+                                       trigger-value = <0x6>;
+                               };
+                       };
+
+                       tsadcc: tsadcc@f8018000 {
+                               compatible = "atmel,at91sam9x5-tsadcc";
+                               reg = <0xf8018000 0x4000>;
+                               interrupts = <29 4 5>;
+                               atmel,tsadcc_clock = <300000>;
+                               atmel,filtering_average = <0x03>;
+                               atmel,pendet_debounce = <0x08>;
+                               atmel,pendet_sensitivity = <0x02>;
+                               atmel,ts_sample_hold_time = <0x0a>;
+                               status = "disabled";
+                       };
+
+                       i2c2: i2c@f801c000 {
+                               compatible = "atmel,at91sam9x5-i2c";
+                               reg = <0xf801c000 0x4000>;
+                               interrupts = <20 4 6>;
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               status = "disabled";
+                       };
+
+                       usart2: serial@f8020000 {
+                               compatible = "atmel,at91sam9260-usart";
+                               reg = <0xf8020000 0x100>;
+                               interrupts = <14 4 5>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_usart2>;
+                               status = "disabled";
+                       };
+
+                       usart3: serial@f8024000 {
+                               compatible = "atmel,at91sam9260-usart";
+                               reg = <0xf8024000 0x100>;
+                               interrupts = <15 4 5>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_usart3>;
+                               status = "disabled";
+                       };
+
+                       macb1: ethernet@f802c000 {
+                               compatible = "cdns,at32ap7000-macb", "cdns,macb";
+                               reg = <0xf802c000 0x100>;
+                               interrupts = <35 4 3>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_macb1_rmii>;
+                               status = "disabled";
+                       };
+
+                       sha@f8034000 {
+                               compatible = "atmel,sam9g46-sha";
+                               reg = <0xf8034000 0x100>;
+                               interrupts = <42 4 0>;
+                       };
+
+                       aes@f8038000 {
+                               compatible = "atmel,sam9g46-aes";
+                               reg = <0xf8038000 0x100>;
+                               interrupts = <43 4 0>;
+                       };
+
+                       tdes@f803c000 {
+                               compatible = "atmel,sam9g46-tdes";
+                               reg = <0xf803c000 0x100>;
+                               interrupts = <44 4 0>;
+                       };
+
+                       dma0: dma-controller@ffffe600 {
+                               compatible = "atmel,at91sam9g45-dma";
+                               reg = <0xffffe600 0x200>;
+                               interrupts = <30 4 0>;
+                               #dma-cells = <1>;
+                       };
+
+                       dma1: dma-controller@ffffe800 {
+                               compatible = "atmel,at91sam9g45-dma";
+                               reg = <0xffffe800 0x200>;
+                               interrupts = <31 4 0>;
+                               #dma-cells = <1>;
+                       };
+
+                       ramc0: ramc@ffffea00 {
+                               compatible = "atmel,at91sam9g45-ddramc";
+                               reg = <0xffffea00 0x200>;
+                       };
+
+                       dbgu: serial@ffffee00 {
+                               compatible = "atmel,at91sam9260-usart";
+                               reg = <0xffffee00 0x200>;
+                               interrupts = <2 4 7>;
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_dbgu>;
+                               status = "disabled";
+                       };
+
+                       aic: interrupt-controller@fffff000 {
+                               #interrupt-cells = <3>;
+                               compatible = "atmel,sama5d3-aic";
+                               interrupt-controller;
+                               reg = <0xfffff000 0x200>;
+                               atmel,external-irqs = <47>;
+                       };
+
+                       pinctrl@fffff200 {
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+                               compatible = "atmel,at91sam9x5-pinctrl", "atmel,at91rm9200-pinctrl", "simple-bus";
+                               ranges = <0xfffff200 0xfffff200 0xa00>;
+                               atmel,mux-mask = <
+                                       /*   A          B          C  */
+                                       0xffffffff 0xc0fc0000 0xc0ff0000        /* pioA */
+                                       0xffffffff 0x0ff8ffff 0x00000000        /* pioB */
+                                       0xffffffff 0xbc00f1ff 0x7c00fc00        /* pioC */
+                                       0xffffffff 0xc001c0e0 0x0001c1e0        /* pioD */
+                                       0xffffffff 0xbf9f8000 0x18000000        /* pioE */
+                                       >;
+
+                               /* shared pinctrl settings */
+                               adc0 {
+                                       pinctrl_adc0_adtrg: adc0_adtrg {
+                                               atmel,pins =
+                                                       <3 19 0x1 0x0>; /* PD19 periph A ADTRG */
+                                       };
+                                       pinctrl_adc0_ad0: adc0_ad0 {
+                                               atmel,pins =
+                                                       <3 20 0x1 0x0>; /* PD20 periph A AD0 */
+                                       };
+                                       pinctrl_adc0_ad1: adc0_ad1 {
+                                               atmel,pins =
+                                                       <3 21 0x1 0x0>; /* PD21 periph A AD1 */
+                                       };
+                                       pinctrl_adc0_ad2: adc0_ad2 {
+                                               atmel,pins =
+                                                       <3 22 0x1 0x0>; /* PD22 periph A AD2 */
+                                       };
+                                       pinctrl_adc0_ad3: adc0_ad3 {
+                                               atmel,pins =
+                                                       <3 23 0x1 0x0>; /* PD23 periph A AD3 */
+                                       };
+                                       pinctrl_adc0_ad4: adc0_ad4 {
+                                               atmel,pins =
+                                                       <3 24 0x1 0x0>; /* PD24 periph A AD4 */
+                                       };
+                                       pinctrl_adc0_ad5: adc0_ad5 {
+                                               atmel,pins =
+                                                       <3 25 0x1 0x0>; /* PD25 periph A AD5 */
+                                       };
+                                       pinctrl_adc0_ad6: adc0_ad6 {
+                                               atmel,pins =
+                                                       <3 26 0x1 0x0>; /* PD26 periph A AD6 */
+                                       };
+                                       pinctrl_adc0_ad7: adc0_ad7 {
+                                               atmel,pins =
+                                                       <3 27 0x1 0x0>; /* PD27 periph A AD7 */
+                                       };
+                                       pinctrl_adc0_ad8: adc0_ad8 {
+                                               atmel,pins =
+                                                       <3 28 0x1 0x0>; /* PD28 periph A AD8 */
+                                       };
+                                       pinctrl_adc0_ad9: adc0_ad9 {
+                                               atmel,pins =
+                                                       <3 29 0x1 0x0>; /* PD29 periph A AD9 */
+                                       };
+                                       pinctrl_adc0_ad10: adc0_ad10 {
+                                               atmel,pins =
+                                                       <3 30 0x1 0x0>; /* PD30 periph A AD10, conflicts with PCK0 */
+                                       };
+                                       pinctrl_adc0_ad11: adc0_ad11 {
+                                               atmel,pins =
+                                                       <3 31 0x1 0x0>; /* PD31 periph A AD11, conflicts with PCK1 */
+                                       };
+                               };
+
+                               can0 {
+                                       pinctrl_can0_rx_tx: can0_rx_tx {
+                                               atmel,pins =
+                                                       <3 14 0x3 0x0   /* PD14 periph C RX, conflicts with SCK0, SPI0_NPCS1 */
+                                                        3 15 0x3 0x0>; /* PD15 periph C TX, conflicts with CTS0, SPI0_NPCS2 */
+                                       };
+                               };
+
+                               can1 {
+                                       pinctrl_can1_rx_tx: can1_rx_tx {
+                                               atmel,pins =
+                                                       <1 14 0x2 0x0   /* PB14 periph B RX, conflicts with GCRS */
+                                                        1 15 0x2 0x0>; /* PB15 periph B TX, conflicts with GCOL */
+                                       };
+                               };
+
+                               dbgu {
+                                       pinctrl_dbgu: dbgu-0 {
+                                               atmel,pins =
+                                                       <1 30 0x1 0x0   /* PB30 periph A */
+                                                        1 31 0x1 0x1>; /* PB31 periph A with pullup */
+                                       };
+                               };
+
+                               i2c0 {
+                                       pinctrl_i2c0: i2c0-0 {
+                                               atmel,pins =
+                                                       <0 30 0x1 0x0   /* PA30 periph A TWD0 pin, conflicts with URXD1, ISI_VSYNC */
+                                                        0 31 0x1 0x0>; /* PA31 periph A TWCK0 pin, conflicts with UTXD1, ISI_HSYNC */
+                                       };
+                               };
+
+                               i2c1 {
+                                       pinctrl_i2c1: i2c1-0 {
+                                               atmel,pins =
+                                                       <2 26 0x2 0x0   /* PC26 periph B TWD1 pin, conflicts with SPI1_NPCS1, ISI_D11 */
+                                                        2 27 0x2 0x0>; /* PC27 periph B TWCK1 pin, conflicts with SPI1_NPCS2, ISI_D10 */
+                                       };
+                               };
+
+                               isi {
+                                       pinctrl_isi: isi-0 {
+                                               atmel,pins =
+                                                       <0 16 0x3 0x0   /* PA16 periph C ISI_D0, conflicts with LCDDAT16 */
+                                                        0 17 0x3 0x0   /* PA17 periph C ISI_D1, conflicts with LCDDAT17 */
+                                                        0 18 0x3 0x0   /* PA18 periph C ISI_D2, conflicts with LCDDAT18, TWD2 */
+                                                        0 19 0x3 0x0   /* PA19 periph C ISI_D3, conflicts with LCDDAT19, TWCK2 */
+                                                        0 20 0x3 0x0   /* PA20 periph C ISI_D4, conflicts with LCDDAT20, PWMH0 */
+                                                        0 21 0x3 0x0   /* PA21 periph C ISI_D5, conflicts with LCDDAT21, PWML0 */
+                                                        0 22 0x3 0x0   /* PA22 periph C ISI_D6, conflicts with LCDDAT22, PWMH1 */
+                                                        0 23 0x3 0x0   /* PA23 periph C ISI_D7, conflicts with LCDDAT23, PWML1 */
+                                                        2 30 0x3 0x0   /* PC30 periph C ISI_PCK, conflicts with UTXD0 */
+                                                        0 31 0x3 0x0   /* PA31 periph C ISI_HSYNC, conflicts with TWCK0, UTXD1 */
+                                                        0 30 0x3 0x0   /* PA30 periph C ISI_VSYNC, conflicts with TWD0, URXD1 */
+                                                        2 29 0x3 0x0   /* PC29 periph C ISI_PD8, conflicts with URXD0, PWMFI2 */
+                                                        2 28 0x3 0x0>; /* PC28 periph C ISI_PD9, conflicts with SPI1_NPCS3, PWMFI0 */
+                                       };
+                                       pinctrl_isi_pck_as_mck: isi_pck_as_mck-0 {
+                                               atmel,pins =
+                                                       <3 31 0x2 0x0>; /* PD31 periph B ISI_MCK */
+                                       };
+                               };
+
+                               lcd {
+                                       pinctrl_lcd: lcd-0 {
+                                               atmel,pins =
+                                                       <0 24 0x1 0x0   /* PA24 periph A LCDPWM */
+                                                        0 26 0x1 0x0   /* PA26 periph A LCDVSYNC */
+                                                        0 27 0x1 0x0   /* PA27 periph A LCDHSYNC */
+                                                        0 25 0x1 0x0   /* PA25 periph A LCDDISP */
+                                                        0 29 0x1 0x0   /* PA29 periph A LCDDEN */
+                                                        0 28 0x1 0x0   /* PA28 periph A LCDPCK */
+                                                        0 0 0x1 0x0    /* PA0 periph A LCDD0 pin */
+                                                        0 1 0x1 0x0    /* PA1 periph A LCDD1 pin */
+                                                        0 2 0x1 0x0    /* PA2 periph A LCDD2 pin */
+                                                        0 3 0x1 0x0    /* PA3 periph A LCDD3 pin */
+                                                        0 4 0x1 0x0    /* PA4 periph A LCDD4 pin */
+                                                        0 5 0x1 0x0    /* PA5 periph A LCDD5 pin */
+                                                        0 6 0x1 0x0    /* PA6 periph A LCDD6 pin */
+                                                        0 7 0x1 0x0    /* PA7 periph A LCDD7 pin */
+                                                        0 8 0x1 0x0    /* PA8 periph A LCDD8 pin */
+                                                        0 9 0x1 0x0    /* PA9 periph A LCDD9 pin */
+                                                        0 10 0x1 0x0   /* PA10 periph A LCDD10 pin */
+                                                        0 11 0x1 0x0   /* PA11 periph A LCDD11 pin */
+                                                        0 12 0x1 0x0   /* PA12 periph A LCDD12 pin */
+                                                        0 13 0x1 0x0   /* PA13 periph A LCDD13 pin */
+                                                        0 14 0x1 0x0   /* PA14 periph A LCDD14 pin */
+                                                        0 15 0x1 0x0   /* PA15 periph A LCDD15 pin */
+                                                        2 14 0x3 0x0   /* PC14 periph C LCDD16 pin */
+                                                        2 13 0x3 0x0   /* PC13 periph C LCDD17 pin */
+                                                        2 12 0x3 0x0   /* PC12 periph C LCDD18 pin */
+                                                        2 11 0x3 0x0   /* PC11 periph C LCDD19 pin */
+                                                        2 10 0x3 0x0   /* PC10 periph C LCDD20 pin */
+                                                        2 15 0x3 0x0   /* PC15 periph C LCDD21 pin */
+                                                        4 27 0x3 0x0   /* PE27 periph C LCDD22 pin */
+                                                        4 28 0x3 0x0>; /* PE28 periph C LCDD23 pin */
+                                       };
+                               };
+
+                               macb0 {
+                                       pinctrl_macb0_data_rgmii: macb0_data_rgmii {
+                                               atmel,pins =
+                                                       <1 0 0x1 0x0    /* PB0 periph A GTX0, conflicts with PWMH0 */
+                                                        1 1 0x1 0x0    /* PB1 periph A GTX1, conflicts with PWML0 */
+                                                        1 2 0x1 0x0    /* PB2 periph A GTX2, conflicts with TK1 */
+                                                        1 3 0x1 0x0    /* PB3 periph A GTX3, conflicts with TF1 */
+                                                        1 4 0x1 0x0    /* PB4 periph A GRX0, conflicts with PWMH1 */
+                                                        1 5 0x1 0x0    /* PB5 periph A GRX1, conflicts with PWML1 */
+                                                        1 6 0x1 0x0    /* PB6 periph A GRX2, conflicts with TD1 */
+                                                        1 7 0x1 0x0>;  /* PB7 periph A GRX3, conflicts with RK1 */
+                                       };
+                                       pinctrl_macb0_data_gmii: macb0_data_gmii {
+                                               atmel,pins =
+                                                       <1 19 0x2 0x0   /* PB19 periph B GTX4, conflicts with MCI1_CDA */
+                                                        1 20 0x2 0x0   /* PB20 periph B GTX5, conflicts with MCI1_DA0 */
+                                                        1 21 0x2 0x0   /* PB21 periph B GTX6, conflicts with MCI1_DA1 */
+                                                        1 22 0x2 0x0   /* PB22 periph B GTX7, conflicts with MCI1_DA2 */
+                                                        1 23 0x2 0x0   /* PB23 periph B GRX4, conflicts with MCI1_DA3 */
+                                                        1 24 0x2 0x0   /* PB24 periph B GRX5, conflicts with MCI1_CK */
+                                                        1 25 0x2 0x0   /* PB25 periph B GRX6, conflicts with SCK1 */
+                                                        1 26 0x2 0x0>; /* PB26 periph B GRX7, conflicts with CTS1 */
+                                       };
+                                       pinctrl_macb0_signal_rgmii: macb0_signal_rgmii {
+                                               atmel,pins =
+                                                       <1 8 0x1 0x0    /* PB8 periph A GTXCK, conflicts with PWMH2 */
+                                                        1 9 0x1 0x0    /* PB9 periph A GTXEN, conflicts with PWML2 */
+                                                        1 11 0x1 0x0   /* PB11 periph A GRXCK, conflicts with RD1 */
+                                                        1 13 0x1 0x0   /* PB13 periph A GRXER, conflicts with PWML3 */
+                                                        1 16 0x1 0x0   /* PB16 periph A GMDC */
+                                                        1 17 0x1 0x0   /* PB17 periph A GMDIO */
+                                                        1 18 0x1 0x0>; /* PB18 periph A G125CK */
+                                       };
+                                       pinctrl_macb0_signal_gmii: macb0_signal_gmii {
+                                               atmel,pins =
+                                                       <1 9 0x1 0x0    /* PB9 periph A GTXEN, conflicts with PWML2 */
+                                                        1 10 0x1 0x0   /* PB10 periph A GTXER, conflicts with RF1 */
+                                                        1 11 0x1 0x0   /* PB11 periph A GRXCK, conflicts with RD1 */
+                                                        1 12 0x1 0x0   /* PB12 periph A GRXDV, conflicts with PWMH3 */
+                                                        1 13 0x1 0x0   /* PB13 periph A GRXER, conflicts with PWML3 */
+                                                        1 14 0x1 0x0   /* PB14 periph A GCRS, conflicts with CANRX1 */
+                                                        1 15 0x1 0x0   /* PB15 periph A GCOL, conflicts with CANTX1 */
+                                                        1 16 0x1 0x0   /* PB16 periph A GMDC */
+                                                        1 17 0x1 0x0   /* PB17 periph A GMDIO */
+                                                        1 27 0x2 0x0>; /* PB27 periph B G125CKO */
+                                       };
+
+                               };
+
+                               macb1 {
+                                       pinctrl_macb1_rmii: macb1_rmii-0 {
+                                               atmel,pins =
+                                                       <2 0 0x1 0x0    /* PC0 periph A ETX0, conflicts with TIOA3 */
+                                                        2 1 0x1 0x0    /* PC1 periph A ETX1, conflicts with TIOB3 */
+                                                        2 2 0x1 0x0    /* PC2 periph A ERX0, conflicts with TCLK3 */
+                                                        2 3 0x1 0x0    /* PC3 periph A ERX1, conflicts with TIOA4 */
+                                                        2 4 0x1 0x0    /* PC4 periph A ETXEN, conflicts with TIOB4 */
+                                                        2 5 0x1 0x0    /* PC5 periph A ECRSDV,conflicts with TCLK4 */
+                                                        2 6 0x1 0x0    /* PC6 periph A ERXER, conflicts with TIOA5 */
+                                                        2 7 0x1 0x0    /* PC7 periph A EREFCK, conflicts with TIOB5 */
+                                                        2 8 0x1 0x0    /* PC8 periph A EMDC, conflicts with TCLK5 */
+                                                        2 9 0x1 0x0>;  /* PC9 periph A EMDIO  */
+                                       };
+                               };
+
+                               mmc0 {
+                                       pinctrl_mmc0_clk_cmd_dat0: mmc0_clk_cmd_dat0 {
+                                               atmel,pins =
+                                                       <3 9 0x1 0x0    /* PD9 periph A MCI0_CK */
+                                                        3 0 0x1 0x1    /* PD0 periph A MCI0_CDA with pullup */
+                                                        3 1 0x1 0x1>;  /* PD1 periph A MCI0_DA0 with pullup */
+                                       };
+                                       pinctrl_mmc0_dat1_3: mmc0_dat1_3 {
+                                               atmel,pins =
+                                                       <3 2 0x1 0x1    /* PD2 periph A MCI0_DA1 with pullup */
+                                                        3 3 0x1 0x1    /* PD3 periph A MCI0_DA2 with pullup */
+                                                        3 4 0x1 0x1>;  /* PD4 periph A MCI0_DA3 with pullup */
+                                       };
+                                       pinctrl_mmc0_dat4_7: mmc0_dat4_7 {
+                                               atmel,pins =
+                                                       <3 5 0x1 0x1    /* PD5 periph A MCI0_DA4 with pullup, conflicts with TIOA0, PWMH2 */
+                                                        3 6 0x1 0x1    /* PD6 periph A MCI0_DA5 with pullup, conflicts with TIOB0, PWML2 */
+                                                        3 7 0x1 0x1    /* PD7 periph A MCI0_DA6 with pullup, conlicts with TCLK0, PWMH3 */
+                                                        3 8 0x1 0x1>;  /* PD8 periph A MCI0_DA7 with pullup, conflicts with PWML3 */
+                                       };
+                               };
+
+                               mmc1 {
+                                       pinctrl_mmc1_clk_cmd_dat0: mmc1_clk_cmd_dat0 {
+                                               atmel,pins =
+                                                       <1 24 0x1 0x0   /* PB24 periph A MCI1_CK, conflicts with GRX5 */
+                                                        1 19 0x1 0x1   /* PB19 periph A MCI1_CDA with pullup, conflicts with GTX4 */
+                                                        1 20 0x1 0x1>; /* PB20 periph A MCI1_DA0 with pullup, conflicts with GTX5 */
+                                       };
+                                       pinctrl_mmc1_dat1_3: mmc1_dat1_3 {
+                                               atmel,pins =
+                                                       <1 21 0x1 0x1   /* PB21 periph A MCI1_DA1 with pullup, conflicts with GTX6 */
+                                                        1 22 0x1 0x1   /* PB22 periph A MCI1_DA2 with pullup, conflicts with GTX7 */
+                                                        1 23 0x1 0x1>; /* PB23 periph A MCI1_DA3 with pullup, conflicts with GRX4 */
+                                       };
+                               };
+
+                               mmc2 {
+                                       pinctrl_mmc2_clk_cmd_dat0: mmc2_clk_cmd_dat0 {
+                                               atmel,pins =
+                                                       <2 15 0x1 0x0   /* PC15 periph A MCI2_CK, conflicts with PCK2 */
+                                                        2 10 0x1 0x1   /* PC10 periph A MCI2_CDA with pullup */
+                                                        2 11 0x1 0x1>; /* PC11 periph A MCI2_DA0 with pullup */
+                                       };
+                                       pinctrl_mmc2_dat1_3: mmc2_dat1_3 {
+                                               atmel,pins =
+                                                       <2 12 0x1 0x0   /* PC12 periph A MCI2_DA1 with pullup, conflicts with TIOA1 */
+                                                        2 13 0x1 0x0   /* PC13 periph A MCI2_DA2 with pullup, conflicts with TIOB1 */
+                                                        2 14 0x1 0x0>; /* PC14 periph A MCI2_DA3 with pullup, conflicts with TCLK1 */
+                                       };
+                               };
+
+                               nand0 {
+                                       pinctrl_nand0_ale_cle: nand0_ale_cle-0 {
+                                               atmel,pins =
+                                                       <4 21 0x1 0x1   /* PE21 periph A with pullup */
+                                                        4 22 0x1 0x1>; /* PE22 periph A with pullup */
+                                       };
+                               };
+
+                               pioA: gpio@fffff200 {
+                                       compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";
+                                       reg = <0xfffff200 0x100>;
+                                       interrupts = <6 4 1>;
+                                       #gpio-cells = <2>;
+                                       gpio-controller;
+                                       interrupt-controller;
+                                       #interrupt-cells = <2>;
+                               };
+
+                               pioB: gpio@fffff400 {
+                                       compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";
+                                       reg = <0xfffff400 0x100>;
+                                       interrupts = <7 4 1>;
+                                       #gpio-cells = <2>;
+                                       gpio-controller;
+                                       interrupt-controller;
+                                       #interrupt-cells = <2>;
+                               };
+
+                               pioC: gpio@fffff600 {
+                                       compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";
+                                       reg = <0xfffff600 0x100>;
+                                       interrupts = <8 4 1>;
+                                       #gpio-cells = <2>;
+                                       gpio-controller;
+                                       interrupt-controller;
+                                       #interrupt-cells = <2>;
+                               };
+
+                               pioD: gpio@fffff800 {
+                                       compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";
+                                       reg = <0xfffff800 0x100>;
+                                       interrupts = <9 4 1>;
+                                       #gpio-cells = <2>;
+                                       gpio-controller;
+                                       interrupt-controller;
+                                       #interrupt-cells = <2>;
+                               };
+
+                               pioE: gpio@fffffa00 {
+                                       compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";
+                                       reg = <0xfffffa00 0x100>;
+                                       interrupts = <10 4 1>;
+                                       #gpio-cells = <2>;
+                                       gpio-controller;
+                                       interrupt-controller;
+                                       #interrupt-cells = <2>;
+                               };
+
+                               spi0 {
+                                       pinctrl_spi0: spi0-0 {
+                                               atmel,pins =
+                                                       <3 10 0x1 0x0   /* PD10 periph A SPI0_MISO pin */
+                                                        3 11 0x1 0x0   /* PD11 periph A SPI0_MOSI pin */
+                                                        3 12 0x1 0x0   /* PD12 periph A SPI0_SPCK pin */
+                                                        3 13 0x0 0x0>; /* PD13 GPIO SPI0_NPCS0 pin */
+                                       };
+                               };
+
+                               spi1 {
+                                       pinctrl_spi1: spi1-0 {
+                                               atmel,pins =
+                                                       <2 22 0x1 0x0   /* PC22 periph A SPI1_MISO pin */
+                                                        2 23 0x1 0x0   /* PC23 periph A SPI1_MOSI pin */
+                                                        2 24 0x1 0x0   /* PC24 periph A SPI1_SPCK pin */
+                                                        2 25 0x0 0x0>; /* PC25 GPIO SPI1_NPCS0 pin */
+                                       };
+                               };
+
+                               ssc0 {
+                                       pinctrl_ssc0_tx: ssc0_tx {
+                                               atmel,pins =
+                                                       <2 16 0x1 0x0   /* PC16 periph A TK0 */
+                                                        2 17 0x1 0x0   /* PC17 periph A TF0 */
+                                                        2 18 0x1 0x0>; /* PC18 periph A TD0 */
+                                       };
+
+                                       pinctrl_ssc0_rx: ssc0_rx {
+                                               atmel,pins =
+                                                       <2 19 0x1 0x0   /* PC19 periph A RK0 */
+                                                        2 20 0x1 0x0   /* PC20 periph A RF0 */
+                                                        2 21 0x1 0x0>; /* PC21 periph A RD0 */
+                                       };
+                               };
+
+                               ssc1 {
+                                       pinctrl_ssc1_tx: ssc1_tx {
+                                               atmel,pins =
+                                                       <1 2 0x2 0x0    /* PB2 periph B TK1, conflicts with GTX2 */
+                                                        1 3 0x2 0x0    /* PB3 periph B TF1, conflicts with GTX3 */
+                                                        1 6 0x2 0x0>;  /* PB6 periph B TD1, conflicts with TD1 */
+                                       };
+
+                                       pinctrl_ssc1_rx: ssc1_rx {
+                                               atmel,pins =
+                                                       <1 7 0x2 0x0    /* PB7 periph B RK1, conflicts with EREFCK */
+                                                        1 10 0x2 0x0   /* PB10 periph B RF1, conflicts with GTXER */
+                                                        1 11 0x2 0x0>; /* PB11 periph B RD1, conflicts with GRXCK */
+                                       };
+                               };
+
+                               uart0 {
+                                       pinctrl_uart0: uart0-0 {
+                                               atmel,pins =
+                                                       <2 29 0x1 0x0   /* PC29 periph A, conflicts with PWMFI2, ISI_D8 */
+                                                        2 30 0x1 0x1>; /* PC30 periph A with pullup, conflicts with ISI_PCK */
+                                       };
+                               };
+
+                               uart1 {
+                                       pinctrl_uart1: uart1-0 {
+                                               atmel,pins =
+                                                       <0 30 0x2 0x0   /* PA30 periph B, conflicts with TWD0, ISI_VSYNC */
+                                                        0 31 0x2 0x1>; /* PA31 periph B with pullup, conflicts with TWCK0, ISI_HSYNC */
+                                       };
+                               };
+
+                               usart0 {
+                                       pinctrl_usart0: usart0-0 {
+                                               atmel,pins =
+                                                       <3 17 0x1 0x0   /* PD17 periph A */
+                                                        3 18 0x1 0x1>; /* PD18 periph A with pullup */
+                                       };
+
+                                       pinctrl_usart0_rts_cts: usart0_rts_cts-0 {
+                                               atmel,pins =
+                                                       <3 15 0x1 0x0   /* PD15 periph A, conflicts with SPI0_NPCS2, CANTX0 */
+                                                        3 16 0x1 0x0>; /* PD16 periph A, conflicts with SPI0_NPCS3, PWMFI3 */
+                                       };
+                               };
+
+                               usart1 {
+                                       pinctrl_usart1: usart1-0 {
+                                               atmel,pins =
+                                                       <1 28 0x1 0x0   /* PB28 periph A */
+                                                        1 29 0x1 0x1>; /* PB29 periph A with pullup */
+                                       };
+
+                                       pinctrl_usart1_rts_cts: usart1_rts_cts-0 {
+                                               atmel,pins =
+                                                       <1 26 0x1 0x0   /* PB26 periph A, conflicts with GRX7 */
+                                                        1 27 0x1 0x0>; /* PB27 periph A, conflicts with G125CKO */
+                                       };
+                               };
+
+                               usart2 {
+                                       pinctrl_usart2: usart2-0 {
+                                               atmel,pins =
+                                                       <4 25 0x2 0x0   /* PE25 periph B, conflicts with A25 */
+                                                        4 26 0x2 0x1>; /* PE26 periph B with pullup, conflicts NCS0 */
+                                       };
+
+                                       pinctrl_usart2_rts_cts: usart2_rts_cts-0 {
+                                               atmel,pins =
+                                                       <4 23 0x2 0x0   /* PE23 periph B, conflicts with A23 */
+                                                        4 24 0x2 0x0>; /* PE24 periph B, conflicts with A24 */
+                                       };
+                               };
+
+                               usart3 {
+                                       pinctrl_usart3: usart3-0 {
+                                               atmel,pins =
+                                                       <4 18 0x2 0x0   /* PE18 periph B, conflicts with A18 */
+                                                        4 19 0x2 0x1>; /* PE19 periph B with pullup, conflicts with A19 */
+                                       };
+
+                                       pinctrl_usart3_rts_cts: usart3_rts_cts-0 {
+                                               atmel,pins =
+                                                       <4 16 0x2 0x0   /* PE16 periph B, conflicts with A16 */
+                                                        4 17 0x2 0x0>; /* PE17 periph B, conflicts with A17 */
+                                       };
+                               };
+                       };
+
+                       pmc: pmc@fffffc00 {
+                               compatible = "atmel,at91rm9200-pmc";
+                               reg = <0xfffffc00 0x120>;
+                       };
+
+                       rstc@fffffe00 {
+                               compatible = "atmel,at91sam9g45-rstc";
+                               reg = <0xfffffe00 0x10>;
+                       };
+
+                       pit: timer@fffffe30 {
+                               compatible = "atmel,at91sam9260-pit";
+                               reg = <0xfffffe30 0xf>;
+                               interrupts = <3 4 5>;
+                       };
+
+                       watchdog@fffffe40 {
+                               compatible = "atmel,at91sam9260-wdt";
+                               reg = <0xfffffe40 0x10>;
+                               status = "disabled";
+                       };
+
+                       rtc@fffffeb0 {
+                               compatible = "atmel,at91rm9200-rtc";
+                               reg = <0xfffffeb0 0x30>;
+                               interrupts = <1 4 7>;
+                       };
+               };
+
+               usb0: gadget@00500000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       compatible = "atmel,at91sam9rl-udc";
+                       reg = <0x00500000 0x100000
+                              0xf8030000 0x4000>;
+                       interrupts = <33 4 2>;
+                       status = "disabled";
+
+                       ep0 {
+                               reg = <0>;
+                               atmel,fifo-size = <64>;
+                               atmel,nb-banks = <1>;
+                       };
+
+                       ep1 {
+                               reg = <1>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <3>;
+                               atmel,can-dma;
+                               atmel,can-isoc;
+                       };
+
+                       ep2 {
+                               reg = <2>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <3>;
+                               atmel,can-dma;
+                               atmel,can-isoc;
+                       };
+
+                       ep3 {
+                               reg = <3>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <2>;
+                               atmel,can-dma;
+                       };
+
+                       ep4 {
+                               reg = <4>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <2>;
+                               atmel,can-dma;
+                       };
+
+                       ep5 {
+                               reg = <5>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <2>;
+                               atmel,can-dma;
+                       };
+
+                       ep6 {
+                               reg = <6>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <2>;
+                               atmel,can-dma;
+                       };
+
+                       ep7 {
+                               reg = <7>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <2>;
+                               atmel,can-dma;
+                       };
+
+                       ep8 {
+                               reg = <8>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <2>;
+                       };
+
+                       ep9 {
+                               reg = <9>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <2>;
+                       };
+
+                       ep10 {
+                               reg = <10>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <2>;
+                       };
+
+                       ep11 {
+                               reg = <11>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <2>;
+                       };
+
+                       ep12 {
+                               reg = <12>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <2>;
+                       };
+
+                       ep13 {
+                               reg = <13>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <2>;
+                       };
+
+                       ep14 {
+                               reg = <14>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <2>;
+                       };
+
+                       ep15 {
+                               reg = <15>;
+                               atmel,fifo-size = <1024>;
+                               atmel,nb-banks = <2>;
+                       };
+               };
+
+               usb1: ohci@00600000 {
+                       compatible = "atmel,at91rm9200-ohci", "usb-ohci";
+                       reg = <0x00600000 0x100000>;
+                       interrupts = <32 4 2>;
+                       status = "disabled";
+               };
+
+               usb2: ehci@00700000 {
+                       compatible = "atmel,at91sam9g45-ehci", "usb-ehci";
+                       reg = <0x00700000 0x100000>;
+                       interrupts = <32 4 2>;
+                       status = "disabled";
+               };
+
+               nand0: nand@60000000 {
+                       compatible = "atmel,at91rm9200-nand";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       reg = < 0x60000000 0x01000000   /* EBI CS3 */
+                               0xffffc070 0x00000490   /* SMC PMECC regs */
+                               0xffffc500 0x00000100   /* SMC PMECC Error Location regs */
+                               0x00100000 0x00100000   /* ROM code */
+                               0x70000000 0x10000000   /* NFC Command Registers */
+                               0xffffc000 0x00000070   /* NFC HSMC regs */
+                               0x00200000 0x00100000   /* NFC SRAM banks */
+                               >;
+                       interrupts = <5 4 6>;
+                       atmel,nand-addr-offset = <21>;
+                       atmel,nand-cmd-offset = <22>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_nand0_ale_cle>;
+                       atmel,pmecc-lookup-table-offset = <0x10000 0x18000>;
+                       status = "disabled";
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/sama5d31ek.dts b/arch/arm/boot/dts/sama5d31ek.dts
new file mode 100644 (file)
index 0000000..fa5d216
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * sama5d31ek.dts - Device Tree file for SAMA5D31-EK board
+ *
+ *  Copyright (C) 2013 Atmel,
+ *                2013 Ludovic Desroches <ludovic.desroches@atmel.com>
+ *
+ * Licensed under GPLv2 or later.
+ */
+/dts-v1/;
+/include/ "sama5d3xmb.dtsi"
+/include/ "sama5d3xdm.dtsi"
+
+/ {
+       model = "Atmel SAMA5D31-EK";
+       compatible = "atmel,sama5d31ek", "atmel,sama5d3xmb", "atmel,sama5d3xcm", "atmel,sama5d3", "atmel,sama5";
+
+       ahb {
+               apb {
+                       spi0: spi@f0004000 {
+                               status = "okay";
+                       };
+
+                       ssc0: ssc@f0008000 {
+                               status = "okay";
+                       };
+
+                       i2c0: i2c@f0014000 {
+                               status = "okay";
+                       };
+
+                       i2c1: i2c@f0018000 {
+                               status = "okay";
+                       };
+
+                       macb1: ethernet@f802c000 {
+                               status = "okay";
+                       };
+               };
+       };
+
+       leds {
+               d3 {
+                       label = "d3";
+                       gpios = <&pioE 24 0>;
+               };
+       };
+
+       sound {
+               status = "okay";
+       };
+};
diff --git a/arch/arm/boot/dts/sama5d33ek.dts b/arch/arm/boot/dts/sama5d33ek.dts
new file mode 100644 (file)
index 0000000..c38c943
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * sama5d33ek.dts - Device Tree file for SAMA5D33-EK board
+ *
+ *  Copyright (C) 2013 Atmel,
+ *                2013 Ludovic Desroches <ludovic.desroches@atmel.com>
+ *
+ * Licensed under GPLv2 or later.
+ */
+/dts-v1/;
+/include/ "sama5d3xmb.dtsi"
+/include/ "sama5d3xdm.dtsi"
+
+/ {
+       model = "Atmel SAMA5D33-EK";
+       compatible = "atmel,sama5d33ek", "atmel,sama5d3xmb", "atmel,sama5d3xcm", "atmel,sama5d3", "atmel,sama5";
+
+       ahb {
+               apb {
+                       spi0: spi@f0004000 {
+                               status = "okay";
+                       };
+
+                       ssc0: ssc@f0008000 {
+                               status = "okay";
+                       };
+
+                       i2c0: i2c@f0014000 {
+                               status = "okay";
+                       };
+
+                       i2c1: i2c@f0018000 {
+                               status = "okay";
+                       };
+
+                       macb0: ethernet@f0028000 {
+                               status = "okay";
+                       };
+               };
+       };
+
+       sound {
+               status = "okay";
+       };
+};
diff --git a/arch/arm/boot/dts/sama5d34ek.dts b/arch/arm/boot/dts/sama5d34ek.dts
new file mode 100644 (file)
index 0000000..d2739f8
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * sama5d34ek.dts - Device Tree file for SAMA5D34-EK board
+ *
+ *  Copyright (C) 2013 Atmel,
+ *                2013 Ludovic Desroches <ludovic.desroches@atmel.com>
+ *
+ * Licensed under GPLv2 or later.
+ */
+/dts-v1/;
+/include/ "sama5d3xmb.dtsi"
+/include/ "sama5d3xdm.dtsi"
+
+/ {
+       model = "Atmel SAMA5D34-EK";
+       compatible = "atmel,sama5d34ek", "atmel,sama5ek", "atmel,sama5d3xmb", "atmel,sama5d3xcm", "atmel,sama5d3", "atmel,sama5";
+
+       ahb {
+               apb {
+                       spi0: spi@f0004000 {
+                               status = "okay";
+                       };
+
+                       ssc0: ssc@f0008000 {
+                               status = "okay";
+                       };
+
+                       can0: can@f000c000 {
+                               status = "okay";
+                       };
+
+                       i2c0: i2c@f0014000 {
+                               status = "okay";
+                       };
+
+                       i2c1: i2c@f0018000 {
+                               status = "okay";
+
+                               24c256@50 {
+                                       compatible = "24c256";
+                                       reg = <0x50>;
+                                       pagesize = <64>;
+                               };
+                       };
+
+                       macb0: ethernet@f0028000 {
+                               status = "okay";
+                       };
+               };
+       };
+
+       leds {
+               d3 {
+                       label = "d3";
+                       gpios = <&pioE 24 0>;
+               };
+       };
+
+       sound {
+               status = "okay";
+       };
+};
diff --git a/arch/arm/boot/dts/sama5d35ek.dts b/arch/arm/boot/dts/sama5d35ek.dts
new file mode 100644 (file)
index 0000000..a488fc4
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * sama5d35ek.dts - Device Tree file for SAMA5D35-EK board
+ *
+ *  Copyright (C) 2013 Atmel,
+ *                2013 Ludovic Desroches <ludovic.desroches@atmel.com>
+ *
+ * Licensed under GPLv2 or later.
+ */
+/dts-v1/;
+/include/ "sama5d3xmb.dtsi"
+
+/ {
+       model = "Atmel SAMA5D35-EK";
+       compatible = "atmel,sama5d35ek", "atmel,sama5d3xmb", "atmel,sama5d3xcm", "atmel,sama5d3", "atmel,sama5";
+
+       ahb {
+               apb {
+                       spi0: spi@f0004000 {
+                               status = "okay";
+                       };
+
+                       can0: can@f000c000 {
+                               status = "okay";
+                       };
+
+                       i2c1: i2c@f0018000 {
+                               status = "okay";
+                       };
+
+                       macb0: ethernet@f0028000 {
+                               status = "okay";
+                       };
+
+                       isi: isi@f0034000 {
+                               status = "okay";
+                       };
+
+                       macb1: ethernet@f802c000 {
+                               status = "okay";
+                       };
+               };
+       };
+
+       gpio_keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               pb_user1 {
+                       label = "pb_user1";
+                       gpios = <&pioE 27 0>;
+                       linux,code = <0x100>;
+                       gpio-key,wakeup;
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/sama5d3xcm.dtsi b/arch/arm/boot/dts/sama5d3xcm.dtsi
new file mode 100644 (file)
index 0000000..1f8ed40
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * sama5d3xcm.dtsi - Device Tree Include file for SAMA5D3x CPU Module
+ *
+ *  Copyright (C) 2013 Atmel,
+ *                2013 Ludovic Desroches <ludovic.desroches@atmel.com>
+ *
+ * Licensed under GPLv2 or later.
+ */
+/include/ "sama5d3.dtsi"
+
+/ {
+       compatible = "atmel,samad3xcm", "atmel,sama5d3", "atmel,sama5";
+
+       chosen {
+               bootargs = "console=ttyS0,115200 rootfstype=ubifs ubi.mtd=5 root=ubi0:rootfs";
+       };
+
+       memory {
+               reg = <0x20000000 0x20000000>;
+       };
+
+       clocks {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               main_clock: clock@0 {
+                       compatible = "atmel,osc", "fixed-clock";
+                       clock-frequency = <12000000>;
+               };
+       };
+
+       ahb {
+               apb {
+                       macb0: ethernet@f0028000 {
+                               phy-mode = "rgmii";
+                       };
+               };
+
+               nand0: nand@60000000 {
+                       nand-bus-width = <8>;
+                       nand-ecc-mode = "hw";
+                       atmel,has-pmecc;
+                       atmel,pmecc-cap = <4>;
+                       atmel,pmecc-sector-size = <512>;
+                       atmel,has-nfc;
+                       atmel,use-nfc-sram;
+                       nand-on-flash-bbt;
+                       status = "okay";
+
+                       at91bootstrap@0 {
+                               label = "at91bootstrap";
+                               reg = <0x0 0x40000>;
+                       };
+
+                       bootloader@40000 {
+                               label = "bootloader";
+                               reg = <0x40000 0x80000>;
+                       };
+
+                       bootloaderenv@c0000 {
+                               label = "bootloader env";
+                               reg = <0xc0000 0xc0000>;
+                       };
+
+                       dtb@180000 {
+                               label = "device tree";
+                               reg = <0x180000 0x80000>;
+                       };
+
+                       kernel@200000 {
+                               label = "kernel";
+                               reg = <0x200000 0x600000>;
+                       };
+
+                       rootfs@800000 {
+                               label = "rootfs";
+                               reg = <0x800000 0x0f800000>;
+                       };
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               d2 {
+                       label = "d2";
+                       gpios = <&pioE 25 1>;   /* PE25, conflicts with A25, RXD2 */
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/sama5d3xdm.dtsi b/arch/arm/boot/dts/sama5d3xdm.dtsi
new file mode 100644 (file)
index 0000000..4b8830e
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * sama5d3dm.dtsi - Device Tree file for SAMA5 display module
+ *
+ *  Copyright (C) 2013 Atmel,
+ *                2013 Ludovic Desroches <ludovic.desroches@atmel.com>
+ *
+ * Licensed under GPLv2 or later.
+ */
+
+/ {
+       ahb {
+               apb {
+                       i2c1: i2c@f0018000 {
+                               qt1070: keyboard@1b {
+                                       compatible = "qt1070";
+                                       reg = <0x1b>;
+                                       interrupt-parent = <&pioE>;
+                                       interrupts = <31 0x0>;
+                                       pinctrl-names = "default";
+                                       pinctrl-0 = <&pinctrl_qt1070_irq>;
+                               };
+                       };
+
+                       adc0: adc@f8018000 {
+                               status = "disabled";
+                       };
+
+                       tsadcc: tsadcc@f8018000 {
+                               status = "okay";
+                       };
+
+                       pinctrl@fffff200 {
+                               board {
+                                       pinctrl_qt1070_irq: qt1070_irq {
+                                               atmel,pins =
+                                                       <4 31 0x0 0x5>; /* PE31 GPIO with pull up deglith */
+                                       };
+                               };
+                       };
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/sama5d3xmb.dtsi b/arch/arm/boot/dts/sama5d3xmb.dtsi
new file mode 100644 (file)
index 0000000..661d7ca
--- /dev/null
@@ -0,0 +1,166 @@
+/*
+ * sama5d3xmb.dts - Device Tree file for SAMA5D3x mother board
+ *
+ *  Copyright (C) 2013 Atmel,
+ *                2013 Ludovic Desroches <ludovic.desroches@atmel.com>
+ *
+ * Licensed under GPLv2 or later.
+ */
+/include/ "sama5d3xcm.dtsi"
+
+/ {
+       compatible = "atmel,sama5d3xmb", "atmel,sama5d3xcm", "atmel,sama5d3", "atmel,sama5";
+
+       ahb {
+               apb {
+                       mmc0: mmc@f0000000 {
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_cd>;
+                               status = "okay";
+                               slot@0 {
+                                       reg = <0>;
+                                       bus-width = <4>;
+                                       cd-gpios = <&pioD 17 0>;
+                               };
+                       };
+
+                       spi0: spi@f0004000 {
+                               m25p80@0 {
+                                       compatible = "atmel,at25df321a";
+                                       spi-max-frequency = <50000000>;
+                                       reg = <0>;
+                               };
+                       };
+
+                       /*
+                        * i2c0 conflicts with ISI:
+                        * disable it to allow the use of ISI
+                        * can not enable audio when i2c0 disabled
+                        */
+                       i2c0: i2c@f0014000 {
+                               wm8904: wm8904@1a {
+                                       compatible = "wm8904";
+                                       reg = <0x1a>;
+                               };
+                       };
+
+                       usart1: serial@f0020000 {
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_usart1 &pinctrl_usart1_rts_cts>;
+                               status = "okay";
+                       };
+
+                       isi: isi@f0034000 {
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_isi &pinctrl_isi_pck_as_mck &pinctrl_isi_power &pinctrl_isi_reset>;
+                       };
+
+                       mmc1: mmc@f8000000 {
+                               pinctrl-names = "default";
+                               pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3 &pinctrl_mmc1_cd>;
+                               status = "okay";
+                               slot@0 {
+                                       reg = <0>;
+                                       bus-width = <4>;
+                                       cd-gpios = <&pioD 18 0>;
+                               };
+                       };
+
+                       adc0: adc@f8018000 {
+                               pinctrl-names = "default";
+                               pinctrl-0 = <
+                                       &pinctrl_adc0_adtrg
+                                       &pinctrl_adc0_ad0
+                                       &pinctrl_adc0_ad1
+                                       &pinctrl_adc0_ad2
+                                       &pinctrl_adc0_ad3
+                                       &pinctrl_adc0_ad4
+                                       >;
+                               status = "okay";
+                       };
+
+                       macb1: ethernet@f802c000 {
+                               phy-mode = "rmii";
+                       };
+
+                       pinctrl@fffff200 {
+                               board {
+                                       pinctrl_mmc0_cd: mmc0_cd {
+                                               atmel,pins =
+                                                       <3 17 0x0 0x5>; /* PD17 GPIO with pullup deglitch */
+                                       };
+
+                                       pinctrl_mmc1_cd: mmc1_cd {
+                                               atmel,pins =
+                                                       <3 18 0x0 0x5>; /* PD18 GPIO with pullup deglitch */
+                                       };
+
+                                       pinctrl_pck0_as_audio_mck: pck0_as_audio_mck {
+                                               atmel,pins =
+                                                       <3 30 0x2 0x0>; /* PD30 periph B */
+                                       };
+
+                                       pinctrl_isi_reset: isi_reset-0 {
+                                               atmel,pins =
+                                                       <4 24 0x0 0x0>;   /* PE24 gpio */
+                                       };
+
+                                       pinctrl_isi_power: isi_power-0 {
+                                               atmel,pins =
+                                                       <4 29 0x0 0x0>; /* PE29 gpio */
+                                       };
+
+                                       pinctrl_usba_vbus: usba_vbus {
+                                               atmel,pins =
+                                                       <3 29 0x0 0x4>; /* PD29 GPIO with deglitch */
+                                       };
+                               };
+                       };
+
+                       dbgu: serial@ffffee00 {
+                               status = "okay";
+                       };
+
+                       watchdog@fffffe40 {
+                               status = "okay";
+                       };
+               };
+
+               usb0: gadget@00500000 {
+                       atmel,vbus-gpio = <&pioD 29 0>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pinctrl_usba_vbus>;
+                       status = "okay";
+               };
+
+               usb1: ohci@00600000 {
+                       num-ports = <3>;
+                       atmel,vbus-gpio = <&pioD 25 0
+                                          &pioD 26 1
+                                          &pioD 27 1
+                                         >;
+                       status = "okay";
+               };
+
+               usb2: ehci@00700000 {
+                       status = "okay";
+               };
+       };
+
+       sound {
+               compatible = "atmel,sama5d3ek-wm8904";
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_pck0_as_audio_mck>;
+
+               atmel,model = "wm8904 @ SAMA5D3EK";
+               atmel,audio-routing =
+                       "Headphone Jack", "HPOUTL",
+                       "Headphone Jack", "HPOUTR",
+                       "IN2L", "Line In Jack",
+                       "IN2R", "Line In Jack",
+                       "IN1L", "Mic";
+
+               atmel,ssc-controller = <&ssc0>;
+               atmel,audio-codec = <&wm8904>;
+       };
+};
diff --git a/arch/arm/configs/ape6evm_defconfig b/arch/arm/configs/ape6evm_defconfig
new file mode 100644 (file)
index 0000000..dab5a7d
--- /dev/null
@@ -0,0 +1,95 @@
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_EMBEDDED=y
+CONFIG_PERF_EVENTS=y
+CONFIG_SLAB=y
+# CONFIG_BLOCK is not set
+CONFIG_ARCH_SHMOBILE=y
+CONFIG_ARCH_R8A73A4=y
+CONFIG_MACH_APE6EVM=y
+# CONFIG_ARM_THUMB is not set
+CONFIG_CPU_BPREDICT_DISABLE=y
+CONFIG_PL310_ERRATA_588369=y
+CONFIG_ARM_ERRATA_754322=y
+CONFIG_SMP=y
+CONFIG_SCHED_MC=y
+CONFIG_HAVE_ARM_ARCH_TIMER=y
+CONFIG_NR_CPUS=8
+CONFIG_AEABI=y
+CONFIG_HIGHMEM=y
+CONFIG_HIGHPTE=y
+# CONFIG_HW_PERF_EVENTS is not set
+# CONFIG_COMPACTION is not set
+# CONFIG_CROSS_MEMORY_ATTACH is not set
+CONFIG_ARM_APPENDED_DTB=y
+CONFIG_VFP=y
+CONFIG_NEON=y
+CONFIG_BINFMT_MISC=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_XFRM_USER=y
+CONFIG_NET_KEY=y
+CONFIG_NET_KEY_MIGRATE=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_INET_LRO is not set
+# CONFIG_IPV6_SIT is not set
+CONFIG_NETFILTER=y
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_FW_LOADER_USER_HELPER is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NET_CADENCE is not set
+CONFIG_SMC91X=y
+CONFIG_SMSC911X=y
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_SERIO is not set
+CONFIG_SERIAL_NONSTANDARD=y
+CONFIG_SERIAL_SH_SCI=y
+CONFIG_SERIAL_SH_SCI_NR_UARTS=12
+CONFIG_SERIAL_SH_SCI_CONSOLE=y
+CONFIG_GPIO_SH_PFC=y
+CONFIG_GPIOLIB=y
+# CONFIG_HWMON is not set
+CONFIG_THERMAL=y
+CONFIG_RCAR_THERMAL=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_GPIO=y
+# CONFIG_HID is not set
+# CONFIG_USB_SUPPORT is not set
+# CONFIG_IOMMU_SUPPORT is not set
+# CONFIG_DNOTIFY is not set
+CONFIG_TMPFS=y
+# CONFIG_MISC_FILESYSTEMS is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_V4_1=y
+CONFIG_ROOT_NFS=y
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_ENABLE_DEFAULT_TRACERS=y
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_TWOFISH=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC_ITU_T=y
+CONFIG_CRC7=y
+CONFIG_LIBCRC32C=y
index 0b98100..0f2d80d 100644 (file)
@@ -20,15 +20,19 @@ CONFIG_ARCH_R8A7740=y
 CONFIG_MACH_ARMADILLO800EVA=y
 # CONFIG_SH_TIMER_TMU is not set
 CONFIG_ARM_THUMB=y
-CONFIG_CPU_BPREDICT_DISABLE=y
 CONFIG_CACHE_L2X0=y
 CONFIG_ARM_ERRATA_430973=y
 CONFIG_ARM_ERRATA_458693=y
 CONFIG_ARM_ERRATA_460075=y
+CONFIG_PL310_ERRATA_588369=y
 CONFIG_ARM_ERRATA_720789=y
+CONFIG_PL310_ERRATA_727915=y
 CONFIG_ARM_ERRATA_743622=y
 CONFIG_ARM_ERRATA_751472=y
+CONFIG_PL310_ERRATA_753970=y
 CONFIG_ARM_ERRATA_754322=y
+CONFIG_PL310_ERRATA_769419=y
+CONFIG_ARM_ERRATA_775420=y
 CONFIG_AEABI=y
 # CONFIG_OABI_COMPAT is not set
 CONFIG_FORCE_MAX_ZONEORDER=13
@@ -37,6 +41,7 @@ CONFIG_ZBOOT_ROM_BSS=0x0
 CONFIG_ARM_APPENDED_DTB=y
 CONFIG_KEXEC=y
 CONFIG_VFP=y
+CONFIG_NEON=y
 # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
 CONFIG_PM_RUNTIME=y
 CONFIG_NET=y
@@ -88,6 +93,7 @@ CONFIG_I2C=y
 CONFIG_I2C_GPIO=y
 CONFIG_I2C_SH_MOBILE=y
 # CONFIG_HWMON is not set
+CONFIG_REGULATOR=y
 CONFIG_MEDIA_SUPPORT=y
 CONFIG_VIDEO_DEV=y
 CONFIG_MEDIA_CAMERA_SUPPORT=y
index 1ea9590..047f2a4 100644 (file)
@@ -20,7 +20,7 @@ CONFIG_SOC_AT91SAM9263=y
 CONFIG_SOC_AT91SAM9G45=y
 CONFIG_SOC_AT91SAM9X5=y
 CONFIG_SOC_AT91SAM9N12=y
-CONFIG_MACH_AT91SAM_DT=y
+CONFIG_MACH_AT91SAM9_DT=y
 CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
 CONFIG_AT91_TIMER_HZ=128
 CONFIG_AEABI=y
index 0ea5d2c..05618eb 100644 (file)
@@ -22,7 +22,7 @@ CONFIG_MACH_QIL_A9260=y
 CONFIG_MACH_CPU9260=y
 CONFIG_MACH_FLEXIBITY=y
 CONFIG_MACH_SNAPPER_9260=y
-CONFIG_MACH_AT91SAM_DT=y
+CONFIG_MACH_AT91SAM9_DT=y
 CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
 # CONFIG_ARM_THUMB is not set
 CONFIG_ZBOOT_ROM_TEXT=0x0
index 3b18810..892e828 100644 (file)
@@ -22,7 +22,7 @@ CONFIG_MACH_PCONTROL_G20=y
 CONFIG_MACH_GSIA18S=y
 CONFIG_MACH_USB_A9G20=y
 CONFIG_MACH_SNAPPER_9260=y
-CONFIG_MACH_AT91SAM_DT=y
+CONFIG_MACH_AT91SAM9_DT=y
 CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
 # CONFIG_ARM_THUMB is not set
 CONFIG_AEABI=y
index 606d48f..5f551b7 100644 (file)
@@ -18,7 +18,7 @@ CONFIG_MODULE_UNLOAD=y
 CONFIG_ARCH_AT91=y
 CONFIG_ARCH_AT91SAM9G45=y
 CONFIG_MACH_AT91SAM9M10G45EK=y
-CONFIG_MACH_AT91SAM_DT=y
+CONFIG_MACH_AT91SAM9_DT=y
 CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
 CONFIG_AT91_SLOW_CLOCK=y
 CONFIG_AEABI=y
index 670c3b6..f6e585b 100644 (file)
@@ -33,7 +33,6 @@ CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
 CONFIG_SMP=y
 CONFIG_SCHED_MC=y
-CONFIG_PREEMPT=y
 CONFIG_AEABI=y
 # CONFIG_OABI_COMPAT is not set
 CONFIG_HIGHMEM=y
@@ -86,7 +85,6 @@ CONFIG_I2C_SH_MOBILE=y
 CONFIG_GPIO_PCF857X=y
 # CONFIG_HWMON is not set
 CONFIG_REGULATOR=y
-CONFIG_REGULATOR_DUMMY=y
 CONFIG_FB=y
 CONFIG_FB_SH_MOBILE_LCDC=y
 CONFIG_FRAMEBUFFER_CONSOLE=y
index 7594b3a..9fb1189 100644 (file)
@@ -75,6 +75,7 @@ CONFIG_I2C=y
 CONFIG_I2C_SH_MOBILE=y
 # CONFIG_HWMON is not set
 # CONFIG_MFD_SUPPORT is not set
+CONFIG_REGULATOR=y
 CONFIG_FB=y
 CONFIG_FB_MODE_HELPERS=y
 CONFIG_FB_SH_MOBILE_LCDC=y
@@ -94,6 +95,9 @@ CONFIG_USB_RENESAS_USBHS=y
 CONFIG_USB_STORAGE=y
 CONFIG_USB_GADGET=y
 CONFIG_USB_RENESAS_USBHS_UDC=y
+CONFIG_MMC=y
+CONFIG_MMC_SDHI=y
+CONFIG_MMC_SH_MMCIF=y
 CONFIG_DMADEVICES=y
 CONFIG_SH_DMAE=y
 CONFIG_EXT2_FS=y
index afb17d6..494e70a 100644 (file)
@@ -49,6 +49,10 @@ CONFIG_DEVTMPFS_MOUNT=y
 # CONFIG_FW_LOADER is not set
 CONFIG_SCSI=y
 CONFIG_BLK_DEV_SD=y
+CONFIG_ATA=y
+CONFIG_ATA_SFF=y
+CONFIG_ATA_BMDMA=y
+CONFIG_SATA_RCAR=y
 CONFIG_NETDEVICES=y
 # CONFIG_NET_VENDOR_BROADCOM is not set
 # CONFIG_NET_VENDOR_FARADAY is not set
@@ -75,6 +79,7 @@ CONFIG_I2C_RCAR=y
 CONFIG_SPI=y
 CONFIG_SPI_SH_HSPI=y
 CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_RCAR=y
 # CONFIG_HWMON is not set
 CONFIG_THERMAL=y
 CONFIG_RCAR_THERMAL=y
@@ -88,6 +93,9 @@ CONFIG_USB_OHCI_HCD=y
 CONFIG_USB_OHCI_HCD_PLATFORM=y
 CONFIG_USB_EHCI_HCD_PLATFORM=y
 CONFIG_USB_STORAGE=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_GPIO=y
 CONFIG_UIO=y
 CONFIG_UIO_PDRV_GENIRQ=y
 # CONFIG_IOMMU_SUPPORT is not set
diff --git a/arch/arm/configs/sama5_defconfig b/arch/arm/configs/sama5_defconfig
new file mode 100644 (file)
index 0000000..4d0dc3c
--- /dev/null
@@ -0,0 +1,181 @@
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_IRQ_DOMAIN_DEBUG=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_EMBEDDED=y
+CONFIG_SLAB=y
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_LBDAF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_ARCH_AT91=y
+CONFIG_SOC_SAM_V7=y
+CONFIG_SOC_SAMA5D3=y
+CONFIG_MACH_SAMA5_DT=y
+CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_UACCESS_WITH_MEMCPY=y
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200 initrd=0x21100000,25165824 root=/dev/ram0 rw"
+CONFIG_AUTO_ZRELADDR=y
+CONFIG_VFP=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_PM_RUNTIME=y
+CONFIG_PM_DEBUG=y
+CONFIG_PM_ADVANCED_DEBUG=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_PNP=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_INET_DIAG is not set
+CONFIG_IPV6=y
+# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET6_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET6_XFRM_MODE_BEET is not set
+CONFIG_IPV6_SIT_6RD=y
+CONFIG_CAN=y
+CONFIG_CAN_AT91=y
+CONFIG_CFG80211=y
+CONFIG_MAC80211=y
+CONFIG_MAC80211_LEDS=y
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_STANDALONE is not set
+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+CONFIG_MTD=y
+CONFIG_MTD_CMDLINE_PARTS=y
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+CONFIG_MTD_CFI=y
+CONFIG_MTD_M25P80=y
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_ATMEL=y
+CONFIG_MTD_UBI=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=4
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_ATMEL_TCLIB=y
+CONFIG_ATMEL_SSC=y
+CONFIG_EEPROM_AT24=y
+CONFIG_SCSI=y
+CONFIG_BLK_DEV_SD=y
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_LOWLEVEL is not set
+CONFIG_NETDEVICES=y
+CONFIG_MII=y
+CONFIG_MACB=y
+# CONFIG_NET_VENDOR_BROADCOM is not set
+# CONFIG_NET_VENDOR_CIRRUS is not set
+# CONFIG_NET_VENDOR_FARADAY is not set
+# CONFIG_NET_VENDOR_INTEL is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+# CONFIG_NET_VENDOR_SMSC is not set
+# CONFIG_NET_VENDOR_STMICRO is not set
+# CONFIG_NET_VENDOR_WIZNET is not set
+CONFIG_MICREL_PHY=y
+# CONFIG_WLAN is not set
+# CONFIG_INPUT_MOUSEDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_KEYBOARD_ATKBD is not set
+CONFIG_KEYBOARD_QT1070=y
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_INPUT_MOUSE is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ATMEL_MXT=y
+CONFIG_TOUCHSCREEN_ATMEL_TSADCC=y
+# CONFIG_SERIO is not set
+CONFIG_LEGACY_PTY_COUNT=4
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+CONFIG_HW_RANDOM=y
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_AT91=y
+CONFIG_I2C_GPIO=y
+CONFIG_SPI=y
+CONFIG_SPI_ATMEL=y
+CONFIG_SPI_GPIO=y
+CONFIG_GPIO_SYSFS=y
+# CONFIG_HWMON is not set
+CONFIG_SSB=m
+CONFIG_FB=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_GENERIC is not set
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_HID_GENERIC is not set
+CONFIG_USB=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_ACM=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_AT91=y
+CONFIG_USB_MASS_STORAGE=m
+CONFIG_MMC=y
+# CONFIG_MMC_BLOCK_BOUNCE is not set
+CONFIG_MMC_ATMELMCI=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_GPIO=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_AT91RM9200=y
+CONFIG_DMADEVICES=y
+# CONFIG_IOMMU_SUPPORT is not set
+CONFIG_IIO=y
+CONFIG_AT91_ADC=y
+CONFIG_EXT2_FS=y
+CONFIG_FANOTIFY=y
+CONFIG_VFAT_FS=y
+CONFIG_TMPFS=y
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_UBIFS_FS=y
+CONFIG_NFS_FS=y
+CONFIG_ROOT_NFS=y
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_850=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_STRIP_ASM_SYMS=y
+CONFIG_DEBUG_FS=y
+# CONFIG_SCHED_DEBUG is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_FTRACE is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_LL=y
+CONFIG_EARLY_PRINTK=y
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_USER_API_HASH=m
+CONFIG_CRYPTO_USER_API_SKCIPHER=m
+CONFIG_CRYPTO_DEV_ATMEL_AES=y
+CONFIG_CRYPTO_DEV_ATMEL_TDES=y
+CONFIG_CRYPTO_DEV_ATMEL_SHA=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC_ITU_T=m
index 426270f..c037aa1 100644 (file)
@@ -5,7 +5,6 @@ CONFIG_BLK_DEV_INITRD=y
 CONFIG_KALLSYMS_ALL=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
-# CONFIG_LBDAF is not set
 # CONFIG_BLK_DEV_BSG is not set
 CONFIG_ARCH_U8500=y
 CONFIG_MACH_HREFV60=y
@@ -90,6 +89,8 @@ CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_LM3530=y
 CONFIG_LEDS_LP5521=y
 CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
 CONFIG_RTC_CLASS=y
 CONFIG_RTC_DRV_AB8500=y
 CONFIG_RTC_DRV_PL031=y
@@ -103,6 +104,7 @@ CONFIG_EXT2_FS_XATTR=y
 CONFIG_EXT2_FS_POSIX_ACL=y
 CONFIG_EXT2_FS_SECURITY=y
 CONFIG_EXT3_FS=y
+CONFIG_EXT4_FS=y
 CONFIG_VFAT_FS=y
 CONFIG_TMPFS=y
 CONFIG_TMPFS_POSIX_ACL=y
index 6071f4c..0280238 100644 (file)
@@ -1,14 +1,15 @@
 if ARCH_AT91
 
-config HAVE_AT91_DATAFLASH_CARD
-       bool
-
 config HAVE_AT91_DBGU0
        bool
 
 config HAVE_AT91_DBGU1
        bool
 
+config AT91_PMC_UNIT
+       bool
+       default !ARCH_AT91X40
+
 config AT91_SAM9_ALT_RESET
        bool
        default !ARCH_AT91X40
@@ -17,17 +18,59 @@ config AT91_SAM9G45_RESET
        bool
        default !ARCH_AT91X40
 
+config AT91_SAM9_TIME
+       bool
+
 config SOC_AT91SAM9
        bool
+       select AT91_SAM9_TIME
        select CPU_ARM926T
        select GENERIC_CLOCKEVENTS
        select MULTI_IRQ_HANDLER
        select SPARSE_IRQ
 
+config SOC_SAMA5
+       bool
+       select AT91_SAM9_TIME
+       select CPU_V7
+       select GENERIC_CLOCKEVENTS
+       select MULTI_IRQ_HANDLER
+       select SPARSE_IRQ
+
 menu "Atmel AT91 System-on-Chip"
 
+choice
+
+       prompt "Core type"
+
+config SOC_SAM_V4_V5
+       bool "ARM7/ARM9"
+       help
+         Select this if you are using one of Atmel's AT91SAM9, AT91RM9200
+         or AT91X40 SoC.
+
+config SOC_SAM_V7
+       bool "Cortex A5"
+       help
+         Select this if you are using one of Atmel's SAMA5D3 SoC.
+
+endchoice
+
 comment "Atmel AT91 Processor"
 
+if SOC_SAM_V7
+config SOC_SAMA5D3
+       bool "SAMA5D3 family"
+       depends on SOC_SAM_V7
+       select SOC_SAMA5
+       select HAVE_FB_ATMEL
+       select HAVE_AT91_DBGU1
+       help
+         Select this if you are using one of Atmel's SAMA5D3 family SoC.
+         This support covers SAMA5D31, SAMA5D33, SAMA5D34, SAMA5D35.
+endif
+
+if SOC_SAM_V4_V5
 config SOC_AT91RM9200
        bool "AT91RM9200"
        select CPU_ARM920T
@@ -93,394 +136,10 @@ config SOC_AT91SAM9N12
        help
          Select this if you are using Atmel's AT91SAM9N12 SoC.
 
-choice
-       prompt "Atmel AT91 Processor Devices for non DT boards"
-
-config ARCH_AT91_NONE
-       bool "None"
-
-config ARCH_AT91RM9200
-       bool "AT91RM9200"
-       select SOC_AT91RM9200
-
-config ARCH_AT91SAM9260
-       bool "AT91SAM9260 or AT91SAM9XE"
-       select SOC_AT91SAM9260
-
-config ARCH_AT91SAM9261
-       bool "AT91SAM9261"
-       select SOC_AT91SAM9261
-
-config ARCH_AT91SAM9G10
-       bool "AT91SAM9G10"
-       select SOC_AT91SAM9261
-
-config ARCH_AT91SAM9263
-       bool "AT91SAM9263"
-       select SOC_AT91SAM9263
-
-config ARCH_AT91SAM9RL
-       bool "AT91SAM9RL"
-       select SOC_AT91SAM9RL
-
-config ARCH_AT91SAM9G20
-       bool "AT91SAM9G20"
-       select SOC_AT91SAM9260
-
-config ARCH_AT91SAM9G45
-       bool "AT91SAM9G45"
-       select SOC_AT91SAM9G45
-
-config ARCH_AT91X40
-       bool "AT91x40"
-       depends on !MMU
-       select ARCH_USES_GETTIMEOFFSET
-       select MULTI_IRQ_HANDLER
-       select SPARSE_IRQ
-
-endchoice
-
-config AT91_PMC_UNIT
-       bool
-       default !ARCH_AT91X40
-
-# ----------------------------------------------------------
-
-if ARCH_AT91RM9200
-
-comment "AT91RM9200 Board Type"
-
-config MACH_ONEARM
-       bool "Ajeco 1ARM Single Board Computer"
-       help
-         Select this if you are using Ajeco's 1ARM Single Board Computer.
-         <http://www.ajeco.fi/>
-
-config ARCH_AT91RM9200DK
-       bool "Atmel AT91RM9200-DK Development board"
-       select HAVE_AT91_DATAFLASH_CARD
-       help
-         Select this if you are using Atmel's AT91RM9200-DK Development board.
-         (Discontinued)
-
-config MACH_AT91RM9200EK
-       bool "Atmel AT91RM9200-EK Evaluation Kit"
-       select HAVE_AT91_DATAFLASH_CARD
-       help
-         Select this if you are using Atmel's AT91RM9200-EK Evaluation Kit.
-         <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3507>
-
-config MACH_CSB337
-       bool "Cogent CSB337"
-       help
-         Select this if you are using Cogent's CSB337 board.
-         <http://www.cogcomp.com/csb_csb337.htm>
-
-config MACH_CSB637
-       bool "Cogent CSB637"
-       help
-         Select this if you are using Cogent's CSB637 board.
-         <http://www.cogcomp.com/csb_csb637.htm>
-
-config MACH_CARMEVA
-       bool "Conitec ARM&EVA"
-       help
-         Select this if you are using Conitec's AT91RM9200-MCU-Module.
-         <http://www.conitec.net/english/linuxboard.php>
-
-config MACH_ATEB9200
-       bool "Embest ATEB9200"
-       help
-         Select this if you are using Embest's ATEB9200 board.
-         <http://www.embedinfo.com/english/product/ATEB9200.asp>
-
-config MACH_KB9200
-       bool "KwikByte KB920x"
-       help
-         Select this if you are using KwikByte's KB920x board.
-         <http://www.kwikbyte.com/KB9202.html>
-
-config MACH_PICOTUX2XX
-       bool "picotux 200"
-       help
-         Select this if you are using a picotux 200.
-         <http://www.picotux.com/>
-
-config MACH_KAFA
-       bool "Sperry-Sun KAFA board"
-       help
-         Select this if you are using Sperry-Sun's KAFA board.
-
-config MACH_ECBAT91
-       bool "emQbit ECB_AT91 SBC"
-       select HAVE_AT91_DATAFLASH_CARD
-       help
-         Select this if you are using emQbit's ECB_AT91 board.
-         <http://wiki.emqbit.com/free-ecb-at91>
-
-config MACH_YL9200
-       bool "ucDragon YL-9200"
-       help
-         Select this if you are using the ucDragon YL-9200 board.
-
-config MACH_CPUAT91
-       bool "Eukrea CPUAT91"
-       help
-         Select this if you are using the Eukrea Electromatique's
-         CPUAT91 board <http://www.eukrea.com/>.
-
-config MACH_ECO920
-       bool "eco920"
-       help
-         Select this if you are using the eco920 board
-
-config MACH_RSI_EWS
-       bool "RSI Embedded Webserver"
-       depends on ARCH_AT91RM9200
-       help
-         Select this if you are using RSIs EWS board.
-endif
-
-# ----------------------------------------------------------
-
-if ARCH_AT91SAM9260
-
-comment "AT91SAM9260 Variants"
-
-comment "AT91SAM9260 / AT91SAM9XE Board Type"
-
-config MACH_AT91SAM9260EK
-       bool "Atmel AT91SAM9260-EK / AT91SAM9XE Evaluation Kit"
-       select HAVE_AT91_DATAFLASH_CARD
-       help
-         Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit
-         <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933>
-
-config MACH_CAM60
-       bool "KwikByte KB9260 (CAM60) board"
-       help
-         Select this if you are using KwikByte's KB9260 (CAM60) board based on the Atmel AT91SAM9260.
-         <http://www.kwikbyte.com/KB9260.html>
-
-config MACH_SAM9_L9260
-       bool "Olimex SAM9-L9260 board"
-       select HAVE_AT91_DATAFLASH_CARD
-       help
-         Select this if you are using Olimex's SAM9-L9260 board based on the Atmel AT91SAM9260.
-         <http://www.olimex.com/dev/sam9-L9260.html>
-
-config MACH_AFEB9260
-       bool "Custom afeb9260 board v1"
-       help
-         Select this if you are using custom afeb9260 board based on
-         open hardware design. Select this for revision 1 of the board.
-         <svn://194.85.238.22/home/users/george/svn/arm9eb>
-         <http://groups.google.com/group/arm9fpga-evolution-board>
-
-config MACH_USB_A9260
-       bool "CALAO USB-A9260"
-       help
-         Select this if you are using a Calao Systems USB-A9260.
-         <http://www.calao-systems.com>
-
-config MACH_QIL_A9260
-       bool "CALAO QIL-A9260 board"
-       help
-         Select this if you are using a Calao Systems QIL-A9260 Board.
-         <http://www.calao-systems.com>
-
-config MACH_CPU9260
-       bool "Eukrea CPU9260 board"
-       help
-         Select this if you are using a Eukrea Electromatique's
-         CPU9260 Board <http://www.eukrea.com/>
-
-config MACH_FLEXIBITY
-       bool "Flexibity Connect board"
-       help
-         Select this if you are using Flexibity Connect board
-         <http://www.flexibity.com>
-
-endif
-
-# ----------------------------------------------------------
-
-if ARCH_AT91SAM9261
-
-comment "AT91SAM9261 Board Type"
-
-config MACH_AT91SAM9261EK
-       bool "Atmel AT91SAM9261-EK Evaluation Kit"
-       select HAVE_AT91_DATAFLASH_CARD
-       help
-         Select this if you are using Atmel's AT91SAM9261-EK Evaluation Kit.
-         <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3820>
-
-endif
-
-# ----------------------------------------------------------
-
-if ARCH_AT91SAM9G10
-
-comment "AT91SAM9G10 Board Type"
-
-config MACH_AT91SAM9G10EK
-       bool "Atmel AT91SAM9G10-EK Evaluation Kit"
-       select HAVE_AT91_DATAFLASH_CARD
-       help
-         Select this if you are using Atmel's AT91SAM9G10-EK Evaluation Kit.
-         <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4588>
-
-endif
-
-# ----------------------------------------------------------
-
-if ARCH_AT91SAM9263
-
-comment "AT91SAM9263 Board Type"
-
-config MACH_AT91SAM9263EK
-       bool "Atmel AT91SAM9263-EK Evaluation Kit"
-       select HAVE_AT91_DATAFLASH_CARD
-       help
-         Select this if you are using Atmel's AT91SAM9263-EK Evaluation Kit.
-         <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4057>
-
-config MACH_USB_A9263
-       bool "CALAO USB-A9263"
-       help
-         Select this if you are using a Calao Systems USB-A9263.
-         <http://www.calao-systems.com>
-
-endif
-
-# ----------------------------------------------------------
-
-if ARCH_AT91SAM9RL
-
-comment "AT91SAM9RL Board Type"
-
-config MACH_AT91SAM9RLEK
-       bool "Atmel AT91SAM9RL-EK Evaluation Kit"
-       help
-         Select this if you are using Atmel's AT91SAM9RL-EK Evaluation Kit.
-
-endif
-
 # ----------------------------------------------------------
 
-if ARCH_AT91SAM9G20
-
-comment "AT91SAM9G20 Board Type"
-
-config MACH_AT91SAM9G20EK
-       bool "Atmel AT91SAM9G20-EK Evaluation Kit"
-       select HAVE_AT91_DATAFLASH_CARD
-       help
-         Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit
-         that embeds only one SD/MMC slot.
-
-config MACH_AT91SAM9G20EK_2MMC
-       depends on MACH_AT91SAM9G20EK
-       bool "Atmel AT91SAM9G20-EK Evaluation Kit with 2 SD/MMC Slots"
-       help
-         Select this if you are using an Atmel AT91SAM9G20-EK Evaluation Kit
-         with 2 SD/MMC Slots. This is the case for AT91SAM9G20-EK rev. C and
-         onwards.
-         <http://www.atmel.com/tools/SAM9G20-EK.aspx>
-
-config MACH_CPU9G20
-       bool "Eukrea CPU9G20 board"
-       help
-         Select this if you are using a Eukrea Electromatique's
-         CPU9G20 Board <http://www.eukrea.com/>
-
-config MACH_ACMENETUSFOXG20
-       bool "Acme Systems srl FOX Board G20"
-       help
-         Select this if you are using Acme Systems
-         FOX Board G20 <http://www.acmesystems.it>
-
-config MACH_PORTUXG20
-       bool "taskit PortuxG20"
-       help
-         Select this if you are using taskit's PortuxG20.
-         <http://www.taskit.de/en/>
-
-config MACH_STAMP9G20
-       bool "taskit Stamp9G20 CPU module"
-       help
-         Select this if you are using taskit's Stamp9G20 CPU module on its
-         evaluation board.
-         <http://www.taskit.de/en/>
-
-config MACH_PCONTROL_G20
-       bool "PControl G20 CPU module"
-       help
-         Select this if you are using taskit's Stamp9G20 CPU module on this
-         carrier board, beeing the decentralized unit of a building automation
-         system; featuring nvram, eth-switch, iso-rs485, display, io
-
-config MACH_GSIA18S
-       bool "GS_IA18_S board"
-       help
-         This enables support for the GS_IA18_S board
-         produced by GeoSIG Ltd company. This is an internet accelerograph.
-         <http://www.geosig.com>
-
-config MACH_USB_A9G20
-       bool "CALAO USB-A9G20"
-       depends on ARCH_AT91SAM9G20
-       help
-         Select this if you are using a Calao Systems USB-A9G20.
-         <http://www.calao-systems.com>
-
-endif
-
-if (ARCH_AT91SAM9260 || ARCH_AT91SAM9G20)
-comment "AT91SAM9260/AT91SAM9G20 boards"
-
-config MACH_SNAPPER_9260
-        bool "Bluewater Systems Snapper 9260/9G20 module"
-        help
-          Select this if you are using the Bluewater Systems Snapper 9260 or
-          Snapper 9G20 modules.
-          <http://www.bluewatersys.com/>
-endif
-
-# ----------------------------------------------------------
-
-if ARCH_AT91SAM9G45
-
-comment "AT91SAM9G45 Board Type"
-
-config MACH_AT91SAM9M10G45EK
-       bool "Atmel AT91SAM9M10G45-EK Evaluation Kits"
-       help
-         Select this if you are using Atmel's AT91SAM9M10G45-EK Evaluation Kit.
-         Those boards can be populated with any SoC of AT91SAM9G45 or AT91SAM9M10
-         families: AT91SAM9G45, AT91SAM9G46, AT91SAM9M10 and AT91SAM9M11.
-         <http://www.atmel.com/tools/SAM9M10-G45-EK.aspx>
-
-endif
-
-# ----------------------------------------------------------
-
-if ARCH_AT91X40
-
-comment "AT91X40 Board Type"
-
-config MACH_AT91EB01
-       bool "Atmel AT91EB01 Evaluation Kit"
-       help
-         Select this if you are using Atmel's AT91EB01 Evaluation Kit.
-         It is also a popular target for simulators such as GDB's
-         ARM simulator (commonly known as the ARMulator) and the
-         Skyeye simulator.
-
-endif
-
-# ----------------------------------------------------------
+source arch/arm/mach-at91/Kconfig.non_dt
+endif # SOC_SAM_V4_V5
 
 comment "Generic Board Type"
 
@@ -492,7 +151,7 @@ config MACH_AT91RM9200_DT
          Select this if you want to experiment device-tree with
          an Atmel RM9200 Evaluation Kit.
 
-config MACH_AT91SAM_DT
+config MACH_AT91SAM9_DT
        bool "Atmel AT91SAM Evaluation Kits with device-tree support"
        depends on SOC_AT91SAM9
        select USE_OF
@@ -500,15 +159,13 @@ config MACH_AT91SAM_DT
          Select this if you want to experiment device-tree with
          an Atmel Evaluation Kit.
 
-# ----------------------------------------------------------
-
-comment "AT91 Board Options"
-
-config MTD_AT91_DATAFLASH_CARD
-       bool "Enable DataFlash Card support"
-       depends on HAVE_AT91_DATAFLASH_CARD
+config MACH_SAMA5_DT
+       bool "Atmel SAMA5 Evaluation Kits with device-tree support"
+       depends on SOC_SAMA5
+       select USE_OF
        help
-         Enable support for the DataFlash card.
+         Select this if you want to experiment device-tree with
+         an Atmel Evaluation Kit.
 
 # ----------------------------------------------------------
 
diff --git a/arch/arm/mach-at91/Kconfig.non_dt b/arch/arm/mach-at91/Kconfig.non_dt
new file mode 100644 (file)
index 0000000..6c24985
--- /dev/null
@@ -0,0 +1,399 @@
+menu "Atmel Non-DT world"
+
+config HAVE_AT91_DATAFLASH_CARD
+       bool
+
+choice
+       prompt "Atmel AT91 Processor Devices for non DT boards"
+
+config ARCH_AT91_NONE
+       bool "None"
+
+config ARCH_AT91RM9200
+       bool "AT91RM9200"
+       select SOC_AT91RM9200
+
+config ARCH_AT91SAM9260
+       bool "AT91SAM9260 or AT91SAM9XE"
+       select SOC_AT91SAM9260
+
+config ARCH_AT91SAM9261
+       bool "AT91SAM9261"
+       select SOC_AT91SAM9261
+
+config ARCH_AT91SAM9G10
+       bool "AT91SAM9G10"
+       select SOC_AT91SAM9261
+
+config ARCH_AT91SAM9263
+       bool "AT91SAM9263"
+       select SOC_AT91SAM9263
+
+config ARCH_AT91SAM9RL
+       bool "AT91SAM9RL"
+       select SOC_AT91SAM9RL
+
+config ARCH_AT91SAM9G20
+       bool "AT91SAM9G20"
+       select SOC_AT91SAM9260
+
+config ARCH_AT91SAM9G45
+       bool "AT91SAM9G45"
+       select SOC_AT91SAM9G45
+
+config ARCH_AT91X40
+       bool "AT91x40"
+       depends on !MMU
+       select ARCH_USES_GETTIMEOFFSET
+       select MULTI_IRQ_HANDLER
+       select SPARSE_IRQ
+
+endchoice
+
+# ----------------------------------------------------------
+
+if ARCH_AT91RM9200
+
+comment "AT91RM9200 Board Type"
+
+config MACH_ONEARM
+       bool "Ajeco 1ARM Single Board Computer"
+       help
+         Select this if you are using Ajeco's 1ARM Single Board Computer.
+         <http://www.ajeco.fi/>
+
+config ARCH_AT91RM9200DK
+       bool "Atmel AT91RM9200-DK Development board"
+       select HAVE_AT91_DATAFLASH_CARD
+       help
+         Select this if you are using Atmel's AT91RM9200-DK Development board.
+         (Discontinued)
+
+config MACH_AT91RM9200EK
+       bool "Atmel AT91RM9200-EK Evaluation Kit"
+       select HAVE_AT91_DATAFLASH_CARD
+       help
+         Select this if you are using Atmel's AT91RM9200-EK Evaluation Kit.
+         <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3507>
+
+config MACH_CSB337
+       bool "Cogent CSB337"
+       help
+         Select this if you are using Cogent's CSB337 board.
+         <http://www.cogcomp.com/csb_csb337.htm>
+
+config MACH_CSB637
+       bool "Cogent CSB637"
+       help
+         Select this if you are using Cogent's CSB637 board.
+         <http://www.cogcomp.com/csb_csb637.htm>
+
+config MACH_CARMEVA
+       bool "Conitec ARM&EVA"
+       help
+         Select this if you are using Conitec's AT91RM9200-MCU-Module.
+         <http://www.conitec.net/english/linuxboard.php>
+
+config MACH_ATEB9200
+       bool "Embest ATEB9200"
+       help
+         Select this if you are using Embest's ATEB9200 board.
+         <http://www.embedinfo.com/english/product/ATEB9200.asp>
+
+config MACH_KB9200
+       bool "KwikByte KB920x"
+       help
+         Select this if you are using KwikByte's KB920x board.
+         <http://www.kwikbyte.com/KB9202.html>
+
+config MACH_PICOTUX2XX
+       bool "picotux 200"
+       help
+         Select this if you are using a picotux 200.
+         <http://www.picotux.com/>
+
+config MACH_KAFA
+       bool "Sperry-Sun KAFA board"
+       help
+         Select this if you are using Sperry-Sun's KAFA board.
+
+config MACH_ECBAT91
+       bool "emQbit ECB_AT91 SBC"
+       select HAVE_AT91_DATAFLASH_CARD
+       help
+         Select this if you are using emQbit's ECB_AT91 board.
+         <http://wiki.emqbit.com/free-ecb-at91>
+
+config MACH_YL9200
+       bool "ucDragon YL-9200"
+       help
+         Select this if you are using the ucDragon YL-9200 board.
+
+config MACH_CPUAT91
+       bool "Eukrea CPUAT91"
+       help
+         Select this if you are using the Eukrea Electromatique's
+         CPUAT91 board <http://www.eukrea.com/>.
+
+config MACH_ECO920
+       bool "eco920"
+       help
+         Select this if you are using the eco920 board
+
+config MACH_RSI_EWS
+       bool "RSI Embedded Webserver"
+       depends on ARCH_AT91RM9200
+       help
+         Select this if you are using RSIs EWS board.
+endif
+
+# ----------------------------------------------------------
+
+if ARCH_AT91SAM9260
+
+comment "AT91SAM9260 Variants"
+
+comment "AT91SAM9260 / AT91SAM9XE Board Type"
+
+config MACH_AT91SAM9260EK
+       bool "Atmel AT91SAM9260-EK / AT91SAM9XE Evaluation Kit"
+       select HAVE_AT91_DATAFLASH_CARD
+       help
+         Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit
+         <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933>
+
+config MACH_CAM60
+       bool "KwikByte KB9260 (CAM60) board"
+       help
+         Select this if you are using KwikByte's KB9260 (CAM60) board based on the Atmel AT91SAM9260.
+         <http://www.kwikbyte.com/KB9260.html>
+
+config MACH_SAM9_L9260
+       bool "Olimex SAM9-L9260 board"
+       select HAVE_AT91_DATAFLASH_CARD
+       help
+         Select this if you are using Olimex's SAM9-L9260 board based on the Atmel AT91SAM9260.
+         <http://www.olimex.com/dev/sam9-L9260.html>
+
+config MACH_AFEB9260
+       bool "Custom afeb9260 board v1"
+       help
+         Select this if you are using custom afeb9260 board based on
+         open hardware design. Select this for revision 1 of the board.
+         <svn://194.85.238.22/home/users/george/svn/arm9eb>
+         <http://groups.google.com/group/arm9fpga-evolution-board>
+
+config MACH_USB_A9260
+       bool "CALAO USB-A9260"
+       help
+         Select this if you are using a Calao Systems USB-A9260.
+         <http://www.calao-systems.com>
+
+config MACH_QIL_A9260
+       bool "CALAO QIL-A9260 board"
+       help
+         Select this if you are using a Calao Systems QIL-A9260 Board.
+         <http://www.calao-systems.com>
+
+config MACH_CPU9260
+       bool "Eukrea CPU9260 board"
+       help
+         Select this if you are using a Eukrea Electromatique's
+         CPU9260 Board <http://www.eukrea.com/>
+
+config MACH_FLEXIBITY
+       bool "Flexibity Connect board"
+       help
+         Select this if you are using Flexibity Connect board
+         <http://www.flexibity.com>
+
+endif
+
+# ----------------------------------------------------------
+
+if ARCH_AT91SAM9261
+
+comment "AT91SAM9261 Board Type"
+
+config MACH_AT91SAM9261EK
+       bool "Atmel AT91SAM9261-EK Evaluation Kit"
+       select HAVE_AT91_DATAFLASH_CARD
+       help
+         Select this if you are using Atmel's AT91SAM9261-EK Evaluation Kit.
+         <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3820>
+
+endif
+
+# ----------------------------------------------------------
+
+if ARCH_AT91SAM9G10
+
+comment "AT91SAM9G10 Board Type"
+
+config MACH_AT91SAM9G10EK
+       bool "Atmel AT91SAM9G10-EK Evaluation Kit"
+       select HAVE_AT91_DATAFLASH_CARD
+       help
+         Select this if you are using Atmel's AT91SAM9G10-EK Evaluation Kit.
+         <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4588>
+
+endif
+
+# ----------------------------------------------------------
+
+if ARCH_AT91SAM9263
+
+comment "AT91SAM9263 Board Type"
+
+config MACH_AT91SAM9263EK
+       bool "Atmel AT91SAM9263-EK Evaluation Kit"
+       select HAVE_AT91_DATAFLASH_CARD
+       help
+         Select this if you are using Atmel's AT91SAM9263-EK Evaluation Kit.
+         <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4057>
+
+config MACH_USB_A9263
+       bool "CALAO USB-A9263"
+       help
+         Select this if you are using a Calao Systems USB-A9263.
+         <http://www.calao-systems.com>
+
+endif
+
+# ----------------------------------------------------------
+
+if ARCH_AT91SAM9RL
+
+comment "AT91SAM9RL Board Type"
+
+config MACH_AT91SAM9RLEK
+       bool "Atmel AT91SAM9RL-EK Evaluation Kit"
+       help
+         Select this if you are using Atmel's AT91SAM9RL-EK Evaluation Kit.
+
+endif
+
+# ----------------------------------------------------------
+
+if ARCH_AT91SAM9G20
+
+comment "AT91SAM9G20 Board Type"
+
+config MACH_AT91SAM9G20EK
+       bool "Atmel AT91SAM9G20-EK Evaluation Kit"
+       select HAVE_AT91_DATAFLASH_CARD
+       help
+         Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit
+         that embeds only one SD/MMC slot.
+
+config MACH_AT91SAM9G20EK_2MMC
+       depends on MACH_AT91SAM9G20EK
+       bool "Atmel AT91SAM9G20-EK Evaluation Kit with 2 SD/MMC Slots"
+       help
+         Select this if you are using an Atmel AT91SAM9G20-EK Evaluation Kit
+         with 2 SD/MMC Slots. This is the case for AT91SAM9G20-EK rev. C and
+         onwards.
+         <http://www.atmel.com/tools/SAM9G20-EK.aspx>
+
+config MACH_CPU9G20
+       bool "Eukrea CPU9G20 board"
+       help
+         Select this if you are using a Eukrea Electromatique's
+         CPU9G20 Board <http://www.eukrea.com/>
+
+config MACH_ACMENETUSFOXG20
+       bool "Acme Systems srl FOX Board G20"
+       help
+         Select this if you are using Acme Systems
+         FOX Board G20 <http://www.acmesystems.it>
+
+config MACH_PORTUXG20
+       bool "taskit PortuxG20"
+       help
+         Select this if you are using taskit's PortuxG20.
+         <http://www.taskit.de/en/>
+
+config MACH_STAMP9G20
+       bool "taskit Stamp9G20 CPU module"
+       help
+         Select this if you are using taskit's Stamp9G20 CPU module on its
+         evaluation board.
+         <http://www.taskit.de/en/>
+
+config MACH_PCONTROL_G20
+       bool "PControl G20 CPU module"
+       help
+         Select this if you are using taskit's Stamp9G20 CPU module on this
+         carrier board, beeing the decentralized unit of a building automation
+         system; featuring nvram, eth-switch, iso-rs485, display, io
+
+config MACH_GSIA18S
+       bool "GS_IA18_S board"
+       help
+         This enables support for the GS_IA18_S board
+         produced by GeoSIG Ltd company. This is an internet accelerograph.
+         <http://www.geosig.com>
+
+config MACH_USB_A9G20
+       bool "CALAO USB-A9G20"
+       depends on ARCH_AT91SAM9G20
+       help
+         Select this if you are using a Calao Systems USB-A9G20.
+         <http://www.calao-systems.com>
+
+endif
+
+if (ARCH_AT91SAM9260 || ARCH_AT91SAM9G20)
+comment "AT91SAM9260/AT91SAM9G20 boards"
+
+config MACH_SNAPPER_9260
+        bool "Bluewater Systems Snapper 9260/9G20 module"
+        help
+          Select this if you are using the Bluewater Systems Snapper 9260 or
+          Snapper 9G20 modules.
+          <http://www.bluewatersys.com/>
+endif
+
+# ----------------------------------------------------------
+
+if ARCH_AT91SAM9G45
+
+comment "AT91SAM9G45 Board Type"
+
+config MACH_AT91SAM9M10G45EK
+       bool "Atmel AT91SAM9M10G45-EK Evaluation Kits"
+       help
+         Select this if you are using Atmel's AT91SAM9M10G45-EK Evaluation Kit.
+         Those boards can be populated with any SoC of AT91SAM9G45 or AT91SAM9M10
+         families: AT91SAM9G45, AT91SAM9G46, AT91SAM9M10 and AT91SAM9M11.
+         <http://www.atmel.com/tools/SAM9M10-G45-EK.aspx>
+
+endif
+
+# ----------------------------------------------------------
+
+if ARCH_AT91X40
+
+comment "AT91X40 Board Type"
+
+config MACH_AT91EB01
+       bool "Atmel AT91EB01 Evaluation Kit"
+       help
+         Select this if you are using Atmel's AT91EB01 Evaluation Kit.
+         It is also a popular target for simulators such as GDB's
+         ARM simulator (commonly known as the ARMulator) and the
+         Skyeye simulator.
+
+endif
+
+# ----------------------------------------------------------
+
+comment "AT91 Board Options"
+
+config MTD_AT91_DATAFLASH_CARD
+       bool "Enable DataFlash Card support"
+       depends on HAVE_AT91_DATAFLASH_CARD
+       help
+         Enable support for the DataFlash card.
+
+endmenu
index 39218ca..788562d 100644 (file)
@@ -10,7 +10,8 @@ obj-          :=
 obj-$(CONFIG_AT91_PMC_UNIT)    += clock.o
 obj-$(CONFIG_AT91_SAM9_ALT_RESET) += at91sam9_alt_reset.o
 obj-$(CONFIG_AT91_SAM9G45_RESET) += at91sam9g45_reset.o
-obj-$(CONFIG_SOC_AT91SAM9)     += at91sam926x_time.o sam9_smc.o
+obj-$(CONFIG_AT91_SAM9_TIME)   += at91sam926x_time.o
+obj-$(CONFIG_SOC_AT91SAM9)     += sam9_smc.o
 
 # CPU-specific support
 obj-$(CONFIG_SOC_AT91RM9200)   += at91rm9200.o at91rm9200_time.o
@@ -21,6 +22,7 @@ obj-$(CONFIG_SOC_AT91SAM9G45) += at91sam9g45.o
 obj-$(CONFIG_SOC_AT91SAM9N12)  += at91sam9n12.o
 obj-$(CONFIG_SOC_AT91SAM9X5)   += at91sam9x5.o
 obj-$(CONFIG_SOC_AT91SAM9RL)   += at91sam9rl.o
+obj-$(CONFIG_SOC_SAMA5D3)      += sama5d3.o
 
 obj-$(CONFIG_ARCH_AT91RM9200)  += at91rm9200_devices.o
 obj-$(CONFIG_ARCH_AT91SAM9260) += at91sam9260_devices.o
@@ -87,8 +89,11 @@ obj-$(CONFIG_MACH_SNAPPER_9260)      += board-snapper9260.o
 obj-$(CONFIG_MACH_AT91SAM9M10G45EK) += board-sam9m10g45ek.o
 
 # AT91SAM board with device-tree
-obj-$(CONFIG_MACH_AT91RM9200_DT) += board-rm9200-dt.o
-obj-$(CONFIG_MACH_AT91SAM_DT) += board-dt.o
+obj-$(CONFIG_MACH_AT91RM9200_DT) += board-dt-rm9200.o
+obj-$(CONFIG_MACH_AT91SAM9_DT) += board-dt-sam9.o
+
+# SAMA5 board with device-tree
+obj-$(CONFIG_MACH_SAMA5_DT) += board-dt-sama5.o
 
 # AT91X40 board-specific support
 obj-$(CONFIG_MACH_AT91EB01)    += board-eb01.o
index 9706c00..ccce759 100644 (file)
@@ -384,7 +384,7 @@ static unsigned int at91rm9200_default_irq_priority[NR_AIC_IRQS] __initdata = {
        0       /* Advanced Interrupt Controller (IRQ6) */
 };
 
-AT91_SOC_START(rm9200)
+AT91_SOC_START(at91rm9200)
        .map_io = at91rm9200_map_io,
        .default_irq_priority = at91rm9200_default_irq_priority,
        .ioremap_registers = at91rm9200_ioremap_registers,
index b67cd53..1833b4c 100644 (file)
@@ -395,7 +395,7 @@ static unsigned int at91sam9260_default_irq_priority[NR_AIC_IRQS] __initdata = {
        0,      /* Advanced Interrupt Controller */
 };
 
-AT91_SOC_START(sam9260)
+AT91_SOC_START(at91sam9260)
        .map_io = at91sam9260_map_io,
        .default_irq_priority = at91sam9260_default_irq_priority,
        .ioremap_registers = at91sam9260_ioremap_registers,
index 2998a08..ac7a341 100644 (file)
@@ -337,7 +337,7 @@ static unsigned int at91sam9261_default_irq_priority[NR_AIC_IRQS] __initdata = {
        0,      /* Advanced Interrupt Controller */
 };
 
-AT91_SOC_START(sam9261)
+AT91_SOC_START(at91sam9261)
        .map_io = at91sam9261_map_io,
        .default_irq_priority = at91sam9261_default_irq_priority,
        .ioremap_registers = at91sam9261_ioremap_registers,
index b9fc60d..8e2d9f4 100644 (file)
@@ -374,7 +374,7 @@ static unsigned int at91sam9263_default_irq_priority[NR_AIC_IRQS] __initdata = {
        0,      /* Advanced Interrupt Controller (IRQ1) */
 };
 
-AT91_SOC_START(sam9263)
+AT91_SOC_START(at91sam9263)
        .map_io = at91sam9263_map_io,
        .default_irq_priority = at91sam9263_default_irq_priority,
        .ioremap_registers = at91sam9263_ioremap_registers,
index d3addee..4fcbe7b 100644 (file)
@@ -418,7 +418,7 @@ static unsigned int at91sam9g45_default_irq_priority[NR_AIC_IRQS] __initdata = {
        0,      /* Advanced Interrupt Controller (IRQ0) */
 };
 
-AT91_SOC_START(sam9g45)
+AT91_SOC_START(at91sam9g45)
        .map_io = at91sam9g45_map_io,
        .default_irq_priority = at91sam9g45_default_irq_priority,
        .ioremap_registers = at91sam9g45_ioremap_registers,
index 5dfc8fd..2c7a2f4 100644 (file)
@@ -226,7 +226,7 @@ void __init at91sam9n12_initialize(void)
        at91_extern_irq = (1 << AT91SAM9N12_ID_IRQ0);
 }
 
-AT91_SOC_START(sam9n12)
+AT91_SOC_START(at91sam9n12)
        .map_io = at91sam9n12_map_io,
        .register_clocks = at91sam9n12_register_clocks,
        .init = at91sam9n12_initialize,
index eb98704..c396007 100644 (file)
@@ -340,7 +340,7 @@ static unsigned int at91sam9rl_default_irq_priority[NR_AIC_IRQS] __initdata = {
        0,      /* Advanced Interrupt Controller */
 };
 
-AT91_SOC_START(sam9rl)
+AT91_SOC_START(at91sam9rl)
        .map_io = at91sam9rl_map_io,
        .default_irq_priority = at91sam9rl_default_irq_priority,
        .ioremap_registers = at91sam9rl_ioremap_registers,
index 44a9a62..3a1a799 100644 (file)
@@ -320,7 +320,7 @@ static void __init at91sam9x5_map_io(void)
  *  Interrupt initialization
  * -------------------------------------------------------------------- */
 
-AT91_SOC_START(sam9x5)
+AT91_SOC_START(at91sam9x5)
        .map_io = at91sam9x5_map_io,
        .register_clocks = at91sam9x5_register_clocks,
 AT91_SOC_END
diff --git a/arch/arm/mach-at91/board-dt-sama5.c b/arch/arm/mach-at91/board-dt-sama5.c
new file mode 100644 (file)
index 0000000..705305e
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ *  Setup code for SAMA5 Evaluation Kits with Device Tree support
+ *
+ *  Copyright (C) 2013 Atmel,
+ *                2013 Ludovic Desroches <ludovic.desroches@atmel.com>
+ *
+ * Licensed under GPLv2 or later.
+ */
+
+#include <linux/types.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/gpio.h>
+#include <linux/micrel_phy.h>
+#include <linux/of.h>
+#include <linux/of_irq.h>
+#include <linux/of_platform.h>
+#include <linux/phy.h>
+
+#include <asm/setup.h>
+#include <asm/irq.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/mach/irq.h>
+
+#include "at91_aic.h"
+#include "generic.h"
+
+
+static const struct of_device_id irq_of_match[] __initconst = {
+
+       { .compatible = "atmel,sama5d3-aic", .data = at91_aic5_of_init },
+       { /*sentinel*/ }
+};
+
+static void __init at91_dt_init_irq(void)
+{
+       of_irq_init(irq_of_match);
+}
+
+static int ksz9021rn_phy_fixup(struct phy_device *phy)
+{
+       int value;
+
+#define GMII_RCCPSR    260
+#define GMII_RRDPSR    261
+#define GMII_ERCR      11
+#define GMII_ERDWR     12
+
+       /* Set delay values */
+       value = GMII_RCCPSR | 0x8000;
+       phy_write(phy, GMII_ERCR, value);
+       value = 0xF2F4;
+       phy_write(phy, GMII_ERDWR, value);
+       value = GMII_RRDPSR | 0x8000;
+       phy_write(phy, GMII_ERCR, value);
+       value = 0x2222;
+       phy_write(phy, GMII_ERDWR, value);
+
+       return 0;
+}
+
+static void __init sama5_dt_device_init(void)
+{
+       if (of_machine_is_compatible("atmel,sama5d3xcm"))
+               phy_register_fixup_for_uid(PHY_ID_KSZ9021, MICREL_PHY_ID_MASK,
+                       ksz9021rn_phy_fixup);
+
+       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+}
+
+static const char *sama5_dt_board_compat[] __initdata = {
+       "atmel,sama5",
+       NULL
+};
+
+DT_MACHINE_START(sama5_dt, "Atmel SAMA5 (Device Tree)")
+       /* Maintainer: Atmel */
+       .init_time      = at91sam926x_pit_init,
+       .map_io         = at91_map_io,
+       .handle_irq     = at91_aic5_handle_irq,
+       .init_early     = at91_dt_initialize,
+       .init_irq       = at91_dt_init_irq,
+       .init_machine   = sama5_dt_device_init,
+       .dt_compat      = sama5_dt_board_compat,
+MACHINE_END
index 3336150..da84188 100644 (file)
@@ -54,7 +54,10 @@ EXPORT_SYMBOL_GPL(at91_pmc_base);
  */
 #define cpu_has_utmi()         (  cpu_is_at91sam9rl() \
                                || cpu_is_at91sam9g45() \
-                               || cpu_is_at91sam9x5())
+                               || cpu_is_at91sam9x5() \
+                               || cpu_is_sama5d3())
+
+#define cpu_has_1056M_plla()   (cpu_is_sama5d3())
 
 #define cpu_has_800M_plla()    (  cpu_is_at91sam9g20() \
                                || cpu_is_at91sam9g45() \
@@ -75,7 +78,8 @@ EXPORT_SYMBOL_GPL(at91_pmc_base);
                                || cpu_is_at91sam9n12()))
 
 #define cpu_has_upll()         (cpu_is_at91sam9g45() \
-                               || cpu_is_at91sam9x5())
+                               || cpu_is_at91sam9x5() \
+                               || cpu_is_sama5d3())
 
 /* USB host HS & FS */
 #define cpu_has_uhp()          (!cpu_is_at91sam9rl())
@@ -83,18 +87,22 @@ EXPORT_SYMBOL_GPL(at91_pmc_base);
 /* USB device FS only */
 #define cpu_has_udpfs()                (!(cpu_is_at91sam9rl() \
                                || cpu_is_at91sam9g45() \
-                               || cpu_is_at91sam9x5()))
+                               || cpu_is_at91sam9x5() \
+                               || cpu_is_sama5d3()))
 
 #define cpu_has_plladiv2()     (cpu_is_at91sam9g45() \
                                || cpu_is_at91sam9x5() \
-                               || cpu_is_at91sam9n12())
+                               || cpu_is_at91sam9n12() \
+                               || cpu_is_sama5d3())
 
 #define cpu_has_mdiv3()                (cpu_is_at91sam9g45() \
                                || cpu_is_at91sam9x5() \
-                               || cpu_is_at91sam9n12())
+                               || cpu_is_at91sam9n12() \
+                               || cpu_is_sama5d3())
 
 #define cpu_has_alt_prescaler()        (cpu_is_at91sam9x5() \
-                               || cpu_is_at91sam9n12())
+                               || cpu_is_at91sam9n12() \
+                               || cpu_is_sama5d3())
 
 static LIST_HEAD(clocks);
 static DEFINE_SPINLOCK(clk_lock);
@@ -210,10 +218,26 @@ struct clk mck = {
 
 static void pmc_periph_mode(struct clk *clk, int is_on)
 {
-       if (is_on)
-               at91_pmc_write(AT91_PMC_PCER, clk->pmc_mask);
-       else
-               at91_pmc_write(AT91_PMC_PCDR, clk->pmc_mask);
+       u32 regval = 0;
+
+       /*
+        * With sama5d3 devices, we are managing clock division so we have to
+        * use the Peripheral Control Register introduced from at91sam9x5
+        * devices.
+        */
+       if (cpu_is_sama5d3()) {
+               regval |= AT91_PMC_PCR_CMD; /* write command */
+               regval |= clk->pid & AT91_PMC_PCR_PID; /* peripheral selection */
+               regval |= AT91_PMC_PCR_DIV(clk->div);
+               if (is_on)
+                       regval |= AT91_PMC_PCR_EN; /* enable clock */
+               at91_pmc_write(AT91_PMC_PCR, regval);
+       } else {
+               if (is_on)
+                       at91_pmc_write(AT91_PMC_PCER, clk->pmc_mask);
+               else
+                       at91_pmc_write(AT91_PMC_PCDR, clk->pmc_mask);
+       }
 }
 
 static struct clk __init *at91_css_to_clk(unsigned long css)
@@ -443,14 +467,18 @@ static void __init init_programmable_clock(struct clk *clk)
 
 static int at91_clk_show(struct seq_file *s, void *unused)
 {
-       u32             scsr, pcsr, uckr = 0, sr;
+       u32             scsr, pcsr, pcsr1 = 0, uckr = 0, sr;
        struct clk      *clk;
 
        scsr = at91_pmc_read(AT91_PMC_SCSR);
        pcsr = at91_pmc_read(AT91_PMC_PCSR);
+       if (cpu_is_sama5d3())
+               pcsr1 = at91_pmc_read(AT91_PMC_PCSR1);
        sr = at91_pmc_read(AT91_PMC_SR);
        seq_printf(s, "SCSR = %8x\n", scsr);
        seq_printf(s, "PCSR = %8x\n", pcsr);
+       if (cpu_is_sama5d3())
+               seq_printf(s, "PCSR1 = %8x\n", pcsr1);
        seq_printf(s, "MOR  = %8x\n", at91_pmc_read(AT91_CKGR_MOR));
        seq_printf(s, "MCFR = %8x\n", at91_pmc_read(AT91_CKGR_MCFR));
        seq_printf(s, "PLLA = %8x\n", at91_pmc_read(AT91_CKGR_PLLAR));
@@ -470,20 +498,30 @@ static int at91_clk_show(struct seq_file *s, void *unused)
        list_for_each_entry(clk, &clocks, node) {
                char    *state;
 
-               if (clk->mode == pmc_sys_mode)
+               if (clk->mode == pmc_sys_mode) {
                        state = (scsr & clk->pmc_mask) ? "on" : "off";
-               else if (clk->mode == pmc_periph_mode)
-                       state = (pcsr & clk->pmc_mask) ? "on" : "off";
-               else if (clk->mode == pmc_uckr_mode)
+               } else if (clk->mode == pmc_periph_mode) {
+                       if (cpu_is_sama5d3()) {
+                               u32 pmc_mask = 1 << (clk->pid % 32);
+
+                               if (clk->pid > 31)
+                                       state = (pcsr1 & pmc_mask) ? "on" : "off";
+                               else
+                                       state = (pcsr & pmc_mask) ? "on" : "off";
+                       } else {
+                               state = (pcsr & clk->pmc_mask) ? "on" : "off";
+                       }
+               } else if (clk->mode == pmc_uckr_mode) {
                        state = (uckr & clk->pmc_mask) ? "on" : "off";
-               else if (clk->pmc_mask)
+               } else if (clk->pmc_mask) {
                        state = (sr & clk->pmc_mask) ? "on" : "off";
-               else if (clk == &clk32k || clk == &main_clk)
+               } else if (clk == &clk32k || clk == &main_clk) {
                        state = "on";
-               else
+               } else {
                        state = "";
+               }
 
-               seq_printf(s, "%-10s users=%2d %-3s %9ld Hz %s\n",
+               seq_printf(s, "%-10s users=%2d %-3s %9lu Hz %s\n",
                        clk->name, clk->users, state, clk_get_rate(clk),
                        clk->parent ? clk->parent->name : "");
        }
@@ -530,6 +568,9 @@ int __init clk_register(struct clk *clk)
        if (clk_is_peripheral(clk)) {
                if (!clk->parent)
                        clk->parent = &mck;
+               if (cpu_is_sama5d3())
+                       clk->rate_hz = DIV_ROUND_UP(clk->parent->rate_hz,
+                                                   1 << clk->div);
                clk->mode = pmc_periph_mode;
        }
        else if (clk_is_sys(clk)) {
@@ -555,7 +596,11 @@ static u32 __init at91_pll_rate(struct clk *pll, u32 freq, u32 reg)
        unsigned mul, div;
 
        div = reg & 0xff;
-       mul = (reg >> 16) & 0x7ff;
+       if (cpu_is_sama5d3())
+               mul = AT91_PMC3_MUL_GET(reg);
+       else
+               mul = AT91_PMC_MUL_GET(reg);
+
        if (div && mul) {
                freq /= div;
                freq *= mul + 1;
@@ -706,12 +751,15 @@ static int __init at91_pmc_init(unsigned long main_clock)
 
        /* report if PLLA is more than mildly overclocked */
        plla.rate_hz = at91_pll_rate(&plla, main_clock, at91_pmc_read(AT91_CKGR_PLLAR));
-       if (cpu_has_300M_plla()) {
-               if (plla.rate_hz > 300000000)
+       if (cpu_has_1056M_plla()) {
+               if (plla.rate_hz > 1056000000)
                        pll_overclock = true;
        } else if (cpu_has_800M_plla()) {
                if (plla.rate_hz > 800000000)
                        pll_overclock = true;
+       } else if (cpu_has_300M_plla()) {
+               if (plla.rate_hz > 300000000)
+                       pll_overclock = true;
        } else if (cpu_has_240M_plla()) {
                if (plla.rate_hz > 240000000)
                        pll_overclock = true;
@@ -872,6 +920,7 @@ int __init at91_clock_init(unsigned long main_clock)
 static int __init at91_clock_reset(void)
 {
        unsigned long pcdr = 0;
+       unsigned long pcdr1 = 0;
        unsigned long scdr = 0;
        struct clk *clk;
 
@@ -879,8 +928,17 @@ static int __init at91_clock_reset(void)
                if (clk->users > 0)
                        continue;
 
-               if (clk->mode == pmc_periph_mode)
-                       pcdr |= clk->pmc_mask;
+               if (clk->mode == pmc_periph_mode) {
+                       if (cpu_is_sama5d3()) {
+                               u32 pmc_mask = 1 << (clk->pid % 32);
+
+                               if (clk->pid > 31)
+                                       pcdr1 |= pmc_mask;
+                               else
+                                       pcdr |= pmc_mask;
+                       } else
+                               pcdr |= clk->pmc_mask;
+               }
 
                if (clk->mode == pmc_sys_mode)
                        scdr |= clk->pmc_mask;
@@ -888,8 +946,9 @@ static int __init at91_clock_reset(void)
                pr_debug("Clocks: disable unused %s\n", clk->name);
        }
 
-       at91_pmc_write(AT91_PMC_PCDR, pcdr);
        at91_pmc_write(AT91_PMC_SCDR, scdr);
+       if (cpu_is_sama5d3())
+               at91_pmc_write(AT91_PMC_PCDR1, pcdr1);
 
        return 0;
 }
index c2e63e4..a98a39b 100644 (file)
@@ -20,7 +20,9 @@ struct clk {
        const char      *name;          /* unique clock name */
        struct clk_lookup cl;
        unsigned long   rate_hz;
+       unsigned        div;            /* parent clock divider */
        struct clk      *parent;
+       unsigned        pid;            /* peripheral ID */
        u32             pmc_mask;
        void            (*mode)(struct clk *, int);
        unsigned        id:3;           /* PCK0..4, or 32k/main/a/b */
index ea2c57a..31df120 100644 (file)
@@ -75,6 +75,9 @@ extern void __iomem *at91_pmc_base;
 #define                AT91_PMC_PLLCOUNT       (0x3f  <<  8)           /* PLL Counter */
 #define                AT91_PMC_OUT            (3     << 14)           /* PLL Clock Frequency Range */
 #define                AT91_PMC_MUL            (0x7ff << 16)           /* PLL Multiplier */
+#define                AT91_PMC_MUL_GET(n)     ((n) >> 16 & 0x7ff)
+#define                AT91_PMC3_MUL           (0x7f  << 18)           /* PLL Multiplier [SAMA5 only] */
+#define                AT91_PMC3_MUL_GET(n)    ((n) >> 18 & 0x7f)
 #define                AT91_PMC_USBDIV         (3     << 28)           /* USB Divisor (PLLB only) */
 #define                        AT91_PMC_USBDIV_1               (0 << 28)
 #define                        AT91_PMC_USBDIV_2               (1 << 28)
@@ -167,11 +170,18 @@ extern void __iomem *at91_pmc_base;
 #define                AT91_PMC_WPVS           (0x1  <<  0)            /* Write Protect Violation Status */
 #define                AT91_PMC_WPVSRC         (0xffff  <<  8)         /* Write Protect Violation Source */
 
-#define AT91_PMC_PCR           0x10c                   /* Peripheral Control Register [some SAM9] */
+#define AT91_PMC_PCER1         0x100                   /* Peripheral Clock Enable Register 1 [SAMA5 only]*/
+#define AT91_PMC_PCDR1         0x104                   /* Peripheral Clock Enable Register 1 */
+#define AT91_PMC_PCSR1         0x108                   /* Peripheral Clock Enable Register 1 */
+
+#define AT91_PMC_PCR           0x10c                   /* Peripheral Control Register [some SAM9 and SAMA5] */
 #define                AT91_PMC_PCR_PID        (0x3f  <<  0)           /* Peripheral ID */
-#define                AT91_PMC_PCR_CMD        (0x1  <<  12)           /* Command */
-#define                AT91_PMC_PCR_DIV        (0x3  <<  16)           /* Divisor Value */
-#define                AT91_PMC_PCRDIV(n)      (((n) <<  16) & AT91_PMC_PCR_DIV)
+#define                AT91_PMC_PCR_CMD        (0x1  <<  12)           /* Command (read=0, write=1) */
+#define                AT91_PMC_PCR_DIV(n)     ((n)  <<  16)           /* Divisor Value */
+#define                        AT91_PMC_PCR_DIV0       0x0                     /* Peripheral clock is MCK */
+#define                        AT91_PMC_PCR_DIV2       0x2                     /* Peripheral clock is MCK/2 */
+#define                        AT91_PMC_PCR_DIV4       0x4                     /* Peripheral clock is MCK/4 */
+#define                        AT91_PMC_PCR_DIV8       0x8                     /* Peripheral clock is MCK/8 */
 #define                AT91_PMC_PCR_EN         (0x1  <<  28)           /* Enable */
 
 #endif
index b6504c1..0f3379f 100644 (file)
@@ -36,6 +36,8 @@
 #define ARCH_ID_AT91M40807     0x14080745
 #define ARCH_ID_AT91R40008     0x44000840
 
+#define ARCH_ID_SAMA5D3                0x8A5C07C0
+
 #define ARCH_EXID_AT91SAM9M11  0x00000001
 #define ARCH_EXID_AT91SAM9M10  0x00000002
 #define ARCH_EXID_AT91SAM9G46  0x00000003
 #define ARCH_EXID_AT91SAM9G25  0x00000003
 #define ARCH_EXID_AT91SAM9X25  0x00000004
 
+#define ARCH_EXID_SAMA5D31     0x00444300
+#define ARCH_EXID_SAMA5D33     0x00414300
+#define ARCH_EXID_SAMA5D34     0x00414301
+#define ARCH_EXID_SAMA5D35     0x00584300
+
 #define ARCH_FAMILY_AT91X92    0x09200000
 #define ARCH_FAMILY_AT91SAM9   0x01900000
 #define ARCH_FAMILY_AT91SAM9XE 0x02900000
@@ -75,6 +82,9 @@ enum at91_soc_type {
        /* SAM9N12 */
        AT91_SOC_SAM9N12,
 
+       /* SAMA5D3 */
+       AT91_SOC_SAMA5D3,
+
        /* Unknown type */
        AT91_SOC_NONE
 };
@@ -93,6 +103,10 @@ enum at91_soc_subtype {
        AT91_SOC_SAM9G15, AT91_SOC_SAM9G35, AT91_SOC_SAM9X35,
        AT91_SOC_SAM9G25, AT91_SOC_SAM9X25,
 
+       /* SAMA5D3 */
+       AT91_SOC_SAMA5D31, AT91_SOC_SAMA5D33, AT91_SOC_SAMA5D34,
+       AT91_SOC_SAMA5D35,
+
        /* Unknown subtype */
        AT91_SOC_SUBTYPE_NONE
 };
@@ -187,6 +201,12 @@ static inline int at91_soc_is_detected(void)
 #define cpu_is_at91sam9n12()   (0)
 #endif
 
+#ifdef CONFIG_SOC_SAMA5D3
+#define cpu_is_sama5d3()       (at91_soc_initdata.type == AT91_SOC_SAMA5D3)
+#else
+#define cpu_is_sama5d3()       (0)
+#endif
+
 /*
  * Since this is ARM, we will never run on any AVR32 CPU. But these
  * definitions may reduce clutter in common drivers.
diff --git a/arch/arm/mach-at91/include/mach/sama5d3.h b/arch/arm/mach-at91/include/mach/sama5d3.h
new file mode 100644 (file)
index 0000000..6dc81ee
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Chip-specific header file for the SAMA5D3 family
+ *
+ *  Copyright (C) 2013 Atmel,
+ *                2013 Ludovic Desroches <ludovic.desroches@atmel.com>
+ *
+ * Common definitions.
+ * Based on SAMA5D3 datasheet.
+ *
+ * Licensed under GPLv2 or later.
+ */
+
+#ifndef SAMA5D3_H
+#define SAMA5D3_H
+
+/*
+ * Peripheral identifiers/interrupts.
+ */
+#define AT91_ID_FIQ             0      /* Advanced Interrupt Controller (FIQ) */
+#define AT91_ID_SYS             1      /* System Peripherals */
+#define SAMA5D3_ID_DBGU                 2      /* debug Unit (usually no special interrupt line) */
+#define AT91_ID_PIT             3      /* PIT */
+#define SAMA5D3_ID_WDT          4      /* Watchdog Timer Interrupt */
+#define SAMA5D3_ID_HSMC                 5      /* Static Memory Controller */
+#define SAMA5D3_ID_PIOA                 6      /* PIOA */
+#define SAMA5D3_ID_PIOB                 7      /* PIOB */
+#define SAMA5D3_ID_PIOC                 8      /* PIOC */
+#define SAMA5D3_ID_PIOD                 9      /* PIOD */
+#define SAMA5D3_ID_PIOE                10      /* PIOE */
+#define SAMA5D3_ID_SMD         11      /* SMD Soft Modem */
+#define SAMA5D3_ID_USART0      12      /* USART0 */
+#define SAMA5D3_ID_USART1      13      /* USART1 */
+#define SAMA5D3_ID_USART2      14      /* USART2 */
+#define SAMA5D3_ID_USART3      15      /* USART3 */
+#define SAMA5D3_ID_UART0       16      /* UART 0 */
+#define SAMA5D3_ID_UART1       17      /* UART 1 */
+#define SAMA5D3_ID_TWI0                18      /* Two-Wire Interface 0 */
+#define SAMA5D3_ID_TWI1                19      /* Two-Wire Interface 1 */
+#define SAMA5D3_ID_TWI2                20      /* Two-Wire Interface 2 */
+#define SAMA5D3_ID_HSMCI0      21      /* MCI */
+#define SAMA5D3_ID_HSMCI1      22      /* MCI */
+#define SAMA5D3_ID_HSMCI2      23      /* MCI */
+#define SAMA5D3_ID_SPI0                24      /* Serial Peripheral Interface 0 */
+#define SAMA5D3_ID_SPI1                25      /* Serial Peripheral Interface 1 */
+#define SAMA5D3_ID_TC0         26      /* Timer Counter 0 */
+#define SAMA5D3_ID_TC1         27      /* Timer Counter 2 */
+#define SAMA5D3_ID_PWM         28      /* Pulse Width Modulation Controller */
+#define SAMA5D3_ID_ADC         29      /* Touch Screen ADC Controller */
+#define SAMA5D3_ID_DMA0                30      /* DMA Controller 0 */
+#define SAMA5D3_ID_DMA1                31      /* DMA Controller 1 */
+#define SAMA5D3_ID_UHPHS       32      /* USB Host High Speed */
+#define SAMA5D3_ID_UDPHS       33      /* USB Device High Speed */
+#define SAMA5D3_ID_GMAC                34      /* Gigabit Ethernet MAC */
+#define SAMA5D3_ID_EMAC                35      /* Ethernet MAC */
+#define SAMA5D3_ID_LCDC                36      /* LCD Controller */
+#define SAMA5D3_ID_ISI         37      /* Image Sensor Interface */
+#define SAMA5D3_ID_SSC0                38      /* Synchronous Serial Controller 0 */
+#define SAMA5D3_ID_SSC1                39      /* Synchronous Serial Controller 1 */
+#define SAMA5D3_ID_CAN0                40      /* CAN Controller 0 */
+#define SAMA5D3_ID_CAN1                41      /* CAN Controller 1 */
+#define SAMA5D3_ID_SHA         42      /* Secure Hash Algorithm */
+#define SAMA5D3_ID_AES         43      /* Advanced Encryption Standard */
+#define SAMA5D3_ID_TDES                44      /* Triple Data Encryption Standard */
+#define SAMA5D3_ID_TRNG                45      /* True Random Generator Number */
+#define SAMA5D3_ID_IRQ0                47      /* Advanced Interrupt Controller (IRQ0) */
+
+/*
+ * Internal Memory
+ */
+#define SAMA5D3_SRAM_BASE      0x00300000      /* Internal SRAM base address */
+#define SAMA5D3_SRAM_SIZE      (128 * SZ_1K)   /* Internal SRAM size (128Kb) */
+
+#endif
diff --git a/arch/arm/mach-at91/sama5d3.c b/arch/arm/mach-at91/sama5d3.c
new file mode 100644 (file)
index 0000000..4012797
--- /dev/null
@@ -0,0 +1,377 @@
+/*
+ *  Chip-specific setup code for the SAMA5D3 family
+ *
+ *  Copyright (C) 2013 Atmel,
+ *                2013 Ludovic Desroches <ludovic.desroches@atmel.com>
+ *
+ * Licensed under GPLv2 or later.
+ */
+
+#include <linux/module.h>
+#include <linux/dma-mapping.h>
+
+#include <asm/irq.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <mach/sama5d3.h>
+#include <mach/at91_pmc.h>
+#include <mach/cpu.h>
+
+#include "soc.h"
+#include "generic.h"
+#include "clock.h"
+#include "sam9_smc.h"
+
+/* --------------------------------------------------------------------
+ *  Clocks
+ * -------------------------------------------------------------------- */
+
+/*
+ * The peripheral clocks.
+ */
+
+static struct clk pioA_clk = {
+       .name           = "pioA_clk",
+       .pid            = SAMA5D3_ID_PIOA,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk pioB_clk = {
+       .name           = "pioB_clk",
+       .pid            = SAMA5D3_ID_PIOB,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk pioC_clk = {
+       .name           = "pioC_clk",
+       .pid            = SAMA5D3_ID_PIOC,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk pioD_clk = {
+       .name           = "pioD_clk",
+       .pid            = SAMA5D3_ID_PIOD,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk pioE_clk = {
+       .name           = "pioE_clk",
+       .pid            = SAMA5D3_ID_PIOE,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk usart0_clk = {
+       .name           = "usart0_clk",
+       .pid            = SAMA5D3_ID_USART0,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk usart1_clk = {
+       .name           = "usart1_clk",
+       .pid            = SAMA5D3_ID_USART1,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk usart2_clk = {
+       .name           = "usart2_clk",
+       .pid            = SAMA5D3_ID_USART2,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk usart3_clk = {
+       .name           = "usart3_clk",
+       .pid            = SAMA5D3_ID_USART3,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk uart0_clk = {
+       .name           = "uart0_clk",
+       .pid            = SAMA5D3_ID_UART0,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk uart1_clk = {
+       .name           = "uart1_clk",
+       .pid            = SAMA5D3_ID_UART1,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk twi0_clk = {
+       .name           = "twi0_clk",
+       .pid            = SAMA5D3_ID_TWI0,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk twi1_clk = {
+       .name           = "twi1_clk",
+       .pid            = SAMA5D3_ID_TWI1,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk twi2_clk = {
+       .name           = "twi2_clk",
+       .pid            = SAMA5D3_ID_TWI2,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk mmc0_clk = {
+       .name           = "mci0_clk",
+       .pid            = SAMA5D3_ID_HSMCI0,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk mmc1_clk = {
+       .name           = "mci1_clk",
+       .pid            = SAMA5D3_ID_HSMCI1,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk mmc2_clk = {
+       .name           = "mci2_clk",
+       .pid            = SAMA5D3_ID_HSMCI2,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk spi0_clk = {
+       .name           = "spi0_clk",
+       .pid            = SAMA5D3_ID_SPI0,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk spi1_clk = {
+       .name           = "spi1_clk",
+       .pid            = SAMA5D3_ID_SPI1,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk tcb0_clk = {
+       .name           = "tcb0_clk",
+       .pid            = SAMA5D3_ID_TC0,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk tcb1_clk = {
+       .name           = "tcb1_clk",
+       .pid            = SAMA5D3_ID_TC1,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk adc_clk = {
+       .name           = "adc_clk",
+       .pid            = SAMA5D3_ID_ADC,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk adc_op_clk = {
+       .name           = "adc_op_clk",
+       .type           = CLK_TYPE_PERIPHERAL,
+       .rate_hz        = 5000000,
+};
+static struct clk dma0_clk = {
+       .name           = "dma0_clk",
+       .pid            = SAMA5D3_ID_DMA0,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk dma1_clk = {
+       .name           = "dma1_clk",
+       .pid            = SAMA5D3_ID_DMA1,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk uhphs_clk = {
+       .name           = "uhphs",
+       .pid            = SAMA5D3_ID_UHPHS,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk udphs_clk = {
+       .name           = "udphs_clk",
+       .pid            = SAMA5D3_ID_UDPHS,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+/* gmac only for sama5d33, sama5d34, sama5d35 */
+static struct clk macb0_clk = {
+       .name           = "macb0_clk",
+       .pid            = SAMA5D3_ID_GMAC,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+/* emac only for sama5d31, sama5d35 */
+static struct clk macb1_clk = {
+       .name           = "macb1_clk",
+       .pid            = SAMA5D3_ID_EMAC,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+/* lcd only for sama5d31, sama5d33, sama5d34 */
+static struct clk lcdc_clk = {
+       .name           = "lcdc_clk",
+       .pid            = SAMA5D3_ID_LCDC,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+/* isi only for sama5d33, sama5d35 */
+static struct clk isi_clk = {
+       .name           = "isi_clk",
+       .pid            = SAMA5D3_ID_ISI,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk can0_clk = {
+       .name           = "can0_clk",
+       .pid            = SAMA5D3_ID_CAN0,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk can1_clk = {
+       .name           = "can1_clk",
+       .pid            = SAMA5D3_ID_CAN1,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk ssc0_clk = {
+       .name           = "ssc0_clk",
+       .pid            = SAMA5D3_ID_SSC0,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk ssc1_clk = {
+       .name           = "ssc1_clk",
+       .pid            = SAMA5D3_ID_SSC1,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV2,
+};
+static struct clk sha_clk = {
+       .name           = "sha_clk",
+       .pid            = SAMA5D3_ID_SHA,
+       .type           = CLK_TYPE_PERIPHERAL,
+       .div            = AT91_PMC_PCR_DIV8,
+};
+static struct clk aes_clk = {
+       .name           = "aes_clk",
+       .pid            = SAMA5D3_ID_AES,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+static struct clk tdes_clk = {
+       .name           = "tdes_clk",
+       .pid            = SAMA5D3_ID_TDES,
+       .type           = CLK_TYPE_PERIPHERAL,
+};
+
+static struct clk *periph_clocks[] __initdata = {
+       &pioA_clk,
+       &pioB_clk,
+       &pioC_clk,
+       &pioD_clk,
+       &pioE_clk,
+       &usart0_clk,
+       &usart1_clk,
+       &usart2_clk,
+       &usart3_clk,
+       &uart0_clk,
+       &uart1_clk,
+       &twi0_clk,
+       &twi1_clk,
+       &twi2_clk,
+       &mmc0_clk,
+       &mmc1_clk,
+       &mmc2_clk,
+       &spi0_clk,
+       &spi1_clk,
+       &tcb0_clk,
+       &tcb1_clk,
+       &adc_clk,
+       &adc_op_clk,
+       &dma0_clk,
+       &dma1_clk,
+       &uhphs_clk,
+       &udphs_clk,
+       &macb0_clk,
+       &macb1_clk,
+       &lcdc_clk,
+       &isi_clk,
+       &can0_clk,
+       &can1_clk,
+       &ssc0_clk,
+       &ssc1_clk,
+       &sha_clk,
+       &aes_clk,
+       &tdes_clk,
+};
+
+static struct clk pck0 = {
+       .name           = "pck0",
+       .pmc_mask       = AT91_PMC_PCK0,
+       .type           = CLK_TYPE_PROGRAMMABLE,
+       .id             = 0,
+};
+
+static struct clk pck1 = {
+       .name           = "pck1",
+       .pmc_mask       = AT91_PMC_PCK1,
+       .type           = CLK_TYPE_PROGRAMMABLE,
+       .id             = 1,
+};
+
+static struct clk pck2 = {
+       .name           = "pck2",
+       .pmc_mask       = AT91_PMC_PCK2,
+       .type           = CLK_TYPE_PROGRAMMABLE,
+       .id             = 2,
+};
+
+static struct clk_lookup periph_clocks_lookups[] = {
+       /* lookup table for DT entries */
+       CLKDEV_CON_DEV_ID("usart", "ffffee00.serial", &mck),
+       CLKDEV_CON_DEV_ID(NULL, "fffff200.gpio", &pioA_clk),
+       CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioB_clk),
+       CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioC_clk),
+       CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioD_clk),
+       CLKDEV_CON_DEV_ID(NULL, "fffffa00.gpio", &pioE_clk),
+       CLKDEV_CON_DEV_ID("usart", "f001c000.serial", &usart0_clk),
+       CLKDEV_CON_DEV_ID("usart", "f0020000.serial", &usart1_clk),
+       CLKDEV_CON_DEV_ID("usart", "f8020000.serial", &usart2_clk),
+       CLKDEV_CON_DEV_ID("usart", "f8024000.serial", &usart3_clk),
+       CLKDEV_CON_DEV_ID(NULL, "f0014000.i2c", &twi0_clk),
+       CLKDEV_CON_DEV_ID(NULL, "f0018000.i2c", &twi1_clk),
+       CLKDEV_CON_DEV_ID(NULL, "f801c000.i2c", &twi2_clk),
+       CLKDEV_CON_DEV_ID("mci_clk", "f0000000.mmc", &mmc0_clk),
+       CLKDEV_CON_DEV_ID("mci_clk", "f8000000.mmc", &mmc1_clk),
+       CLKDEV_CON_DEV_ID("mci_clk", "f8004000.mmc", &mmc2_clk),
+       CLKDEV_CON_DEV_ID("spi_clk", "f0004000.spi", &spi0_clk),
+       CLKDEV_CON_DEV_ID("spi_clk", "f8008000.spi", &spi1_clk),
+       CLKDEV_CON_DEV_ID("t0_clk", "f0010000.timer", &tcb0_clk),
+       CLKDEV_CON_DEV_ID("t0_clk", "f8014000.timer", &tcb1_clk),
+       CLKDEV_CON_DEV_ID("tsc_clk", "f8018000.tsadcc", &adc_clk),
+       CLKDEV_CON_DEV_ID("dma_clk", "ffffe600.dma-controller", &dma0_clk),
+       CLKDEV_CON_DEV_ID("dma_clk", "ffffe800.dma-controller", &dma1_clk),
+       CLKDEV_CON_DEV_ID("hclk", "600000.ohci", &uhphs_clk),
+       CLKDEV_CON_DEV_ID("ohci_clk", "600000.ohci", &uhphs_clk),
+       CLKDEV_CON_DEV_ID("ehci_clk", "700000.ehci", &uhphs_clk),
+       CLKDEV_CON_DEV_ID("pclk", "500000.gadget", &udphs_clk),
+       CLKDEV_CON_DEV_ID("hclk", "500000.gadget", &utmi_clk),
+       CLKDEV_CON_DEV_ID("hclk", "f0028000.ethernet", &macb0_clk),
+       CLKDEV_CON_DEV_ID("pclk", "f0028000.ethernet", &macb0_clk),
+       CLKDEV_CON_DEV_ID("hclk", "f802c000.ethernet", &macb1_clk),
+       CLKDEV_CON_DEV_ID("pclk", "f802c000.ethernet", &macb1_clk),
+       CLKDEV_CON_DEV_ID("pclk", "f0008000.ssc", &ssc0_clk),
+       CLKDEV_CON_DEV_ID("pclk", "f000c000.ssc", &ssc1_clk),
+       CLKDEV_CON_DEV_ID("can_clk", "f000c000.can", &can0_clk),
+       CLKDEV_CON_DEV_ID("can_clk", "f8010000.can", &can1_clk),
+       CLKDEV_CON_DEV_ID("sha_clk", "f8034000.sha", &sha_clk),
+       CLKDEV_CON_DEV_ID("aes_clk", "f8038000.aes", &aes_clk),
+       CLKDEV_CON_DEV_ID("tdes_clk", "f803c000.tdes", &tdes_clk),
+};
+
+static void __init sama5d3_register_clocks(void)
+{
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(periph_clocks); i++)
+               clk_register(periph_clocks[i]);
+
+       clkdev_add_table(periph_clocks_lookups,
+                        ARRAY_SIZE(periph_clocks_lookups));
+
+       clk_register(&pck0);
+       clk_register(&pck1);
+       clk_register(&pck2);
+}
+
+/* --------------------------------------------------------------------
+ *  AT91SAM9x5 processor initialization
+ * -------------------------------------------------------------------- */
+
+static void __init sama5d3_map_io(void)
+{
+       at91_init_sram(0, SAMA5D3_SRAM_BASE, SAMA5D3_SRAM_SIZE);
+}
+
+AT91_SOC_START(sama5d3)
+       .map_io = sama5d3_map_io,
+       .register_clocks = sama5d3_register_clocks,
+AT91_SOC_END
index 4b67847..2ecd169 100644 (file)
@@ -151,6 +151,11 @@ static void __init soc_detect(u32 dbgu_base)
                at91_soc_initdata.type = AT91_SOC_SAM9N12;
                at91_boot_soc = at91sam9n12_soc;
                break;
+
+       case ARCH_ID_SAMA5D3:
+               at91_soc_initdata.type = AT91_SOC_SAMA5D3;
+               at91_boot_soc = sama5d3_soc;
+               break;
        }
 
        /* at91sam9g10 */
@@ -206,6 +211,23 @@ static void __init soc_detect(u32 dbgu_base)
                        break;
                }
        }
+
+       if (at91_soc_initdata.type == AT91_SOC_SAMA5D3) {
+               switch (at91_soc_initdata.exid) {
+               case ARCH_EXID_SAMA5D31:
+                       at91_soc_initdata.subtype = AT91_SOC_SAMA5D31;
+                       break;
+               case ARCH_EXID_SAMA5D33:
+                       at91_soc_initdata.subtype = AT91_SOC_SAMA5D33;
+                       break;
+               case ARCH_EXID_SAMA5D34:
+                       at91_soc_initdata.subtype = AT91_SOC_SAMA5D34;
+                       break;
+               case ARCH_EXID_SAMA5D35:
+                       at91_soc_initdata.subtype = AT91_SOC_SAMA5D35;
+                       break;
+               }
+       }
 }
 
 static const char *soc_name[] = {
@@ -219,6 +241,7 @@ static const char *soc_name[] = {
        [AT91_SOC_SAM9RL]       = "at91sam9rl",
        [AT91_SOC_SAM9X5]       = "at91sam9x5",
        [AT91_SOC_SAM9N12]      = "at91sam9n12",
+       [AT91_SOC_SAMA5D3]      = "sama5d3",
        [AT91_SOC_NONE]         = "Unknown"
 };
 
@@ -241,6 +264,10 @@ static const char *soc_subtype_name[] = {
        [AT91_SOC_SAM9X35]      = "at91sam9x35",
        [AT91_SOC_SAM9G25]      = "at91sam9g25",
        [AT91_SOC_SAM9X25]      = "at91sam9x25",
+       [AT91_SOC_SAMA5D31]     = "sama5d31",
+       [AT91_SOC_SAMA5D33]     = "sama5d33",
+       [AT91_SOC_SAMA5D34]     = "sama5d34",
+       [AT91_SOC_SAMA5D35]     = "sama5d35",
        [AT91_SOC_SUBTYPE_NONE] = "Unknown"
 };
 
index 9c6d3d4..43a225f 100644 (file)
@@ -22,9 +22,10 @@ extern struct at91_init_soc at91sam9g45_soc;
 extern struct at91_init_soc at91sam9rl_soc;
 extern struct at91_init_soc at91sam9x5_soc;
 extern struct at91_init_soc at91sam9n12_soc;
+extern struct at91_init_soc sama5d3_soc;
 
 #define AT91_SOC_START(_name)                          \
-struct at91_init_soc __initdata at91##_name##_soc      \
+struct at91_init_soc __initdata _name##_soc            \
  __used                                                        \
                                                = {     \
        .builtin        = 1,                            \
@@ -68,3 +69,7 @@ static inline int at91_soc_is_enabled(void)
 #if !defined(CONFIG_SOC_AT91SAM9N12)
 #define at91sam9n12_soc        at91_boot_soc
 #endif
+
+#if !defined(CONFIG_SOC_SAMA5D3)
+#define sama5d3_soc    at91_boot_soc
+#endif
index 4f7379f..b3be799 100644 (file)
@@ -1,6 +1,14 @@
 if ARCH_SIRF
 
-menu "CSR SiRF primaII/Marco/Polo Specific Features"
+menu "CSR SiRF atlas6/primaII/Marco/Polo Specific Features"
+
+config ARCH_ATLAS6
+       bool "CSR SiRFSoC ATLAS6 ARM Cortex A9 Platform"
+       default y
+       select CPU_V7
+       select SIRF_IRQ
+       help
+          Support for CSR SiRFSoC ARM Cortex A9 Platform
 
 config ARCH_PRIMA2
        bool "CSR SiRFSoC PRIMA2 ARM Cortex A9 Platform"
index 2d57aa4..72efb4f 100644 (file)
@@ -37,6 +37,27 @@ static __init void sirfsoc_map_io(void)
        sirfsoc_map_scu();
 }
 
+#ifdef CONFIG_ARCH_ATLAS6
+static const char *atlas6_dt_match[] __initdata = {
+       "sirf,atlas6",
+       NULL
+};
+
+DT_MACHINE_START(ATLAS6_DT, "Generic ATLAS6 (Flattened Device Tree)")
+       /* Maintainer: Barry Song <baohua.song@csr.com> */
+       .map_io         = sirfsoc_map_io,
+       .init_irq       = sirfsoc_of_irq_init,
+       .init_time      = sirfsoc_prima2_timer_init,
+#ifdef CONFIG_MULTI_IRQ_HANDLER
+       .handle_irq     = sirfsoc_handle_irq,
+#endif
+       .init_machine   = sirfsoc_mach_init,
+       .init_late      = sirfsoc_init_late,
+       .dt_compat      = atlas6_dt_match,
+       .restart        = sirfsoc_restart,
+MACHINE_END
+#endif
+
 #ifdef CONFIG_ARCH_PRIMA2
 static const char *prima2_dt_match[] __initdata = {
        "sirf,prima2",
index e1fac57..b646ff4 100644 (file)
@@ -14,10 +14,9 @@ obj-$(CONFIG_ARCH_EMEV2)     += setup-emev2.o clock-emev2.o
 
 # SMP objects
 smp-y                          := platsmp.o headsmp.o
-smp-$(CONFIG_HOTPLUG_CPU)      += hotplug.o
-smp-$(CONFIG_ARCH_SH73A0)      += smp-sh73a0.o headsmp-sh73a0.o
-smp-$(CONFIG_ARCH_R8A7779)     += smp-r8a7779.o
-smp-$(CONFIG_ARCH_EMEV2)       += smp-emev2.o
+smp-$(CONFIG_ARCH_SH73A0)      += smp-sh73a0.o headsmp-scu.o
+smp-$(CONFIG_ARCH_R8A7779)     += smp-r8a7779.o headsmp-scu.o
+smp-$(CONFIG_ARCH_EMEV2)       += smp-emev2.o headsmp-scu.o
 
 # IRQ objects
 obj-$(CONFIG_ARCH_SH7372)      += entry-intc.o
index 19ce885..1feb9a2 100644 (file)
@@ -593,29 +593,42 @@ static struct clk_lookup lookups[] = {
        CLKDEV_DEV_ID("sh_mobile_ceu.1",        &mstp_clks[MSTP128]),
 
        CLKDEV_DEV_ID("sh-sci.4",               &mstp_clks[MSTP200]),
+       CLKDEV_DEV_ID("e6c80000.sci",           &mstp_clks[MSTP200]),
        CLKDEV_DEV_ID("sh-sci.3",               &mstp_clks[MSTP201]),
+       CLKDEV_DEV_ID("e6c70000.sci",           &mstp_clks[MSTP201]),
        CLKDEV_DEV_ID("sh-sci.2",               &mstp_clks[MSTP202]),
+       CLKDEV_DEV_ID("e6c60000.sci",           &mstp_clks[MSTP202]),
        CLKDEV_DEV_ID("sh-sci.1",               &mstp_clks[MSTP203]),
+       CLKDEV_DEV_ID("e6c50000.sci",           &mstp_clks[MSTP203]),
        CLKDEV_DEV_ID("sh-sci.0",               &mstp_clks[MSTP204]),
+       CLKDEV_DEV_ID("e6c40000.sci",           &mstp_clks[MSTP204]),
        CLKDEV_DEV_ID("sh-sci.8",               &mstp_clks[MSTP206]),
+       CLKDEV_DEV_ID("e6c30000.sci",           &mstp_clks[MSTP206]),
        CLKDEV_DEV_ID("sh-sci.5",               &mstp_clks[MSTP207]),
+       CLKDEV_DEV_ID("e6cb0000.sci",           &mstp_clks[MSTP207]),
        CLKDEV_DEV_ID("sh-dma-engine.3",        &mstp_clks[MSTP214]),
        CLKDEV_DEV_ID("sh-dma-engine.2",        &mstp_clks[MSTP216]),
        CLKDEV_DEV_ID("sh-dma-engine.1",        &mstp_clks[MSTP217]),
        CLKDEV_DEV_ID("sh-dma-engine.0",        &mstp_clks[MSTP218]),
        CLKDEV_DEV_ID("sh-sci.7",               &mstp_clks[MSTP222]),
+       CLKDEV_DEV_ID("e6cd0000.sci",           &mstp_clks[MSTP222]),
        CLKDEV_DEV_ID("sh-sci.6",               &mstp_clks[MSTP230]),
+       CLKDEV_DEV_ID("e6cc0000.sci",           &mstp_clks[MSTP230]),
 
        CLKDEV_DEV_ID("sh_cmt.10",              &mstp_clks[MSTP329]),
        CLKDEV_DEV_ID("sh_fsi2",                &mstp_clks[MSTP328]),
        CLKDEV_DEV_ID("i2c-sh_mobile.1",        &mstp_clks[MSTP323]),
        CLKDEV_DEV_ID("renesas_usbhs",          &mstp_clks[MSTP320]),
        CLKDEV_DEV_ID("sh_mobile_sdhi.0",       &mstp_clks[MSTP314]),
+       CLKDEV_DEV_ID("e6850000.sdhi",          &mstp_clks[MSTP314]),
        CLKDEV_DEV_ID("sh_mobile_sdhi.1",       &mstp_clks[MSTP313]),
+       CLKDEV_DEV_ID("e6860000.sdhi",          &mstp_clks[MSTP313]),
        CLKDEV_DEV_ID("sh_mmcif",               &mstp_clks[MSTP312]),
+       CLKDEV_DEV_ID("e6bd0000.mmcif",         &mstp_clks[MSTP312]),
        CLKDEV_DEV_ID("sh-eth",                 &mstp_clks[MSTP309]),
 
        CLKDEV_DEV_ID("sh_mobile_sdhi.2",       &mstp_clks[MSTP415]),
+       CLKDEV_DEV_ID("e6870000.sdhi",          &mstp_clks[MSTP415]),
 
        /* ICK */
        CLKDEV_ICK_ID("host",   "renesas_usbhs",        &mstp_clks[MSTP416]),
index 1db3653..d9edeaf 100644 (file)
@@ -87,7 +87,8 @@ static struct clk div4_clks[DIV4_NR] = {
 };
 
 enum { MSTP323, MSTP322, MSTP321, MSTP320,
-       MSTP101, MSTP100,
+       MSTP115,
+       MSTP103, MSTP101, MSTP100,
        MSTP030,
        MSTP029, MSTP028, MSTP027, MSTP026, MSTP025, MSTP024, MSTP023, MSTP022, MSTP021,
        MSTP016, MSTP015, MSTP014,
@@ -99,6 +100,8 @@ static struct clk mstp_clks[MSTP_NR] = {
        [MSTP322] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 22, 0), /* SDHI1 */
        [MSTP321] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 21, 0), /* SDHI2 */
        [MSTP320] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 20, 0), /* SDHI3 */
+       [MSTP115] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 15, 0), /* SATA */
+       [MSTP103] = SH_CLK_MSTP32(&div4_clks[DIV4_S], MSTPCR1,  3, 0), /* DU */
        [MSTP101] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1,  1, 0), /* USB2 */
        [MSTP100] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1,  0, 0), /* USB0/1 */
        [MSTP030] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 30, 0), /* I2C0 */
@@ -156,6 +159,8 @@ static struct clk_lookup lookups[] = {
        CLKDEV_CON_ID("peripheral_clk", &div4_clks[DIV4_P]),
 
        /* MSTP32 clocks */
+       CLKDEV_DEV_ID("sata_rcar", &mstp_clks[MSTP115]), /* SATA */
+       CLKDEV_DEV_ID("fc600000.sata", &mstp_clks[MSTP115]), /* SATA w/DT */
        CLKDEV_DEV_ID("ehci-platform.1", &mstp_clks[MSTP101]), /* USB EHCI port2 */
        CLKDEV_DEV_ID("ohci-platform.1", &mstp_clks[MSTP101]), /* USB OHCI port2 */
        CLKDEV_DEV_ID("ehci-platform.0", &mstp_clks[MSTP100]), /* USB EHCI port0/1 */
@@ -180,6 +185,7 @@ static struct clk_lookup lookups[] = {
        CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP322]), /* SDHI1 */
        CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP321]), /* SDHI2 */
        CLKDEV_DEV_ID("sh_mobile_sdhi.3", &mstp_clks[MSTP320]), /* SDHI3 */
+       CLKDEV_DEV_ID("rcar-du.0", &mstp_clks[MSTP103]), /* DU */
 };
 
 void __init r8a7779_clock_init(void)
index afa5423..71843dd 100644 (file)
@@ -265,12 +265,12 @@ enum { DIV4_I, DIV4_ZG, DIV4_M3, DIV4_B, DIV4_M1, DIV4_M2,
 
 static struct clk div4_clks[DIV4_NR] = {
        [DIV4_I] = DIV4(FRQCRA, 20, 0xdff, CLK_ENABLE_ON_INIT),
-       [DIV4_ZG] = DIV4(FRQCRA, 16, 0xd7f, CLK_ENABLE_ON_INIT),
+       [DIV4_ZG] = SH_CLK_DIV4(&pll0_clk, FRQCRA, 16, 0xd7f, CLK_ENABLE_ON_INIT),
        [DIV4_M3] = DIV4(FRQCRA, 12, 0x1dff, CLK_ENABLE_ON_INIT),
        [DIV4_B] = DIV4(FRQCRA, 8, 0xdff, CLK_ENABLE_ON_INIT),
        [DIV4_M1] = DIV4(FRQCRA, 4, 0x1dff, 0),
        [DIV4_M2] = DIV4(FRQCRA, 0, 0x1dff, 0),
-       [DIV4_Z] = DIV4(FRQCRB, 24, 0x97f, 0),
+       [DIV4_Z] = SH_CLK_DIV4(&pll0_clk, FRQCRB, 24, 0x97f, 0),
        [DIV4_ZTR] = DIV4(FRQCRB, 20, 0xdff, 0),
        [DIV4_ZT] = DIV4(FRQCRB, 16, 0xdff, 0),
        [DIV4_ZX] = DIV4(FRQCRB, 12, 0xdff, 0),
@@ -581,10 +581,13 @@ static struct clk_lookup lookups[] = {
        CLKDEV_DEV_ID("e6822000.i2c", &mstp_clks[MSTP323]), /* I2C1 */
        CLKDEV_DEV_ID("renesas_usbhs", &mstp_clks[MSTP322]), /* USB */
        CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP314]), /* SDHI0 */
+       CLKDEV_DEV_ID("ee100000.sdhi", &mstp_clks[MSTP314]), /* SDHI0 */
        CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP313]), /* SDHI1 */
+       CLKDEV_DEV_ID("ee120000.sdhi", &mstp_clks[MSTP313]), /* SDHI1 */
        CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP312]), /* MMCIF0 */
        CLKDEV_DEV_ID("e6bd0000.mmcif", &mstp_clks[MSTP312]), /* MMCIF0 */
        CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP311]), /* SDHI2 */
+       CLKDEV_DEV_ID("ee140000.sdhi", &mstp_clks[MSTP311]), /* SDHI2 */
        CLKDEV_DEV_ID("leds-renesas-tpu.12", &mstp_clks[MSTP303]), /* TPU1 */
        CLKDEV_DEV_ID("leds-renesas-tpu.21", &mstp_clks[MSTP302]), /* TPU2 */
        CLKDEV_DEV_ID("leds-renesas-tpu.30", &mstp_clks[MSTP301]), /* TPU3 */
similarity index 85%
rename from arch/arm/mach-shmobile/headsmp-sh73a0.S
rename to arch/arm/mach-shmobile/headsmp-scu.S
index bec4c0d..7d113f8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * SMP support for SoC sh73a0
+ * Shared SCU setup for mach-shmobile
  *
  * Copyright (C) 2012 Bastian Hecht
  *
  * the physical address as the MMU is still turned off.
  */
        .align  12
-ENTRY(sh73a0_secondary_vector)
+ENTRY(shmobile_secondary_vector_scu)
        mrc     p15, 0, r0, c0, c0, 5   @ read MIPDR
        and     r0, r0, #3              @ mask out cpu ID
        lsl     r0, r0, #3              @ we will shift by cpu_id * 8 bits
-       mov     r1, #0xf0000000         @ SCU base address
+       ldr     r1, 2f
+       ldr     r1, [r1]                @ SCU base address
        ldr     r2, [r1, #8]            @ SCU Power Status Register
        mov     r3, #3
        bic     r2, r2, r3, lsl r0      @ Clear bits of our CPU (Run Mode)
@@ -47,4 +48,10 @@ ENTRY(sh73a0_secondary_vector)
 
        ldr     pc, 1f
 1:     .long shmobile_invalidate_start - PAGE_OFFSET + PLAT_PHYS_OFFSET
-ENDPROC(sh73a0_secondary_vector)
+2:     .long shmobile_scu_base - PAGE_OFFSET + PLAT_PHYS_OFFSET
+ENDPROC(shmobile_secondary_vector_scu)
+
+       .text
+       .globl  shmobile_scu_base
+shmobile_scu_base:
+       .space  4
diff --git a/arch/arm/mach-shmobile/hotplug.c b/arch/arm/mach-shmobile/hotplug.c
deleted file mode 100644 (file)
index a1524e3..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * SMP support for R-Mobile / SH-Mobile
- *
- * Copyright (C) 2010  Magnus Damm
- *
- * Based on realview, Copyright (C) 2002 ARM Ltd, All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/smp.h>
-#include <linux/cpumask.h>
-#include <linux/delay.h>
-#include <linux/of.h>
-#include <mach/common.h>
-#include <mach/r8a7779.h>
-#include <mach/emev2.h>
-#include <asm/cacheflush.h>
-#include <asm/mach-types.h>
-
-static cpumask_t dead_cpus;
-
-void shmobile_cpu_die(unsigned int cpu)
-{
-       /* hardware shutdown code running on the CPU that is being offlined */
-       flush_cache_all();
-       dsb();
-
-       /* notify platform_cpu_kill() that hardware shutdown is finished */
-       cpumask_set_cpu(cpu, &dead_cpus);
-
-       /* wait for SoC code in platform_cpu_kill() to shut off CPU core
-        * power. CPU bring up starts from the reset vector.
-        */
-       while (1) {
-               /*
-                * here's the WFI
-                */
-               asm(".word      0xe320f003\n"
-                   :
-                   :
-                   : "memory", "cc");
-       }
-}
-
-int shmobile_cpu_disable(unsigned int cpu)
-{
-       cpumask_clear_cpu(cpu, &dead_cpus);
-       /*
-        * we don't allow CPU 0 to be shutdown (it is still too special
-        * e.g. clock tick interrupts)
-        */
-       return cpu == 0 ? -EPERM : 0;
-}
-
-int shmobile_cpu_disable_any(unsigned int cpu)
-{
-       cpumask_clear_cpu(cpu, &dead_cpus);
-       return 0;
-}
-
-int shmobile_cpu_is_dead(unsigned int cpu)
-{
-       return cpumask_test_cpu(cpu, &dead_cpus);
-}
index e48606d..86fcdf9 100644 (file)
@@ -8,6 +8,7 @@ extern void shmobile_setup_delay(unsigned int max_cpu_core_mhz,
 struct twd_local_timer;
 extern void shmobile_setup_console(void);
 extern void shmobile_secondary_vector(void);
+extern void shmobile_secondary_vector_scu(void);
 struct clk;
 extern int shmobile_clk_init(void);
 extern void shmobile_handle_irq_intc(struct pt_regs *);
@@ -33,23 +34,23 @@ extern int sh7372_do_idle_sysc(unsigned long sleep_mode);
 extern struct clk sh7372_extal1_clk;
 extern struct clk sh7372_extal2_clk;
 
+extern void sh73a0_init_delay(void);
 extern void sh73a0_init_irq(void);
 extern void sh73a0_init_irq_dt(void);
 extern void sh73a0_map_io(void);
 extern void sh73a0_earlytimer_init(void);
 extern void sh73a0_add_early_devices(void);
-extern void sh73a0_add_early_devices_dt(void);
 extern void sh73a0_add_standard_devices(void);
 extern void sh73a0_add_standard_devices_dt(void);
 extern void sh73a0_clock_init(void);
 extern void sh73a0_pinmux_init(void);
 extern void sh73a0_pm_init(void);
-extern void sh73a0_secondary_vector(void);
 extern struct clk sh73a0_extal1_clk;
 extern struct clk sh73a0_extal2_clk;
 extern struct clk sh73a0_extcki_clk;
 extern struct clk sh73a0_extalr_clk;
 
+extern void r8a7740_meram_workaround(void);
 extern void r8a7740_init_irq(void);
 extern void r8a7740_map_io(void);
 extern void r8a7740_add_early_devices(void);
@@ -58,16 +59,17 @@ extern void r8a7740_clock_init(u8 md_ck);
 extern void r8a7740_pinmux_init(void);
 extern void r8a7740_pm_init(void);
 
+extern void r8a7779_init_delay(void);
 extern void r8a7779_init_irq(void);
+extern void r8a7779_init_irq_dt(void);
 extern void r8a7779_map_io(void);
 extern void r8a7779_earlytimer_init(void);
 extern void r8a7779_add_early_devices(void);
 extern void r8a7779_add_standard_devices(void);
+extern void r8a7779_add_standard_devices_dt(void);
 extern void r8a7779_clock_init(void);
 extern void r8a7779_pinmux_init(void);
 extern void r8a7779_pm_init(void);
-extern void r8a7740_meram_workaround(void);
-
 extern void r8a7779_register_twd(void);
 
 #ifdef CONFIG_SUSPEND
@@ -82,16 +84,7 @@ int shmobile_cpuidle_init(void);
 static inline int shmobile_cpuidle_init(void) { return 0; }
 #endif
 
-extern void shmobile_cpu_die(unsigned int cpu);
-extern int shmobile_cpu_disable(unsigned int cpu);
-extern int shmobile_cpu_disable_any(unsigned int cpu);
-
-#ifdef CONFIG_HOTPLUG_CPU
-extern int shmobile_cpu_is_dead(unsigned int cpu);
-#else
-static inline int shmobile_cpu_is_dead(unsigned int cpu) { return 1; }
-#endif
-
+extern void __iomem *shmobile_scu_base;
 extern void shmobile_smp_init_cpus(unsigned int ncores);
 
 static inline void __init shmobile_init_late(void)
index 06a5da3..992ed21 100644 (file)
@@ -5,6 +5,7 @@
 
 /* GIC */
 #define gic_spi(nr)            ((nr) + 32)
+#define gic_iid(nr)            (nr) /* ICCIAR / interrupt ID */
 
 /* INTCS */
 #define INTCS_VECT_BASE                0x3400
index 8807c27..f9cc4bc 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/io.h>
 #include <linux/irqchip/arm-gic.h>
 #include <mach/common.h>
+#include <linux/irqchip.h>
 #include <mach/intc.h>
 #include <mach/r8a7779.h>
 #include <asm/mach-types.h>
@@ -43,13 +44,8 @@ static int r8a7779_set_wake(struct irq_data *data, unsigned int on)
        return 0; /* always allow wakeup */
 }
 
-void __init r8a7779_init_irq(void)
+static void __init r8a7779_init_irq_common(void)
 {
-       void __iomem *gic_dist_base = IOMEM(0xf0001000);
-       void __iomem *gic_cpu_base = IOMEM(0xf0000100);
-
-       /* use GIC to handle interrupts */
-       gic_init(0, 29, gic_dist_base, gic_cpu_base);
        gic_arch_extn.irq_set_wake = r8a7779_set_wake;
 
        /* route all interrupts to ARM */
@@ -63,3 +59,22 @@ void __init r8a7779_init_irq(void)
        __raw_writel(0xbffffffc, INT2SMSKCR3);
        __raw_writel(0x003fee3f, INT2SMSKCR4);
 }
+
+void __init r8a7779_init_irq(void)
+{
+       void __iomem *gic_dist_base = IOMEM(0xf0001000);
+       void __iomem *gic_cpu_base = IOMEM(0xf0000100);
+
+       /* use GIC to handle interrupts */
+       gic_init(0, 29, gic_dist_base, gic_cpu_base);
+
+       r8a7779_init_irq_common();
+}
+
+#ifdef CONFIG_OF
+void __init r8a7779_init_irq_dt(void)
+{
+       irqchip_init();
+       r8a7779_init_irq_common();
+}
+#endif
index 91faba6..a81a1d8 100644 (file)
@@ -460,11 +460,3 @@ void __init sh73a0_init_irq(void)
        sh73a0_pint1_cascade.handler = sh73a0_pint1_demux;
        setup_irq(gic_spi(34), &sh73a0_pint1_cascade);
 }
-
-#ifdef CONFIG_OF
-void __init sh73a0_init_irq_dt(void)
-{
-       irqchip_init();
-       gic_arch_extn.irq_set_wake = sh73a0_set_wake;
-}
-#endif
index 47662a5..e4545c1 100644 (file)
@@ -404,7 +404,7 @@ void __init emev2_add_standard_devices(void)
                             ARRAY_SIZE(emev2_late_devices));
 }
 
-void __init emev2_init_delay(void)
+static void __init emev2_init_delay(void)
 {
        shmobile_setup_delay(533, 1, 3); /* Cortex-A9 @ 533MHz */
 }
@@ -439,7 +439,7 @@ static const struct of_dev_auxdata emev2_auxdata_lookup[] __initconst = {
        { }
 };
 
-void __init emev2_add_standard_devices_dt(void)
+static void __init emev2_add_standard_devices_dt(void)
 {
        of_platform_populate(NULL, of_default_bus_match_table,
                             emev2_auxdata_lookup, NULL);
index c54ff9b..042df35 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/irq.h>
+#include <linux/of_platform.h>
 #include <linux/platform_device.h>
 #include <linux/delay.h>
 #include <linux/input.h>
@@ -28,6 +29,7 @@
 #include <linux/serial_sci.h>
 #include <linux/sh_intc.h>
 #include <linux/sh_timer.h>
+#include <linux/dma-mapping.h>
 #include <mach/hardware.h>
 #include <mach/irqs.h>
 #include <mach/r8a7779.h>
@@ -91,7 +93,7 @@ static struct plat_sci_port scif0_platform_data = {
        .scscr          = SCSCR_RE | SCSCR_TE | SCSCR_CKE1,
        .scbrr_algo_id  = SCBRR_ALGO_2,
        .type           = PORT_SCIF,
-       .irqs           = SCIx_IRQ_MUXED(gic_spi(88)),
+       .irqs           = SCIx_IRQ_MUXED(gic_iid(0x78)),
 };
 
 static struct platform_device scif0_device = {
@@ -108,7 +110,7 @@ static struct plat_sci_port scif1_platform_data = {
        .scscr          = SCSCR_RE | SCSCR_TE | SCSCR_CKE1,
        .scbrr_algo_id  = SCBRR_ALGO_2,
        .type           = PORT_SCIF,
-       .irqs           = SCIx_IRQ_MUXED(gic_spi(89)),
+       .irqs           = SCIx_IRQ_MUXED(gic_iid(0x79)),
 };
 
 static struct platform_device scif1_device = {
@@ -125,7 +127,7 @@ static struct plat_sci_port scif2_platform_data = {
        .scscr          = SCSCR_RE | SCSCR_TE | SCSCR_CKE1,
        .scbrr_algo_id  = SCBRR_ALGO_2,
        .type           = PORT_SCIF,
-       .irqs           = SCIx_IRQ_MUXED(gic_spi(90)),
+       .irqs           = SCIx_IRQ_MUXED(gic_iid(0x7a)),
 };
 
 static struct platform_device scif2_device = {
@@ -142,7 +144,7 @@ static struct plat_sci_port scif3_platform_data = {
        .scscr          = SCSCR_RE | SCSCR_TE | SCSCR_CKE1,
        .scbrr_algo_id  = SCBRR_ALGO_2,
        .type           = PORT_SCIF,
-       .irqs           = SCIx_IRQ_MUXED(gic_spi(91)),
+       .irqs           = SCIx_IRQ_MUXED(gic_iid(0x7b)),
 };
 
 static struct platform_device scif3_device = {
@@ -159,7 +161,7 @@ static struct plat_sci_port scif4_platform_data = {
        .scscr          = SCSCR_RE | SCSCR_TE | SCSCR_CKE1,
        .scbrr_algo_id  = SCBRR_ALGO_2,
        .type           = PORT_SCIF,
-       .irqs           = SCIx_IRQ_MUXED(gic_spi(92)),
+       .irqs           = SCIx_IRQ_MUXED(gic_iid(0x7c)),
 };
 
 static struct platform_device scif4_device = {
@@ -176,7 +178,7 @@ static struct plat_sci_port scif5_platform_data = {
        .scscr          = SCSCR_RE | SCSCR_TE | SCSCR_CKE1,
        .scbrr_algo_id  = SCBRR_ALGO_2,
        .type           = PORT_SCIF,
-       .irqs           = SCIx_IRQ_MUXED(gic_spi(93)),
+       .irqs           = SCIx_IRQ_MUXED(gic_iid(0x7d)),
 };
 
 static struct platform_device scif5_device = {
@@ -203,7 +205,7 @@ static struct resource tmu00_resources[] = {
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
-               .start  = gic_spi(32),
+               .start  = gic_iid(0x40),
                .flags  = IORESOURCE_IRQ,
        },
 };
@@ -233,7 +235,7 @@ static struct resource tmu01_resources[] = {
                .flags  = IORESOURCE_MEM,
        },
        [1] = {
-               .start  = gic_spi(33),
+               .start  = gic_iid(0x41),
                .flags  = IORESOURCE_IRQ,
        },
 };
@@ -255,7 +257,7 @@ static struct resource rcar_i2c0_res[] = {
                .end    = 0xffc70fff,
                .flags  = IORESOURCE_MEM,
        }, {
-               .start  = gic_spi(79),
+               .start  = gic_iid(0x6f),
                .flags  = IORESOURCE_IRQ,
        },
 };
@@ -273,7 +275,7 @@ static struct resource rcar_i2c1_res[] = {
                .end    = 0xffc71fff,
                .flags  = IORESOURCE_MEM,
        }, {
-               .start  = gic_spi(82),
+               .start  = gic_iid(0x72),
                .flags  = IORESOURCE_IRQ,
        },
 };
@@ -291,7 +293,7 @@ static struct resource rcar_i2c2_res[] = {
                .end    = 0xffc72fff,
                .flags  = IORESOURCE_MEM,
        }, {
-               .start  = gic_spi(80),
+               .start  = gic_iid(0x70),
                .flags  = IORESOURCE_IRQ,
        },
 };
@@ -309,7 +311,7 @@ static struct resource rcar_i2c3_res[] = {
                .end    = 0xffc73fff,
                .flags  = IORESOURCE_MEM,
        }, {
-               .start  = gic_spi(81),
+               .start  = gic_iid(0x71),
                .flags  = IORESOURCE_IRQ,
        },
 };
@@ -321,7 +323,31 @@ static struct platform_device i2c3_device = {
        .num_resources  = ARRAY_SIZE(rcar_i2c3_res),
 };
 
-static struct platform_device *r8a7779_early_devices[] __initdata = {
+static struct resource sata_resources[] = {
+       [0] = {
+               .name   = "rcar-sata",
+               .start  = 0xfc600000,
+               .end    = 0xfc601fff,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = gic_iid(0x84),
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device sata_device = {
+       .name           = "sata_rcar",
+       .id             = -1,
+       .resource       = sata_resources,
+       .num_resources  = ARRAY_SIZE(sata_resources),
+       .dev            = {
+               .dma_mask               = &sata_device.dev.coherent_dma_mask,
+               .coherent_dma_mask      = DMA_BIT_MASK(32),
+       },
+};
+
+static struct platform_device *r8a7779_devices_dt[] __initdata = {
        &scif0_device,
        &scif1_device,
        &scif2_device,
@@ -330,13 +356,14 @@ static struct platform_device *r8a7779_early_devices[] __initdata = {
        &scif5_device,
        &tmu00_device,
        &tmu01_device,
+};
+
+static struct platform_device *r8a7779_late_devices[] __initdata = {
        &i2c0_device,
        &i2c1_device,
        &i2c2_device,
        &i2c3_device,
-};
-
-static struct platform_device *r8a7779_late_devices[] __initdata = {
+       &sata_device,
 };
 
 void __init r8a7779_add_standard_devices(void)
@@ -349,8 +376,8 @@ void __init r8a7779_add_standard_devices(void)
 
        r8a7779_init_pm_domains();
 
-       platform_add_devices(r8a7779_early_devices,
-                           ARRAY_SIZE(r8a7779_early_devices));
+       platform_add_devices(r8a7779_devices_dt,
+                           ARRAY_SIZE(r8a7779_devices_dt));
        platform_add_devices(r8a7779_late_devices,
                            ARRAY_SIZE(r8a7779_late_devices));
 }
@@ -367,8 +394,8 @@ void __init r8a7779_earlytimer_init(void)
 
 void __init r8a7779_add_early_devices(void)
 {
-       early_platform_add_devices(r8a7779_early_devices,
-                                  ARRAY_SIZE(r8a7779_early_devices));
+       early_platform_add_devices(r8a7779_devices_dt,
+                                  ARRAY_SIZE(r8a7779_devices_dt));
 
        /* Early serial console setup is not included here due to
         * memory map collisions. The SCIF serial ports in r8a7779
@@ -386,3 +413,40 @@ void __init r8a7779_add_early_devices(void)
         * command line in case of the marzen board.
         */
 }
+
+#ifdef CONFIG_USE_OF
+void __init r8a7779_init_delay(void)
+{
+       shmobile_setup_delay(1000, 2, 4); /* Cortex-A9 @ 1000MHz */
+}
+
+static const struct of_dev_auxdata r8a7779_auxdata_lookup[] __initconst = {
+       {},
+};
+
+void __init r8a7779_add_standard_devices_dt(void)
+{
+       /* clocks are setup late during boot in the case of DT */
+       r8a7779_clock_init();
+
+       platform_add_devices(r8a7779_devices_dt,
+                            ARRAY_SIZE(r8a7779_devices_dt));
+       of_platform_populate(NULL, of_default_bus_match_table,
+                            r8a7779_auxdata_lookup, NULL);
+}
+
+static const char *r8a7779_compat_dt[] __initdata = {
+       "renesas,r8a7779",
+       NULL,
+};
+
+DT_MACHINE_START(R8A7779_DT, "Generic R8A7779 (Flattened Device Tree)")
+       .map_io         = r8a7779_map_io,
+       .init_early     = r8a7779_init_delay,
+       .nr_irqs        = NR_IRQS_LEGACY,
+       .init_irq       = r8a7779_init_irq_dt,
+       .init_machine   = r8a7779_add_standard_devices_dt,
+       .init_time      = shmobile_timer_init,
+       .dt_compat      = r8a7779_compat_dt,
+MACHINE_END
+#endif /* CONFIG_USE_OF */
index bdab575..2257a91 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/irq.h>
+#include <linux/irqchip.h>
 #include <linux/platform_device.h>
 #include <linux/of_platform.h>
 #include <linux/delay.h>
@@ -810,7 +811,7 @@ static struct platform_device ipmmu_device = {
        .num_resources  = ARRAY_SIZE(ipmmu_resources),
 };
 
-static struct platform_device *sh73a0_early_devices_dt[] __initdata = {
+static struct platform_device *sh73a0_devices_dt[] __initdata = {
        &scif0_device,
        &scif1_device,
        &scif2_device,
@@ -847,8 +848,8 @@ void __init sh73a0_add_standard_devices(void)
        /* Clear software reset bit on SY-DMAC module */
        __raw_writel(__raw_readl(SRCR2) & ~(1 << 18), SRCR2);
 
-       platform_add_devices(sh73a0_early_devices_dt,
-                           ARRAY_SIZE(sh73a0_early_devices_dt));
+       platform_add_devices(sh73a0_devices_dt,
+                           ARRAY_SIZE(sh73a0_devices_dt));
        platform_add_devices(sh73a0_early_devices,
                            ARRAY_SIZE(sh73a0_early_devices));
        platform_add_devices(sh73a0_late_devices,
@@ -867,8 +868,8 @@ void __init sh73a0_earlytimer_init(void)
 
 void __init sh73a0_add_early_devices(void)
 {
-       early_platform_add_devices(sh73a0_early_devices_dt,
-                                  ARRAY_SIZE(sh73a0_early_devices_dt));
+       early_platform_add_devices(sh73a0_devices_dt,
+                                  ARRAY_SIZE(sh73a0_devices_dt));
        early_platform_add_devices(sh73a0_early_devices,
                                   ARRAY_SIZE(sh73a0_early_devices));
 
@@ -878,23 +879,9 @@ void __init sh73a0_add_early_devices(void)
 
 #ifdef CONFIG_USE_OF
 
-/* Please note that the clock initialisation shcheme used in
- * sh73a0_add_early_devices_dt() and sh73a0_add_standard_devices_dt()
- * does not work with SMP as there is a yet to be resolved lock-up in
- * workqueue initialisation.
- *
- * CONFIG_SMP should be disabled when using this code.
- */
-
-void __init sh73a0_add_early_devices_dt(void)
+void __init sh73a0_init_delay(void)
 {
        shmobile_setup_delay(1196, 44, 46); /* Cortex-A9 @ 1196MHz */
-
-       early_platform_add_devices(sh73a0_early_devices_dt,
-                                  ARRAY_SIZE(sh73a0_early_devices_dt));
-
-       /* setup early console here as well */
-       shmobile_setup_console();
 }
 
 static const struct of_dev_auxdata sh73a0_auxdata_lookup[] __initconst = {
@@ -906,8 +893,8 @@ void __init sh73a0_add_standard_devices_dt(void)
        /* clocks are setup late during boot in the case of DT */
        sh73a0_clock_init();
 
-       platform_add_devices(sh73a0_early_devices_dt,
-                            ARRAY_SIZE(sh73a0_early_devices_dt));
+       platform_add_devices(sh73a0_devices_dt,
+                            ARRAY_SIZE(sh73a0_devices_dt));
        of_platform_populate(NULL, of_default_bus_match_table,
                             sh73a0_auxdata_lookup, NULL);
 }
@@ -918,10 +905,11 @@ static const char *sh73a0_boards_compat_dt[] __initdata = {
 };
 
 DT_MACHINE_START(SH73A0_DT, "Generic SH73A0 (Flattened Device Tree)")
+       .smp            = smp_ops(sh73a0_smp_ops),
        .map_io         = sh73a0_map_io,
-       .init_early     = sh73a0_add_early_devices_dt,
+       .init_early     = sh73a0_init_delay,
        .nr_irqs        = NR_IRQS_LEGACY,
-       .init_irq       = sh73a0_init_irq_dt,
+       .init_irq       = irqchip_init,
        .init_machine   = sh73a0_add_standard_devices_dt,
        .init_time      = shmobile_timer_init,
        .dt_compat      = sh73a0_boards_compat_dt,
index 953eb1f..8225c16 100644 (file)
 #include <mach/emev2.h>
 #include <asm/smp_plat.h>
 #include <asm/smp_scu.h>
-#include <asm/cacheflush.h>
 
 #define EMEV2_SCU_BASE 0x1e000000
 
-static DEFINE_SPINLOCK(scu_lock);
-static void __iomem *scu_base;
-
-static void modify_scu_cpu_psr(unsigned long set, unsigned long clr)
-{
-       unsigned long tmp;
-
-       /* we assume this code is running on a different cpu
-        * than the one that is changing coherency setting */
-       spin_lock(&scu_lock);
-       tmp = readl(scu_base + 8);
-       tmp &= ~clr;
-       tmp |= set;
-       writel(tmp, scu_base + 8);
-       spin_unlock(&scu_lock);
-
-}
-
-static unsigned int __init emev2_get_core_count(void)
-{
-       if (!scu_base) {
-               scu_base = ioremap(EMEV2_SCU_BASE, PAGE_SIZE);
-               emev2_clock_init(); /* need ioremapped SMU */
-       }
-
-       WARN_ON_ONCE(!scu_base);
-
-       return scu_base ? scu_get_core_count(scu_base) : 1;
-}
-
-static int emev2_platform_cpu_kill(unsigned int cpu)
-{
-       return 0; /* not supported yet */
-}
-
-static int __maybe_unused emev2_cpu_kill(unsigned int cpu)
-{
-       int k;
-
-       /* this function is running on another CPU than the offline target,
-        * here we need wait for shutdown code in platform_cpu_die() to
-        * finish before asking SoC-specific code to power off the CPU core.
-        */
-       for (k = 0; k < 1000; k++) {
-               if (shmobile_cpu_is_dead(cpu))
-                       return emev2_platform_cpu_kill(cpu);
-               mdelay(1);
-       }
-
-       return 0;
-}
-
-
 static void __cpuinit emev2_secondary_init(unsigned int cpu)
 {
        gic_secondary_init(0);
@@ -92,31 +38,30 @@ static void __cpuinit emev2_secondary_init(unsigned int cpu)
 
 static int __cpuinit emev2_boot_secondary(unsigned int cpu, struct task_struct *idle)
 {
-       cpu = cpu_logical_map(cpu);
-
-       /* enable cache coherency */
-       modify_scu_cpu_psr(0, 3 << (cpu * 8));
-
-       /* Tell ROM loader about our vector (in headsmp.S) */
-       emev2_set_boot_vector(__pa(shmobile_secondary_vector));
-
-       arch_send_wakeup_ipi_mask(cpumask_of(cpu));
+       arch_send_wakeup_ipi_mask(cpumask_of(cpu_logical_map(cpu)));
        return 0;
 }
 
 static void __init emev2_smp_prepare_cpus(unsigned int max_cpus)
 {
-       int cpu = cpu_logical_map(0);
+       scu_enable(shmobile_scu_base);
 
-       scu_enable(scu_base);
+       /* Tell ROM loader about our vector (in headsmp-scu.S) */
+       emev2_set_boot_vector(__pa(shmobile_secondary_vector_scu));
 
-       /* enable cache coherency on CPU0 */
-       modify_scu_cpu_psr(0, 3 << (cpu * 8));
+       /* enable cache coherency on booting CPU */
+       scu_power_mode(shmobile_scu_base, SCU_PM_NORMAL);
 }
 
 static void __init emev2_smp_init_cpus(void)
 {
-       unsigned int ncores = emev2_get_core_count();
+       unsigned int ncores;
+
+       /* setup EMEV2 specific SCU base */
+       shmobile_scu_base = ioremap(EMEV2_SCU_BASE, PAGE_SIZE);
+       emev2_clock_init(); /* need ioremapped SMU */
+
+       ncores = shmobile_scu_base ? scu_get_core_count(shmobile_scu_base) : 1;
 
        shmobile_smp_init_cpus(ncores);
 }
@@ -126,9 +71,4 @@ struct smp_operations emev2_smp_ops __initdata = {
        .smp_prepare_cpus       = emev2_smp_prepare_cpus,
        .smp_secondary_init     = emev2_secondary_init,
        .smp_boot_secondary     = emev2_boot_secondary,
-#ifdef CONFIG_HOTPLUG_CPU
-       .cpu_kill               = emev2_cpu_kill,
-       .cpu_die                = shmobile_cpu_die,
-       .cpu_disable            = shmobile_cpu_disable,
-#endif
 };
index 3a4acf2..ea4535a 100644 (file)
 #include <linux/irqchip/arm-gic.h>
 #include <mach/common.h>
 #include <mach/r8a7779.h>
+#include <asm/cacheflush.h>
 #include <asm/smp_plat.h>
 #include <asm/smp_scu.h>
 #include <asm/smp_twd.h>
 
 #define AVECR IOMEM(0xfe700040)
+#define R8A7779_SCU_BASE 0xf0000000
 
 static struct r8a7779_pm_ch r8a7779_ch_cpu1 = {
        .chan_offs = 0x40, /* PWRSR0 .. PWRER0 */
@@ -56,44 +58,14 @@ static struct r8a7779_pm_ch *r8a7779_ch_cpu[4] = {
        [3] = &r8a7779_ch_cpu3,
 };
 
-static void __iomem *scu_base_addr(void)
-{
-       return (void __iomem *)0xf0000000;
-}
-
-static DEFINE_SPINLOCK(scu_lock);
-static unsigned long tmp;
-
 #ifdef CONFIG_HAVE_ARM_TWD
-static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, 0xf0000600, 29);
-
+static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, R8A7779_SCU_BASE + 0x600, 29);
 void __init r8a7779_register_twd(void)
 {
        twd_local_timer_register(&twd_local_timer);
 }
 #endif
 
-static void modify_scu_cpu_psr(unsigned long set, unsigned long clr)
-{
-       void __iomem *scu_base = scu_base_addr();
-
-       spin_lock(&scu_lock);
-       tmp = __raw_readl(scu_base + 8);
-       tmp &= ~clr;
-       tmp |= set;
-       spin_unlock(&scu_lock);
-
-       /* disable cache coherency after releasing the lock */
-       __raw_writel(tmp, scu_base + 8);
-}
-
-static unsigned int __init r8a7779_get_core_count(void)
-{
-       void __iomem *scu_base = scu_base_addr();
-
-       return scu_get_core_count(scu_base);
-}
-
 static int r8a7779_platform_cpu_kill(unsigned int cpu)
 {
        struct r8a7779_pm_ch *ch = NULL;
@@ -101,9 +73,6 @@ static int r8a7779_platform_cpu_kill(unsigned int cpu)
 
        cpu = cpu_logical_map(cpu);
 
-       /* disable cache coherency */
-       modify_scu_cpu_psr(3 << (cpu * 8), 0);
-
        if (cpu < ARRAY_SIZE(r8a7779_ch_cpu))
                ch = r8a7779_ch_cpu[cpu];
 
@@ -113,25 +82,6 @@ static int r8a7779_platform_cpu_kill(unsigned int cpu)
        return ret ? ret : 1;
 }
 
-static int __maybe_unused r8a7779_cpu_kill(unsigned int cpu)
-{
-       int k;
-
-       /* this function is running on another CPU than the offline target,
-        * here we need wait for shutdown code in platform_cpu_die() to
-        * finish before asking SoC-specific code to power off the CPU core.
-        */
-       for (k = 0; k < 1000; k++) {
-               if (shmobile_cpu_is_dead(cpu))
-                       return r8a7779_platform_cpu_kill(cpu);
-
-               mdelay(1);
-       }
-
-       return 0;
-}
-
-
 static void __cpuinit r8a7779_secondary_init(unsigned int cpu)
 {
        gic_secondary_init(0);
@@ -144,9 +94,6 @@ static int __cpuinit r8a7779_boot_secondary(unsigned int cpu, struct task_struct
 
        cpu = cpu_logical_map(cpu);
 
-       /* enable cache coherency */
-       modify_scu_cpu_psr(0, 3 << (cpu * 8));
-
        if (cpu < ARRAY_SIZE(r8a7779_ch_cpu))
                ch = r8a7779_ch_cpu[cpu];
 
@@ -158,15 +105,13 @@ static int __cpuinit r8a7779_boot_secondary(unsigned int cpu, struct task_struct
 
 static void __init r8a7779_smp_prepare_cpus(unsigned int max_cpus)
 {
-       int cpu = cpu_logical_map(0);
+       scu_enable(shmobile_scu_base);
 
-       scu_enable(scu_base_addr());
+       /* Map the reset vector (in headsmp-scu.S) */
+       __raw_writel(__pa(shmobile_secondary_vector_scu), AVECR);
 
-       /* Map the reset vector (in headsmp.S) */
-       __raw_writel(__pa(shmobile_secondary_vector), AVECR);
-
-       /* enable cache coherency on CPU0 */
-       modify_scu_cpu_psr(0, 3 << (cpu * 8));
+       /* enable cache coherency on booting CPU */
+       scu_power_mode(shmobile_scu_base, SCU_PM_NORMAL);
 
        r8a7779_pm_init();
 
@@ -178,10 +123,60 @@ static void __init r8a7779_smp_prepare_cpus(unsigned int max_cpus)
 
 static void __init r8a7779_smp_init_cpus(void)
 {
-       unsigned int ncores = r8a7779_get_core_count();
+       /* setup r8a7779 specific SCU base */
+       shmobile_scu_base = IOMEM(R8A7779_SCU_BASE);
+
+       shmobile_smp_init_cpus(scu_get_core_count(shmobile_scu_base));
+}
 
-       shmobile_smp_init_cpus(ncores);
+#ifdef CONFIG_HOTPLUG_CPU
+static int r8a7779_scu_psr_core_disabled(int cpu)
+{
+       unsigned long mask = 3 << (cpu * 8);
+
+       if ((__raw_readl(shmobile_scu_base + 8) & mask) == mask)
+               return 1;
+
+       return 0;
+}
+
+static int r8a7779_cpu_kill(unsigned int cpu)
+{
+       int k;
+
+       /* this function is running on another CPU than the offline target,
+        * here we need wait for shutdown code in platform_cpu_die() to
+        * finish before asking SoC-specific code to power off the CPU core.
+        */
+       for (k = 0; k < 1000; k++) {
+               if (r8a7779_scu_psr_core_disabled(cpu))
+                       return r8a7779_platform_cpu_kill(cpu);
+
+               mdelay(1);
+       }
+
+       return 0;
+}
+
+static void r8a7779_cpu_die(unsigned int cpu)
+{
+       dsb();
+       flush_cache_all();
+
+       /* disable cache coherency */
+       scu_power_mode(shmobile_scu_base, SCU_PM_POWEROFF);
+
+       /* Endless loop until power off from r8a7779_cpu_kill() */
+       while (1)
+               cpu_do_idle();
+}
+
+static int r8a7779_cpu_disable(unsigned int cpu)
+{
+       /* only CPU1->3 have power domains, do not allow hotplug of CPU0 */
+       return cpu == 0 ? -EPERM : 0;
 }
+#endif /* CONFIG_HOTPLUG_CPU */
 
 struct smp_operations r8a7779_smp_ops  __initdata = {
        .smp_init_cpus          = r8a7779_smp_init_cpus,
@@ -190,7 +185,7 @@ struct smp_operations r8a7779_smp_ops  __initdata = {
        .smp_boot_secondary     = r8a7779_boot_secondary,
 #ifdef CONFIG_HOTPLUG_CPU
        .cpu_kill               = r8a7779_cpu_kill,
-       .cpu_die                = shmobile_cpu_die,
-       .cpu_disable            = shmobile_cpu_disable,
+       .cpu_die                = r8a7779_cpu_die,
+       .cpu_disable            = r8a7779_cpu_disable,
 #endif
 };
index acb46a9..5ae502b 100644 (file)
 
 #define PSTR_SHUTDOWN_MODE     3
 
-static void __iomem *scu_base_addr(void)
-{
-       return (void __iomem *)0xf0000000;
-}
+#define SH73A0_SCU_BASE 0xf0000000
 
 #ifdef CONFIG_HAVE_ARM_TWD
-static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, 0xf0000600, 29);
+static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, SH73A0_SCU_BASE + 0x600, 29);
 void __init sh73a0_register_twd(void)
 {
        twd_local_timer_register(&twd_local_timer);
 }
 #endif
 
-static unsigned int __init sh73a0_get_core_count(void)
-{
-       void __iomem *scu_base = scu_base_addr();
-
-       return scu_get_core_count(scu_base);
-}
-
 static void __cpuinit sh73a0_secondary_init(unsigned int cpu)
 {
        gic_secondary_init(0);
@@ -78,21 +68,22 @@ static int __cpuinit sh73a0_boot_secondary(unsigned int cpu, struct task_struct
 
 static void __init sh73a0_smp_prepare_cpus(unsigned int max_cpus)
 {
-       scu_enable(scu_base_addr());
+       scu_enable(shmobile_scu_base);
 
-       /* Map the reset vector (in headsmp-sh73a0.S) */
+       /* Map the reset vector (in headsmp-scu.S) */
        __raw_writel(0, APARMBAREA);      /* 4k */
-       __raw_writel(__pa(sh73a0_secondary_vector), SBAR);
+       __raw_writel(__pa(shmobile_secondary_vector_scu), SBAR);
 
        /* enable cache coherency on booting CPU */
-       scu_power_mode(scu_base_addr(), SCU_PM_NORMAL);
+       scu_power_mode(shmobile_scu_base, SCU_PM_NORMAL);
 }
 
 static void __init sh73a0_smp_init_cpus(void)
 {
-       unsigned int ncores = sh73a0_get_core_count();
+       /* setup sh73a0 specific SCU base */
+       shmobile_scu_base = IOMEM(SH73A0_SCU_BASE);
 
-       shmobile_smp_init_cpus(ncores);
+       shmobile_smp_init_cpus(scu_get_core_count(shmobile_scu_base));
 }
 
 #ifdef CONFIG_HOTPLUG_CPU
@@ -128,11 +119,16 @@ static void sh73a0_cpu_die(unsigned int cpu)
        flush_cache_all();
 
        /* Set power off mode. This takes the CPU out of the MP cluster */
-       scu_power_mode(scu_base_addr(), SCU_PM_POWEROFF);
+       scu_power_mode(shmobile_scu_base, SCU_PM_POWEROFF);
 
        /* Enter shutdown mode */
        cpu_do_idle();
 }
+
+static int sh73a0_cpu_disable(unsigned int cpu)
+{
+       return 0; /* CPU0 and CPU1 supported */
+}
 #endif /* CONFIG_HOTPLUG_CPU */
 
 struct smp_operations sh73a0_smp_ops __initdata = {
@@ -143,6 +139,6 @@ struct smp_operations sh73a0_smp_ops __initdata = {
 #ifdef CONFIG_HOTPLUG_CPU
        .cpu_kill               = sh73a0_cpu_kill,
        .cpu_die                = sh73a0_cpu_die,
-       .cpu_disable            = shmobile_cpu_disable_any,
+       .cpu_disable            = sh73a0_cpu_disable,
 #endif
 };
index 1c1609d..f815efe 100644 (file)
@@ -47,8 +47,8 @@ static int __init ux500_l2x0_init(void)
        /* Unlock before init */
        ux500_l2x0_unlock();
 
-       /* DB9540's L2 has 128KB way size */
-       if (cpu_is_u9540())
+       /* DBx540's L2 has 128KB way size */
+       if (cpu_is_ux540_family())
                /* 128KB way size */
                aux_val |= (0x4 << L2X0_AUX_CTRL_WAY_SIZE_SHIFT);
        else