]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge tag 'omap-for-v3.10/soc-signed' of git://git.kernel.org/pub/scm/linux/kernel...
authorArnd Bergmann <arnd@arndb.de>
Tue, 9 Apr 2013 14:40:45 +0000 (16:40 +0200)
committerArnd Bergmann <arnd@arndb.de>
Tue, 9 Apr 2013 14:40:45 +0000 (16:40 +0200)
From Tony Lindgren <tony@atomide.com>:

Changes needed for enabling SOC_BUS for the SoC revision
information. Also enable few HW errata workarounds for omap4.

* tag 'omap-for-v3.10/soc-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap: (236 commits)
  ARM: OMAP4: Enable fix for Cortex-A9 erratas
  ARM: OMAP2+: Export SoC information to userspace
  ARM: OMAP2+: SoC name and revision unification
  ARM: OMAP2+: Move common part of late init into common function

Includes an update to Linux 3.9-rc6

Conflicts:
arch/arm/mach-omap2/cclock44xx_data.c

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
156 files changed:
Documentation/devicetree/bindings/arm/bcm/bcm,kona-timer.txt [new file with mode: 0644]
Documentation/devicetree/bindings/arm/tegra/nvidia,tegra20-pmc.txt
Documentation/devicetree/bindings/mmc/davinci_mmc.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/da850-evm.dts
arch/arm/boot/dts/da850.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/boot/dts/tegra114-dalmore.dts
arch/arm/boot/dts/tegra114-pluto.dts
arch/arm/boot/dts/tegra114.dtsi
arch/arm/boot/dts/tegra20-colibri-512.dtsi
arch/arm/boot/dts/tegra20-harmony.dts
arch/arm/boot/dts/tegra20-paz00.dts
arch/arm/boot/dts/tegra20-seaboard.dts
arch/arm/boot/dts/tegra20-tamonten.dtsi
arch/arm/boot/dts/tegra20-trimslice.dts
arch/arm/boot/dts/tegra20-ventana.dts
arch/arm/boot/dts/tegra20-whistler.dts
arch/arm/boot/dts/tegra20.dtsi
arch/arm/boot/dts/tegra30-beaver.dts
arch/arm/boot/dts/tegra30-cardhu.dtsi
arch/arm/boot/dts/tegra30.dtsi
arch/arm/boot/dts/tps6507x.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/bcm2835_defconfig
arch/arm/configs/kzm9g_defconfig
arch/arm/configs/lpc32xx_defconfig
arch/arm/configs/mackerel_defconfig
arch/arm/configs/marzen_defconfig
arch/arm/configs/mxs_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-davinci/board-da830-evm.c
arch/arm/mach-davinci/board-da850-evm.c
arch/arm/mach-davinci/board-dm355-evm.c
arch/arm/mach-davinci/board-dm365-evm.c
arch/arm/mach-davinci/board-dm644x-evm.c
arch/arm/mach-davinci/board-neuros-osd2.c
arch/arm/mach-davinci/board-omapl138-hawk.c
arch/arm/mach-davinci/board-tnetv107x-evm.c
arch/arm/mach-davinci/clock.c
arch/arm/mach-davinci/clock.h
arch/arm/mach-davinci/da830.c
arch/arm/mach-davinci/da850.c
arch/arm/mach-davinci/da8xx-dt.c
arch/arm/mach-davinci/devices-da8xx.c
arch/arm/mach-davinci/devices-tnetv107x.c
arch/arm/mach-davinci/devices.c
arch/arm/mach-davinci/dm355.c
arch/arm/mach-davinci/dm365.c
arch/arm/mach-davinci/dm644x.c
arch/arm/mach-davinci/include/mach/da8xx.h
arch/arm/mach-davinci/include/mach/debug-macro.S
arch/arm/mach-davinci/tnetv107x.c
arch/arm/mach-mxs/Kconfig
arch/arm/mach-omap2/cclock2420_data.c
arch/arm/mach-omap2/cclock2430_data.c
arch/arm/mach-omap2/cclock33xx_data.c
arch/arm/mach-omap2/cclock3xxx_data.c
arch/arm/mach-omap2/cclock44xx_data.c
arch/arm/mach-omap2/clock.c
arch/arm/mach-omap2/clock.h
arch/arm/mach-omap2/devices.c
arch/arm/mach-omap2/omap_hwmod_2420_data.c
arch/arm/mach-omap2/omap_hwmod_2430_data.c
arch/arm/mach-omap2/omap_hwmod_2xxx_interconnect_data.c
arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c
arch/arm/mach-omap2/omap_hwmod_33xx_data.c
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
arch/arm/mach-omap2/omap_hwmod_common_data.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-tegra/Makefile
arch/arm/mach-tegra/board-dt-tegra114.c [deleted file]
arch/arm/mach-tegra/board-dt-tegra30.c [deleted file]
arch/arm/mach-tegra/board-harmony-pcie.c
arch/arm/mach-tegra/board.h
arch/arm/mach-tegra/common.c
arch/arm/mach-tegra/cpuidle-tegra20.c
arch/arm/mach-tegra/cpuidle-tegra30.c
arch/arm/mach-tegra/fuse.c
arch/arm/mach-tegra/fuse.h
arch/arm/mach-tegra/headsmp.S
arch/arm/mach-tegra/hotplug.c
arch/arm/mach-tegra/irq.c
arch/arm/mach-tegra/irq.h
arch/arm/mach-tegra/platsmp.c
arch/arm/mach-tegra/pm.c
arch/arm/mach-tegra/pm.h
arch/arm/mach-tegra/pmc.c
arch/arm/mach-tegra/pmc.h
arch/arm/mach-tegra/reset-handler.S
arch/arm/mach-tegra/sleep.h
arch/arm/mach-tegra/tegra.c [moved from arch/arm/mach-tegra/board-dt-tegra20.c with 75% similarity]
arch/arm/mach-tegra/tegra114_speedo.c [new file with mode: 0644]
arch/arm/mach-ux500/cache-l2x0.c
drivers/clk/tegra/clk-tegra20.c
drivers/clocksource/tegra20_timer.c
drivers/gpio/gpio-tegra.c
drivers/mmc/host/davinci_mmc.c
include/linux/platform_data/mmc-davinci.h

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 b5846e21cc2e53306fdba8304bf9cf12a6595126..1608a54e90e1541e6a1f7ca918f194f9763ed35e 100644 (file)
@@ -1,19 +1,84 @@
 NVIDIA Tegra Power Management Controller (PMC)
 
-Properties:
+The PMC block interacts with an external Power Management Unit. The PMC
+mostly controls the entry and exit of the system from different sleep
+modes. It provides power-gating controllers for SoC and CPU power-islands.
+
+Required properties:
 - name : Should be pmc
 - compatible : Should contain "nvidia,tegra<chip>-pmc".
 - reg : Offset and length of the register set for the device
+- clocks : Must contain an entry for each entry in clock-names.
+- clock-names : Must include the following entries:
+  "pclk" (The Tegra clock of that name),
+  "clk32k_in" (The 32KHz clock input to Tegra).
+
+Optional properties:
 - nvidia,invert-interrupt : If present, inverts the PMU interrupt signal.
   The PMU is an external Power Management Unit, whose interrupt output
   signal is fed into the PMC. This signal is optionally inverted, and then
   fed into the ARM GIC. The PMC is not involved in the detection or
   handling of this interrupt signal, merely its inversion.
+- nvidia,suspend-mode : The suspend mode that the platform should use.
+  Valid values are 0, 1 and 2:
+  0 (LP0): CPU + Core voltage off and DRAM in self-refresh
+  1 (LP1): CPU voltage off and DRAM in self-refresh
+  2 (LP2): CPU voltage off
+- nvidia,core-power-req-active-high : Boolean, core power request active-high
+- nvidia,sys-clock-req-active-high : Boolean, system clock request active-high
+- nvidia,combined-power-req : Boolean, combined power request for CPU & Core
+- nvidia,cpu-pwr-good-en : Boolean, CPU power good signal (from PMIC to PMC)
+                          is enabled.
+
+Required properties when nvidia,suspend-mode is specified:
+- nvidia,cpu-pwr-good-time : CPU power good time in uS.
+- nvidia,cpu-pwr-off-time : CPU power off time in uS.
+- nvidia,core-pwr-good-time : <Oscillator-stable-time Power-stable-time>
+                             Core power good time in uS.
+- nvidia,core-pwr-off-time : Core power off time in uS.
+
+Required properties when nvidia,suspend-mode=<0>:
+- nvidia,lp0-vec : <start length> Starting address and length of LP0 vector
+  The LP0 vector contains the warm boot code that is executed by AVP when
+  resuming from the LP0 state. The AVP (Audio-Video Processor) is an ARM7
+  processor and always being the first boot processor when chip is power on
+  or resume from deep sleep mode. When the system is resumed from the deep
+  sleep mode, the warm boot code will restore some PLLs, clocks and then
+  bring up CPU0 for resuming the system.
 
 Example:
 
+/ SoC dts including file
 pmc@7000f400 {
        compatible = "nvidia,tegra20-pmc";
        reg = <0x7000e400 0x400>;
+       clocks = <&tegra_car 110>, <&clk32k_in>;
+       clock-names = "pclk", "clk32k_in";
        nvidia,invert-interrupt;
+       nvidia,suspend-mode = <1>;
+       nvidia,cpu-pwr-good-time = <2000>;
+       nvidia,cpu-pwr-off-time = <100>;
+       nvidia,core-pwr-good-time = <3845 3845>;
+       nvidia,core-pwr-off-time = <458>;
+       nvidia,core-power-req-active-high;
+       nvidia,sys-clock-req-active-high;
+       nvidia,lp0-vec = <0xbdffd000 0x2000>;
+};
+
+/ Tegra board dts file
+{
+       ...
+       clocks {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               clk32k_in: clock {
+                       compatible = "fixed-clock";
+                       reg=<0>;
+                       #clock-cells = <0>;
+                       clock-frequency = <32768>;
+               };
+       };
+       ...
 };
diff --git a/Documentation/devicetree/bindings/mmc/davinci_mmc.txt b/Documentation/devicetree/bindings/mmc/davinci_mmc.txt
new file mode 100644 (file)
index 0000000..e5a0140
--- /dev/null
@@ -0,0 +1,33 @@
+* TI Highspeed MMC host controller for DaVinci
+
+The Highspeed MMC Host Controller on TI DaVinci family
+provides an interface for MMC, SD and SDIO types of memory cards.
+
+This file documents the properties used by the davinci_mmc driver.
+
+Required properties:
+- compatible:
+ Should be "ti,da830-mmc": for da830, da850, dm365
+ Should be "ti,dm355-mmc": for dm355, dm644x
+
+Optional properties:
+- bus-width: Number of data lines, can be <1>, <4>, or <8>, default <1>
+- max-frequency: Maximum operating clock frequency, default 25MHz.
+- dmas: List of DMA specifiers with the controller specific format
+       as described in the generic DMA client binding. A tx and rx
+       specifier is required.
+- dma-names: RX and TX  DMA request names. These strings correspond
+       1:1 with the DMA specifiers listed in dmas.
+
+Example:
+mmc0: mmc@1c40000 {
+       compatible = "ti,da830-mmc",
+       reg = <0x40000 0x1000>;
+       interrupts = <16>;
+       status = "okay";
+       bus-width = <4>;
+       max-frequency = <50000000>;
+       dmas = <&edma 16
+               &edma 17>;
+       dma-names = "rx", "tx";
+};
index 1cacda426a0ea6699528dd0eeedf83032825e09e..f11182598b447dca472879b63f2dfb9ac8e038b6 100644 (file)
@@ -673,6 +673,7 @@ config ARCH_TEGRA
        select HAVE_CLK
        select HAVE_SMP
        select MIGHT_HAVE_CACHE_L2X0
+       select SOC_BUS
        select SPARSE_IRQ
        select USE_OF
        help
@@ -1670,7 +1671,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 9c6255884cbbd51f7efd83c5c4b6327156fc5c6c..234e78f7014eda644326423b2aaad44d1c024abf 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 ad135885bd2a9ea8a2c208cca3c86a3a90360f8d..8f71f40722b9217141a68c8f4ac61bb7b7b09da7 100644 (file)
                    cache-unified;
                    cache-level = <2>;
        };
+
+       timer@35006000 {
+               compatible = "bcm,kona-timer";
+               reg = <0x35006000 0x1000>;
+               interrupts = <0x0 7 0x4>;
+               clock-frequency = <32768>;
+       };
+
 };
index f712fb607a42ec6275ee46c6de13db7613a3a8a2..c5834a6c5bf4a555c8c725dc82abc6f9e6f72f25 100644 (file)
                        clock-frequency = <100000>;
                        pinctrl-names = "default";
                        pinctrl-0 = <&i2c0_pins>;
+
+                       tps: tps@48 {
+                               reg = <0x48>;
+                       };
                };
                wdt: wdt@1c21000 {
                        status = "okay";
                };
+               mmc0: mmc@1c40000 {
+                       max-frequency = <50000000>;
+                       bus-width = <4>;
+                       status = "okay";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&mmc0_pins>;
+               };
        };
        nand_cs3@62000000 {
                status = "okay";
                pinctrl-names = "default";
                pinctrl-0 = <&nand_cs3_pins>;
        };
+       vbat: fixedregulator@0 {
+               compatible = "regulator-fixed";
+               regulator-name = "vbat";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-boot-on;
+       };
+};
+
+/include/ "tps6507x.dtsi"
+
+&tps {
+       vdcdc1_2-supply = <&vbat>;
+       vdcdc3-supply = <&vbat>;
+       vldo1_2-supply = <&vbat>;
+
+       regulators {
+               vdcdc1_reg: regulator@0 {
+                       regulator-name = "VDCDC1_3.3V";
+                       regulator-min-microvolt = <3150000>;
+                       regulator-max-microvolt = <3450000>;
+                       regulator-always-on;
+                       regulator-boot-on;
+               };
+
+               vdcdc2_reg: regulator@1 {
+                       regulator-name = "VDCDC2_3.3V";
+                       regulator-min-microvolt = <1710000>;
+                       regulator-max-microvolt = <3450000>;
+                       regulator-always-on;
+                       regulator-boot-on;
+                       ti,defdcdc_default = <1>;
+               };
+
+               vdcdc3_reg: regulator@2 {
+                       regulator-name = "VDCDC3_1.2V";
+                       regulator-min-microvolt = <950000>;
+                       regulator-max-microvolt = <1350000>;
+                       regulator-always-on;
+                       regulator-boot-on;
+                       ti,defdcdc_default = <1>;
+               };
+
+               ldo1_reg: regulator@3 {
+                       regulator-name = "LDO1_1.8V";
+                       regulator-min-microvolt = <1710000>;
+                       regulator-max-microvolt = <1890000>;
+                       regulator-always-on;
+                       regulator-boot-on;
+               };
+
+               ldo2_reg: regulator@4 {
+                       regulator-name = "LDO2_1.2V";
+                       regulator-min-microvolt = <1140000>;
+                       regulator-max-microvolt = <1320000>;
+                       regulator-always-on;
+                       regulator-boot-on;
+               };
+       };
 };
index 3ec1bda64356e781996f8c94b17a3e2da020baeb..3ade343f13cc437aa86a04202f4054db751e8fb9 100644 (file)
                                        0x10 0x00002200 0x0000ff00
                                >;
                        };
+                       mmc0_pins: pinmux_mmc_pins {
+                               pinctrl-single,bits = <
+                                       /* MMCSD0_DAT[3] MMCSD0_DAT[2]
+                                        * MMCSD0_DAT[1] MMCSD0_DAT[0]
+                                        * MMCSD0_CMD    MMCSD0_CLK
+                                        */
+                                       0x28 0x00222222  0x00ffffff
+                               >;
+                       };
                };
                serial0: serial@1c42000 {
                        compatible = "ns16550a";
                        reg = <0x21000 0x1000>;
                        status = "disabled";
                };
+               mmc0: mmc@1c40000 {
+                       compatible = "ti,da830-mmc";
+                       reg = <0x40000 0x1000>;
+                       interrupts = <16>;
+                       status = "disabled";
+               };
        };
        nand_cs3@62000000 {
                compatible = "ti,davinci-nand";
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>;
+       };
+};
index a30aca62658ad192691dc81800f9a1f27fe6cb1e..6ebc1b704190e63e0ec979117b5de7f5704fbcd9 100644 (file)
        pmc {
                nvidia,invert-interrupt;
        };
+
+       clocks {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               clk32k_in: clock {
+                       compatible = "fixed-clock";
+                       reg=<0>;
+                       #clock-cells = <0>;
+                       clock-frequency = <32768>;
+               };
+       };
 };
index 9bea8f57aa47f6010441066dee01367df3887153..5deb8692b3504c1aebcb8c35af4faea43060f884 100644 (file)
        pmc {
                nvidia,invert-interrupt;
        };
+
+       clocks {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               clk32k_in: clock {
+                       compatible = "fixed-clock";
+                       reg=<0>;
+                       #clock-cells = <0>;
+                       clock-frequency = <32768>;
+               };
+       };
 };
index 1dfaf2874c57261a2c108073ed47d2131c3188eb..c0b527d15fda10246aebb5f7d5ecce9501bc620b 100644 (file)
        };
 
        pmc {
-               compatible = "nvidia,tegra114-pmc", "nvidia,tegra30-pmc";
+               compatible = "nvidia,tegra114-pmc";
                reg = <0x7000e400 0x400>;
+               clocks = <&tegra_car 261>, <&clk32k_in>;
+               clock-names = "pclk", "clk32k_in";
        };
 
        iommu {
index 444162090042cf4f59f6961b1cd839ac14764c0c..4e3afdef28a87e4fc9b8fb97a0bc5105a0a53f1f 100644 (file)
        };
 
        sdhci@c8000600 {
-               cd-gpios = <&gpio 23 0>; /* gpio PC7 */
+               cd-gpios = <&gpio 23 1>; /* gpio PC7 */
+       };
+
+       clocks {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               clk32k_in: clock {
+                       compatible = "fixed-clock";
+                       reg=<0>;
+                       #clock-cells = <0>;
+                       clock-frequency = <32768>;
+               };
        };
 
        sound {
index 61d027f03617d36a2ef87cdc2978e5a34320f95c..ae9d5a20834e542c364bd146474f803148f41d2d 100644 (file)
 
        sdhci@c8000200 {
                status = "okay";
-               cd-gpios = <&gpio 69 0>; /* gpio PI5 */
+               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
                wp-gpios = <&gpio 57 0>; /* gpio PH1 */
                power-gpios = <&gpio 155 0>; /* gpio PT3 */
                bus-width = <4>;
 
        sdhci@c8000600 {
                status = "okay";
-               cd-gpios = <&gpio 58 0>; /* gpio PH2 */
+               cd-gpios = <&gpio 58 1>; /* gpio PH2 */
                wp-gpios = <&gpio 59 0>; /* gpio PH3 */
                power-gpios = <&gpio 70 0>; /* gpio PI6 */
                bus-width = <8>;
        };
 
+       clocks {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               clk32k_in: clock {
+                       compatible = "fixed-clock";
+                       reg=<0>;
+                       #clock-cells = <0>;
+                       clock-frequency = <32768>;
+               };
+       };
+
        kbc {
                status = "okay";
                nvidia,debounce-delay-ms = <2>;
index 54d6fce00a59e4cfa4296d5715c50d00f8543eb7..fd60940e40636949aba4aa23e5ca5acd7efdf7ea 100644 (file)
 
        sdhci@c8000000 {
                status = "okay";
-               cd-gpios = <&gpio 173 0>; /* gpio PV5 */
+               cd-gpios = <&gpio 173 1>; /* gpio PV5 */
                wp-gpios = <&gpio 57 0>;  /* gpio PH1 */
                power-gpios = <&gpio 169 0>; /* gpio PV1 */
                bus-width = <4>;
                bus-width = <8>;
        };
 
+       clocks {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               clk32k_in: clock {
+                       compatible = "fixed-clock";
+                       reg=<0>;
+                       #clock-cells = <0>;
+                       clock-frequency = <32768>;
+               };
+       };
+
        gpio-keys {
                compatible = "gpio-keys";
 
index 37b3a57ec0f15ad4b330251fbc1a20526cbdb788..4ee700a33ca55e4fbf00c0202cc85217d02ee10f 100644 (file)
 
        sdhci@c8000400 {
                status = "okay";
-               cd-gpios = <&gpio 69 0>; /* gpio PI5 */
+               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
                wp-gpios = <&gpio 57 0>; /* gpio PH1 */
                power-gpios = <&gpio 70 0>; /* gpio PI6 */
                bus-width = <4>;
                bus-width = <8>;
        };
 
+       clocks {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               clk32k_in: clock {
+                       compatible = "fixed-clock";
+                       reg=<0>;
+                       #clock-cells = <0>;
+                       clock-frequency = <32768>;
+               };
+       };
+
        gpio-keys {
                compatible = "gpio-keys";
 
index 4766abae7a72bb20a984e2914e1dd3c76d60356e..c190257259182b6668c156b46ea8259957435e9b 100644 (file)
        };
 
        sdhci@c8000600 {
-               cd-gpios = <&gpio 58 0>; /* gpio PH2 */
+               cd-gpios = <&gpio 58 1>; /* gpio PH2 */
                wp-gpios = <&gpio 59 0>; /* gpio PH3 */
                bus-width = <4>;
                status = "okay";
        };
 
+       clocks {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               clk32k_in: clock {
+                       compatible = "fixed-clock";
+                       reg=<0>;
+                       #clock-cells = <0>;
+                       clock-frequency = <32768>;
+               };
+       };
+
        regulators {
                compatible = "simple-bus";
 
index 5d79e4fc49a63577a599f428533b185552897281..a9f3f06580f5fc9c82a7b5e4c9f281bcbb9b2eb2 100644 (file)
 
        sdhci@c8000600 {
                status = "okay";
-               cd-gpios = <&gpio 121 0>; /* gpio PP1 */
+               cd-gpios = <&gpio 121 1>; /* gpio PP1 */
                wp-gpios = <&gpio 122 0>; /* gpio PP2 */
                bus-width = <4>;
        };
 
+       clocks {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               clk32k_in: clock {
+                       compatible = "fixed-clock";
+                       reg=<0>;
+                       #clock-cells = <0>;
+                       clock-frequency = <32768>;
+               };
+       };
+
        poweroff {
                compatible = "gpio-poweroff";
                gpios = <&gpio 191 1>; /* gpio PX7, active low */
index 425c89000c20ebd6cd55ff353bb45253fc7fa79f..f544806e9618d6aa8cdf70dc4ef59078fc992aa4 100644 (file)
 
        sdhci@c8000400 {
                status = "okay";
-               cd-gpios = <&gpio 69 0>; /* gpio PI5 */
+               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
                wp-gpios = <&gpio 57 0>; /* gpio PH1 */
                power-gpios = <&gpio 70 0>; /* gpio PI6 */
                bus-width = <4>;
                bus-width = <8>;
        };
 
+       clocks {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               clk32k_in: clock {
+                       compatible = "fixed-clock";
+                       reg=<0>;
+                       #clock-cells = <0>;
+                       clock-frequency = <32768>;
+               };
+       };
+
        regulators {
                compatible = "simple-bus";
                #address-cells = <1>;
index ea57c0f6dccea46b98d4f06d40eb3446df8e5d10..258cf945f515265b02dafbb419170519259a1bd0 100644 (file)
 
        sdhci@c8000400 {
                status = "okay";
+               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
                wp-gpios = <&gpio 173 0>; /* gpio PV5 */
                bus-width = <8>;
        };
                bus-width = <8>;
        };
 
+       clocks {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               clk32k_in: clock {
+                       compatible = "fixed-clock";
+                       reg=<0>;
+                       #clock-cells = <0>;
+                       clock-frequency = <32768>;
+               };
+       };
+
        kbc {
                status = "okay";
                nvidia,debounce-delay-ms = <20>;
index 3d3f64d2111a33fb415979c2a1b911c2f7b37a66..fc7febc2b386ade8311ff18b11a6e938ebacd885 100644 (file)
                              0 1 0x04
                              0 41 0x04
                              0 42 0x04>;
+               clocks = <&tegra_car 5>;
        };
 
        tegra_car: clock {
                compatible = "nvidia,tegra20-rtc";
                reg = <0x7000e000 0x100>;
                interrupts = <0 2 0x04>;
+               clocks = <&tegra_car 4>;
        };
 
        i2c@7000c000 {
        pmc {
                compatible = "nvidia,tegra20-pmc";
                reg = <0x7000e400 0x400>;
+               clocks = <&tegra_car 110>, <&clk32k_in>;
+               clock-names = "pclk", "clk32k_in";
        };
 
        memory-controller@7000f000 {
index 8ff2ff20e4a34a3799be59fc6f3b5dff5e621329..6248b2445b32e3df61b0344b3a436f69edef1f62 100644 (file)
 
        sdhci@78000000 {
                status = "okay";
-               cd-gpios = <&gpio 69 0>; /* gpio PI5 */
+               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
                wp-gpios = <&gpio 155 0>; /* gpio PT3 */
                power-gpios = <&gpio 31 0>; /* gpio PD7 */
                bus-width = <4>;
                bus-width = <8>;
        };
 
+       clocks {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               clk32k_in: clock {
+                       compatible = "fixed-clock";
+                       reg=<0>;
+                       #clock-cells = <0>;
+                       clock-frequency = <32768>;
+               };
+       };
+
        regulators {
                compatible = "simple-bus";
                #address-cells = <1>;
index 17499272a4ef97e2df09fc8ced7f07bf13255aaa..65bf2b63174e772c2c8856f91d4fed51b182bdca 100644 (file)
 
        sdhci@78000000 {
                status = "okay";
-               cd-gpios = <&gpio 69 0>; /* gpio PI5 */
+               cd-gpios = <&gpio 69 1>; /* gpio PI5 */
                wp-gpios = <&gpio 155 0>; /* gpio PT3 */
                power-gpios = <&gpio 31 0>; /* gpio PD7 */
                bus-width = <4>;
                bus-width = <8>;
        };
 
+       clocks {
+               compatible = "simple-bus";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               clk32k_in: clock {
+                       compatible = "fixed-clock";
+                       reg=<0>;
+                       #clock-cells = <0>;
+                       clock-frequency = <32768>;
+               };
+       };
+
        regulators {
                compatible = "simple-bus";
                #address-cells = <1>;
index dbf46c27256255fd35ffaf6501a314f50668af3c..9fe7a92b4c8508e4925abf76205b08202d02e07f 100644 (file)
                              0 42 0x04
                              0 121 0x04
                              0 122 0x04>;
+               clocks = <&tegra_car 5>;
        };
 
        tegra_car: clock {
                compatible = "nvidia,tegra30-rtc", "nvidia,tegra20-rtc";
                reg = <0x7000e000 0x100>;
                interrupts = <0 2 0x04>;
+               clocks = <&tegra_car 4>;
        };
 
        i2c@7000c000 {
        };
 
        pmc {
-               compatible = "nvidia,tegra20-pmc", "nvidia,tegra30-pmc";
+               compatible = "nvidia,tegra30-pmc";
                reg = <0x7000e400 0x400>;
+               clocks = <&tegra_car 218>, <&clk32k_in>;
+               clock-names = "pclk", "clk32k_in";
        };
 
        memory-controller {
diff --git a/arch/arm/boot/dts/tps6507x.dtsi b/arch/arm/boot/dts/tps6507x.dtsi
new file mode 100644 (file)
index 0000000..4c326e5
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * 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.
+ */
+
+/*
+ * Integrated Power Management Chip
+ * http://www.ti.com/lit/ds/symlink/tps65070.pdf
+ */
+
+&tps {
+       compatible = "ti,tps6507x";
+
+       regulators {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               vdcdc1_reg: regulator@0 {
+                       reg = <0>;
+                       regulator-compatible = "VDCDC1";
+               };
+
+               vdcdc2_reg: regulator@1 {
+                       reg = <1>;
+                       regulator-compatible = "VDCDC2";
+               };
+
+               vdcdc3_reg: regulator@2 {
+                       reg = <2>;
+                       regulator-compatible = "VDCDC3";
+               };
+
+               ldo1_reg: regulator@3 {
+                       reg = <3>;
+                       regulator-compatible = "LDO1";
+               };
+
+               ldo2_reg: regulator@4 {
+                       reg = <4>;
+                       regulator-compatible = "LDO2";
+               };
+
+       };
+};
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 0b98100d2ae74d2f175bd3338c437105123b63b7..0f2d80da737808c81644849447311ee9ec364c60 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 1ea959019fcd3c19295b8a27a458198100344fe6..047f2a415309a8b7dfb6197d910c849a3a9fe838 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 0ea5d2c97fc437beee4316f194ef16fa276d4afc..05618eb694f81a7518b9101c7e036149ccfb8a58 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 3b1881033ad8752c2f67ac761d35155e0fda8652..892e8287ed730e5531676532c87aebaf3d0eb6ab 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 606d48f3b8f81c10370b718d7b2b3475818b9a03..5f551b76cb65c41d599ca9f6cad005b0eda9dc47 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 af472e4ed451ffab21c7fe04e7c573f5a28224e2..abc7c8d4631b4d96e7406029e79865c41dc1cf0e 100644 (file)
@@ -59,10 +59,13 @@ CONFIG_DEVTMPFS_MOUNT=y
 CONFIG_SERIAL_AMBA_PL011=y
 CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
 CONFIG_TTY_PRINTK=y
-# CONFIG_HW_RANDOM is not set
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_BCM2835=y
 CONFIG_I2C=y
 CONFIG_I2C_CHARDEV=y
 CONFIG_I2C_BCM2835=y
+CONFIG_SPI=y
+CONFIG_SPI_BCM2835=y
 CONFIG_GPIO_SYSFS=y
 # CONFIG_HWMON is not set
 # CONFIG_USB_SUPPORT is not set
@@ -108,9 +111,5 @@ CONFIG_TEST_KSTRTOX=y
 CONFIG_STRICT_DEVMEM=y
 CONFIG_DEBUG_LL=y
 CONFIG_EARLY_PRINTK=y
-# CONFIG_XZ_DEC_X86 is not set
-# CONFIG_XZ_DEC_POWERPC is not set
-# CONFIG_XZ_DEC_IA64 is not set
 # CONFIG_XZ_DEC_ARM is not set
 # CONFIG_XZ_DEC_ARMTHUMB is not set
-# CONFIG_XZ_DEC_SPARC is not set
index 670c3b60f936fc1d74ef866a3b33c1a8f2cc2fac..f6e585b353a49aeaeca7fbfbf13fd899b34999f0 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 92386b20bd096cf27a9410c29e8e8822d2554964..8fee514ee4b66082e9ed558d31d2f3d4c708028d 100644 (file)
@@ -1,4 +1,3 @@
-CONFIG_EXPERIMENTAL=y
 CONFIG_SYSVIPC=y
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
@@ -18,6 +17,7 @@ CONFIG_MODULE_UNLOAD=y
 # CONFIG_BLK_DEV_BSG is not set
 CONFIG_PARTITION_ADVANCED=y
 CONFIG_ARCH_LPC32XX=y
+CONFIG_GPIO_PCA953X=y
 CONFIG_KEYBOARD_GPIO_POLLED=y
 CONFIG_PREEMPT=y
 CONFIG_AEABI=y
@@ -48,6 +48,8 @@ CONFIG_IPV6=y
 CONFIG_IPV6_PRIVACY=y
 # CONFIG_WIRELESS is not set
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
 # CONFIG_FW_LOADER is not set
 CONFIG_MTD=y
 CONFIG_MTD_CMDLINE_PARTS=y
@@ -55,7 +57,6 @@ CONFIG_MTD_CHAR=y
 CONFIG_MTD_BLOCK=y
 CONFIG_MTD_M25P80=y
 CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_MUSEUM_IDS=y
 CONFIG_MTD_NAND_SLC_LPC32XX=y
 CONFIG_MTD_NAND_MLC_LPC32XX=y
 CONFIG_BLK_DEV_LOOP=y
@@ -70,7 +71,6 @@ CONFIG_BLK_DEV_SD=y
 CONFIG_NETDEVICES=y
 CONFIG_MII=y
 # CONFIG_NET_VENDOR_BROADCOM is not set
-# CONFIG_NET_VENDOR_CHELSIO is not set
 # CONFIG_NET_VENDOR_CIRRUS is not set
 # CONFIG_NET_VENDOR_FARADAY is not set
 # CONFIG_NET_VENDOR_INTEL is not set
@@ -84,7 +84,6 @@ CONFIG_LPC_ENET=y
 # CONFIG_NET_VENDOR_STMICRO is not set
 CONFIG_SMSC_PHY=y
 # CONFIG_WLAN is not set
-CONFIG_INPUT_MATRIXKMAP=y
 # CONFIG_INPUT_MOUSEDEV_PSAUX is not set
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
@@ -108,6 +107,19 @@ CONFIG_I2C_PNX=y
 CONFIG_SPI=y
 CONFIG_SPI_PL022=y
 CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_GENERIC_PLATFORM=y
+CONFIG_GPIO_EM=y
+CONFIG_GPIO_PL061=y
+CONFIG_GPIO_MAX7300=y
+CONFIG_GPIO_MAX732X=y
+CONFIG_GPIO_PCF857X=y
+CONFIG_GPIO_SX150X=y
+CONFIG_GPIO_ADP5588=y
+CONFIG_GPIO_ADNP=y
+CONFIG_GPIO_MAX7301=y
+CONFIG_GPIO_MCP23S08=y
+CONFIG_GPIO_MC33880=y
+CONFIG_GPIO_74X164=y
 CONFIG_SENSORS_DS620=y
 CONFIG_SENSORS_MAX6639=y
 CONFIG_WATCHDOG=y
@@ -143,6 +155,7 @@ CONFIG_USB_G_SERIAL=m
 CONFIG_MMC=y
 # CONFIG_MMC_BLOCK_BOUNCE is not set
 CONFIG_MMC_ARMMMCI=y
+CONFIG_MMC_SPI=y
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_PCA9532=y
index 7594b3aff25945c1f2e25ae8bc25a673f61a2333..9fb11895b2e27f73663b547a7abb4719adeece34 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 afb17d630d4444563a76e30007fa369ca6a08c53..494e70aeb9e18ad1472e7af5565b01683aa7a7fb 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
index 6a99e30f81d2ac992da503ba5338571c2d2731ba..e9b1f6d4be5d8c2057e2627fefc12d259a5052ca 100644 (file)
@@ -75,7 +75,7 @@ CONFIG_REALTEK_PHY=y
 CONFIG_MICREL_PHY=y
 # CONFIG_WLAN is not set
 # CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_EVDEV=m
+CONFIG_INPUT_EVDEV=y
 # CONFIG_INPUT_KEYBOARD is not set
 # CONFIG_INPUT_MOUSE is not set
 CONFIG_INPUT_TOUCHSCREEN=y
@@ -99,6 +99,8 @@ CONFIG_SPI_MXS=y
 CONFIG_DEBUG_GPIO=y
 CONFIG_GPIO_SYSFS=y
 # CONFIG_HWMON is not set
+CONFIG_WATCHDOG=y
+CONFIG_STMP3XXX_RTC_WATCHDOG=y
 CONFIG_REGULATOR=y
 CONFIG_REGULATOR_FIXED_VOLTAGE=y
 CONFIG_FB=y
@@ -122,6 +124,7 @@ CONFIG_USB_CHIPIDEA_HOST=y
 CONFIG_USB_STORAGE=y
 CONFIG_USB_MXS_PHY=y
 CONFIG_MMC=y
+CONFIG_MMC_UNSAFE_RESUME=y
 CONFIG_MMC_MXS=y
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
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 426270fe080da3e1fad7dedad400f5b0b243c50a..c037aa1065b7c6908d012cd0d71b9c7c3e4131df 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 6071f4c3d65484601f9fc7006408892482d2f4d8..02802386b894e99dc074a16bd44fb15d508efd82 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 39218ca6d8e8cd6b3d2fbf9dc00cacde112fad1b..788562dccb435f1d8b3ec0be9a79af58cb797a13 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 9706c000f2949d1df82cd1f8eba05dde805035fd..ccce7592dbd301082c12baedd2465eabd9827b5f 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 b67cd5374117b4405e0f153d77cd4040bb3f83c5..1833b4c365df5fd760a1027b1a40ca3d8774b71e 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 2998a08afc2d91a020700807ff9fcd0ca813b68c..ac7a341bd0ffd1a545766bbc01598aebc4a0df80 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 b9fc60d1b33a2f2e6f0e4feef4f44fb82dda38e9..8e2d9f4a9a450273debedcaa8c79c97fe1c57c17 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 d3addee43d8dac22689c5e3b3970564dbc0d2aca..4fcbe7b5b58deae7b4780ed310d7e9fdb37160a1 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 5dfc8fd871034f845b712aa3950ea63a118a14cc..2c7a2f4a75687dcad375770d6d809b5880a45ba1 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 eb98704db2d92a4b24835b226cedcf7814260529..c39600764236c9e858eeb78e5f1a30fda6940fd5 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 44a9a62dcc139f1b096d44b5e1c158cea168b3f2..3a1a7993c125df9072a19d5240652d42d127cf7e 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 33361505c0cd70cc3171f64ec4d5306670b2cd4b..da841885d01c724c9b399de0080137a5c7be7ef3 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 c2e63e47dcbece02cf2c9ea296b52476b59ef938..a98a39bbd8839e446e6be44defd9bdb4cd615358 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 ea2c57a86ca6ebf389aaa406bffeb5441e65a067..31df12029c4e9a5b32695874e95fb9e4e4c75589 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 b6504c19d55c2849d84a64a23317673b55ed926c..0f3379fe645ff7914156b6dd85cdb5efe00c588b 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 4b678478cf95d9f60d6a4484b4a490ee46228d45..2ecd1693c804f68ccca3c09ec4dda6dffcf23d00 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 9c6d3d4f9a23ab43d4ba7a1fb58624a0b774b8b4..43a225f9e71334757a3a4a1817ca60f804404fd1 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 6da25eebf9110f3548fa8f803f0d81bf7e330b4e..12e6f756361da8b94c781082324ed94309eb7af1 100644 (file)
@@ -246,7 +246,6 @@ static struct davinci_mmc_config da830_evm_mmc_config = {
        .wires                  = 8,
        .max_freq               = 50000000,
        .caps                   = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
-       .version                = MMC_CTLR_VERSION_2,
 };
 
 static inline void da830_evm_init_mmc(void)
index c2dfe06563df2af58c02efea8973b17eb0420179..dcc8710936a5d598425f84efd35d3602d7b6bba9 100644 (file)
@@ -802,7 +802,6 @@ static struct davinci_mmc_config da850_mmc_config = {
        .wires          = 4,
        .max_freq       = 50000000,
        .caps           = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
-       .version        = MMC_CTLR_VERSION_2,
 };
 
 static const short da850_evm_mmcsd0_pins[] __initconst = {
@@ -1372,7 +1371,6 @@ static struct davinci_mmc_config da850_wl12xx_mmc_config = {
        .max_freq       = 25000000,
        .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_NONREMOVABLE |
                          MMC_CAP_POWER_OFF_CARD,
-       .version        = MMC_CTLR_VERSION_2,
 };
 
 static const short da850_wl12xx_pins[] __initconst = {
index 147b8e1a4407f794052de4579ba6630f195f982b..bfdf8b979a64d1e0219738a2a020bb5f0b6527a3 100644 (file)
@@ -280,7 +280,6 @@ static struct davinci_mmc_config dm355evm_mmc_config = {
        .wires          = 4,
        .max_freq       = 50000000,
        .caps           = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
-       .version        = MMC_CTLR_VERSION_1,
 };
 
 /* Don't connect anything to J10 unless you're only using USB host
index c2d4958a0cb6a632a4d1b7b5f5bc8c56dafbc424..4cfdd9109e19fe362252f83d21bcf1595b131aee 100644 (file)
@@ -253,7 +253,6 @@ static struct davinci_mmc_config dm365evm_mmc_config = {
        .wires          = 4,
        .max_freq       = 50000000,
        .caps           = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
-       .version        = MMC_CTLR_VERSION_2,
 };
 
 static void dm365evm_emac_configure(void)
index 71735e7797cc147d89590d27570802fa57979f3e..c0206d5f2bf6e54c4760375daf4e763e6de0ba6a 100644 (file)
@@ -570,7 +570,6 @@ static struct davinci_mmc_config dm6446evm_mmc_config = {
        .get_cd         = dm6444evm_mmc_get_cd,
        .get_ro         = dm6444evm_mmc_get_ro,
        .wires          = 4,
-       .version        = MMC_CTLR_VERSION_1
 };
 
 static struct i2c_board_info __initdata i2c_info[] =  {
index 1c98107527fa5a0d83353f058660a1a48fc228c2..b70e83c03bed87c8769c4954d297ff4f5f8d05ba 100644 (file)
@@ -164,7 +164,6 @@ static void __init davinci_ntosd2_map_io(void)
 
 static struct davinci_mmc_config davinci_ntosd2_mmc_config = {
        .wires          = 4,
-       .version        = MMC_CTLR_VERSION_1
 };
 
 
index 5a2bd44da54d8493f5da9bbbb52ab663fb729bdc..328dbd8a37f5b3871fcad3edff523009c46dbb7a 100644 (file)
@@ -136,7 +136,6 @@ static struct davinci_mmc_config da850_mmc_config = {
        .wires          = 4,
        .max_freq       = 50000000,
        .caps           = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
-       .version        = MMC_CTLR_VERSION_2,
 };
 
 static __init void omapl138_hawk_mmc_init(void)
index 4f416023d4e2d1d09f8ab1bf18d6e4663066ad8f..ba798370fc96d1b8f338a20903bd5e0891280b80 100644 (file)
@@ -85,7 +85,6 @@ static struct davinci_mmc_config mmc_config = {
        .wires          = 4,
        .max_freq       = 50000000,
        .caps           = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
-       .version        = MMC_CTLR_VERSION_1,
 };
 
 static const short sdio1_pins[] __initconst = {
index d458558ee84a436a0506835c3ca9bdfa722798de..dc9a470ff9c57afe9855bfaf592a27a62b3888a6 100644 (file)
@@ -35,19 +35,26 @@ static void __clk_enable(struct clk *clk)
 {
        if (clk->parent)
                __clk_enable(clk->parent);
-       if (clk->usecount++ == 0 && (clk->flags & CLK_PSC))
-               davinci_psc_config(clk->domain, clk->gpsc, clk->lpsc,
-                               true, clk->flags);
+       if (clk->usecount++ == 0) {
+               if (clk->flags & CLK_PSC)
+                       davinci_psc_config(clk->domain, clk->gpsc, clk->lpsc,
+                                          true, clk->flags);
+               else if (clk->clk_enable)
+                       clk->clk_enable(clk);
+       }
 }
 
 static void __clk_disable(struct clk *clk)
 {
        if (WARN_ON(clk->usecount == 0))
                return;
-       if (--clk->usecount == 0 && !(clk->flags & CLK_PLL) &&
-           (clk->flags & CLK_PSC))
-               davinci_psc_config(clk->domain, clk->gpsc, clk->lpsc,
-                               false, clk->flags);
+       if (--clk->usecount == 0) {
+               if (!(clk->flags & CLK_PLL) && (clk->flags & CLK_PSC))
+                       davinci_psc_config(clk->domain, clk->gpsc, clk->lpsc,
+                                          false, clk->flags);
+               else if (clk->clk_disable)
+                       clk->clk_disable(clk);
+       }
        if (clk->parent)
                __clk_disable(clk->parent);
 }
index 8694b395fc92602a60355bb35bd414f0137b041c..1e4e836173a14cab56650945cd2fcd41e18cf014 100644 (file)
@@ -104,6 +104,8 @@ struct clk {
        int (*set_rate) (struct clk *clk, unsigned long rate);
        int (*round_rate) (struct clk *clk, unsigned long rate);
        int (*reset) (struct clk *clk, bool reset);
+       void (*clk_enable) (struct clk *clk);
+       void (*clk_disable) (struct clk *clk);
 };
 
 /* Clock flags: SoC-specific flags start at BIT(16) */
index 678a54a64daee17b09cf096cf4bcb2f31199383b..abbaf0270be6550795b824e36b6fda2de933c3aa 100644 (file)
@@ -394,7 +394,7 @@ static struct clk_lookup da830_clks[] = {
        CLK(NULL,               "tpcc",         &tpcc_clk),
        CLK(NULL,               "tptc0",        &tptc0_clk),
        CLK(NULL,               "tptc1",        &tptc1_clk),
-       CLK("davinci_mmc.0",    NULL,           &mmcsd_clk),
+       CLK("da830-mmc.0",      NULL,           &mmcsd_clk),
        CLK(NULL,               "uart0",        &uart0_clk),
        CLK(NULL,               "uart1",        &uart1_clk),
        CLK(NULL,               "uart2",        &uart2_clk),
index 0c4a26ddebba03ec3f082ea96735551bf474d819..4d6933848abfaeaab005ed972916fb0cfb69b5da 100644 (file)
@@ -383,6 +383,49 @@ static struct clk dsp_clk = {
        .flags          = PSC_LRST | PSC_FORCE,
 };
 
+static struct clk ehrpwm_clk = {
+       .name           = "ehrpwm",
+       .parent         = &pll0_sysclk2,
+       .lpsc           = DA8XX_LPSC1_PWM,
+       .gpsc           = 1,
+       .flags          = DA850_CLK_ASYNC3,
+};
+
+#define DA8XX_EHRPWM_TBCLKSYNC BIT(12)
+
+static void ehrpwm_tblck_enable(struct clk *clk)
+{
+       u32 val;
+
+       val = readl(DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP1_REG));
+       val |= DA8XX_EHRPWM_TBCLKSYNC;
+       writel(val, DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP1_REG));
+}
+
+static void ehrpwm_tblck_disable(struct clk *clk)
+{
+       u32 val;
+
+       val = readl(DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP1_REG));
+       val &= ~DA8XX_EHRPWM_TBCLKSYNC;
+       writel(val, DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP1_REG));
+}
+
+static struct clk ehrpwm_tbclk = {
+       .name           = "ehrpwm_tbclk",
+       .parent         = &ehrpwm_clk,
+       .clk_enable     = ehrpwm_tblck_enable,
+       .clk_disable    = ehrpwm_tblck_disable,
+};
+
+static struct clk ecap_clk = {
+       .name           = "ecap",
+       .parent         = &pll0_sysclk2,
+       .lpsc           = DA8XX_LPSC1_ECAP,
+       .gpsc           = 1,
+       .flags          = DA850_CLK_ASYNC3,
+};
+
 static struct clk_lookup da850_clks[] = {
        CLK(NULL,               "ref",          &ref_clk),
        CLK(NULL,               "pll0",         &pll0_clk),
@@ -420,8 +463,8 @@ static struct clk_lookup da850_clks[] = {
        CLK("davinci_emac.1",   NULL,           &emac_clk),
        CLK("davinci-mcasp.0",  NULL,           &mcasp_clk),
        CLK("da8xx_lcdc.0",     "fck",          &lcdc_clk),
-       CLK("davinci_mmc.0",    NULL,           &mmcsd0_clk),
-       CLK("davinci_mmc.1",    NULL,           &mmcsd1_clk),
+       CLK("da830-mmc.0",      NULL,           &mmcsd0_clk),
+       CLK("da830-mmc.1",      NULL,           &mmcsd1_clk),
        CLK(NULL,               "aemif",        &aemif_clk),
        CLK(NULL,               "usb11",        &usb11_clk),
        CLK(NULL,               "usb20",        &usb20_clk),
@@ -430,6 +473,9 @@ static struct clk_lookup da850_clks[] = {
        CLK("vpif",             NULL,           &vpif_clk),
        CLK("ahci",             NULL,           &sata_clk),
        CLK("davinci-rproc.0",  NULL,           &dsp_clk),
+       CLK("ehrpwm",           "fck",          &ehrpwm_clk),
+       CLK("ehrpwm",           "tbclk",        &ehrpwm_tbclk),
+       CLK("ecap",             "fck",          &ecap_clk),
        CLK(NULL,               NULL,           NULL),
 };
 
index 6b7a0a27fbd165147790d5ff8979858732f6e6cc..d83de8f8fa6bb395d247698e233fabcdec091594 100644 (file)
@@ -40,6 +40,7 @@ static void __init da8xx_init_irq(void)
 struct of_dev_auxdata da850_auxdata_lookup[] __initdata = {
        OF_DEV_AUXDATA("ti,davinci-i2c", 0x01c22000, "i2c_davinci.1", NULL),
        OF_DEV_AUXDATA("ti,davinci-wdt", 0x01c21000, "watchdog", NULL),
+       OF_DEV_AUXDATA("ti,da830-mmc", 0x01c40000, "da830-mmc.0", NULL),
        {}
 };
 
index fc50243b1481ca471efca2271b0f7b93ba7d7f7e..cb97e07db284df9b956b03dd3aeb28bc843cb0f2 100644 (file)
@@ -664,7 +664,7 @@ static struct resource da8xx_mmcsd0_resources[] = {
 };
 
 static struct platform_device da8xx_mmcsd0_device = {
-       .name           = "davinci_mmc",
+       .name           = "da830-mmc",
        .id             = 0,
        .num_resources  = ARRAY_SIZE(da8xx_mmcsd0_resources),
        .resource       = da8xx_mmcsd0_resources,
@@ -701,7 +701,7 @@ static struct resource da850_mmcsd1_resources[] = {
 };
 
 static struct platform_device da850_mmcsd1_device = {
-       .name           = "davinci_mmc",
+       .name           = "da830-mmc",
        .id             = 1,
        .num_resources  = ARRAY_SIZE(da850_mmcsd1_resources),
        .resource       = da850_mmcsd1_resources,
index 773ab07a71a0536351ab2ba00338f769f159237e..cfb194df18edb7f72deaf907858905781bac210f 100644 (file)
@@ -218,7 +218,7 @@ static u64 mmc1_dma_mask = DMA_BIT_MASK(32);
 
 static struct platform_device mmc_devices[2] = {
        {
-               .name           = "davinci_mmc",
+               .name           = "dm6441-mmc",
                .id             = 0,
                .dev            = {
                        .dma_mask               = &mmc0_dma_mask,
@@ -228,7 +228,7 @@ static struct platform_device mmc_devices[2] = {
                .resource       = mmc0_resources
        },
        {
-               .name           = "davinci_mmc",
+               .name           = "dm6441-mmc",
                .id             = 1,
                .dev            = {
                        .dma_mask               = &mmc1_dma_mask,
index 4c48a36ee567d6a98b2eb5d0a56ef9b51f2121b0..f6927df2dda861ada422677564426a40fb3f6df4 100644 (file)
@@ -150,7 +150,7 @@ static struct resource mmcsd0_resources[] = {
 };
 
 static struct platform_device davinci_mmcsd0_device = {
-       .name = "davinci_mmc",
+       .name = "dm6441-mmc",
        .id = 0,
        .dev = {
                .dma_mask = &mmcsd0_dma_mask,
@@ -187,7 +187,7 @@ static struct resource mmcsd1_resources[] = {
 };
 
 static struct platform_device davinci_mmcsd1_device = {
-       .name = "davinci_mmc",
+       .name = "dm6441-mmc",
        .id = 1,
        .dev = {
                .dma_mask = &mmcsd1_dma_mask,
@@ -235,6 +235,7 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config)
                        mmcsd1_resources[0].end = DM365_MMCSD1_BASE +
                                                        SZ_4K - 1;
                        mmcsd1_resources[2].start = IRQ_DM365_SDIOINT1;
+                       davinci_mmcsd1_device.name = "da830-mmc";
                } else
                        break;
 
@@ -256,6 +257,7 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config)
                        mmcsd0_resources[0].end = DM365_MMCSD0_BASE +
                                                        SZ_4K - 1;
                        mmcsd0_resources[2].start = IRQ_DM365_SDIOINT0;
+                       davinci_mmcsd0_device.name = "da830-mmc";
                } else if (cpu_is_davinci_dm644x()) {
                        /* REVISIT: should this be in board-init code? */
                        /* Power-on 3.3V IO cells */
index b49c3b77d55e5ac3e9884762a2fcdab28c03453b..87e6104f45e657eaec9026d22120aba25de93b7b 100644 (file)
@@ -361,8 +361,8 @@ static struct clk_lookup dm355_clks[] = {
        CLK("i2c_davinci.1", NULL, &i2c_clk),
        CLK("davinci-mcbsp.0", NULL, &asp0_clk),
        CLK("davinci-mcbsp.1", NULL, &asp1_clk),
-       CLK("davinci_mmc.0", NULL, &mmcsd0_clk),
-       CLK("davinci_mmc.1", NULL, &mmcsd1_clk),
+       CLK("dm6441-mmc.0", NULL, &mmcsd0_clk),
+       CLK("dm6441-mmc.1", NULL, &mmcsd1_clk),
        CLK("spi_davinci.0", NULL, &spi0_clk),
        CLK("spi_davinci.1", NULL, &spi1_clk),
        CLK("spi_davinci.2", NULL, &spi2_clk),
index 6c3980540be0525a9e3d7a5c699ed2221d378a35..2791df9187b3f8acfd18ead5ad3e238ad8d9414d 100644 (file)
@@ -454,8 +454,8 @@ static struct clk_lookup dm365_clks[] = {
        CLK(NULL, "uart0", &uart0_clk),
        CLK(NULL, "uart1", &uart1_clk),
        CLK("i2c_davinci.1", NULL, &i2c_clk),
-       CLK("davinci_mmc.0", NULL, &mmcsd0_clk),
-       CLK("davinci_mmc.1", NULL, &mmcsd1_clk),
+       CLK("da830-mmc.0", NULL, &mmcsd0_clk),
+       CLK("da830-mmc.1", NULL, &mmcsd1_clk),
        CLK("spi_davinci.0", NULL, &spi0_clk),
        CLK("spi_davinci.1", NULL, &spi1_clk),
        CLK("spi_davinci.2", NULL, &spi2_clk),
index db1dd92e00af44c13f7f55f0ae364f08be1035c4..ab6bf54c65c7c7451f1457d99bdd556a4dee1bbf 100644 (file)
@@ -310,7 +310,7 @@ static struct clk_lookup dm644x_clks[] = {
        CLK("i2c_davinci.1", NULL, &i2c_clk),
        CLK("palm_bk3710", NULL, &ide_clk),
        CLK("davinci-mcbsp", NULL, &asp_clk),
-       CLK("davinci_mmc.0", NULL, &mmcsd_clk),
+       CLK("dm6441-mmc.0", NULL, &mmcsd_clk),
        CLK(NULL, "spi", &spi_clk),
        CLK(NULL, "gpio", &gpio_clk),
        CLK(NULL, "usb", &usb_clk),
index de439b7b9af190810407dc95ccca5a50693ccda2..be77ce269cb0302282ec12aa1affec04bbe5db58 100644 (file)
@@ -55,6 +55,7 @@ extern unsigned int da850_max_speed;
 #define DA8XX_SYSCFG0_VIRT(x)  (da8xx_syscfg0_base + (x))
 #define DA8XX_JTAG_ID_REG      0x18
 #define DA8XX_CFGCHIP0_REG     0x17c
+#define DA8XX_CFGCHIP1_REG     0x180
 #define DA8XX_CFGCHIP2_REG     0x184
 #define DA8XX_CFGCHIP3_REG     0x188
 
index 34290d14754b41b827208528c1a317e5d5fa62b3..b18b8ebc650881b4f45a10f8facb14cbb8984377 100644 (file)
@@ -24,8 +24,6 @@
 
 #if defined(CONFIG_DEBUG_DAVINCI_DMx_UART0)
 #define UART_BASE      DAVINCI_UART0_BASE
-#elif defined(CONFIG_DEBUG_DAVINCI_DA8XX_UART0)
-#define UART_BASE      DA8XX_UART0_BASE
 #elif defined(CONFIG_DEBUG_DAVINCI_DA8XX_UART1)
 #define UART_BASE      DA8XX_UART1_BASE
 #elif defined(CONFIG_DEBUG_DAVINCI_DA8XX_UART2)
index dc1a209b9b66624fdfa8f748e237b682e3cec18a..3b2a70d43efac247b65a055f949d7df5814e79a8 100644 (file)
@@ -272,7 +272,7 @@ static struct clk_lookup clks[] = {
        CLK("tnetv107x-keypad.0", NULL,                 &clk_keypad),
        CLK(NULL,               "clk_gpio",             &clk_gpio),
        CLK(NULL,               "clk_mdio",             &clk_mdio),
-       CLK("davinci_mmc.0",    NULL,                   &clk_sdio0),
+       CLK("dm6441-mmc.0",     NULL,                   &clk_sdio0),
        CLK(NULL,               "uart0",                &clk_uart0),
        CLK(NULL,               "uart1",                &clk_uart1),
        CLK(NULL,               "timer0",               &clk_timer0),
@@ -292,7 +292,7 @@ static struct clk_lookup clks[] = {
        CLK(NULL,               "clk_system",           &clk_system),
        CLK(NULL,               "clk_imcop",            &clk_imcop),
        CLK(NULL,               "clk_spare",            &clk_spare),
-       CLK("davinci_mmc.1",    NULL,                   &clk_sdio1),
+       CLK("dm6441-mmc.1",     NULL,                   &clk_sdio1),
        CLK(NULL,               "clk_ddr2_vrst",        &clk_ddr2_vrst),
        CLK(NULL,               "clk_ddr2_vctl_rst",    &clk_ddr2_vctl_rst),
        CLK(NULL,               NULL,                   NULL),
index ecc431909d6fcfcce11858216d404dda160cf7a8..c4495a13751a24903958dae6fee60c385234cb3c 100644 (file)
@@ -3,6 +3,7 @@ if ARCH_MXS
 config SOC_IMX23
        bool
        select ARM_AMBA
+       select ARM_CPU_SUSPEND if PM
        select CPU_ARM926T
        select HAVE_PWM
        select PINCTRL_IMX23
@@ -10,6 +11,7 @@ config SOC_IMX23
 config SOC_IMX28
        bool
        select ARM_AMBA
+       select ARM_CPU_SUSPEND if PM
        select CPU_ARM926T
        select HAVE_CAN_FLEXCAN if CAN
        select HAVE_PWM
index 0f0a97c1fcc072b73fc7754d2503408f99c9030f..3662f4d4c8eac876b5b951f045f105bec0ce438a 100644 (file)
@@ -1739,153 +1739,153 @@ DEFINE_STRUCT_CLK(wdt4_ick, aes_ick_parent_names, aes_ick_ops);
 
 static struct omap_clk omap2420_clks[] = {
        /* external root sources */
-       CLK(NULL,       "func_32k_ck",  &func_32k_ck,   CK_242X),
-       CLK(NULL,       "secure_32k_ck", &secure_32k_ck, CK_242X),
-       CLK(NULL,       "osc_ck",       &osc_ck,        CK_242X),
-       CLK(NULL,       "sys_ck",       &sys_ck,        CK_242X),
-       CLK(NULL,       "alt_ck",       &alt_ck,        CK_242X),
-       CLK(NULL,       "mcbsp_clks",   &mcbsp_clks,    CK_242X),
+       CLK(NULL,       "func_32k_ck",  &func_32k_ck),
+       CLK(NULL,       "secure_32k_ck", &secure_32k_ck),
+       CLK(NULL,       "osc_ck",       &osc_ck),
+       CLK(NULL,       "sys_ck",       &sys_ck),
+       CLK(NULL,       "alt_ck",       &alt_ck),
+       CLK(NULL,       "mcbsp_clks",   &mcbsp_clks),
        /* internal analog sources */
-       CLK(NULL,       "dpll_ck",      &dpll_ck,       CK_242X),
-       CLK(NULL,       "apll96_ck",    &apll96_ck,     CK_242X),
-       CLK(NULL,       "apll54_ck",    &apll54_ck,     CK_242X),
+       CLK(NULL,       "dpll_ck",      &dpll_ck),
+       CLK(NULL,       "apll96_ck",    &apll96_ck),
+       CLK(NULL,       "apll54_ck",    &apll54_ck),
        /* internal prcm root sources */
-       CLK(NULL,       "func_54m_ck",  &func_54m_ck,   CK_242X),
-       CLK(NULL,       "core_ck",      &core_ck,       CK_242X),
-       CLK(NULL,       "func_96m_ck",  &func_96m_ck,   CK_242X),
-       CLK(NULL,       "func_48m_ck",  &func_48m_ck,   CK_242X),
-       CLK(NULL,       "func_12m_ck",  &func_12m_ck,   CK_242X),
-       CLK(NULL,       "sys_clkout_src", &sys_clkout_src, CK_242X),
-       CLK(NULL,       "sys_clkout",   &sys_clkout,    CK_242X),
-       CLK(NULL,       "sys_clkout2_src", &sys_clkout2_src, CK_242X),
-       CLK(NULL,       "sys_clkout2",  &sys_clkout2,   CK_242X),
-       CLK(NULL,       "emul_ck",      &emul_ck,       CK_242X),
+       CLK(NULL,       "func_54m_ck",  &func_54m_ck),
+       CLK(NULL,       "core_ck",      &core_ck),
+       CLK(NULL,       "func_96m_ck",  &func_96m_ck),
+       CLK(NULL,       "func_48m_ck",  &func_48m_ck),
+       CLK(NULL,       "func_12m_ck",  &func_12m_ck),
+       CLK(NULL,       "sys_clkout_src", &sys_clkout_src),
+       CLK(NULL,       "sys_clkout",   &sys_clkout),
+       CLK(NULL,       "sys_clkout2_src", &sys_clkout2_src),
+       CLK(NULL,       "sys_clkout2",  &sys_clkout2),
+       CLK(NULL,       "emul_ck",      &emul_ck),
        /* mpu domain clocks */
-       CLK(NULL,       "mpu_ck",       &mpu_ck,        CK_242X),
+       CLK(NULL,       "mpu_ck",       &mpu_ck),
        /* dsp domain clocks */
-       CLK(NULL,       "dsp_fck",      &dsp_fck,       CK_242X),
-       CLK(NULL,       "dsp_ick",      &dsp_ick,       CK_242X),
-       CLK(NULL,       "iva1_ifck",    &iva1_ifck,     CK_242X),
-       CLK(NULL,       "iva1_mpu_int_ifck", &iva1_mpu_int_ifck, CK_242X),
+       CLK(NULL,       "dsp_fck",      &dsp_fck),
+       CLK(NULL,       "dsp_ick",      &dsp_ick),
+       CLK(NULL,       "iva1_ifck",    &iva1_ifck),
+       CLK(NULL,       "iva1_mpu_int_ifck", &iva1_mpu_int_ifck),
        /* GFX domain clocks */
-       CLK(NULL,       "gfx_3d_fck",   &gfx_3d_fck,    CK_242X),
-       CLK(NULL,       "gfx_2d_fck",   &gfx_2d_fck,    CK_242X),
-       CLK(NULL,       "gfx_ick",      &gfx_ick,       CK_242X),
+       CLK(NULL,       "gfx_3d_fck",   &gfx_3d_fck),
+       CLK(NULL,       "gfx_2d_fck",   &gfx_2d_fck),
+       CLK(NULL,       "gfx_ick",      &gfx_ick),
        /* DSS domain clocks */
-       CLK("omapdss_dss",      "ick",          &dss_ick,       CK_242X),
-       CLK(NULL,       "dss_ick",              &dss_ick,       CK_242X),
-       CLK(NULL,       "dss1_fck",             &dss1_fck,      CK_242X),
-       CLK(NULL,       "dss2_fck",     &dss2_fck,      CK_242X),
-       CLK(NULL,       "dss_54m_fck",  &dss_54m_fck,   CK_242X),
+       CLK("omapdss_dss",      "ick",          &dss_ick),
+       CLK(NULL,       "dss_ick",              &dss_ick),
+       CLK(NULL,       "dss1_fck",             &dss1_fck),
+       CLK(NULL,       "dss2_fck",     &dss2_fck),
+       CLK(NULL,       "dss_54m_fck",  &dss_54m_fck),
        /* L3 domain clocks */
-       CLK(NULL,       "core_l3_ck",   &core_l3_ck,    CK_242X),
-       CLK(NULL,       "ssi_fck",      &ssi_ssr_sst_fck, CK_242X),
-       CLK(NULL,       "usb_l4_ick",   &usb_l4_ick,    CK_242X),
+       CLK(NULL,       "core_l3_ck",   &core_l3_ck),
+       CLK(NULL,       "ssi_fck",      &ssi_ssr_sst_fck),
+       CLK(NULL,       "usb_l4_ick",   &usb_l4_ick),
        /* L4 domain clocks */
-       CLK(NULL,       "l4_ck",        &l4_ck,         CK_242X),
-       CLK(NULL,       "ssi_l4_ick",   &ssi_l4_ick,    CK_242X),
+       CLK(NULL,       "l4_ck",        &l4_ck),
+       CLK(NULL,       "ssi_l4_ick",   &ssi_l4_ick),
        /* virtual meta-group clock */
-       CLK(NULL,       "virt_prcm_set", &virt_prcm_set, CK_242X),
+       CLK(NULL,       "virt_prcm_set", &virt_prcm_set),
        /* general l4 interface ck, multi-parent functional clk */
-       CLK(NULL,       "gpt1_ick",     &gpt1_ick,      CK_242X),
-       CLK(NULL,       "gpt1_fck",     &gpt1_fck,      CK_242X),
-       CLK(NULL,       "gpt2_ick",     &gpt2_ick,      CK_242X),
-       CLK(NULL,       "gpt2_fck",     &gpt2_fck,      CK_242X),
-       CLK(NULL,       "gpt3_ick",     &gpt3_ick,      CK_242X),
-       CLK(NULL,       "gpt3_fck",     &gpt3_fck,      CK_242X),
-       CLK(NULL,       "gpt4_ick",     &gpt4_ick,      CK_242X),
-       CLK(NULL,       "gpt4_fck",     &gpt4_fck,      CK_242X),
-       CLK(NULL,       "gpt5_ick",     &gpt5_ick,      CK_242X),
-       CLK(NULL,       "gpt5_fck",     &gpt5_fck,      CK_242X),
-       CLK(NULL,       "gpt6_ick",     &gpt6_ick,      CK_242X),
-       CLK(NULL,       "gpt6_fck",     &gpt6_fck,      CK_242X),
-       CLK(NULL,       "gpt7_ick",     &gpt7_ick,      CK_242X),
-       CLK(NULL,       "gpt7_fck",     &gpt7_fck,      CK_242X),
-       CLK(NULL,       "gpt8_ick",     &gpt8_ick,      CK_242X),
-       CLK(NULL,       "gpt8_fck",     &gpt8_fck,      CK_242X),
-       CLK(NULL,       "gpt9_ick",     &gpt9_ick,      CK_242X),
-       CLK(NULL,       "gpt9_fck",     &gpt9_fck,      CK_242X),
-       CLK(NULL,       "gpt10_ick",    &gpt10_ick,     CK_242X),
-       CLK(NULL,       "gpt10_fck",    &gpt10_fck,     CK_242X),
-       CLK(NULL,       "gpt11_ick",    &gpt11_ick,     CK_242X),
-       CLK(NULL,       "gpt11_fck",    &gpt11_fck,     CK_242X),
-       CLK(NULL,       "gpt12_ick",    &gpt12_ick,     CK_242X),
-       CLK(NULL,       "gpt12_fck",    &gpt12_fck,     CK_242X),
-       CLK("omap-mcbsp.1", "ick",      &mcbsp1_ick,    CK_242X),
-       CLK(NULL,       "mcbsp1_ick",   &mcbsp1_ick,    CK_242X),
-       CLK(NULL,       "mcbsp1_fck",   &mcbsp1_fck,    CK_242X),
-       CLK("omap-mcbsp.2", "ick",      &mcbsp2_ick,    CK_242X),
-       CLK(NULL,       "mcbsp2_ick",   &mcbsp2_ick,    CK_242X),
-       CLK(NULL,       "mcbsp2_fck",   &mcbsp2_fck,    CK_242X),
-       CLK("omap2_mcspi.1", "ick",     &mcspi1_ick,    CK_242X),
-       CLK(NULL,       "mcspi1_ick",   &mcspi1_ick,    CK_242X),
-       CLK(NULL,       "mcspi1_fck",   &mcspi1_fck,    CK_242X),
-       CLK("omap2_mcspi.2", "ick",     &mcspi2_ick,    CK_242X),
-       CLK(NULL,       "mcspi2_ick",   &mcspi2_ick,    CK_242X),
-       CLK(NULL,       "mcspi2_fck",   &mcspi2_fck,    CK_242X),
-       CLK(NULL,       "uart1_ick",    &uart1_ick,     CK_242X),
-       CLK(NULL,       "uart1_fck",    &uart1_fck,     CK_242X),
-       CLK(NULL,       "uart2_ick",    &uart2_ick,     CK_242X),
-       CLK(NULL,       "uart2_fck",    &uart2_fck,     CK_242X),
-       CLK(NULL,       "uart3_ick",    &uart3_ick,     CK_242X),
-       CLK(NULL,       "uart3_fck",    &uart3_fck,     CK_242X),
-       CLK(NULL,       "gpios_ick",    &gpios_ick,     CK_242X),
-       CLK(NULL,       "gpios_fck",    &gpios_fck,     CK_242X),
-       CLK("omap_wdt", "ick",          &mpu_wdt_ick,   CK_242X),
-       CLK(NULL,       "mpu_wdt_ick",          &mpu_wdt_ick,   CK_242X),
-       CLK(NULL,       "mpu_wdt_fck",  &mpu_wdt_fck,   CK_242X),
-       CLK(NULL,       "sync_32k_ick", &sync_32k_ick,  CK_242X),
-       CLK(NULL,       "wdt1_ick",     &wdt1_ick,      CK_242X),
-       CLK(NULL,       "omapctrl_ick", &omapctrl_ick,  CK_242X),
-       CLK("omap24xxcam", "fck",       &cam_fck,       CK_242X),
-       CLK(NULL,       "cam_fck",      &cam_fck,       CK_242X),
-       CLK("omap24xxcam", "ick",       &cam_ick,       CK_242X),
-       CLK(NULL,       "cam_ick",      &cam_ick,       CK_242X),
-       CLK(NULL,       "mailboxes_ick", &mailboxes_ick,        CK_242X),
-       CLK(NULL,       "wdt4_ick",     &wdt4_ick,      CK_242X),
-       CLK(NULL,       "wdt4_fck",     &wdt4_fck,      CK_242X),
-       CLK(NULL,       "wdt3_ick",     &wdt3_ick,      CK_242X),
-       CLK(NULL,       "wdt3_fck",     &wdt3_fck,      CK_242X),
-       CLK(NULL,       "mspro_ick",    &mspro_ick,     CK_242X),
-       CLK(NULL,       "mspro_fck",    &mspro_fck,     CK_242X),
-       CLK("mmci-omap.0", "ick",       &mmc_ick,       CK_242X),
-       CLK(NULL,       "mmc_ick",      &mmc_ick,       CK_242X),
-       CLK("mmci-omap.0", "fck",       &mmc_fck,       CK_242X),
-       CLK(NULL,       "mmc_fck",      &mmc_fck,       CK_242X),
-       CLK(NULL,       "fac_ick",      &fac_ick,       CK_242X),
-       CLK(NULL,       "fac_fck",      &fac_fck,       CK_242X),
-       CLK(NULL,       "eac_ick",      &eac_ick,       CK_242X),
-       CLK(NULL,       "eac_fck",      &eac_fck,       CK_242X),
-       CLK("omap_hdq.0", "ick",        &hdq_ick,       CK_242X),
-       CLK(NULL,       "hdq_ick",      &hdq_ick,       CK_242X),
-       CLK("omap_hdq.0", "fck",        &hdq_fck,       CK_242X),
-       CLK(NULL,       "hdq_fck",      &hdq_fck,       CK_242X),
-       CLK("omap_i2c.1", "ick",        &i2c1_ick,      CK_242X),
-       CLK(NULL,       "i2c1_ick",     &i2c1_ick,      CK_242X),
-       CLK(NULL,       "i2c1_fck",     &i2c1_fck,      CK_242X),
-       CLK("omap_i2c.2", "ick",        &i2c2_ick,      CK_242X),
-       CLK(NULL,       "i2c2_ick",     &i2c2_ick,      CK_242X),
-       CLK(NULL,       "i2c2_fck",     &i2c2_fck,      CK_242X),
-       CLK(NULL,       "gpmc_fck",     &gpmc_fck,      CK_242X),
-       CLK(NULL,       "sdma_fck",     &sdma_fck,      CK_242X),
-       CLK(NULL,       "sdma_ick",     &sdma_ick,      CK_242X),
-       CLK(NULL,       "sdrc_ick",     &sdrc_ick,      CK_242X),
-       CLK(NULL,       "vlynq_ick",    &vlynq_ick,     CK_242X),
-       CLK(NULL,       "vlynq_fck",    &vlynq_fck,     CK_242X),
-       CLK(NULL,       "des_ick",      &des_ick,       CK_242X),
-       CLK("omap-sham",        "ick",  &sha_ick,       CK_242X),
-       CLK(NULL,       "sha_ick",      &sha_ick,       CK_242X),
-       CLK("omap_rng", "ick",          &rng_ick,       CK_242X),
-       CLK(NULL,       "rng_ick",              &rng_ick,       CK_242X),
-       CLK("omap-aes", "ick",  &aes_ick,       CK_242X),
-       CLK(NULL,       "aes_ick",      &aes_ick,       CK_242X),
-       CLK(NULL,       "pka_ick",      &pka_ick,       CK_242X),
-       CLK(NULL,       "usb_fck",      &usb_fck,       CK_242X),
-       CLK("musb-hdrc",        "fck",  &osc_ck,        CK_242X),
-       CLK(NULL,       "timer_32k_ck", &func_32k_ck,   CK_242X),
-       CLK(NULL,       "timer_sys_ck", &sys_ck,        CK_242X),
-       CLK(NULL,       "timer_ext_ck", &alt_ck,        CK_242X),
-       CLK(NULL,       "cpufreq_ck",   &virt_prcm_set, CK_242X),
+       CLK(NULL,       "gpt1_ick",     &gpt1_ick),
+       CLK(NULL,       "gpt1_fck",     &gpt1_fck),
+       CLK(NULL,       "gpt2_ick",     &gpt2_ick),
+       CLK(NULL,       "gpt2_fck",     &gpt2_fck),
+       CLK(NULL,       "gpt3_ick",     &gpt3_ick),
+       CLK(NULL,       "gpt3_fck",     &gpt3_fck),
+       CLK(NULL,       "gpt4_ick",     &gpt4_ick),
+       CLK(NULL,       "gpt4_fck",     &gpt4_fck),
+       CLK(NULL,       "gpt5_ick",     &gpt5_ick),
+       CLK(NULL,       "gpt5_fck",     &gpt5_fck),
+       CLK(NULL,       "gpt6_ick",     &gpt6_ick),
+       CLK(NULL,       "gpt6_fck",     &gpt6_fck),
+       CLK(NULL,       "gpt7_ick",     &gpt7_ick),
+       CLK(NULL,       "gpt7_fck",     &gpt7_fck),
+       CLK(NULL,       "gpt8_ick",     &gpt8_ick),
+       CLK(NULL,       "gpt8_fck",     &gpt8_fck),
+       CLK(NULL,       "gpt9_ick",     &gpt9_ick),
+       CLK(NULL,       "gpt9_fck",     &gpt9_fck),
+       CLK(NULL,       "gpt10_ick",    &gpt10_ick),
+       CLK(NULL,       "gpt10_fck",    &gpt10_fck),
+       CLK(NULL,       "gpt11_ick",    &gpt11_ick),
+       CLK(NULL,       "gpt11_fck",    &gpt11_fck),
+       CLK(NULL,       "gpt12_ick",    &gpt12_ick),
+       CLK(NULL,       "gpt12_fck",    &gpt12_fck),
+       CLK("omap-mcbsp.1", "ick",      &mcbsp1_ick),
+       CLK(NULL,       "mcbsp1_ick",   &mcbsp1_ick),
+       CLK(NULL,       "mcbsp1_fck",   &mcbsp1_fck),
+       CLK("omap-mcbsp.2", "ick",      &mcbsp2_ick),
+       CLK(NULL,       "mcbsp2_ick",   &mcbsp2_ick),
+       CLK(NULL,       "mcbsp2_fck",   &mcbsp2_fck),
+       CLK("omap2_mcspi.1", "ick",     &mcspi1_ick),
+       CLK(NULL,       "mcspi1_ick",   &mcspi1_ick),
+       CLK(NULL,       "mcspi1_fck",   &mcspi1_fck),
+       CLK("omap2_mcspi.2", "ick",     &mcspi2_ick),
+       CLK(NULL,       "mcspi2_ick",   &mcspi2_ick),
+       CLK(NULL,       "mcspi2_fck",   &mcspi2_fck),
+       CLK(NULL,       "uart1_ick",    &uart1_ick),
+       CLK(NULL,       "uart1_fck",    &uart1_fck),
+       CLK(NULL,       "uart2_ick",    &uart2_ick),
+       CLK(NULL,       "uart2_fck",    &uart2_fck),
+       CLK(NULL,       "uart3_ick",    &uart3_ick),
+       CLK(NULL,       "uart3_fck",    &uart3_fck),
+       CLK(NULL,       "gpios_ick",    &gpios_ick),
+       CLK(NULL,       "gpios_fck",    &gpios_fck),
+       CLK("omap_wdt", "ick",          &mpu_wdt_ick),
+       CLK(NULL,       "mpu_wdt_ick",          &mpu_wdt_ick),
+       CLK(NULL,       "mpu_wdt_fck",  &mpu_wdt_fck),
+       CLK(NULL,       "sync_32k_ick", &sync_32k_ick),
+       CLK(NULL,       "wdt1_ick",     &wdt1_ick),
+       CLK(NULL,       "omapctrl_ick", &omapctrl_ick),
+       CLK("omap24xxcam", "fck",       &cam_fck),
+       CLK(NULL,       "cam_fck",      &cam_fck),
+       CLK("omap24xxcam", "ick",       &cam_ick),
+       CLK(NULL,       "cam_ick",      &cam_ick),
+       CLK(NULL,       "mailboxes_ick", &mailboxes_ick),
+       CLK(NULL,       "wdt4_ick",     &wdt4_ick),
+       CLK(NULL,       "wdt4_fck",     &wdt4_fck),
+       CLK(NULL,       "wdt3_ick",     &wdt3_ick),
+       CLK(NULL,       "wdt3_fck",     &wdt3_fck),
+       CLK(NULL,       "mspro_ick",    &mspro_ick),
+       CLK(NULL,       "mspro_fck",    &mspro_fck),
+       CLK("mmci-omap.0", "ick",       &mmc_ick),
+       CLK(NULL,       "mmc_ick",      &mmc_ick),
+       CLK("mmci-omap.0", "fck",       &mmc_fck),
+       CLK(NULL,       "mmc_fck",      &mmc_fck),
+       CLK(NULL,       "fac_ick",      &fac_ick),
+       CLK(NULL,       "fac_fck",      &fac_fck),
+       CLK(NULL,       "eac_ick",      &eac_ick),
+       CLK(NULL,       "eac_fck",      &eac_fck),
+       CLK("omap_hdq.0", "ick",        &hdq_ick),
+       CLK(NULL,       "hdq_ick",      &hdq_ick),
+       CLK("omap_hdq.0", "fck",        &hdq_fck),
+       CLK(NULL,       "hdq_fck",      &hdq_fck),
+       CLK("omap_i2c.1", "ick",        &i2c1_ick),
+       CLK(NULL,       "i2c1_ick",     &i2c1_ick),
+       CLK(NULL,       "i2c1_fck",     &i2c1_fck),
+       CLK("omap_i2c.2", "ick",        &i2c2_ick),
+       CLK(NULL,       "i2c2_ick",     &i2c2_ick),
+       CLK(NULL,       "i2c2_fck",     &i2c2_fck),
+       CLK(NULL,       "gpmc_fck",     &gpmc_fck),
+       CLK(NULL,       "sdma_fck",     &sdma_fck),
+       CLK(NULL,       "sdma_ick",     &sdma_ick),
+       CLK(NULL,       "sdrc_ick",     &sdrc_ick),
+       CLK(NULL,       "vlynq_ick",    &vlynq_ick),
+       CLK(NULL,       "vlynq_fck",    &vlynq_fck),
+       CLK(NULL,       "des_ick",      &des_ick),
+       CLK("omap-sham",        "ick",  &sha_ick),
+       CLK(NULL,       "sha_ick",      &sha_ick),
+       CLK("omap_rng", "ick",          &rng_ick),
+       CLK(NULL,       "rng_ick",              &rng_ick),
+       CLK("omap-aes", "ick",  &aes_ick),
+       CLK(NULL,       "aes_ick",      &aes_ick),
+       CLK(NULL,       "pka_ick",      &pka_ick),
+       CLK(NULL,       "usb_fck",      &usb_fck),
+       CLK("musb-hdrc",        "fck",  &osc_ck),
+       CLK(NULL,       "timer_32k_ck", &func_32k_ck),
+       CLK(NULL,       "timer_sys_ck", &sys_ck),
+       CLK(NULL,       "timer_ext_ck", &alt_ck),
+       CLK(NULL,       "cpufreq_ck",   &virt_prcm_set),
 };
 
 
@@ -1904,8 +1904,6 @@ static const char *enable_init_clks[] = {
 
 int __init omap2420_clk_init(void)
 {
-       struct omap_clk *c;
-
        prcm_clksrc_ctrl = OMAP2420_PRCM_CLKSRC_CTRL;
        cpu_mask = RATE_IN_242X;
        rate_table = omap2420_rate_table;
@@ -1914,12 +1912,7 @@ int __init omap2420_clk_init(void)
 
        omap2xxx_clkt_vps_check_bootloader_rates();
 
-       for (c = omap2420_clks; c < omap2420_clks + ARRAY_SIZE(omap2420_clks);
-            c++) {
-               clkdev_add(&c->lk);
-               if (!__clk_init(NULL, c->lk.clk))
-                       omap2_init_clk_hw_omap_clocks(c->lk.clk);
-       }
+       omap_clocks_register(omap2420_clks, ARRAY_SIZE(omap2420_clks));
 
        omap2xxx_clkt_vps_late_init();
 
index aed8f74ca0765f4adc96379504a021a7a6b4a857..5e4b037bb24cb66236c9f0bfe502d6b844e7d11e 100644 (file)
@@ -1840,168 +1840,170 @@ DEFINE_STRUCT_CLK(wdt4_ick, aes_ick_parent_names, aes_ick_ops);
 
 static struct omap_clk omap2430_clks[] = {
        /* external root sources */
-       CLK(NULL,       "func_32k_ck",  &func_32k_ck,   CK_243X),
-       CLK(NULL,       "secure_32k_ck", &secure_32k_ck, CK_243X),
-       CLK(NULL,       "osc_ck",       &osc_ck,        CK_243X),
-       CLK("twl",      "fck",          &osc_ck,        CK_243X),
-       CLK(NULL,       "sys_ck",       &sys_ck,        CK_243X),
-       CLK(NULL,       "alt_ck",       &alt_ck,        CK_243X),
-       CLK(NULL,       "mcbsp_clks",   &mcbsp_clks,    CK_243X),
+       CLK(NULL,       "func_32k_ck",  &func_32k_ck),
+       CLK(NULL,       "secure_32k_ck", &secure_32k_ck),
+       CLK(NULL,       "osc_ck",       &osc_ck),
+       CLK("twl",      "fck",          &osc_ck),
+       CLK(NULL,       "sys_ck",       &sys_ck),
+       CLK(NULL,       "alt_ck",       &alt_ck),
+       CLK(NULL,       "mcbsp_clks",   &mcbsp_clks),
        /* internal analog sources */
-       CLK(NULL,       "dpll_ck",      &dpll_ck,       CK_243X),
-       CLK(NULL,       "apll96_ck",    &apll96_ck,     CK_243X),
-       CLK(NULL,       "apll54_ck",    &apll54_ck,     CK_243X),
+       CLK(NULL,       "dpll_ck",      &dpll_ck),
+       CLK(NULL,       "apll96_ck",    &apll96_ck),
+       CLK(NULL,       "apll54_ck",    &apll54_ck),
        /* internal prcm root sources */
-       CLK(NULL,       "func_54m_ck",  &func_54m_ck,   CK_243X),
-       CLK(NULL,       "core_ck",      &core_ck,       CK_243X),
-       CLK(NULL,       "func_96m_ck",  &func_96m_ck,   CK_243X),
-       CLK(NULL,       "func_48m_ck",  &func_48m_ck,   CK_243X),
-       CLK(NULL,       "func_12m_ck",  &func_12m_ck,   CK_243X),
-       CLK(NULL,       "sys_clkout_src", &sys_clkout_src, CK_243X),
-       CLK(NULL,       "sys_clkout",   &sys_clkout,    CK_243X),
-       CLK(NULL,       "emul_ck",      &emul_ck,       CK_243X),
+       CLK(NULL,       "func_54m_ck",  &func_54m_ck),
+       CLK(NULL,       "core_ck",      &core_ck),
+       CLK(NULL,       "func_96m_ck",  &func_96m_ck),
+       CLK(NULL,       "func_48m_ck",  &func_48m_ck),
+       CLK(NULL,       "func_12m_ck",  &func_12m_ck),
+       CLK(NULL,       "sys_clkout_src", &sys_clkout_src),
+       CLK(NULL,       "sys_clkout",   &sys_clkout),
+       CLK(NULL,       "emul_ck",      &emul_ck),
        /* mpu domain clocks */
-       CLK(NULL,       "mpu_ck",       &mpu_ck,        CK_243X),
+       CLK(NULL,       "mpu_ck",       &mpu_ck),
        /* dsp domain clocks */
-       CLK(NULL,       "dsp_fck",      &dsp_fck,       CK_243X),
-       CLK(NULL,       "iva2_1_ick",   &iva2_1_ick,    CK_243X),
+       CLK(NULL,       "dsp_fck",      &dsp_fck),
+       CLK(NULL,       "iva2_1_ick",   &iva2_1_ick),
        /* GFX domain clocks */
-       CLK(NULL,       "gfx_3d_fck",   &gfx_3d_fck,    CK_243X),
-       CLK(NULL,       "gfx_2d_fck",   &gfx_2d_fck,    CK_243X),
-       CLK(NULL,       "gfx_ick",      &gfx_ick,       CK_243X),
+       CLK(NULL,       "gfx_3d_fck",   &gfx_3d_fck),
+       CLK(NULL,       "gfx_2d_fck",   &gfx_2d_fck),
+       CLK(NULL,       "gfx_ick",      &gfx_ick),
        /* Modem domain clocks */
-       CLK(NULL,       "mdm_ick",      &mdm_ick,       CK_243X),
-       CLK(NULL,       "mdm_osc_ck",   &mdm_osc_ck,    CK_243X),
+       CLK(NULL,       "mdm_ick",      &mdm_ick),
+       CLK(NULL,       "mdm_osc_ck",   &mdm_osc_ck),
        /* DSS domain clocks */
-       CLK("omapdss_dss",      "ick",          &dss_ick,       CK_243X),
-       CLK(NULL,       "dss_ick",              &dss_ick,       CK_243X),
-       CLK(NULL,       "dss1_fck",             &dss1_fck,      CK_243X),
-       CLK(NULL,       "dss2_fck",     &dss2_fck,      CK_243X),
-       CLK(NULL,       "dss_54m_fck",  &dss_54m_fck,   CK_243X),
+       CLK("omapdss_dss",      "ick",          &dss_ick),
+       CLK(NULL,       "dss_ick",              &dss_ick),
+       CLK(NULL,       "dss1_fck",             &dss1_fck),
+       CLK(NULL,       "dss2_fck",     &dss2_fck),
+       CLK(NULL,       "dss_54m_fck",  &dss_54m_fck),
        /* L3 domain clocks */
-       CLK(NULL,       "core_l3_ck",   &core_l3_ck,    CK_243X),
-       CLK(NULL,       "ssi_fck",      &ssi_ssr_sst_fck, CK_243X),
-       CLK(NULL,       "usb_l4_ick",   &usb_l4_ick,    CK_243X),
+       CLK(NULL,       "core_l3_ck",   &core_l3_ck),
+       CLK(NULL,       "ssi_fck",      &ssi_ssr_sst_fck),
+       CLK(NULL,       "usb_l4_ick",   &usb_l4_ick),
        /* L4 domain clocks */
-       CLK(NULL,       "l4_ck",        &l4_ck,         CK_243X),
-       CLK(NULL,       "ssi_l4_ick",   &ssi_l4_ick,    CK_243X),
+       CLK(NULL,       "l4_ck",        &l4_ck),
+       CLK(NULL,       "ssi_l4_ick",   &ssi_l4_ick),
        /* virtual meta-group clock */
-       CLK(NULL,       "virt_prcm_set", &virt_prcm_set, CK_243X),
+       CLK(NULL,       "virt_prcm_set", &virt_prcm_set),
        /* general l4 interface ck, multi-parent functional clk */
-       CLK(NULL,       "gpt1_ick",     &gpt1_ick,      CK_243X),
-       CLK(NULL,       "gpt1_fck",     &gpt1_fck,      CK_243X),
-       CLK(NULL,       "gpt2_ick",     &gpt2_ick,      CK_243X),
-       CLK(NULL,       "gpt2_fck",     &gpt2_fck,      CK_243X),
-       CLK(NULL,       "gpt3_ick",     &gpt3_ick,      CK_243X),
-       CLK(NULL,       "gpt3_fck",     &gpt3_fck,      CK_243X),
-       CLK(NULL,       "gpt4_ick",     &gpt4_ick,      CK_243X),
-       CLK(NULL,       "gpt4_fck",     &gpt4_fck,      CK_243X),
-       CLK(NULL,       "gpt5_ick",     &gpt5_ick,      CK_243X),
-       CLK(NULL,       "gpt5_fck",     &gpt5_fck,      CK_243X),
-       CLK(NULL,       "gpt6_ick",     &gpt6_ick,      CK_243X),
-       CLK(NULL,       "gpt6_fck",     &gpt6_fck,      CK_243X),
-       CLK(NULL,       "gpt7_ick",     &gpt7_ick,      CK_243X),
-       CLK(NULL,       "gpt7_fck",     &gpt7_fck,      CK_243X),
-       CLK(NULL,       "gpt8_ick",     &gpt8_ick,      CK_243X),
-       CLK(NULL,       "gpt8_fck",     &gpt8_fck,      CK_243X),
-       CLK(NULL,       "gpt9_ick",     &gpt9_ick,      CK_243X),
-       CLK(NULL,       "gpt9_fck",     &gpt9_fck,      CK_243X),
-       CLK(NULL,       "gpt10_ick",    &gpt10_ick,     CK_243X),
-       CLK(NULL,       "gpt10_fck",    &gpt10_fck,     CK_243X),
-       CLK(NULL,       "gpt11_ick",    &gpt11_ick,     CK_243X),
-       CLK(NULL,       "gpt11_fck",    &gpt11_fck,     CK_243X),
-       CLK(NULL,       "gpt12_ick",    &gpt12_ick,     CK_243X),
-       CLK(NULL,       "gpt12_fck",    &gpt12_fck,     CK_243X),
-       CLK("omap-mcbsp.1", "ick",      &mcbsp1_ick,    CK_243X),
-       CLK(NULL,       "mcbsp1_ick",   &mcbsp1_ick,    CK_243X),
-       CLK(NULL,       "mcbsp1_fck",   &mcbsp1_fck,    CK_243X),
-       CLK("omap-mcbsp.2", "ick",      &mcbsp2_ick,    CK_243X),
-       CLK(NULL,       "mcbsp2_ick",   &mcbsp2_ick,    CK_243X),
-       CLK(NULL,       "mcbsp2_fck",   &mcbsp2_fck,    CK_243X),
-       CLK("omap-mcbsp.3", "ick",      &mcbsp3_ick,    CK_243X),
-       CLK(NULL,       "mcbsp3_ick",   &mcbsp3_ick,    CK_243X),
-       CLK(NULL,       "mcbsp3_fck",   &mcbsp3_fck,    CK_243X),
-       CLK("omap-mcbsp.4", "ick",      &mcbsp4_ick,    CK_243X),
-       CLK(NULL,       "mcbsp4_ick",   &mcbsp4_ick,    CK_243X),
-       CLK(NULL,       "mcbsp4_fck",   &mcbsp4_fck,    CK_243X),
-       CLK("omap-mcbsp.5", "ick",      &mcbsp5_ick,    CK_243X),
-       CLK(NULL,       "mcbsp5_ick",   &mcbsp5_ick,    CK_243X),
-       CLK(NULL,       "mcbsp5_fck",   &mcbsp5_fck,    CK_243X),
-       CLK("omap2_mcspi.1", "ick",     &mcspi1_ick,    CK_243X),
-       CLK(NULL,       "mcspi1_ick",   &mcspi1_ick,    CK_243X),
-       CLK(NULL,       "mcspi1_fck",   &mcspi1_fck,    CK_243X),
-       CLK("omap2_mcspi.2", "ick",     &mcspi2_ick,    CK_243X),
-       CLK(NULL,       "mcspi2_ick",   &mcspi2_ick,    CK_243X),
-       CLK(NULL,       "mcspi2_fck",   &mcspi2_fck,    CK_243X),
-       CLK("omap2_mcspi.3", "ick",     &mcspi3_ick,    CK_243X),
-       CLK(NULL,       "mcspi3_ick",   &mcspi3_ick,    CK_243X),
-       CLK(NULL,       "mcspi3_fck",   &mcspi3_fck,    CK_243X),
-       CLK(NULL,       "uart1_ick",    &uart1_ick,     CK_243X),
-       CLK(NULL,       "uart1_fck",    &uart1_fck,     CK_243X),
-       CLK(NULL,       "uart2_ick",    &uart2_ick,     CK_243X),
-       CLK(NULL,       "uart2_fck",    &uart2_fck,     CK_243X),
-       CLK(NULL,       "uart3_ick",    &uart3_ick,     CK_243X),
-       CLK(NULL,       "uart3_fck",    &uart3_fck,     CK_243X),
-       CLK(NULL,       "gpios_ick",    &gpios_ick,     CK_243X),
-       CLK(NULL,       "gpios_fck",    &gpios_fck,     CK_243X),
-       CLK("omap_wdt", "ick",          &mpu_wdt_ick,   CK_243X),
-       CLK(NULL,       "mpu_wdt_ick",  &mpu_wdt_ick,   CK_243X),
-       CLK(NULL,       "mpu_wdt_fck",  &mpu_wdt_fck,   CK_243X),
-       CLK(NULL,       "sync_32k_ick", &sync_32k_ick,  CK_243X),
-       CLK(NULL,       "wdt1_ick",     &wdt1_ick,      CK_243X),
-       CLK(NULL,       "omapctrl_ick", &omapctrl_ick,  CK_243X),
-       CLK(NULL,       "icr_ick",      &icr_ick,       CK_243X),
-       CLK("omap24xxcam", "fck",       &cam_fck,       CK_243X),
-       CLK(NULL,       "cam_fck",      &cam_fck,       CK_243X),
-       CLK("omap24xxcam", "ick",       &cam_ick,       CK_243X),
-       CLK(NULL,       "cam_ick",      &cam_ick,       CK_243X),
-       CLK(NULL,       "mailboxes_ick", &mailboxes_ick,        CK_243X),
-       CLK(NULL,       "wdt4_ick",     &wdt4_ick,      CK_243X),
-       CLK(NULL,       "wdt4_fck",     &wdt4_fck,      CK_243X),
-       CLK(NULL,       "mspro_ick",    &mspro_ick,     CK_243X),
-       CLK(NULL,       "mspro_fck",    &mspro_fck,     CK_243X),
-       CLK(NULL,       "fac_ick",      &fac_ick,       CK_243X),
-       CLK(NULL,       "fac_fck",      &fac_fck,       CK_243X),
-       CLK("omap_hdq.0", "ick",        &hdq_ick,       CK_243X),
-       CLK(NULL,       "hdq_ick",      &hdq_ick,       CK_243X),
-       CLK("omap_hdq.1", "fck",        &hdq_fck,       CK_243X),
-       CLK(NULL,       "hdq_fck",      &hdq_fck,       CK_243X),
-       CLK("omap_i2c.1", "ick",        &i2c1_ick,      CK_243X),
-       CLK(NULL,       "i2c1_ick",     &i2c1_ick,      CK_243X),
-       CLK(NULL,       "i2chs1_fck",   &i2chs1_fck,    CK_243X),
-       CLK("omap_i2c.2", "ick",        &i2c2_ick,      CK_243X),
-       CLK(NULL,       "i2c2_ick",     &i2c2_ick,      CK_243X),
-       CLK(NULL,       "i2chs2_fck",   &i2chs2_fck,    CK_243X),
-       CLK(NULL,       "gpmc_fck",     &gpmc_fck,      CK_243X),
-       CLK(NULL,       "sdma_fck",     &sdma_fck,      CK_243X),
-       CLK(NULL,       "sdma_ick",     &sdma_ick,      CK_243X),
-       CLK(NULL,       "sdrc_ick",     &sdrc_ick,      CK_243X),
-       CLK(NULL,       "des_ick",      &des_ick,       CK_243X),
-       CLK("omap-sham",        "ick",  &sha_ick,       CK_243X),
-       CLK("omap_rng", "ick",          &rng_ick,       CK_243X),
-       CLK(NULL,       "rng_ick",      &rng_ick,       CK_243X),
-       CLK("omap-aes", "ick",  &aes_ick,       CK_243X),
-       CLK(NULL,       "pka_ick",      &pka_ick,       CK_243X),
-       CLK(NULL,       "usb_fck",      &usb_fck,       CK_243X),
-       CLK("musb-omap2430",    "ick",  &usbhs_ick,     CK_243X),
-       CLK(NULL,       "usbhs_ick",    &usbhs_ick,     CK_243X),
-       CLK("omap_hsmmc.0", "ick",      &mmchs1_ick,    CK_243X),
-       CLK(NULL,       "mmchs1_ick",   &mmchs1_ick,    CK_243X),
-       CLK(NULL,       "mmchs1_fck",   &mmchs1_fck,    CK_243X),
-       CLK("omap_hsmmc.1", "ick",      &mmchs2_ick,    CK_243X),
-       CLK(NULL,       "mmchs2_ick",   &mmchs2_ick,    CK_243X),
-       CLK(NULL,       "mmchs2_fck",   &mmchs2_fck,    CK_243X),
-       CLK(NULL,       "gpio5_ick",    &gpio5_ick,     CK_243X),
-       CLK(NULL,       "gpio5_fck",    &gpio5_fck,     CK_243X),
-       CLK(NULL,       "mdm_intc_ick", &mdm_intc_ick,  CK_243X),
-       CLK("omap_hsmmc.0", "mmchsdb_fck",      &mmchsdb1_fck,  CK_243X),
-       CLK(NULL,        "mmchsdb1_fck",        &mmchsdb1_fck,  CK_243X),
-       CLK("omap_hsmmc.1", "mmchsdb_fck",      &mmchsdb2_fck,  CK_243X),
-       CLK(NULL,        "mmchsdb2_fck",        &mmchsdb2_fck,  CK_243X),
-       CLK(NULL,       "timer_32k_ck",  &func_32k_ck,   CK_243X),
-       CLK(NULL,       "timer_sys_ck", &sys_ck,        CK_243X),
-       CLK(NULL,       "timer_ext_ck", &alt_ck,        CK_243X),
-       CLK(NULL,       "cpufreq_ck",   &virt_prcm_set, CK_243X),
+       CLK(NULL,       "gpt1_ick",     &gpt1_ick),
+       CLK(NULL,       "gpt1_fck",     &gpt1_fck),
+       CLK(NULL,       "gpt2_ick",     &gpt2_ick),
+       CLK(NULL,       "gpt2_fck",     &gpt2_fck),
+       CLK(NULL,       "gpt3_ick",     &gpt3_ick),
+       CLK(NULL,       "gpt3_fck",     &gpt3_fck),
+       CLK(NULL,       "gpt4_ick",     &gpt4_ick),
+       CLK(NULL,       "gpt4_fck",     &gpt4_fck),
+       CLK(NULL,       "gpt5_ick",     &gpt5_ick),
+       CLK(NULL,       "gpt5_fck",     &gpt5_fck),
+       CLK(NULL,       "gpt6_ick",     &gpt6_ick),
+       CLK(NULL,       "gpt6_fck",     &gpt6_fck),
+       CLK(NULL,       "gpt7_ick",     &gpt7_ick),
+       CLK(NULL,       "gpt7_fck",     &gpt7_fck),
+       CLK(NULL,       "gpt8_ick",     &gpt8_ick),
+       CLK(NULL,       "gpt8_fck",     &gpt8_fck),
+       CLK(NULL,       "gpt9_ick",     &gpt9_ick),
+       CLK(NULL,       "gpt9_fck",     &gpt9_fck),
+       CLK(NULL,       "gpt10_ick",    &gpt10_ick),
+       CLK(NULL,       "gpt10_fck",    &gpt10_fck),
+       CLK(NULL,       "gpt11_ick",    &gpt11_ick),
+       CLK(NULL,       "gpt11_fck",    &gpt11_fck),
+       CLK(NULL,       "gpt12_ick",    &gpt12_ick),
+       CLK(NULL,       "gpt12_fck",    &gpt12_fck),
+       CLK("omap-mcbsp.1", "ick",      &mcbsp1_ick),
+       CLK(NULL,       "mcbsp1_ick",   &mcbsp1_ick),
+       CLK(NULL,       "mcbsp1_fck",   &mcbsp1_fck),
+       CLK("omap-mcbsp.2", "ick",      &mcbsp2_ick),
+       CLK(NULL,       "mcbsp2_ick",   &mcbsp2_ick),
+       CLK(NULL,       "mcbsp2_fck",   &mcbsp2_fck),
+       CLK("omap-mcbsp.3", "ick",      &mcbsp3_ick),
+       CLK(NULL,       "mcbsp3_ick",   &mcbsp3_ick),
+       CLK(NULL,       "mcbsp3_fck",   &mcbsp3_fck),
+       CLK("omap-mcbsp.4", "ick",      &mcbsp4_ick),
+       CLK(NULL,       "mcbsp4_ick",   &mcbsp4_ick),
+       CLK(NULL,       "mcbsp4_fck",   &mcbsp4_fck),
+       CLK("omap-mcbsp.5", "ick",      &mcbsp5_ick),
+       CLK(NULL,       "mcbsp5_ick",   &mcbsp5_ick),
+       CLK(NULL,       "mcbsp5_fck",   &mcbsp5_fck),
+       CLK("omap2_mcspi.1", "ick",     &mcspi1_ick),
+       CLK(NULL,       "mcspi1_ick",   &mcspi1_ick),
+       CLK(NULL,       "mcspi1_fck",   &mcspi1_fck),
+       CLK("omap2_mcspi.2", "ick",     &mcspi2_ick),
+       CLK(NULL,       "mcspi2_ick",   &mcspi2_ick),
+       CLK(NULL,       "mcspi2_fck",   &mcspi2_fck),
+       CLK("omap2_mcspi.3", "ick",     &mcspi3_ick),
+       CLK(NULL,       "mcspi3_ick",   &mcspi3_ick),
+       CLK(NULL,       "mcspi3_fck",   &mcspi3_fck),
+       CLK(NULL,       "uart1_ick",    &uart1_ick),
+       CLK(NULL,       "uart1_fck",    &uart1_fck),
+       CLK(NULL,       "uart2_ick",    &uart2_ick),
+       CLK(NULL,       "uart2_fck",    &uart2_fck),
+       CLK(NULL,       "uart3_ick",    &uart3_ick),
+       CLK(NULL,       "uart3_fck",    &uart3_fck),
+       CLK(NULL,       "gpios_ick",    &gpios_ick),
+       CLK(NULL,       "gpios_fck",    &gpios_fck),
+       CLK("omap_wdt", "ick",          &mpu_wdt_ick),
+       CLK(NULL,       "mpu_wdt_ick",  &mpu_wdt_ick),
+       CLK(NULL,       "mpu_wdt_fck",  &mpu_wdt_fck),
+       CLK(NULL,       "sync_32k_ick", &sync_32k_ick),
+       CLK(NULL,       "wdt1_ick",     &wdt1_ick),
+       CLK(NULL,       "omapctrl_ick", &omapctrl_ick),
+       CLK(NULL,       "icr_ick",      &icr_ick),
+       CLK("omap24xxcam", "fck",       &cam_fck),
+       CLK(NULL,       "cam_fck",      &cam_fck),
+       CLK("omap24xxcam", "ick",       &cam_ick),
+       CLK(NULL,       "cam_ick",      &cam_ick),
+       CLK(NULL,       "mailboxes_ick", &mailboxes_ick),
+       CLK(NULL,       "wdt4_ick",     &wdt4_ick),
+       CLK(NULL,       "wdt4_fck",     &wdt4_fck),
+       CLK(NULL,       "mspro_ick",    &mspro_ick),
+       CLK(NULL,       "mspro_fck",    &mspro_fck),
+       CLK(NULL,       "fac_ick",      &fac_ick),
+       CLK(NULL,       "fac_fck",      &fac_fck),
+       CLK("omap_hdq.0", "ick",        &hdq_ick),
+       CLK(NULL,       "hdq_ick",      &hdq_ick),
+       CLK("omap_hdq.1", "fck",        &hdq_fck),
+       CLK(NULL,       "hdq_fck",      &hdq_fck),
+       CLK("omap_i2c.1", "ick",        &i2c1_ick),
+       CLK(NULL,       "i2c1_ick",     &i2c1_ick),
+       CLK(NULL,       "i2chs1_fck",   &i2chs1_fck),
+       CLK("omap_i2c.2", "ick",        &i2c2_ick),
+       CLK(NULL,       "i2c2_ick",     &i2c2_ick),
+       CLK(NULL,       "i2chs2_fck",   &i2chs2_fck),
+       CLK(NULL,       "gpmc_fck",     &gpmc_fck),
+       CLK(NULL,       "sdma_fck",     &sdma_fck),
+       CLK(NULL,       "sdma_ick",     &sdma_ick),
+       CLK(NULL,       "sdrc_ick",     &sdrc_ick),
+       CLK(NULL,       "des_ick",      &des_ick),
+       CLK("omap-sham",        "ick",  &sha_ick),
+       CLK(NULL,       "sha_ick",      &sha_ick),
+       CLK("omap_rng", "ick",          &rng_ick),
+       CLK(NULL,       "rng_ick",      &rng_ick),
+       CLK("omap-aes", "ick",  &aes_ick),
+       CLK(NULL,       "aes_ick",      &aes_ick),
+       CLK(NULL,       "pka_ick",      &pka_ick),
+       CLK(NULL,       "usb_fck",      &usb_fck),
+       CLK("musb-omap2430",    "ick",  &usbhs_ick),
+       CLK(NULL,       "usbhs_ick",    &usbhs_ick),
+       CLK("omap_hsmmc.0", "ick",      &mmchs1_ick),
+       CLK(NULL,       "mmchs1_ick",   &mmchs1_ick),
+       CLK(NULL,       "mmchs1_fck",   &mmchs1_fck),
+       CLK("omap_hsmmc.1", "ick",      &mmchs2_ick),
+       CLK(NULL,       "mmchs2_ick",   &mmchs2_ick),
+       CLK(NULL,       "mmchs2_fck",   &mmchs2_fck),
+       CLK(NULL,       "gpio5_ick",    &gpio5_ick),
+       CLK(NULL,       "gpio5_fck",    &gpio5_fck),
+       CLK(NULL,       "mdm_intc_ick", &mdm_intc_ick),
+       CLK("omap_hsmmc.0", "mmchsdb_fck",      &mmchsdb1_fck),
+       CLK(NULL,        "mmchsdb1_fck",        &mmchsdb1_fck),
+       CLK("omap_hsmmc.1", "mmchsdb_fck",      &mmchsdb2_fck),
+       CLK(NULL,        "mmchsdb2_fck",        &mmchsdb2_fck),
+       CLK(NULL,       "timer_32k_ck",  &func_32k_ck),
+       CLK(NULL,       "timer_sys_ck", &sys_ck),
+       CLK(NULL,       "timer_ext_ck", &alt_ck),
+       CLK(NULL,       "cpufreq_ck",   &virt_prcm_set),
 };
 
 static const char *enable_init_clks[] = {
@@ -2019,8 +2021,6 @@ static const char *enable_init_clks[] = {
 
 int __init omap2430_clk_init(void)
 {
-       struct omap_clk *c;
-
        prcm_clksrc_ctrl = OMAP2430_PRCM_CLKSRC_CTRL;
        cpu_mask = RATE_IN_243X;
        rate_table = omap2430_rate_table;
@@ -2029,12 +2029,7 @@ int __init omap2430_clk_init(void)
 
        omap2xxx_clkt_vps_check_bootloader_rates();
 
-       for (c = omap2430_clks; c < omap2430_clks + ARRAY_SIZE(omap2430_clks);
-            c++) {
-               clkdev_add(&c->lk);
-               if (!__clk_init(NULL, c->lk.clk))
-                       omap2_init_clk_hw_omap_clocks(c->lk.clk);
-       }
+       omap_clocks_register(omap2430_clks, ARRAY_SIZE(omap2430_clks));
 
        omap2xxx_clkt_vps_late_init();
 
index 476b82066cb6b27368e18155998ad85cff910240..c8dcc523c31af6c3e7a77c96cd8fb286b5a80305 100644 (file)
@@ -413,6 +413,14 @@ static struct clk smartreflex1_fck;
 DEFINE_STRUCT_CLK_HW_OMAP(smartreflex1_fck, NULL);
 DEFINE_STRUCT_CLK(smartreflex1_fck, dpll_core_ck_parents, clk_ops_null);
 
+static struct clk sha0_fck;
+DEFINE_STRUCT_CLK_HW_OMAP(sha0_fck, NULL);
+DEFINE_STRUCT_CLK(sha0_fck, dpll_core_ck_parents, clk_ops_null);
+
+static struct clk aes0_fck;
+DEFINE_STRUCT_CLK_HW_OMAP(aes0_fck, NULL);
+DEFINE_STRUCT_CLK(aes0_fck, dpll_core_ck_parents, clk_ops_null);
+
 /*
  * Modules clock nodes
  *
@@ -838,80 +846,82 @@ DEFINE_STRUCT_CLK(wdt1_fck, wdt_ck_parents, gpio_fck_ops);
  * clkdev
  */
 static struct omap_clk am33xx_clks[] = {
-       CLK(NULL,       "clk_32768_ck",         &clk_32768_ck,  CK_AM33XX),
-       CLK(NULL,       "clk_rc32k_ck",         &clk_rc32k_ck,  CK_AM33XX),
-       CLK(NULL,       "virt_19200000_ck",     &virt_19200000_ck,      CK_AM33XX),
-       CLK(NULL,       "virt_24000000_ck",     &virt_24000000_ck,      CK_AM33XX),
-       CLK(NULL,       "virt_25000000_ck",     &virt_25000000_ck,      CK_AM33XX),
-       CLK(NULL,       "virt_26000000_ck",     &virt_26000000_ck,      CK_AM33XX),
-       CLK(NULL,       "sys_clkin_ck",         &sys_clkin_ck,  CK_AM33XX),
-       CLK(NULL,       "tclkin_ck",            &tclkin_ck,     CK_AM33XX),
-       CLK(NULL,       "dpll_core_ck",         &dpll_core_ck,  CK_AM33XX),
-       CLK(NULL,       "dpll_core_x2_ck",      &dpll_core_x2_ck,       CK_AM33XX),
-       CLK(NULL,       "dpll_core_m4_ck",      &dpll_core_m4_ck,       CK_AM33XX),
-       CLK(NULL,       "dpll_core_m5_ck",      &dpll_core_m5_ck,       CK_AM33XX),
-       CLK(NULL,       "dpll_core_m6_ck",      &dpll_core_m6_ck,       CK_AM33XX),
-       CLK(NULL,       "dpll_mpu_ck",          &dpll_mpu_ck,   CK_AM33XX),
-       CLK("cpu0",     NULL,                   &dpll_mpu_ck,   CK_AM33XX),
-       CLK(NULL,       "dpll_mpu_m2_ck",       &dpll_mpu_m2_ck,        CK_AM33XX),
-       CLK(NULL,       "dpll_ddr_ck",          &dpll_ddr_ck,   CK_AM33XX),
-       CLK(NULL,       "dpll_ddr_m2_ck",       &dpll_ddr_m2_ck,        CK_AM33XX),
-       CLK(NULL,       "dpll_ddr_m2_div2_ck",  &dpll_ddr_m2_div2_ck,   CK_AM33XX),
-       CLK(NULL,       "dpll_disp_ck",         &dpll_disp_ck,  CK_AM33XX),
-       CLK(NULL,       "dpll_disp_m2_ck",      &dpll_disp_m2_ck,       CK_AM33XX),
-       CLK(NULL,       "dpll_per_ck",          &dpll_per_ck,   CK_AM33XX),
-       CLK(NULL,       "dpll_per_m2_ck",       &dpll_per_m2_ck,        CK_AM33XX),
-       CLK(NULL,       "dpll_per_m2_div4_wkupdm_ck",   &dpll_per_m2_div4_wkupdm_ck,    CK_AM33XX),
-       CLK(NULL,       "dpll_per_m2_div4_ck",  &dpll_per_m2_div4_ck,   CK_AM33XX),
-       CLK(NULL,       "adc_tsc_fck",          &adc_tsc_fck,   CK_AM33XX),
-       CLK(NULL,       "cefuse_fck",           &cefuse_fck,    CK_AM33XX),
-       CLK(NULL,       "clkdiv32k_ck",         &clkdiv32k_ck,  CK_AM33XX),
-       CLK(NULL,       "clkdiv32k_ick",        &clkdiv32k_ick, CK_AM33XX),
-       CLK(NULL,       "dcan0_fck",            &dcan0_fck,     CK_AM33XX),
-       CLK("481cc000.d_can",   NULL,           &dcan0_fck,     CK_AM33XX),
-       CLK(NULL,       "dcan1_fck",            &dcan1_fck,     CK_AM33XX),
-       CLK("481d0000.d_can",   NULL,           &dcan1_fck,     CK_AM33XX),
-       CLK(NULL,       "debugss_ick",          &debugss_ick,   CK_AM33XX),
-       CLK(NULL,       "pruss_ocp_gclk",       &pruss_ocp_gclk,        CK_AM33XX),
-       CLK(NULL,       "mcasp0_fck",           &mcasp0_fck,    CK_AM33XX),
-       CLK(NULL,       "mcasp1_fck",           &mcasp1_fck,    CK_AM33XX),
-       CLK(NULL,       "mmu_fck",              &mmu_fck,       CK_AM33XX),
-       CLK(NULL,       "smartreflex0_fck",     &smartreflex0_fck,      CK_AM33XX),
-       CLK(NULL,       "smartreflex1_fck",     &smartreflex1_fck,      CK_AM33XX),
-       CLK(NULL,       "timer1_fck",           &timer1_fck,    CK_AM33XX),
-       CLK(NULL,       "timer2_fck",           &timer2_fck,    CK_AM33XX),
-       CLK(NULL,       "timer3_fck",           &timer3_fck,    CK_AM33XX),
-       CLK(NULL,       "timer4_fck",           &timer4_fck,    CK_AM33XX),
-       CLK(NULL,       "timer5_fck",           &timer5_fck,    CK_AM33XX),
-       CLK(NULL,       "timer6_fck",           &timer6_fck,    CK_AM33XX),
-       CLK(NULL,       "timer7_fck",           &timer7_fck,    CK_AM33XX),
-       CLK(NULL,       "usbotg_fck",           &usbotg_fck,    CK_AM33XX),
-       CLK(NULL,       "ieee5000_fck",         &ieee5000_fck,  CK_AM33XX),
-       CLK(NULL,       "wdt1_fck",             &wdt1_fck,      CK_AM33XX),
-       CLK(NULL,       "l4_rtc_gclk",          &l4_rtc_gclk,   CK_AM33XX),
-       CLK(NULL,       "l3_gclk",              &l3_gclk,       CK_AM33XX),
-       CLK(NULL,       "dpll_core_m4_div2_ck", &dpll_core_m4_div2_ck,  CK_AM33XX),
-       CLK(NULL,       "l4hs_gclk",            &l4hs_gclk,     CK_AM33XX),
-       CLK(NULL,       "l3s_gclk",             &l3s_gclk,      CK_AM33XX),
-       CLK(NULL,       "l4fw_gclk",            &l4fw_gclk,     CK_AM33XX),
-       CLK(NULL,       "l4ls_gclk",            &l4ls_gclk,     CK_AM33XX),
-       CLK(NULL,       "clk_24mhz",            &clk_24mhz,     CK_AM33XX),
-       CLK(NULL,       "sysclk_div_ck",        &sysclk_div_ck, CK_AM33XX),
-       CLK(NULL,       "cpsw_125mhz_gclk",     &cpsw_125mhz_gclk,      CK_AM33XX),
-       CLK(NULL,       "cpsw_cpts_rft_clk",    &cpsw_cpts_rft_clk,     CK_AM33XX),
-       CLK(NULL,       "gpio0_dbclk_mux_ck",   &gpio0_dbclk_mux_ck,    CK_AM33XX),
-       CLK(NULL,       "gpio0_dbclk",          &gpio0_dbclk,   CK_AM33XX),
-       CLK(NULL,       "gpio1_dbclk",          &gpio1_dbclk,   CK_AM33XX),
-       CLK(NULL,       "gpio2_dbclk",          &gpio2_dbclk,   CK_AM33XX),
-       CLK(NULL,       "gpio3_dbclk",          &gpio3_dbclk,   CK_AM33XX),
-       CLK(NULL,       "lcd_gclk",             &lcd_gclk,      CK_AM33XX),
-       CLK(NULL,       "mmc_clk",              &mmc_clk,       CK_AM33XX),
-       CLK(NULL,       "gfx_fclk_clksel_ck",   &gfx_fclk_clksel_ck,    CK_AM33XX),
-       CLK(NULL,       "gfx_fck_div_ck",       &gfx_fck_div_ck,        CK_AM33XX),
-       CLK(NULL,       "sysclkout_pre_ck",     &sysclkout_pre_ck,      CK_AM33XX),
-       CLK(NULL,       "clkout2_div_ck",       &clkout2_div_ck,        CK_AM33XX),
-       CLK(NULL,       "timer_32k_ck",         &clkdiv32k_ick, CK_AM33XX),
-       CLK(NULL,       "timer_sys_ck",         &sys_clkin_ck,  CK_AM33XX),
+       CLK(NULL,       "clk_32768_ck",         &clk_32768_ck),
+       CLK(NULL,       "clk_rc32k_ck",         &clk_rc32k_ck),
+       CLK(NULL,       "virt_19200000_ck",     &virt_19200000_ck),
+       CLK(NULL,       "virt_24000000_ck",     &virt_24000000_ck),
+       CLK(NULL,       "virt_25000000_ck",     &virt_25000000_ck),
+       CLK(NULL,       "virt_26000000_ck",     &virt_26000000_ck),
+       CLK(NULL,       "sys_clkin_ck",         &sys_clkin_ck),
+       CLK(NULL,       "tclkin_ck",            &tclkin_ck),
+       CLK(NULL,       "dpll_core_ck",         &dpll_core_ck),
+       CLK(NULL,       "dpll_core_x2_ck",      &dpll_core_x2_ck),
+       CLK(NULL,       "dpll_core_m4_ck",      &dpll_core_m4_ck),
+       CLK(NULL,       "dpll_core_m5_ck",      &dpll_core_m5_ck),
+       CLK(NULL,       "dpll_core_m6_ck",      &dpll_core_m6_ck),
+       CLK(NULL,       "dpll_mpu_ck",          &dpll_mpu_ck),
+       CLK("cpu0",     NULL,                   &dpll_mpu_ck),
+       CLK(NULL,       "dpll_mpu_m2_ck",       &dpll_mpu_m2_ck),
+       CLK(NULL,       "dpll_ddr_ck",          &dpll_ddr_ck),
+       CLK(NULL,       "dpll_ddr_m2_ck",       &dpll_ddr_m2_ck),
+       CLK(NULL,       "dpll_ddr_m2_div2_ck",  &dpll_ddr_m2_div2_ck),
+       CLK(NULL,       "dpll_disp_ck",         &dpll_disp_ck),
+       CLK(NULL,       "dpll_disp_m2_ck",      &dpll_disp_m2_ck),
+       CLK(NULL,       "dpll_per_ck",          &dpll_per_ck),
+       CLK(NULL,       "dpll_per_m2_ck",       &dpll_per_m2_ck),
+       CLK(NULL,       "dpll_per_m2_div4_wkupdm_ck",   &dpll_per_m2_div4_wkupdm_ck),
+       CLK(NULL,       "dpll_per_m2_div4_ck",  &dpll_per_m2_div4_ck),
+       CLK(NULL,       "adc_tsc_fck",          &adc_tsc_fck),
+       CLK(NULL,       "cefuse_fck",           &cefuse_fck),
+       CLK(NULL,       "clkdiv32k_ck",         &clkdiv32k_ck),
+       CLK(NULL,       "clkdiv32k_ick",        &clkdiv32k_ick),
+       CLK(NULL,       "dcan0_fck",            &dcan0_fck),
+       CLK("481cc000.d_can",   NULL,           &dcan0_fck),
+       CLK(NULL,       "dcan1_fck",            &dcan1_fck),
+       CLK("481d0000.d_can",   NULL,           &dcan1_fck),
+       CLK(NULL,       "debugss_ick",          &debugss_ick),
+       CLK(NULL,       "pruss_ocp_gclk",       &pruss_ocp_gclk),
+       CLK(NULL,       "mcasp0_fck",           &mcasp0_fck),
+       CLK(NULL,       "mcasp1_fck",           &mcasp1_fck),
+       CLK(NULL,       "mmu_fck",              &mmu_fck),
+       CLK(NULL,       "smartreflex0_fck",     &smartreflex0_fck),
+       CLK(NULL,       "smartreflex1_fck",     &smartreflex1_fck),
+       CLK(NULL,       "sha0_fck",             &sha0_fck),
+       CLK(NULL,       "aes0_fck",             &aes0_fck),
+       CLK(NULL,       "timer1_fck",           &timer1_fck),
+       CLK(NULL,       "timer2_fck",           &timer2_fck),
+       CLK(NULL,       "timer3_fck",           &timer3_fck),
+       CLK(NULL,       "timer4_fck",           &timer4_fck),
+       CLK(NULL,       "timer5_fck",           &timer5_fck),
+       CLK(NULL,       "timer6_fck",           &timer6_fck),
+       CLK(NULL,       "timer7_fck",           &timer7_fck),
+       CLK(NULL,       "usbotg_fck",           &usbotg_fck),
+       CLK(NULL,       "ieee5000_fck",         &ieee5000_fck),
+       CLK(NULL,       "wdt1_fck",             &wdt1_fck),
+       CLK(NULL,       "l4_rtc_gclk",          &l4_rtc_gclk),
+       CLK(NULL,       "l3_gclk",              &l3_gclk),
+       CLK(NULL,       "dpll_core_m4_div2_ck", &dpll_core_m4_div2_ck),
+       CLK(NULL,       "l4hs_gclk",            &l4hs_gclk),
+       CLK(NULL,       "l3s_gclk",             &l3s_gclk),
+       CLK(NULL,       "l4fw_gclk",            &l4fw_gclk),
+       CLK(NULL,       "l4ls_gclk",            &l4ls_gclk),
+       CLK(NULL,       "clk_24mhz",            &clk_24mhz),
+       CLK(NULL,       "sysclk_div_ck",        &sysclk_div_ck),
+       CLK(NULL,       "cpsw_125mhz_gclk",     &cpsw_125mhz_gclk),
+       CLK(NULL,       "cpsw_cpts_rft_clk",    &cpsw_cpts_rft_clk),
+       CLK(NULL,       "gpio0_dbclk_mux_ck",   &gpio0_dbclk_mux_ck),
+       CLK(NULL,       "gpio0_dbclk",          &gpio0_dbclk),
+       CLK(NULL,       "gpio1_dbclk",          &gpio1_dbclk),
+       CLK(NULL,       "gpio2_dbclk",          &gpio2_dbclk),
+       CLK(NULL,       "gpio3_dbclk",          &gpio3_dbclk),
+       CLK(NULL,       "lcd_gclk",             &lcd_gclk),
+       CLK(NULL,       "mmc_clk",              &mmc_clk),
+       CLK(NULL,       "gfx_fclk_clksel_ck",   &gfx_fclk_clksel_ck),
+       CLK(NULL,       "gfx_fck_div_ck",       &gfx_fck_div_ck),
+       CLK(NULL,       "sysclkout_pre_ck",     &sysclkout_pre_ck),
+       CLK(NULL,       "clkout2_div_ck",       &clkout2_div_ck),
+       CLK(NULL,       "timer_32k_ck",         &clkdiv32k_ick),
+       CLK(NULL,       "timer_sys_ck",         &sys_clkin_ck),
 };
 
 
@@ -926,21 +936,10 @@ static const char *enable_init_clks[] = {
 
 int __init am33xx_clk_init(void)
 {
-       struct omap_clk *c;
-       u32 cpu_clkflg;
-
-       if (soc_is_am33xx()) {
+       if (soc_is_am33xx())
                cpu_mask = RATE_IN_AM33XX;
-               cpu_clkflg = CK_AM33XX;
-       }
-
-       for (c = am33xx_clks; c < am33xx_clks + ARRAY_SIZE(am33xx_clks); c++) {
-               if (c->cpu & cpu_clkflg) {
-                       clkdev_add(&c->lk);
-                       if (!__clk_init(NULL, c->lk.clk))
-                               omap2_init_clk_hw_omap_clocks(c->lk.clk);
-               }
-       }
+
+       omap_clocks_register(am33xx_clks, ARRAY_SIZE(am33xx_clks));
 
        omap2_clk_disable_autoidle_all();
 
index 4579c3c5338fac99e759e97368ab7ab08d9d8c4b..45cd26430d1f2298bc39b0abff53311f30fad81a 100644 (file)
@@ -3219,289 +3219,327 @@ static struct clk_hw_omap wdt3_ick_hw = {
 DEFINE_STRUCT_CLK(wdt3_ick, gpio2_ick_parent_names, aes2_ick_ops);
 
 /*
- * clkdev
+ * clocks specific to omap3430es1
+ */
+static struct omap_clk omap3430es1_clks[] = {
+       CLK(NULL,       "gfx_l3_ck",    &gfx_l3_ck),
+       CLK(NULL,       "gfx_l3_fck",   &gfx_l3_fck),
+       CLK(NULL,       "gfx_l3_ick",   &gfx_l3_ick),
+       CLK(NULL,       "gfx_cg1_ck",   &gfx_cg1_ck),
+       CLK(NULL,       "gfx_cg2_ck",   &gfx_cg2_ck),
+       CLK(NULL,       "d2d_26m_fck",  &d2d_26m_fck),
+       CLK(NULL,       "fshostusb_fck", &fshostusb_fck),
+       CLK(NULL,       "ssi_ssr_fck",  &ssi_ssr_fck_3430es1),
+       CLK(NULL,       "ssi_sst_fck",  &ssi_sst_fck_3430es1),
+       CLK("musb-omap2430",    "ick",  &hsotgusb_ick_3430es1),
+       CLK(NULL,       "hsotgusb_ick", &hsotgusb_ick_3430es1),
+       CLK(NULL,       "fac_ick",      &fac_ick),
+       CLK(NULL,       "ssi_ick",      &ssi_ick_3430es1),
+       CLK(NULL,       "usb_l4_ick",   &usb_l4_ick),
+       CLK(NULL,       "dss1_alwon_fck",       &dss1_alwon_fck_3430es1),
+       CLK("omapdss_dss",      "ick",          &dss_ick_3430es1),
+       CLK(NULL,       "dss_ick",              &dss_ick_3430es1),
+};
+
+/*
+ * clocks specific to am35xx
+ */
+static struct omap_clk am35xx_clks[] = {
+       CLK(NULL,       "ipss_ick",     &ipss_ick),
+       CLK(NULL,       "rmii_ck",      &rmii_ck),
+       CLK(NULL,       "pclk_ck",      &pclk_ck),
+       CLK(NULL,       "emac_ick",     &emac_ick),
+       CLK(NULL,       "emac_fck",     &emac_fck),
+       CLK("davinci_emac.0",   NULL,   &emac_ick),
+       CLK("davinci_mdio.0",   NULL,   &emac_fck),
+       CLK("vpfe-capture",     "master",       &vpfe_ick),
+       CLK("vpfe-capture",     "slave",        &vpfe_fck),
+       CLK(NULL,       "hsotgusb_ick",         &hsotgusb_ick_am35xx),
+       CLK(NULL,       "hsotgusb_fck",         &hsotgusb_fck_am35xx),
+       CLK(NULL,       "hecc_ck",      &hecc_ck),
+       CLK(NULL,       "uart4_ick",    &uart4_ick_am35xx),
+       CLK(NULL,       "uart4_fck",    &uart4_fck_am35xx),
+};
+
+/*
+ * clocks specific to omap36xx
+ */
+static struct omap_clk omap36xx_clks[] = {
+       CLK(NULL,       "omap_192m_alwon_fck", &omap_192m_alwon_fck),
+       CLK(NULL,       "uart4_fck",    &uart4_fck),
+};
+
+/*
+ * clocks common to omap36xx omap34xx
+ */
+static struct omap_clk omap34xx_omap36xx_clks[] = {
+       CLK(NULL,       "aes1_ick",     &aes1_ick),
+       CLK("omap_rng", "ick",          &rng_ick),
+       CLK(NULL,       "sha11_ick",    &sha11_ick),
+       CLK(NULL,       "des1_ick",     &des1_ick),
+       CLK(NULL,       "cam_mclk",     &cam_mclk),
+       CLK(NULL,       "cam_ick",      &cam_ick),
+       CLK(NULL,       "csi2_96m_fck", &csi2_96m_fck),
+       CLK(NULL,       "security_l3_ick", &security_l3_ick),
+       CLK(NULL,       "pka_ick",      &pka_ick),
+       CLK(NULL,       "icr_ick",      &icr_ick),
+       CLK("omap-aes", "ick",  &aes2_ick),
+       CLK("omap-sham",        "ick",  &sha12_ick),
+       CLK(NULL,       "des2_ick",     &des2_ick),
+       CLK(NULL,       "mspro_ick",    &mspro_ick),
+       CLK(NULL,       "mailboxes_ick", &mailboxes_ick),
+       CLK(NULL,       "ssi_l4_ick",   &ssi_l4_ick),
+       CLK(NULL,       "sr1_fck",      &sr1_fck),
+       CLK(NULL,       "sr2_fck",      &sr2_fck),
+       CLK(NULL,       "sr_l4_ick",    &sr_l4_ick),
+       CLK(NULL,       "security_l4_ick2", &security_l4_ick2),
+       CLK(NULL,       "wkup_l4_ick",  &wkup_l4_ick),
+       CLK(NULL,       "dpll2_fck",    &dpll2_fck),
+       CLK(NULL,       "iva2_ck",      &iva2_ck),
+       CLK(NULL,       "modem_fck",    &modem_fck),
+       CLK(NULL,       "sad2d_ick",    &sad2d_ick),
+       CLK(NULL,       "mad2d_ick",    &mad2d_ick),
+       CLK(NULL,       "mspro_fck",    &mspro_fck),
+       CLK(NULL,       "dpll2_ck",     &dpll2_ck),
+       CLK(NULL,       "dpll2_m2_ck",  &dpll2_m2_ck),
+};
+
+/*
+ * clocks common to omap36xx and omap3430es2plus
+ */
+static struct omap_clk omap36xx_omap3430es2plus_clks[] = {
+       CLK(NULL,       "ssi_ssr_fck",  &ssi_ssr_fck_3430es2),
+       CLK(NULL,       "ssi_sst_fck",  &ssi_sst_fck_3430es2),
+       CLK("musb-omap2430",    "ick",  &hsotgusb_ick_3430es2),
+       CLK(NULL,       "hsotgusb_ick", &hsotgusb_ick_3430es2),
+       CLK(NULL,       "ssi_ick",      &ssi_ick_3430es2),
+       CLK(NULL,       "usim_fck",     &usim_fck),
+       CLK(NULL,       "usim_ick",     &usim_ick),
+};
+
+/*
+ * clocks common to am35xx omap36xx and omap3430es2plus
+ */
+static struct omap_clk omap36xx_am35xx_omap3430es2plus_clks[] = {
+       CLK(NULL,       "virt_16_8m_ck", &virt_16_8m_ck),
+       CLK(NULL,       "dpll5_ck",     &dpll5_ck),
+       CLK(NULL,       "dpll5_m2_ck",  &dpll5_m2_ck),
+       CLK(NULL,       "sgx_fck",      &sgx_fck),
+       CLK(NULL,       "sgx_ick",      &sgx_ick),
+       CLK(NULL,       "cpefuse_fck",  &cpefuse_fck),
+       CLK(NULL,       "ts_fck",       &ts_fck),
+       CLK(NULL,       "usbtll_fck",   &usbtll_fck),
+       CLK("usbhs_omap",       "usbtll_fck",   &usbtll_fck),
+       CLK("usbhs_tll",        "usbtll_fck",   &usbtll_fck),
+       CLK(NULL,       "usbtll_ick",   &usbtll_ick),
+       CLK("usbhs_omap",       "usbtll_ick",   &usbtll_ick),
+       CLK("usbhs_tll",        "usbtll_ick",   &usbtll_ick),
+       CLK("omap_hsmmc.2",     "ick",  &mmchs3_ick),
+       CLK(NULL,       "mmchs3_ick",   &mmchs3_ick),
+       CLK(NULL,       "mmchs3_fck",   &mmchs3_fck),
+       CLK(NULL,       "dss1_alwon_fck",       &dss1_alwon_fck_3430es2),
+       CLK("omapdss_dss",      "ick",          &dss_ick_3430es2),
+       CLK(NULL,       "dss_ick",              &dss_ick_3430es2),
+       CLK(NULL,       "usbhost_120m_fck", &usbhost_120m_fck),
+       CLK(NULL,       "usbhost_48m_fck", &usbhost_48m_fck),
+       CLK(NULL,       "usbhost_ick",  &usbhost_ick),
+       CLK("usbhs_omap",       "usbhost_ick",  &usbhost_ick),
+};
+
+/*
+ * common clocks
  */
 static struct omap_clk omap3xxx_clks[] = {
-       CLK(NULL,       "apb_pclk",     &dummy_apb_pclk,        CK_3XXX),
-       CLK(NULL,       "omap_32k_fck", &omap_32k_fck,  CK_3XXX),
-       CLK(NULL,       "virt_12m_ck",  &virt_12m_ck,   CK_3XXX),
-       CLK(NULL,       "virt_13m_ck",  &virt_13m_ck,   CK_3XXX),
-       CLK(NULL,       "virt_16_8m_ck", &virt_16_8m_ck, CK_3430ES2PLUS | CK_AM35XX  | CK_36XX),
-       CLK(NULL,       "virt_19200000_ck", &virt_19200000_ck, CK_3XXX),
-       CLK(NULL,       "virt_26000000_ck", &virt_26000000_ck, CK_3XXX),
-       CLK(NULL,       "virt_38_4m_ck", &virt_38_4m_ck, CK_3XXX),
-       CLK(NULL,       "osc_sys_ck",   &osc_sys_ck,    CK_3XXX),
-       CLK("twl",      "fck",          &osc_sys_ck,    CK_3XXX),
-       CLK(NULL,       "sys_ck",       &sys_ck,        CK_3XXX),
-       CLK(NULL,       "sys_altclk",   &sys_altclk,    CK_3XXX),
-       CLK(NULL,       "mcbsp_clks",   &mcbsp_clks,    CK_3XXX),
-       CLK(NULL,       "sys_clkout1",  &sys_clkout1,   CK_3XXX),
-       CLK(NULL,       "dpll1_ck",     &dpll1_ck,      CK_3XXX),
-       CLK(NULL,       "dpll1_x2_ck",  &dpll1_x2_ck,   CK_3XXX),
-       CLK(NULL,       "dpll1_x2m2_ck", &dpll1_x2m2_ck, CK_3XXX),
-       CLK(NULL,       "dpll2_ck",     &dpll2_ck,      CK_34XX | CK_36XX),
-       CLK(NULL,       "dpll2_m2_ck",  &dpll2_m2_ck,   CK_34XX | CK_36XX),
-       CLK(NULL,       "dpll3_ck",     &dpll3_ck,      CK_3XXX),
-       CLK(NULL,       "core_ck",      &core_ck,       CK_3XXX),
-       CLK(NULL,       "dpll3_x2_ck",  &dpll3_x2_ck,   CK_3XXX),
-       CLK(NULL,       "dpll3_m2_ck",  &dpll3_m2_ck,   CK_3XXX),
-       CLK(NULL,       "dpll3_m2x2_ck", &dpll3_m2x2_ck, CK_3XXX),
-       CLK(NULL,       "dpll3_m3_ck",  &dpll3_m3_ck,   CK_3XXX),
-       CLK(NULL,       "dpll3_m3x2_ck", &dpll3_m3x2_ck, CK_3XXX),
-       CLK("etb",      "emu_core_alwon_ck", &emu_core_alwon_ck, CK_3XXX),
-       CLK(NULL,       "dpll4_ck",     &dpll4_ck,      CK_3XXX),
-       CLK(NULL,       "dpll4_x2_ck",  &dpll4_x2_ck,   CK_3XXX),
-       CLK(NULL,       "omap_192m_alwon_fck", &omap_192m_alwon_fck, CK_36XX),
-       CLK(NULL,       "omap_96m_alwon_fck", &omap_96m_alwon_fck, CK_3XXX),
-       CLK(NULL,       "omap_96m_fck", &omap_96m_fck,  CK_3XXX),
-       CLK(NULL,       "cm_96m_fck",   &cm_96m_fck,    CK_3XXX),
-       CLK(NULL,       "omap_54m_fck", &omap_54m_fck,  CK_3XXX),
-       CLK(NULL,       "omap_48m_fck", &omap_48m_fck,  CK_3XXX),
-       CLK(NULL,       "omap_12m_fck", &omap_12m_fck,  CK_3XXX),
-       CLK(NULL,       "dpll4_m2_ck",  &dpll4_m2_ck,   CK_3XXX),
-       CLK(NULL,       "dpll4_m2x2_ck", &dpll4_m2x2_ck, CK_3XXX),
-       CLK(NULL,       "dpll4_m3_ck",  &dpll4_m3_ck,   CK_3XXX),
-       CLK(NULL,       "dpll4_m3x2_ck", &dpll4_m3x2_ck, CK_3XXX),
-       CLK(NULL,       "dpll4_m4_ck",  &dpll4_m4_ck,   CK_3XXX),
-       CLK(NULL,       "dpll4_m4x2_ck", &dpll4_m4x2_ck, CK_3XXX),
-       CLK(NULL,       "dpll4_m5_ck",  &dpll4_m5_ck,   CK_3XXX),
-       CLK(NULL,       "dpll4_m5x2_ck", &dpll4_m5x2_ck, CK_3XXX),
-       CLK(NULL,       "dpll4_m6_ck",  &dpll4_m6_ck,   CK_3XXX),
-       CLK(NULL,       "dpll4_m6x2_ck", &dpll4_m6x2_ck, CK_3XXX),
-       CLK("etb",      "emu_per_alwon_ck", &emu_per_alwon_ck, CK_3XXX),
-       CLK(NULL,       "dpll5_ck",     &dpll5_ck,      CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "dpll5_m2_ck",  &dpll5_m2_ck,   CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "clkout2_src_ck", &clkout2_src_ck, CK_3XXX),
-       CLK(NULL,       "sys_clkout2",  &sys_clkout2,   CK_3XXX),
-       CLK(NULL,       "corex2_fck",   &corex2_fck,    CK_3XXX),
-       CLK(NULL,       "dpll1_fck",    &dpll1_fck,     CK_3XXX),
-       CLK(NULL,       "mpu_ck",       &mpu_ck,        CK_3XXX),
-       CLK(NULL,       "arm_fck",      &arm_fck,       CK_3XXX),
-       CLK("etb",      "emu_mpu_alwon_ck", &emu_mpu_alwon_ck, CK_3XXX),
-       CLK(NULL,       "dpll2_fck",    &dpll2_fck,     CK_34XX | CK_36XX),
-       CLK(NULL,       "iva2_ck",      &iva2_ck,       CK_34XX | CK_36XX),
-       CLK(NULL,       "l3_ick",       &l3_ick,        CK_3XXX),
-       CLK(NULL,       "l4_ick",       &l4_ick,        CK_3XXX),
-       CLK(NULL,       "rm_ick",       &rm_ick,        CK_3XXX),
-       CLK(NULL,       "gfx_l3_ck",    &gfx_l3_ck,     CK_3430ES1),
-       CLK(NULL,       "gfx_l3_fck",   &gfx_l3_fck,    CK_3430ES1),
-       CLK(NULL,       "gfx_l3_ick",   &gfx_l3_ick,    CK_3430ES1),
-       CLK(NULL,       "gfx_cg1_ck",   &gfx_cg1_ck,    CK_3430ES1),
-       CLK(NULL,       "gfx_cg2_ck",   &gfx_cg2_ck,    CK_3430ES1),
-       CLK(NULL,       "sgx_fck",      &sgx_fck,       CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "sgx_ick",      &sgx_ick,       CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "d2d_26m_fck",  &d2d_26m_fck,   CK_3430ES1),
-       CLK(NULL,       "modem_fck",    &modem_fck,     CK_34XX | CK_36XX),
-       CLK(NULL,       "sad2d_ick",    &sad2d_ick,     CK_34XX | CK_36XX),
-       CLK(NULL,       "mad2d_ick",    &mad2d_ick,     CK_34XX | CK_36XX),
-       CLK(NULL,       "gpt10_fck",    &gpt10_fck,     CK_3XXX),
-       CLK(NULL,       "gpt11_fck",    &gpt11_fck,     CK_3XXX),
-       CLK(NULL,       "cpefuse_fck",  &cpefuse_fck,   CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "ts_fck",       &ts_fck,        CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "usbtll_fck",   &usbtll_fck,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK("usbhs_omap",       "usbtll_fck",   &usbtll_fck,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK("usbhs_tll",        "usbtll_fck",   &usbtll_fck,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "core_96m_fck", &core_96m_fck,  CK_3XXX),
-       CLK(NULL,       "mmchs3_fck",   &mmchs3_fck,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "mmchs2_fck",   &mmchs2_fck,    CK_3XXX),
-       CLK(NULL,       "mspro_fck",    &mspro_fck,     CK_34XX | CK_36XX),
-       CLK(NULL,       "mmchs1_fck",   &mmchs1_fck,    CK_3XXX),
-       CLK(NULL,       "i2c3_fck",     &i2c3_fck,      CK_3XXX),
-       CLK(NULL,       "i2c2_fck",     &i2c2_fck,      CK_3XXX),
-       CLK(NULL,       "i2c1_fck",     &i2c1_fck,      CK_3XXX),
-       CLK(NULL,       "mcbsp5_fck",   &mcbsp5_fck,    CK_3XXX),
-       CLK(NULL,       "mcbsp1_fck",   &mcbsp1_fck,    CK_3XXX),
-       CLK(NULL,       "core_48m_fck", &core_48m_fck,  CK_3XXX),
-       CLK(NULL,       "mcspi4_fck",   &mcspi4_fck,    CK_3XXX),
-       CLK(NULL,       "mcspi3_fck",   &mcspi3_fck,    CK_3XXX),
-       CLK(NULL,       "mcspi2_fck",   &mcspi2_fck,    CK_3XXX),
-       CLK(NULL,       "mcspi1_fck",   &mcspi1_fck,    CK_3XXX),
-       CLK(NULL,       "uart2_fck",    &uart2_fck,     CK_3XXX),
-       CLK(NULL,       "uart1_fck",    &uart1_fck,     CK_3XXX),
-       CLK(NULL,       "fshostusb_fck", &fshostusb_fck, CK_3430ES1),
-       CLK(NULL,       "core_12m_fck", &core_12m_fck,  CK_3XXX),
-       CLK("omap_hdq.0",       "fck",  &hdq_fck,       CK_3XXX),
-       CLK(NULL,       "hdq_fck",      &hdq_fck,       CK_3XXX),
-       CLK(NULL,       "ssi_ssr_fck",  &ssi_ssr_fck_3430es1,   CK_3430ES1),
-       CLK(NULL,       "ssi_ssr_fck",  &ssi_ssr_fck_3430es2,   CK_3430ES2PLUS | CK_36XX),
-       CLK(NULL,       "ssi_sst_fck",  &ssi_sst_fck_3430es1,   CK_3430ES1),
-       CLK(NULL,       "ssi_sst_fck",  &ssi_sst_fck_3430es2,   CK_3430ES2PLUS | CK_36XX),
-       CLK(NULL,       "core_l3_ick",  &core_l3_ick,   CK_3XXX),
-       CLK("musb-omap2430",    "ick",  &hsotgusb_ick_3430es1,  CK_3430ES1),
-       CLK("musb-omap2430",    "ick",  &hsotgusb_ick_3430es2,  CK_3430ES2PLUS | CK_36XX),
-       CLK(NULL,       "hsotgusb_ick", &hsotgusb_ick_3430es1,  CK_3430ES1),
-       CLK(NULL,       "hsotgusb_ick", &hsotgusb_ick_3430es2,  CK_3430ES2PLUS | CK_36XX),
-       CLK(NULL,       "sdrc_ick",     &sdrc_ick,      CK_3XXX),
-       CLK(NULL,       "gpmc_fck",     &gpmc_fck,      CK_3XXX),
-       CLK(NULL,       "security_l3_ick", &security_l3_ick, CK_34XX | CK_36XX),
-       CLK(NULL,       "pka_ick",      &pka_ick,       CK_34XX | CK_36XX),
-       CLK(NULL,       "core_l4_ick",  &core_l4_ick,   CK_3XXX),
-       CLK(NULL,       "usbtll_ick",   &usbtll_ick,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK("usbhs_omap",       "usbtll_ick",   &usbtll_ick,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK("usbhs_tll",        "usbtll_ick",   &usbtll_ick,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK("omap_hsmmc.2",     "ick",  &mmchs3_ick,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "mmchs3_ick",   &mmchs3_ick,    CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "icr_ick",      &icr_ick,       CK_34XX | CK_36XX),
-       CLK("omap-aes", "ick",  &aes2_ick,      CK_34XX | CK_36XX),
-       CLK("omap-sham",        "ick",  &sha12_ick,     CK_34XX | CK_36XX),
-       CLK(NULL,       "des2_ick",     &des2_ick,      CK_34XX | CK_36XX),
-       CLK("omap_hsmmc.1",     "ick",  &mmchs2_ick,    CK_3XXX),
-       CLK("omap_hsmmc.0",     "ick",  &mmchs1_ick,    CK_3XXX),
-       CLK(NULL,       "mmchs2_ick",   &mmchs2_ick,    CK_3XXX),
-       CLK(NULL,       "mmchs1_ick",   &mmchs1_ick,    CK_3XXX),
-       CLK(NULL,       "mspro_ick",    &mspro_ick,     CK_34XX | CK_36XX),
-       CLK("omap_hdq.0", "ick",        &hdq_ick,       CK_3XXX),
-       CLK(NULL,       "hdq_ick",      &hdq_ick,       CK_3XXX),
-       CLK("omap2_mcspi.4", "ick",     &mcspi4_ick,    CK_3XXX),
-       CLK("omap2_mcspi.3", "ick",     &mcspi3_ick,    CK_3XXX),
-       CLK("omap2_mcspi.2", "ick",     &mcspi2_ick,    CK_3XXX),
-       CLK("omap2_mcspi.1", "ick",     &mcspi1_ick,    CK_3XXX),
-       CLK(NULL,       "mcspi4_ick",   &mcspi4_ick,    CK_3XXX),
-       CLK(NULL,       "mcspi3_ick",   &mcspi3_ick,    CK_3XXX),
-       CLK(NULL,       "mcspi2_ick",   &mcspi2_ick,    CK_3XXX),
-       CLK(NULL,       "mcspi1_ick",   &mcspi1_ick,    CK_3XXX),
-       CLK("omap_i2c.3", "ick",        &i2c3_ick,      CK_3XXX),
-       CLK("omap_i2c.2", "ick",        &i2c2_ick,      CK_3XXX),
-       CLK("omap_i2c.1", "ick",        &i2c1_ick,      CK_3XXX),
-       CLK(NULL,       "i2c3_ick",     &i2c3_ick,      CK_3XXX),
-       CLK(NULL,       "i2c2_ick",     &i2c2_ick,      CK_3XXX),
-       CLK(NULL,       "i2c1_ick",     &i2c1_ick,      CK_3XXX),
-       CLK(NULL,       "uart2_ick",    &uart2_ick,     CK_3XXX),
-       CLK(NULL,       "uart1_ick",    &uart1_ick,     CK_3XXX),
-       CLK(NULL,       "gpt11_ick",    &gpt11_ick,     CK_3XXX),
-       CLK(NULL,       "gpt10_ick",    &gpt10_ick,     CK_3XXX),
-       CLK("omap-mcbsp.5", "ick",      &mcbsp5_ick,    CK_3XXX),
-       CLK("omap-mcbsp.1", "ick",      &mcbsp1_ick,    CK_3XXX),
-       CLK(NULL,       "mcbsp5_ick",   &mcbsp5_ick,    CK_3XXX),
-       CLK(NULL,       "mcbsp1_ick",   &mcbsp1_ick,    CK_3XXX),
-       CLK(NULL,       "fac_ick",      &fac_ick,       CK_3430ES1),
-       CLK(NULL,       "mailboxes_ick", &mailboxes_ick, CK_34XX | CK_36XX),
-       CLK(NULL,       "omapctrl_ick", &omapctrl_ick,  CK_3XXX),
-       CLK(NULL,       "ssi_l4_ick",   &ssi_l4_ick,    CK_34XX | CK_36XX),
-       CLK(NULL,       "ssi_ick",      &ssi_ick_3430es1,       CK_3430ES1),
-       CLK(NULL,       "ssi_ick",      &ssi_ick_3430es2,       CK_3430ES2PLUS | CK_36XX),
-       CLK(NULL,       "usb_l4_ick",   &usb_l4_ick,    CK_3430ES1),
-       CLK(NULL,       "security_l4_ick2", &security_l4_ick2, CK_34XX | CK_36XX),
-       CLK(NULL,       "aes1_ick",     &aes1_ick,      CK_34XX | CK_36XX),
-       CLK("omap_rng", "ick",          &rng_ick,       CK_34XX | CK_36XX),
-       CLK(NULL,       "sha11_ick",    &sha11_ick,     CK_34XX | CK_36XX),
-       CLK(NULL,       "des1_ick",     &des1_ick,      CK_34XX | CK_36XX),
-       CLK(NULL,       "dss1_alwon_fck",               &dss1_alwon_fck_3430es1, CK_3430ES1),
-       CLK(NULL,       "dss1_alwon_fck",               &dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "dss_tv_fck",   &dss_tv_fck,    CK_3XXX),
-       CLK(NULL,       "dss_96m_fck",  &dss_96m_fck,   CK_3XXX),
-       CLK(NULL,       "dss2_alwon_fck",       &dss2_alwon_fck, CK_3XXX),
-       CLK("omapdss_dss",      "ick",          &dss_ick_3430es1,       CK_3430ES1),
-       CLK(NULL,       "dss_ick",              &dss_ick_3430es1,       CK_3430ES1),
-       CLK("omapdss_dss",      "ick",          &dss_ick_3430es2,       CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "dss_ick",              &dss_ick_3430es2,       CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "cam_mclk",     &cam_mclk,      CK_34XX | CK_36XX),
-       CLK(NULL,       "cam_ick",      &cam_ick,       CK_34XX | CK_36XX),
-       CLK(NULL,       "csi2_96m_fck", &csi2_96m_fck,  CK_34XX | CK_36XX),
-       CLK(NULL,       "usbhost_120m_fck", &usbhost_120m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "usbhost_48m_fck", &usbhost_48m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "usbhost_ick",  &usbhost_ick,   CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK("usbhs_omap",       "usbhost_ick",  &usbhost_ick,   CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-       CLK(NULL,       "utmi_p1_gfclk",        &dummy_ck,      CK_3XXX),
-       CLK(NULL,       "utmi_p2_gfclk",        &dummy_ck,      CK_3XXX),
-       CLK(NULL,       "xclk60mhsp1_ck",       &dummy_ck,      CK_3XXX),
-       CLK(NULL,       "xclk60mhsp2_ck",       &dummy_ck,      CK_3XXX),
-       CLK(NULL,       "usb_host_hs_utmi_p1_clk",      &dummy_ck,      CK_3XXX),
-       CLK(NULL,       "usb_host_hs_utmi_p2_clk",      &dummy_ck,      CK_3XXX),
-       CLK("usbhs_omap",       "usb_tll_hs_usb_ch0_clk",       &dummy_ck,      CK_3XXX),
-       CLK("usbhs_omap",       "usb_tll_hs_usb_ch1_clk",       &dummy_ck,      CK_3XXX),
-       CLK("usbhs_tll",        "usb_tll_hs_usb_ch0_clk",       &dummy_ck,      CK_3XXX),
-       CLK("usbhs_tll",        "usb_tll_hs_usb_ch1_clk",       &dummy_ck,      CK_3XXX),
-       CLK(NULL,       "init_60m_fclk",        &dummy_ck,      CK_3XXX),
-       CLK(NULL,       "usim_fck",     &usim_fck,      CK_3430ES2PLUS | CK_36XX),
-       CLK(NULL,       "gpt1_fck",     &gpt1_fck,      CK_3XXX),
-       CLK(NULL,       "wkup_32k_fck", &wkup_32k_fck,  CK_3XXX),
-       CLK(NULL,       "gpio1_dbck",   &gpio1_dbck,    CK_3XXX),
-       CLK(NULL,       "wdt2_fck",             &wdt2_fck,      CK_3XXX),
-       CLK(NULL,       "wkup_l4_ick",  &wkup_l4_ick,   CK_34XX | CK_36XX),
-       CLK(NULL,       "usim_ick",     &usim_ick,      CK_3430ES2PLUS | CK_36XX),
-       CLK("omap_wdt", "ick",          &wdt2_ick,      CK_3XXX),
-       CLK(NULL,       "wdt2_ick",     &wdt2_ick,      CK_3XXX),
-       CLK(NULL,       "wdt1_ick",     &wdt1_ick,      CK_3XXX),
-       CLK(NULL,       "gpio1_ick",    &gpio1_ick,     CK_3XXX),
-       CLK(NULL,       "omap_32ksync_ick", &omap_32ksync_ick, CK_3XXX),
-       CLK(NULL,       "gpt12_ick",    &gpt12_ick,     CK_3XXX),
-       CLK(NULL,       "gpt1_ick",     &gpt1_ick,      CK_3XXX),
-       CLK(NULL,       "per_96m_fck",  &per_96m_fck,   CK_3XXX),
-       CLK(NULL,       "per_48m_fck",  &per_48m_fck,   CK_3XXX),
-       CLK(NULL,       "uart3_fck",    &uart3_fck,     CK_3XXX),
-       CLK(NULL,       "uart4_fck",    &uart4_fck,     CK_36XX),
-       CLK(NULL,       "uart4_fck",    &uart4_fck_am35xx, CK_AM35XX),
-       CLK(NULL,       "gpt2_fck",     &gpt2_fck,      CK_3XXX),
-       CLK(NULL,       "gpt3_fck",     &gpt3_fck,      CK_3XXX),
-       CLK(NULL,       "gpt4_fck",     &gpt4_fck,      CK_3XXX),
-       CLK(NULL,       "gpt5_fck",     &gpt5_fck,      CK_3XXX),
-       CLK(NULL,       "gpt6_fck",     &gpt6_fck,      CK_3XXX),
-       CLK(NULL,       "gpt7_fck",     &gpt7_fck,      CK_3XXX),
-       CLK(NULL,       "gpt8_fck",     &gpt8_fck,      CK_3XXX),
-       CLK(NULL,       "gpt9_fck",     &gpt9_fck,      CK_3XXX),
-       CLK(NULL,       "per_32k_alwon_fck", &per_32k_alwon_fck, CK_3XXX),
-       CLK(NULL,       "gpio6_dbck",   &gpio6_dbck,    CK_3XXX),
-       CLK(NULL,       "gpio5_dbck",   &gpio5_dbck,    CK_3XXX),
-       CLK(NULL,       "gpio4_dbck",   &gpio4_dbck,    CK_3XXX),
-       CLK(NULL,       "gpio3_dbck",   &gpio3_dbck,    CK_3XXX),
-       CLK(NULL,       "gpio2_dbck",   &gpio2_dbck,    CK_3XXX),
-       CLK(NULL,       "wdt3_fck",     &wdt3_fck,      CK_3XXX),
-       CLK(NULL,       "per_l4_ick",   &per_l4_ick,    CK_3XXX),
-       CLK(NULL,       "gpio6_ick",    &gpio6_ick,     CK_3XXX),
-       CLK(NULL,       "gpio5_ick",    &gpio5_ick,     CK_3XXX),
-       CLK(NULL,       "gpio4_ick",    &gpio4_ick,     CK_3XXX),
-       CLK(NULL,       "gpio3_ick",    &gpio3_ick,     CK_3XXX),
-       CLK(NULL,       "gpio2_ick",    &gpio2_ick,     CK_3XXX),
-       CLK(NULL,       "wdt3_ick",     &wdt3_ick,      CK_3XXX),
-       CLK(NULL,       "uart3_ick",    &uart3_ick,     CK_3XXX),
-       CLK(NULL,       "uart4_ick",    &uart4_ick,     CK_36XX),
-       CLK(NULL,       "gpt9_ick",     &gpt9_ick,      CK_3XXX),
-       CLK(NULL,       "gpt8_ick",     &gpt8_ick,      CK_3XXX),
-       CLK(NULL,       "gpt7_ick",     &gpt7_ick,      CK_3XXX),
-       CLK(NULL,       "gpt6_ick",     &gpt6_ick,      CK_3XXX),
-       CLK(NULL,       "gpt5_ick",     &gpt5_ick,      CK_3XXX),
-       CLK(NULL,       "gpt4_ick",     &gpt4_ick,      CK_3XXX),
-       CLK(NULL,       "gpt3_ick",     &gpt3_ick,      CK_3XXX),
-       CLK(NULL,       "gpt2_ick",     &gpt2_ick,      CK_3XXX),
-       CLK("omap-mcbsp.2", "ick",      &mcbsp2_ick,    CK_3XXX),
-       CLK("omap-mcbsp.3", "ick",      &mcbsp3_ick,    CK_3XXX),
-       CLK("omap-mcbsp.4", "ick",      &mcbsp4_ick,    CK_3XXX),
-       CLK(NULL,       "mcbsp4_ick",   &mcbsp2_ick,    CK_3XXX),
-       CLK(NULL,       "mcbsp3_ick",   &mcbsp3_ick,    CK_3XXX),
-       CLK(NULL,       "mcbsp2_ick",   &mcbsp4_ick,    CK_3XXX),
-       CLK(NULL,       "mcbsp2_fck",   &mcbsp2_fck,    CK_3XXX),
-       CLK(NULL,       "mcbsp3_fck",   &mcbsp3_fck,    CK_3XXX),
-       CLK(NULL,       "mcbsp4_fck",   &mcbsp4_fck,    CK_3XXX),
-       CLK("etb",      "emu_src_ck",   &emu_src_ck,    CK_3XXX),
-       CLK(NULL,       "emu_src_ck",   &emu_src_ck,    CK_3XXX),
-       CLK(NULL,       "pclk_fck",     &pclk_fck,      CK_3XXX),
-       CLK(NULL,       "pclkx2_fck",   &pclkx2_fck,    CK_3XXX),
-       CLK(NULL,       "atclk_fck",    &atclk_fck,     CK_3XXX),
-       CLK(NULL,       "traceclk_src_fck", &traceclk_src_fck, CK_3XXX),
-       CLK(NULL,       "traceclk_fck", &traceclk_fck,  CK_3XXX),
-       CLK(NULL,       "sr1_fck",      &sr1_fck,       CK_34XX | CK_36XX),
-       CLK(NULL,       "sr2_fck",      &sr2_fck,       CK_34XX | CK_36XX),
-       CLK(NULL,       "sr_l4_ick",    &sr_l4_ick,     CK_34XX | CK_36XX),
-       CLK(NULL,       "secure_32k_fck", &secure_32k_fck, CK_3XXX),
-       CLK(NULL,       "gpt12_fck",    &gpt12_fck,     CK_3XXX),
-       CLK(NULL,       "wdt1_fck",     &wdt1_fck,      CK_3XXX),
-       CLK(NULL,       "ipss_ick",     &ipss_ick,      CK_AM35XX),
-       CLK(NULL,       "rmii_ck",      &rmii_ck,       CK_AM35XX),
-       CLK(NULL,       "pclk_ck",      &pclk_ck,       CK_AM35XX),
-       CLK(NULL,       "emac_ick",     &emac_ick,      CK_AM35XX),
-       CLK(NULL,       "emac_fck",     &emac_fck,      CK_AM35XX),
-       CLK("davinci_emac.0",   NULL,   &emac_ick,      CK_AM35XX),
-       CLK("davinci_mdio.0",   NULL,   &emac_fck,      CK_AM35XX),
-       CLK("vpfe-capture",     "master",       &vpfe_ick,      CK_AM35XX),
-       CLK("vpfe-capture",     "slave",        &vpfe_fck,      CK_AM35XX),
-       CLK(NULL,       "hsotgusb_ick",         &hsotgusb_ick_am35xx,   CK_AM35XX),
-       CLK(NULL,       "hsotgusb_fck",         &hsotgusb_fck_am35xx,   CK_AM35XX),
-       CLK(NULL,       "hecc_ck",      &hecc_ck,       CK_AM35XX),
-       CLK(NULL,       "uart4_ick",    &uart4_ick_am35xx,      CK_AM35XX),
-       CLK(NULL,       "timer_32k_ck", &omap_32k_fck,  CK_3XXX),
-       CLK(NULL,       "timer_sys_ck", &sys_ck,        CK_3XXX),
-       CLK(NULL,       "cpufreq_ck",   &dpll1_ck,      CK_3XXX),
+       CLK(NULL,       "apb_pclk",     &dummy_apb_pclk),
+       CLK(NULL,       "omap_32k_fck", &omap_32k_fck),
+       CLK(NULL,       "virt_12m_ck",  &virt_12m_ck),
+       CLK(NULL,       "virt_13m_ck",  &virt_13m_ck),
+       CLK(NULL,       "virt_19200000_ck", &virt_19200000_ck),
+       CLK(NULL,       "virt_26000000_ck", &virt_26000000_ck),
+       CLK(NULL,       "virt_38_4m_ck", &virt_38_4m_ck),
+       CLK(NULL,       "osc_sys_ck",   &osc_sys_ck),
+       CLK("twl",      "fck",          &osc_sys_ck),
+       CLK(NULL,       "sys_ck",       &sys_ck),
+       CLK(NULL,       "omap_96m_alwon_fck", &omap_96m_alwon_fck),
+       CLK("etb",      "emu_core_alwon_ck", &emu_core_alwon_ck),
+       CLK(NULL,       "sys_altclk",   &sys_altclk),
+       CLK(NULL,       "mcbsp_clks",   &mcbsp_clks),
+       CLK(NULL,       "sys_clkout1",  &sys_clkout1),
+       CLK(NULL,       "dpll1_ck",     &dpll1_ck),
+       CLK(NULL,       "dpll1_x2_ck",  &dpll1_x2_ck),
+       CLK(NULL,       "dpll1_x2m2_ck", &dpll1_x2m2_ck),
+       CLK(NULL,       "dpll3_ck",     &dpll3_ck),
+       CLK(NULL,       "core_ck",      &core_ck),
+       CLK(NULL,       "dpll3_x2_ck",  &dpll3_x2_ck),
+       CLK(NULL,       "dpll3_m2_ck",  &dpll3_m2_ck),
+       CLK(NULL,       "dpll3_m2x2_ck", &dpll3_m2x2_ck),
+       CLK(NULL,       "dpll3_m3_ck",  &dpll3_m3_ck),
+       CLK(NULL,       "dpll3_m3x2_ck", &dpll3_m3x2_ck),
+       CLK(NULL,       "dpll4_ck",     &dpll4_ck),
+       CLK(NULL,       "dpll4_x2_ck",  &dpll4_x2_ck),
+       CLK(NULL,       "omap_96m_fck", &omap_96m_fck),
+       CLK(NULL,       "cm_96m_fck",   &cm_96m_fck),
+       CLK(NULL,       "omap_54m_fck", &omap_54m_fck),
+       CLK(NULL,       "omap_48m_fck", &omap_48m_fck),
+       CLK(NULL,       "omap_12m_fck", &omap_12m_fck),
+       CLK(NULL,       "dpll4_m2_ck",  &dpll4_m2_ck),
+       CLK(NULL,       "dpll4_m2x2_ck", &dpll4_m2x2_ck),
+       CLK(NULL,       "dpll4_m3_ck",  &dpll4_m3_ck),
+       CLK(NULL,       "dpll4_m3x2_ck", &dpll4_m3x2_ck),
+       CLK(NULL,       "dpll4_m4_ck",  &dpll4_m4_ck),
+       CLK(NULL,       "dpll4_m4x2_ck", &dpll4_m4x2_ck),
+       CLK(NULL,       "dpll4_m5_ck",  &dpll4_m5_ck),
+       CLK(NULL,       "dpll4_m5x2_ck", &dpll4_m5x2_ck),
+       CLK(NULL,       "dpll4_m6_ck",  &dpll4_m6_ck),
+       CLK(NULL,       "dpll4_m6x2_ck", &dpll4_m6x2_ck),
+       CLK("etb",      "emu_per_alwon_ck", &emu_per_alwon_ck),
+       CLK(NULL,       "clkout2_src_ck", &clkout2_src_ck),
+       CLK(NULL,       "sys_clkout2",  &sys_clkout2),
+       CLK(NULL,       "corex2_fck",   &corex2_fck),
+       CLK(NULL,       "dpll1_fck",    &dpll1_fck),
+       CLK(NULL,       "mpu_ck",       &mpu_ck),
+       CLK(NULL,       "arm_fck",      &arm_fck),
+       CLK("etb",      "emu_mpu_alwon_ck", &emu_mpu_alwon_ck),
+       CLK(NULL,       "l3_ick",       &l3_ick),
+       CLK(NULL,       "l4_ick",       &l4_ick),
+       CLK(NULL,       "rm_ick",       &rm_ick),
+       CLK(NULL,       "gpt10_fck",    &gpt10_fck),
+       CLK(NULL,       "gpt11_fck",    &gpt11_fck),
+       CLK(NULL,       "core_96m_fck", &core_96m_fck),
+       CLK(NULL,       "mmchs2_fck",   &mmchs2_fck),
+       CLK(NULL,       "mmchs1_fck",   &mmchs1_fck),
+       CLK(NULL,       "i2c3_fck",     &i2c3_fck),
+       CLK(NULL,       "i2c2_fck",     &i2c2_fck),
+       CLK(NULL,       "i2c1_fck",     &i2c1_fck),
+       CLK(NULL,       "mcbsp5_fck",   &mcbsp5_fck),
+       CLK(NULL,       "mcbsp1_fck",   &mcbsp1_fck),
+       CLK(NULL,       "core_48m_fck", &core_48m_fck),
+       CLK(NULL,       "mcspi4_fck",   &mcspi4_fck),
+       CLK(NULL,       "mcspi3_fck",   &mcspi3_fck),
+       CLK(NULL,       "mcspi2_fck",   &mcspi2_fck),
+       CLK(NULL,       "mcspi1_fck",   &mcspi1_fck),
+       CLK(NULL,       "uart2_fck",    &uart2_fck),
+       CLK(NULL,       "uart1_fck",    &uart1_fck),
+       CLK(NULL,       "core_12m_fck", &core_12m_fck),
+       CLK("omap_hdq.0",       "fck",  &hdq_fck),
+       CLK(NULL,       "hdq_fck",      &hdq_fck),
+       CLK(NULL,       "core_l3_ick",  &core_l3_ick),
+       CLK(NULL,       "sdrc_ick",     &sdrc_ick),
+       CLK(NULL,       "gpmc_fck",     &gpmc_fck),
+       CLK(NULL,       "core_l4_ick",  &core_l4_ick),
+       CLK("omap_hsmmc.1",     "ick",  &mmchs2_ick),
+       CLK("omap_hsmmc.0",     "ick",  &mmchs1_ick),
+       CLK(NULL,       "mmchs2_ick",   &mmchs2_ick),
+       CLK(NULL,       "mmchs1_ick",   &mmchs1_ick),
+       CLK("omap_hdq.0", "ick",        &hdq_ick),
+       CLK(NULL,       "hdq_ick",      &hdq_ick),
+       CLK("omap2_mcspi.4", "ick",     &mcspi4_ick),
+       CLK("omap2_mcspi.3", "ick",     &mcspi3_ick),
+       CLK("omap2_mcspi.2", "ick",     &mcspi2_ick),
+       CLK("omap2_mcspi.1", "ick",     &mcspi1_ick),
+       CLK(NULL,       "mcspi4_ick",   &mcspi4_ick),
+       CLK(NULL,       "mcspi3_ick",   &mcspi3_ick),
+       CLK(NULL,       "mcspi2_ick",   &mcspi2_ick),
+       CLK(NULL,       "mcspi1_ick",   &mcspi1_ick),
+       CLK("omap_i2c.3", "ick",        &i2c3_ick),
+       CLK("omap_i2c.2", "ick",        &i2c2_ick),
+       CLK("omap_i2c.1", "ick",        &i2c1_ick),
+       CLK(NULL,       "i2c3_ick",     &i2c3_ick),
+       CLK(NULL,       "i2c2_ick",     &i2c2_ick),
+       CLK(NULL,       "i2c1_ick",     &i2c1_ick),
+       CLK(NULL,       "uart2_ick",    &uart2_ick),
+       CLK(NULL,       "uart1_ick",    &uart1_ick),
+       CLK(NULL,       "gpt11_ick",    &gpt11_ick),
+       CLK(NULL,       "gpt10_ick",    &gpt10_ick),
+       CLK("omap-mcbsp.5", "ick",      &mcbsp5_ick),
+       CLK("omap-mcbsp.1", "ick",      &mcbsp1_ick),
+       CLK(NULL,       "mcbsp5_ick",   &mcbsp5_ick),
+       CLK(NULL,       "mcbsp1_ick",   &mcbsp1_ick),
+       CLK(NULL,       "omapctrl_ick", &omapctrl_ick),
+       CLK(NULL,       "dss_tv_fck",   &dss_tv_fck),
+       CLK(NULL,       "dss_96m_fck",  &dss_96m_fck),
+       CLK(NULL,       "dss2_alwon_fck",       &dss2_alwon_fck),
+       CLK(NULL,       "utmi_p1_gfclk",        &dummy_ck),
+       CLK(NULL,       "utmi_p2_gfclk",        &dummy_ck),
+       CLK(NULL,       "xclk60mhsp1_ck",       &dummy_ck),
+       CLK(NULL,       "xclk60mhsp2_ck",       &dummy_ck),
+       CLK(NULL,       "usb_host_hs_utmi_p1_clk",      &dummy_ck),
+       CLK(NULL,       "usb_host_hs_utmi_p2_clk",      &dummy_ck),
+       CLK("usbhs_omap",       "usb_tll_hs_usb_ch0_clk",       &dummy_ck),
+       CLK("usbhs_omap",       "usb_tll_hs_usb_ch1_clk",       &dummy_ck),
+       CLK("usbhs_tll",        "usb_tll_hs_usb_ch0_clk",       &dummy_ck),
+       CLK("usbhs_tll",        "usb_tll_hs_usb_ch1_clk",       &dummy_ck),
+       CLK(NULL,       "init_60m_fclk",        &dummy_ck),
+       CLK(NULL,       "gpt1_fck",     &gpt1_fck),
+       CLK(NULL,       "aes2_ick",     &aes2_ick),
+       CLK(NULL,       "wkup_32k_fck", &wkup_32k_fck),
+       CLK(NULL,       "gpio1_dbck",   &gpio1_dbck),
+       CLK(NULL,       "sha12_ick",    &sha12_ick),
+       CLK(NULL,       "wdt2_fck",             &wdt2_fck),
+       CLK("omap_wdt", "ick",          &wdt2_ick),
+       CLK(NULL,       "wdt2_ick",     &wdt2_ick),
+       CLK(NULL,       "wdt1_ick",     &wdt1_ick),
+       CLK(NULL,       "gpio1_ick",    &gpio1_ick),
+       CLK(NULL,       "omap_32ksync_ick", &omap_32ksync_ick),
+       CLK(NULL,       "gpt12_ick",    &gpt12_ick),
+       CLK(NULL,       "gpt1_ick",     &gpt1_ick),
+       CLK(NULL,       "per_96m_fck",  &per_96m_fck),
+       CLK(NULL,       "per_48m_fck",  &per_48m_fck),
+       CLK(NULL,       "uart3_fck",    &uart3_fck),
+       CLK(NULL,       "gpt2_fck",     &gpt2_fck),
+       CLK(NULL,       "gpt3_fck",     &gpt3_fck),
+       CLK(NULL,       "gpt4_fck",     &gpt4_fck),
+       CLK(NULL,       "gpt5_fck",     &gpt5_fck),
+       CLK(NULL,       "gpt6_fck",     &gpt6_fck),
+       CLK(NULL,       "gpt7_fck",     &gpt7_fck),
+       CLK(NULL,       "gpt8_fck",     &gpt8_fck),
+       CLK(NULL,       "gpt9_fck",     &gpt9_fck),
+       CLK(NULL,       "per_32k_alwon_fck", &per_32k_alwon_fck),
+       CLK(NULL,       "gpio6_dbck",   &gpio6_dbck),
+       CLK(NULL,       "gpio5_dbck",   &gpio5_dbck),
+       CLK(NULL,       "gpio4_dbck",   &gpio4_dbck),
+       CLK(NULL,       "gpio3_dbck",   &gpio3_dbck),
+       CLK(NULL,       "gpio2_dbck",   &gpio2_dbck),
+       CLK(NULL,       "wdt3_fck",     &wdt3_fck),
+       CLK(NULL,       "per_l4_ick",   &per_l4_ick),
+       CLK(NULL,       "gpio6_ick",    &gpio6_ick),
+       CLK(NULL,       "gpio5_ick",    &gpio5_ick),
+       CLK(NULL,       "gpio4_ick",    &gpio4_ick),
+       CLK(NULL,       "gpio3_ick",    &gpio3_ick),
+       CLK(NULL,       "gpio2_ick",    &gpio2_ick),
+       CLK(NULL,       "wdt3_ick",     &wdt3_ick),
+       CLK(NULL,       "uart3_ick",    &uart3_ick),
+       CLK(NULL,       "uart4_ick",    &uart4_ick),
+       CLK(NULL,       "gpt9_ick",     &gpt9_ick),
+       CLK(NULL,       "gpt8_ick",     &gpt8_ick),
+       CLK(NULL,       "gpt7_ick",     &gpt7_ick),
+       CLK(NULL,       "gpt6_ick",     &gpt6_ick),
+       CLK(NULL,       "gpt5_ick",     &gpt5_ick),
+       CLK(NULL,       "gpt4_ick",     &gpt4_ick),
+       CLK(NULL,       "gpt3_ick",     &gpt3_ick),
+       CLK(NULL,       "gpt2_ick",     &gpt2_ick),
+       CLK("omap-mcbsp.2", "ick",      &mcbsp2_ick),
+       CLK("omap-mcbsp.3", "ick",      &mcbsp3_ick),
+       CLK("omap-mcbsp.4", "ick",      &mcbsp4_ick),
+       CLK(NULL,       "mcbsp4_ick",   &mcbsp2_ick),
+       CLK(NULL,       "mcbsp3_ick",   &mcbsp3_ick),
+       CLK(NULL,       "mcbsp2_ick",   &mcbsp4_ick),
+       CLK(NULL,       "mcbsp2_fck",   &mcbsp2_fck),
+       CLK(NULL,       "mcbsp3_fck",   &mcbsp3_fck),
+       CLK(NULL,       "mcbsp4_fck",   &mcbsp4_fck),
+       CLK("etb",      "emu_src_ck",   &emu_src_ck),
+       CLK(NULL,       "emu_src_ck",   &emu_src_ck),
+       CLK(NULL,       "pclk_fck",     &pclk_fck),
+       CLK(NULL,       "pclkx2_fck",   &pclkx2_fck),
+       CLK(NULL,       "atclk_fck",    &atclk_fck),
+       CLK(NULL,       "traceclk_src_fck", &traceclk_src_fck),
+       CLK(NULL,       "traceclk_fck", &traceclk_fck),
+       CLK(NULL,       "secure_32k_fck", &secure_32k_fck),
+       CLK(NULL,       "gpt12_fck",    &gpt12_fck),
+       CLK(NULL,       "wdt1_fck",     &wdt1_fck),
+       CLK(NULL,       "timer_32k_ck", &omap_32k_fck),
+       CLK(NULL,       "timer_sys_ck", &sys_ck),
+       CLK(NULL,       "cpufreq_ck",   &dpll1_ck),
 };
 
 static const char *enable_init_clks[] = {
@@ -3512,8 +3550,27 @@ static const char *enable_init_clks[] = {
 
 int __init omap3xxx_clk_init(void)
 {
-       struct omap_clk *c;
-       u32 cpu_clkflg = 0;
+       if (omap3_has_192mhz_clk())
+               omap_96m_alwon_fck = omap_96m_alwon_fck_3630;
+
+       if (cpu_is_omap3630()) {
+               dpll3_m3x2_ck = dpll3_m3x2_ck_3630;
+               dpll4_m2x2_ck = dpll4_m2x2_ck_3630;
+               dpll4_m3x2_ck = dpll4_m3x2_ck_3630;
+               dpll4_m4x2_ck = dpll4_m4x2_ck_3630;
+               dpll4_m5x2_ck = dpll4_m5x2_ck_3630;
+               dpll4_m6x2_ck = dpll4_m6x2_ck_3630;
+       }
+
+       /*
+        * XXX This type of dynamic rewriting of the clock tree is
+        * deprecated and should be revised soon.
+        */
+       if (cpu_is_omap3630())
+               dpll4_dd = dpll4_dd_3630;
+       else
+               dpll4_dd = dpll4_dd_34xx;
+
 
        /*
         * 3505 must be tested before 3517, since 3517 returns true
@@ -3523,13 +3580,20 @@ int __init omap3xxx_clk_init(void)
         */
        if (soc_is_am35xx()) {
                cpu_mask = RATE_IN_34XX;
-               cpu_clkflg = CK_AM35XX;
+               omap_clocks_register(am35xx_clks, ARRAY_SIZE(am35xx_clks));
+               omap_clocks_register(omap36xx_am35xx_omap3430es2plus_clks,
+                                    ARRAY_SIZE(omap36xx_am35xx_omap3430es2plus_clks));
+               omap_clocks_register(omap3xxx_clks, ARRAY_SIZE(omap3xxx_clks));
        } else if (cpu_is_omap3630()) {
                cpu_mask = (RATE_IN_34XX | RATE_IN_36XX);
-               cpu_clkflg = CK_36XX;
-       } else if (cpu_is_ti816x()) {
-               cpu_mask = RATE_IN_TI816X;
-               cpu_clkflg = CK_TI816X;
+               omap_clocks_register(omap36xx_clks, ARRAY_SIZE(omap36xx_clks));
+               omap_clocks_register(omap36xx_omap3430es2plus_clks,
+                                    ARRAY_SIZE(omap36xx_omap3430es2plus_clks));
+               omap_clocks_register(omap34xx_omap36xx_clks,
+                                    ARRAY_SIZE(omap34xx_omap36xx_clks));
+               omap_clocks_register(omap36xx_am35xx_omap3430es2plus_clks,
+                                    ARRAY_SIZE(omap36xx_am35xx_omap3430es2plus_clks));
+               omap_clocks_register(omap3xxx_clks, ARRAY_SIZE(omap3xxx_clks));
        } else if (soc_is_am33xx()) {
                cpu_mask = RATE_IN_AM33XX;
        } else if (cpu_is_ti814x()) {
@@ -3537,49 +3601,32 @@ int __init omap3xxx_clk_init(void)
        } else if (cpu_is_omap34xx()) {
                if (omap_rev() == OMAP3430_REV_ES1_0) {
                        cpu_mask = RATE_IN_3430ES1;
-                       cpu_clkflg = CK_3430ES1;
+                       omap_clocks_register(omap3430es1_clks,
+                                            ARRAY_SIZE(omap3430es1_clks));
+                       omap_clocks_register(omap34xx_omap36xx_clks,
+                                            ARRAY_SIZE(omap34xx_omap36xx_clks));
+                       omap_clocks_register(omap3xxx_clks,
+                                            ARRAY_SIZE(omap3xxx_clks));
                } else {
                        /*
                         * Assume that anything that we haven't matched yet
                         * has 3430ES2-type clocks.
                         */
                        cpu_mask = RATE_IN_3430ES2PLUS;
-                       cpu_clkflg = CK_3430ES2PLUS;
+                       omap_clocks_register(omap34xx_omap36xx_clks,
+                                            ARRAY_SIZE(omap34xx_omap36xx_clks));
+                       omap_clocks_register(omap36xx_omap3430es2plus_clks,
+                                            ARRAY_SIZE(omap36xx_omap3430es2plus_clks));
+                       omap_clocks_register(omap36xx_am35xx_omap3430es2plus_clks,
+                                            ARRAY_SIZE(omap36xx_am35xx_omap3430es2plus_clks));
+                       omap_clocks_register(omap3xxx_clks,
+                                            ARRAY_SIZE(omap3xxx_clks));
                }
        } else {
                WARN(1, "clock: could not identify OMAP3 variant\n");
        }
 
-       if (omap3_has_192mhz_clk())
-               omap_96m_alwon_fck = omap_96m_alwon_fck_3630;
-
-       if (cpu_is_omap3630()) {
-               dpll3_m3x2_ck = dpll3_m3x2_ck_3630;
-               dpll4_m2x2_ck = dpll4_m2x2_ck_3630;
-               dpll4_m3x2_ck = dpll4_m3x2_ck_3630;
-               dpll4_m4x2_ck = dpll4_m4x2_ck_3630;
-               dpll4_m5x2_ck = dpll4_m5x2_ck_3630;
-               dpll4_m6x2_ck = dpll4_m6x2_ck_3630;
-       }
-
-       /*
-        * XXX This type of dynamic rewriting of the clock tree is
-        * deprecated and should be revised soon.
-        */
-       if (cpu_is_omap3630())
-               dpll4_dd = dpll4_dd_3630;
-       else
-               dpll4_dd = dpll4_dd_34xx;
-
-       for (c = omap3xxx_clks; c < omap3xxx_clks + ARRAY_SIZE(omap3xxx_clks);
-            c++)
-               if (c->cpu & cpu_clkflg) {
-                       clkdev_add(&c->lk);
-                       if (!__clk_init(NULL, c->lk.clk))
-                               omap2_init_clk_hw_omap_clocks(c->lk.clk);
-               }
-
-       omap2_clk_disable_autoidle_all();
+               omap2_clk_disable_autoidle_all();
 
        omap2_clk_enable_init_clocks(enable_init_clks,
                                     ARRAY_SIZE(enable_init_clks));
index 0c6834ae1fc43a8ab20409dccd1bb24d7eeb20fd..88e37a474334df7589fc866bbf37fbd645258b00 100644 (file)
@@ -1424,284 +1424,285 @@ DEFINE_CLK_MUX(auxclkreq5_ck, auxclkreq_ck_parents, NULL, 0x0,
               0x0, NULL);
 
 /*
- * clkdev
+ * clocks specific to omap4460
  */
+static struct omap_clk omap446x_clks[] = {
+       CLK(NULL,       "div_ts_ck",                    &div_ts_ck),
+       CLK(NULL,       "bandgap_ts_fclk",              &bandgap_ts_fclk),
+};
+
+/*
+ * clocks specific to omap4430
+ */
+static struct omap_clk omap443x_clks[] = {
+       CLK(NULL,       "bandgap_fclk",                 &bandgap_fclk),
+};
 
+/*
+ * clocks common to omap44xx
+ */
 static struct omap_clk omap44xx_clks[] = {
-       CLK(NULL,       "extalt_clkin_ck",              &extalt_clkin_ck,       CK_443X),
-       CLK(NULL,       "pad_clks_src_ck",              &pad_clks_src_ck,       CK_443X),
-       CLK(NULL,       "pad_clks_ck",                  &pad_clks_ck,   CK_443X),
-       CLK(NULL,       "pad_slimbus_core_clks_ck",     &pad_slimbus_core_clks_ck,      CK_443X),
-       CLK(NULL,       "secure_32k_clk_src_ck",        &secure_32k_clk_src_ck, CK_443X),
-       CLK(NULL,       "slimbus_src_clk",              &slimbus_src_clk,       CK_443X),
-       CLK(NULL,       "slimbus_clk",                  &slimbus_clk,   CK_443X),
-       CLK(NULL,       "sys_32k_ck",                   &sys_32k_ck,    CK_443X),
-       CLK(NULL,       "virt_12000000_ck",             &virt_12000000_ck,      CK_443X),
-       CLK(NULL,       "virt_13000000_ck",             &virt_13000000_ck,      CK_443X),
-       CLK(NULL,       "virt_16800000_ck",             &virt_16800000_ck,      CK_443X),
-       CLK(NULL,       "virt_19200000_ck",             &virt_19200000_ck,      CK_443X),
-       CLK(NULL,       "virt_26000000_ck",             &virt_26000000_ck,      CK_443X),
-       CLK(NULL,       "virt_27000000_ck",             &virt_27000000_ck,      CK_443X),
-       CLK(NULL,       "virt_38400000_ck",             &virt_38400000_ck,      CK_443X),
-       CLK(NULL,       "sys_clkin_ck",                 &sys_clkin_ck,  CK_443X),
-       CLK(NULL,       "tie_low_clock_ck",             &tie_low_clock_ck,      CK_443X),
-       CLK(NULL,       "utmi_phy_clkout_ck",           &utmi_phy_clkout_ck,    CK_443X),
-       CLK(NULL,       "xclk60mhsp1_ck",               &xclk60mhsp1_ck,        CK_443X),
-       CLK(NULL,       "xclk60mhsp2_ck",               &xclk60mhsp2_ck,        CK_443X),
-       CLK(NULL,       "xclk60motg_ck",                &xclk60motg_ck, CK_443X),
-       CLK(NULL,       "abe_dpll_bypass_clk_mux_ck",   &abe_dpll_bypass_clk_mux_ck,    CK_443X),
-       CLK(NULL,       "abe_dpll_refclk_mux_ck",       &abe_dpll_refclk_mux_ck,        CK_443X),
-       CLK(NULL,       "dpll_abe_ck",                  &dpll_abe_ck,   CK_443X),
-       CLK(NULL,       "dpll_abe_x2_ck",               &dpll_abe_x2_ck,        CK_443X),
-       CLK(NULL,       "dpll_abe_m2x2_ck",             &dpll_abe_m2x2_ck,      CK_443X),
-       CLK(NULL,       "abe_24m_fclk",                 &abe_24m_fclk,  CK_443X),
-       CLK(NULL,       "abe_clk",                      &abe_clk,       CK_443X),
-       CLK(NULL,       "aess_fclk",                    &aess_fclk,     CK_443X),
-       CLK(NULL,       "dpll_abe_m3x2_ck",             &dpll_abe_m3x2_ck,      CK_443X),
-       CLK(NULL,       "core_hsd_byp_clk_mux_ck",      &core_hsd_byp_clk_mux_ck,       CK_443X),
-       CLK(NULL,       "dpll_core_ck",                 &dpll_core_ck,  CK_443X),
-       CLK(NULL,       "dpll_core_x2_ck",              &dpll_core_x2_ck,       CK_443X),
-       CLK(NULL,       "dpll_core_m6x2_ck",            &dpll_core_m6x2_ck,     CK_443X),
-       CLK(NULL,       "dbgclk_mux_ck",                &dbgclk_mux_ck, CK_443X),
-       CLK(NULL,       "dpll_core_m2_ck",              &dpll_core_m2_ck,       CK_443X),
-       CLK(NULL,       "ddrphy_ck",                    &ddrphy_ck,     CK_443X),
-       CLK(NULL,       "dpll_core_m5x2_ck",            &dpll_core_m5x2_ck,     CK_443X),
-       CLK(NULL,       "div_core_ck",                  &div_core_ck,   CK_443X),
-       CLK(NULL,       "div_iva_hs_clk",               &div_iva_hs_clk,        CK_443X),
-       CLK(NULL,       "div_mpu_hs_clk",               &div_mpu_hs_clk,        CK_443X),
-       CLK(NULL,       "dpll_core_m4x2_ck",            &dpll_core_m4x2_ck,     CK_443X),
-       CLK(NULL,       "dll_clk_div_ck",               &dll_clk_div_ck,        CK_443X),
-       CLK(NULL,       "dpll_abe_m2_ck",               &dpll_abe_m2_ck,        CK_443X),
-       CLK(NULL,       "dpll_core_m3x2_ck",            &dpll_core_m3x2_ck,     CK_443X),
-       CLK(NULL,       "dpll_core_m7x2_ck",            &dpll_core_m7x2_ck,     CK_443X),
-       CLK(NULL,       "iva_hsd_byp_clk_mux_ck",       &iva_hsd_byp_clk_mux_ck,        CK_443X),
-       CLK(NULL,       "dpll_iva_ck",                  &dpll_iva_ck,   CK_443X),
-       CLK(NULL,       "dpll_iva_x2_ck",               &dpll_iva_x2_ck,        CK_443X),
-       CLK(NULL,       "dpll_iva_m4x2_ck",             &dpll_iva_m4x2_ck,      CK_443X),
-       CLK(NULL,       "dpll_iva_m5x2_ck",             &dpll_iva_m5x2_ck,      CK_443X),
-       CLK(NULL,       "dpll_mpu_ck",                  &dpll_mpu_ck,   CK_443X),
-       CLK(NULL,       "dpll_mpu_m2_ck",               &dpll_mpu_m2_ck,        CK_443X),
-       CLK(NULL,       "per_hs_clk_div_ck",            &per_hs_clk_div_ck,     CK_443X),
-       CLK(NULL,       "per_hsd_byp_clk_mux_ck",       &per_hsd_byp_clk_mux_ck,        CK_443X),
-       CLK(NULL,       "dpll_per_ck",                  &dpll_per_ck,   CK_443X),
-       CLK(NULL,       "dpll_per_m2_ck",               &dpll_per_m2_ck,        CK_443X),
-       CLK(NULL,       "dpll_per_x2_ck",               &dpll_per_x2_ck,        CK_443X),
-       CLK(NULL,       "dpll_per_m2x2_ck",             &dpll_per_m2x2_ck,      CK_443X),
-       CLK(NULL,       "dpll_per_m3x2_ck",             &dpll_per_m3x2_ck,      CK_443X),
-       CLK(NULL,       "dpll_per_m4x2_ck",             &dpll_per_m4x2_ck,      CK_443X),
-       CLK(NULL,       "dpll_per_m5x2_ck",             &dpll_per_m5x2_ck,      CK_443X),
-       CLK(NULL,       "dpll_per_m6x2_ck",             &dpll_per_m6x2_ck,      CK_443X),
-       CLK(NULL,       "dpll_per_m7x2_ck",             &dpll_per_m7x2_ck,      CK_443X),
-       CLK(NULL,       "usb_hs_clk_div_ck",            &usb_hs_clk_div_ck,     CK_443X),
-       CLK(NULL,       "dpll_usb_ck",                  &dpll_usb_ck,   CK_443X),
-       CLK(NULL,       "dpll_usb_clkdcoldo_ck",        &dpll_usb_clkdcoldo_ck, CK_443X),
-       CLK(NULL,       "dpll_usb_m2_ck",               &dpll_usb_m2_ck,        CK_443X),
-       CLK(NULL,       "ducati_clk_mux_ck",            &ducati_clk_mux_ck,     CK_443X),
-       CLK(NULL,       "func_12m_fclk",                &func_12m_fclk, CK_443X),
-       CLK(NULL,       "func_24m_clk",                 &func_24m_clk,  CK_443X),
-       CLK(NULL,       "func_24mc_fclk",               &func_24mc_fclk,        CK_443X),
-       CLK(NULL,       "func_48m_fclk",                &func_48m_fclk, CK_443X),
-       CLK(NULL,       "func_48mc_fclk",               &func_48mc_fclk,        CK_443X),
-       CLK(NULL,       "func_64m_fclk",                &func_64m_fclk, CK_443X),
-       CLK(NULL,       "func_96m_fclk",                &func_96m_fclk, CK_443X),
-       CLK(NULL,       "init_60m_fclk",                &init_60m_fclk, CK_443X),
-       CLK(NULL,       "l3_div_ck",                    &l3_div_ck,     CK_443X),
-       CLK(NULL,       "l4_div_ck",                    &l4_div_ck,     CK_443X),
-       CLK(NULL,       "lp_clk_div_ck",                &lp_clk_div_ck, CK_443X),
-       CLK(NULL,       "l4_wkup_clk_mux_ck",           &l4_wkup_clk_mux_ck,    CK_443X),
-       CLK("smp_twd",  NULL,                           &mpu_periphclk, CK_443X),
-       CLK(NULL,       "ocp_abe_iclk",                 &ocp_abe_iclk,  CK_443X),
-       CLK(NULL,       "per_abe_24m_fclk",             &per_abe_24m_fclk,      CK_443X),
-       CLK(NULL,       "per_abe_nc_fclk",              &per_abe_nc_fclk,       CK_443X),
-       CLK(NULL,       "syc_clk_div_ck",               &syc_clk_div_ck,        CK_443X),
-       CLK(NULL,       "aes1_fck",                     &aes1_fck,      CK_443X),
-       CLK(NULL,       "aes2_fck",                     &aes2_fck,      CK_443X),
-       CLK(NULL,       "bandgap_fclk",                 &bandgap_fclk,  CK_443X),
-       CLK(NULL,       "div_ts_ck",                    &div_ts_ck,     CK_446X),
-       CLK(NULL,       "bandgap_ts_fclk",              &bandgap_ts_fclk,       CK_446X),
-       CLK(NULL,       "dmic_sync_mux_ck",             &dmic_sync_mux_ck,      CK_443X),
-       CLK(NULL,       "func_dmic_abe_gfclk",                  &func_dmic_abe_gfclk,   CK_443X),
-       CLK(NULL,       "dss_sys_clk",                  &dss_sys_clk,   CK_443X),
-       CLK(NULL,       "dss_tv_clk",                   &dss_tv_clk,    CK_443X),
-       CLK(NULL,       "dss_dss_clk",                  &dss_dss_clk,   CK_443X),
-       CLK(NULL,       "dss_48mhz_clk",                &dss_48mhz_clk, CK_443X),
-       CLK(NULL,       "dss_fck",                      &dss_fck,       CK_443X),
-       CLK("omapdss_dss",      "ick",                  &dss_fck,       CK_443X),
-       CLK(NULL,       "fdif_fck",                     &fdif_fck,      CK_443X),
-       CLK(NULL,       "gpio1_dbclk",                  &gpio1_dbclk,   CK_443X),
-       CLK(NULL,       "gpio2_dbclk",                  &gpio2_dbclk,   CK_443X),
-       CLK(NULL,       "gpio3_dbclk",                  &gpio3_dbclk,   CK_443X),
-       CLK(NULL,       "gpio4_dbclk",                  &gpio4_dbclk,   CK_443X),
-       CLK(NULL,       "gpio5_dbclk",                  &gpio5_dbclk,   CK_443X),
-       CLK(NULL,       "gpio6_dbclk",                  &gpio6_dbclk,   CK_443X),
-       CLK(NULL,       "sgx_clk_mux",                  &sgx_clk_mux,   CK_443X),
-       CLK(NULL,       "hsi_fck",                      &hsi_fck,       CK_443X),
-       CLK(NULL,       "iss_ctrlclk",                  &iss_ctrlclk,   CK_443X),
-       CLK(NULL,       "mcasp_sync_mux_ck",            &mcasp_sync_mux_ck,     CK_443X),
-       CLK(NULL,       "func_mcasp_abe_gfclk",                 &func_mcasp_abe_gfclk,  CK_443X),
-       CLK(NULL,       "mcbsp1_sync_mux_ck",           &mcbsp1_sync_mux_ck,    CK_443X),
-       CLK(NULL,       "func_mcbsp1_gfclk",                    &func_mcbsp1_gfclk,     CK_443X),
-       CLK(NULL,       "mcbsp2_sync_mux_ck",           &mcbsp2_sync_mux_ck,    CK_443X),
-       CLK(NULL,       "func_mcbsp2_gfclk",                    &func_mcbsp2_gfclk,     CK_443X),
-       CLK(NULL,       "mcbsp3_sync_mux_ck",           &mcbsp3_sync_mux_ck,    CK_443X),
-       CLK(NULL,       "func_mcbsp3_gfclk",                    &func_mcbsp3_gfclk,     CK_443X),
-       CLK(NULL,       "mcbsp4_sync_mux_ck",           &mcbsp4_sync_mux_ck,    CK_443X),
-       CLK(NULL,       "per_mcbsp4_gfclk",                     &per_mcbsp4_gfclk,      CK_443X),
-       CLK(NULL,       "hsmmc1_fclk",                  &hsmmc1_fclk,   CK_443X),
-       CLK(NULL,       "hsmmc2_fclk",                  &hsmmc2_fclk,   CK_443X),
-       CLK(NULL,       "ocp2scp_usb_phy_phy_48m",      &ocp2scp_usb_phy_phy_48m,       CK_443X),
-       CLK(NULL,       "sha2md5_fck",                  &sha2md5_fck,   CK_443X),
-       CLK(NULL,       "slimbus1_fclk_1",              &slimbus1_fclk_1,       CK_443X),
-       CLK(NULL,       "slimbus1_fclk_0",              &slimbus1_fclk_0,       CK_443X),
-       CLK(NULL,       "slimbus1_fclk_2",              &slimbus1_fclk_2,       CK_443X),
-       CLK(NULL,       "slimbus1_slimbus_clk",         &slimbus1_slimbus_clk,  CK_443X),
-       CLK(NULL,       "slimbus2_fclk_1",              &slimbus2_fclk_1,       CK_443X),
-       CLK(NULL,       "slimbus2_fclk_0",              &slimbus2_fclk_0,       CK_443X),
-       CLK(NULL,       "slimbus2_slimbus_clk",         &slimbus2_slimbus_clk,  CK_443X),
-       CLK(NULL,       "smartreflex_core_fck",         &smartreflex_core_fck,  CK_443X),
-       CLK(NULL,       "smartreflex_iva_fck",          &smartreflex_iva_fck,   CK_443X),
-       CLK(NULL,       "smartreflex_mpu_fck",          &smartreflex_mpu_fck,   CK_443X),
-       CLK(NULL,       "dmt1_clk_mux",                 &dmt1_clk_mux,  CK_443X),
-       CLK(NULL,       "cm2_dm10_mux",                 &cm2_dm10_mux,  CK_443X),
-       CLK(NULL,       "cm2_dm11_mux",                 &cm2_dm11_mux,  CK_443X),
-       CLK(NULL,       "cm2_dm2_mux",                  &cm2_dm2_mux,   CK_443X),
-       CLK(NULL,       "cm2_dm3_mux",                  &cm2_dm3_mux,   CK_443X),
-       CLK(NULL,       "cm2_dm4_mux",                  &cm2_dm4_mux,   CK_443X),
-       CLK(NULL,       "timer5_sync_mux",              &timer5_sync_mux,       CK_443X),
-       CLK(NULL,       "timer6_sync_mux",                      &timer6_sync_mux,       CK_443X),
-       CLK(NULL,       "timer7_sync_mux",                      &timer7_sync_mux,       CK_443X),
-       CLK(NULL,       "timer8_sync_mux",                      &timer8_sync_mux,       CK_443X),
-       CLK(NULL,       "cm2_dm9_mux",                  &cm2_dm9_mux,   CK_443X),
-       CLK(NULL,       "usb_host_fs_fck",              &usb_host_fs_fck,       CK_443X),
-       CLK("usbhs_omap",       "fs_fck",               &usb_host_fs_fck,       CK_443X),
-       CLK(NULL,       "utmi_p1_gfclk",                &utmi_p1_gfclk, CK_443X),
-       CLK(NULL,       "usb_host_hs_utmi_p1_clk",      &usb_host_hs_utmi_p1_clk,       CK_443X),
-       CLK(NULL,       "utmi_p2_gfclk",                &utmi_p2_gfclk, CK_443X),
-       CLK(NULL,       "usb_host_hs_utmi_p2_clk",      &usb_host_hs_utmi_p2_clk,       CK_443X),
-       CLK(NULL,       "usb_host_hs_utmi_p3_clk",      &usb_host_hs_utmi_p3_clk,       CK_443X),
-       CLK(NULL,       "usb_host_hs_hsic480m_p1_clk",  &usb_host_hs_hsic480m_p1_clk,   CK_443X),
-       CLK(NULL,       "usb_host_hs_hsic60m_p1_clk",   &usb_host_hs_hsic60m_p1_clk,    CK_443X),
-       CLK(NULL,       "usb_host_hs_hsic60m_p2_clk",   &usb_host_hs_hsic60m_p2_clk,    CK_443X),
-       CLK(NULL,       "usb_host_hs_hsic480m_p2_clk",  &usb_host_hs_hsic480m_p2_clk,   CK_443X),
-       CLK(NULL,       "usb_host_hs_func48mclk",       &usb_host_hs_func48mclk,        CK_443X),
-       CLK(NULL,       "usb_host_hs_fck",              &usb_host_hs_fck,       CK_443X),
-       CLK("usbhs_omap",       "hs_fck",               &usb_host_hs_fck,       CK_443X),
-       CLK(NULL,       "otg_60m_gfclk",                &otg_60m_gfclk, CK_443X),
-       CLK(NULL,       "usb_otg_hs_xclk",              &usb_otg_hs_xclk,       CK_443X),
-       CLK(NULL,       "usb_otg_hs_ick",               &usb_otg_hs_ick,        CK_443X),
-       CLK("musb-omap2430",    "ick",                  &usb_otg_hs_ick,        CK_443X),
-       CLK(NULL,       "usb_phy_cm_clk32k",            &usb_phy_cm_clk32k,     CK_443X),
-       CLK(NULL,       "usb_tll_hs_usb_ch2_clk",       &usb_tll_hs_usb_ch2_clk,        CK_443X),
-       CLK(NULL,       "usb_tll_hs_usb_ch0_clk",       &usb_tll_hs_usb_ch0_clk,        CK_443X),
-       CLK(NULL,       "usb_tll_hs_usb_ch1_clk",       &usb_tll_hs_usb_ch1_clk,        CK_443X),
-       CLK(NULL,       "usb_tll_hs_ick",               &usb_tll_hs_ick,        CK_443X),
-       CLK("usbhs_omap",       "usbtll_ick",           &usb_tll_hs_ick,        CK_443X),
-       CLK("usbhs_tll",        "usbtll_ick",           &usb_tll_hs_ick,        CK_443X),
-       CLK(NULL,       "usim_ck",                      &usim_ck,       CK_443X),
-       CLK(NULL,       "usim_fclk",                    &usim_fclk,     CK_443X),
-       CLK(NULL,       "pmd_stm_clock_mux_ck",         &pmd_stm_clock_mux_ck,  CK_443X),
-       CLK(NULL,       "pmd_trace_clk_mux_ck",         &pmd_trace_clk_mux_ck,  CK_443X),
-       CLK(NULL,       "stm_clk_div_ck",               &stm_clk_div_ck,        CK_443X),
-       CLK(NULL,       "trace_clk_div_ck",             &trace_clk_div_ck,      CK_443X),
-       CLK(NULL,       "auxclk0_src_ck",               &auxclk0_src_ck,        CK_443X),
-       CLK(NULL,       "auxclk0_ck",                   &auxclk0_ck,    CK_443X),
-       CLK(NULL,       "auxclkreq0_ck",                &auxclkreq0_ck, CK_443X),
-       CLK(NULL,       "auxclk1_src_ck",               &auxclk1_src_ck,        CK_443X),
-       CLK(NULL,       "auxclk1_ck",                   &auxclk1_ck,    CK_443X),
-       CLK(NULL,       "auxclkreq1_ck",                &auxclkreq1_ck, CK_443X),
-       CLK(NULL,       "auxclk2_src_ck",               &auxclk2_src_ck,        CK_443X),
-       CLK(NULL,       "auxclk2_ck",                   &auxclk2_ck,    CK_443X),
-       CLK(NULL,       "auxclkreq2_ck",                &auxclkreq2_ck, CK_443X),
-       CLK(NULL,       "auxclk3_src_ck",               &auxclk3_src_ck,        CK_443X),
-       CLK(NULL,       "auxclk3_ck",                   &auxclk3_ck,    CK_443X),
-       CLK(NULL,       "auxclkreq3_ck",                &auxclkreq3_ck, CK_443X),
-       CLK(NULL,       "auxclk4_src_ck",               &auxclk4_src_ck,        CK_443X),
-       CLK(NULL,       "auxclk4_ck",                   &auxclk4_ck,    CK_443X),
-       CLK(NULL,       "auxclkreq4_ck",                &auxclkreq4_ck, CK_443X),
-       CLK(NULL,       "auxclk5_src_ck",               &auxclk5_src_ck,        CK_443X),
-       CLK(NULL,       "auxclk5_ck",                   &auxclk5_ck,    CK_443X),
-       CLK(NULL,       "auxclkreq5_ck",                &auxclkreq5_ck, CK_443X),
-       CLK("omap-gpmc",        "fck",                  &dummy_ck,      CK_443X),
-       CLK("omap_i2c.1",       "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap_i2c.2",       "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap_i2c.3",       "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap_i2c.4",       "ick",                  &dummy_ck,      CK_443X),
-       CLK(NULL,       "mailboxes_ick",                &dummy_ck,      CK_443X),
-       CLK("omap_hsmmc.0",     "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap_hsmmc.1",     "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap_hsmmc.2",     "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap_hsmmc.3",     "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap_hsmmc.4",     "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap-mcbsp.1",     "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap-mcbsp.2",     "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap-mcbsp.3",     "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap-mcbsp.4",     "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap2_mcspi.1",    "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap2_mcspi.2",    "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap2_mcspi.3",    "ick",                  &dummy_ck,      CK_443X),
-       CLK("omap2_mcspi.4",    "ick",                  &dummy_ck,      CK_443X),
-       CLK(NULL,       "uart1_ick",                    &dummy_ck,      CK_443X),
-       CLK(NULL,       "uart2_ick",                    &dummy_ck,      CK_443X),
-       CLK(NULL,       "uart3_ick",                    &dummy_ck,      CK_443X),
-       CLK(NULL,       "uart4_ick",                    &dummy_ck,      CK_443X),
-       CLK("usbhs_omap",       "usbhost_ick",          &dummy_ck,              CK_443X),
-       CLK("usbhs_omap",       "usbtll_fck",           &dummy_ck,      CK_443X),
-       CLK("usbhs_tll",        "usbtll_fck",           &dummy_ck,      CK_443X),
-       CLK("omap_wdt", "ick",                          &dummy_ck,      CK_443X),
-       CLK(NULL,       "timer_32k_ck", &sys_32k_ck,    CK_443X),
+       CLK(NULL,       "extalt_clkin_ck",              &extalt_clkin_ck),
+       CLK(NULL,       "pad_clks_src_ck",              &pad_clks_src_ck),
+       CLK(NULL,       "pad_clks_ck",                  &pad_clks_ck),
+       CLK(NULL,       "pad_slimbus_core_clks_ck",     &pad_slimbus_core_clks_ck),
+       CLK(NULL,       "secure_32k_clk_src_ck",        &secure_32k_clk_src_ck),
+       CLK(NULL,       "slimbus_src_clk",              &slimbus_src_clk),
+       CLK(NULL,       "slimbus_clk",                  &slimbus_clk),
+       CLK(NULL,       "sys_32k_ck",                   &sys_32k_ck),
+       CLK(NULL,       "virt_12000000_ck",             &virt_12000000_ck),
+       CLK(NULL,       "virt_13000000_ck",             &virt_13000000_ck),
+       CLK(NULL,       "virt_16800000_ck",             &virt_16800000_ck),
+       CLK(NULL,       "virt_19200000_ck",             &virt_19200000_ck),
+       CLK(NULL,       "virt_26000000_ck",             &virt_26000000_ck),
+       CLK(NULL,       "virt_27000000_ck",             &virt_27000000_ck),
+       CLK(NULL,       "virt_38400000_ck",             &virt_38400000_ck),
+       CLK(NULL,       "sys_clkin_ck",                 &sys_clkin_ck),
+       CLK(NULL,       "tie_low_clock_ck",             &tie_low_clock_ck),
+       CLK(NULL,       "utmi_phy_clkout_ck",           &utmi_phy_clkout_ck),
+       CLK(NULL,       "xclk60mhsp1_ck",               &xclk60mhsp1_ck),
+       CLK(NULL,       "xclk60mhsp2_ck",               &xclk60mhsp2_ck),
+       CLK(NULL,       "xclk60motg_ck",                &xclk60motg_ck),
+       CLK(NULL,       "abe_dpll_bypass_clk_mux_ck",   &abe_dpll_bypass_clk_mux_ck),
+       CLK(NULL,       "abe_dpll_refclk_mux_ck",       &abe_dpll_refclk_mux_ck),
+       CLK(NULL,       "dpll_abe_ck",                  &dpll_abe_ck),
+       CLK(NULL,       "dpll_abe_x2_ck",               &dpll_abe_x2_ck),
+       CLK(NULL,       "dpll_abe_m2x2_ck",             &dpll_abe_m2x2_ck),
+       CLK(NULL,       "abe_24m_fclk",                 &abe_24m_fclk),
+       CLK(NULL,       "abe_clk",                      &abe_clk),
+       CLK(NULL,       "aess_fclk",                    &aess_fclk),
+       CLK(NULL,       "dpll_abe_m3x2_ck",             &dpll_abe_m3x2_ck),
+       CLK(NULL,       "core_hsd_byp_clk_mux_ck",      &core_hsd_byp_clk_mux_ck),
+       CLK(NULL,       "dpll_core_ck",                 &dpll_core_ck),
+       CLK(NULL,       "dpll_core_x2_ck",              &dpll_core_x2_ck),
+       CLK(NULL,       "dpll_core_m6x2_ck",            &dpll_core_m6x2_ck),
+       CLK(NULL,       "dbgclk_mux_ck",                &dbgclk_mux_ck),
+       CLK(NULL,       "dpll_core_m2_ck",              &dpll_core_m2_ck),
+       CLK(NULL,       "ddrphy_ck",                    &ddrphy_ck),
+       CLK(NULL,       "dpll_core_m5x2_ck",            &dpll_core_m5x2_ck),
+       CLK(NULL,       "div_core_ck",                  &div_core_ck),
+       CLK(NULL,       "div_iva_hs_clk",               &div_iva_hs_clk),
+       CLK(NULL,       "div_mpu_hs_clk",               &div_mpu_hs_clk),
+       CLK(NULL,       "dpll_core_m4x2_ck",            &dpll_core_m4x2_ck),
+       CLK(NULL,       "dll_clk_div_ck",               &dll_clk_div_ck),
+       CLK(NULL,       "dpll_abe_m2_ck",               &dpll_abe_m2_ck),
+       CLK(NULL,       "dpll_core_m3x2_ck",            &dpll_core_m3x2_ck),
+       CLK(NULL,       "dpll_core_m7x2_ck",            &dpll_core_m7x2_ck),
+       CLK(NULL,       "iva_hsd_byp_clk_mux_ck",       &iva_hsd_byp_clk_mux_ck),
+       CLK(NULL,       "dpll_iva_ck",                  &dpll_iva_ck),
+       CLK(NULL,       "dpll_iva_x2_ck",               &dpll_iva_x2_ck),
+       CLK(NULL,       "dpll_iva_m4x2_ck",             &dpll_iva_m4x2_ck),
+       CLK(NULL,       "dpll_iva_m5x2_ck",             &dpll_iva_m5x2_ck),
+       CLK(NULL,       "dpll_mpu_ck",                  &dpll_mpu_ck),
+       CLK(NULL,       "dpll_mpu_m2_ck",               &dpll_mpu_m2_ck),
+       CLK(NULL,       "per_hs_clk_div_ck",            &per_hs_clk_div_ck),
+       CLK(NULL,       "per_hsd_byp_clk_mux_ck",       &per_hsd_byp_clk_mux_ck),
+       CLK(NULL,       "dpll_per_ck",                  &dpll_per_ck),
+       CLK(NULL,       "dpll_per_m2_ck",               &dpll_per_m2_ck),
+       CLK(NULL,       "dpll_per_x2_ck",               &dpll_per_x2_ck),
+       CLK(NULL,       "dpll_per_m2x2_ck",             &dpll_per_m2x2_ck),
+       CLK(NULL,       "dpll_per_m3x2_ck",             &dpll_per_m3x2_ck),
+       CLK(NULL,       "dpll_per_m4x2_ck",             &dpll_per_m4x2_ck),
+       CLK(NULL,       "dpll_per_m5x2_ck",             &dpll_per_m5x2_ck),
+       CLK(NULL,       "dpll_per_m6x2_ck",             &dpll_per_m6x2_ck),
+       CLK(NULL,       "dpll_per_m7x2_ck",             &dpll_per_m7x2_ck),
+       CLK(NULL,       "usb_hs_clk_div_ck",            &usb_hs_clk_div_ck),
+       CLK(NULL,       "dpll_usb_ck",                  &dpll_usb_ck),
+       CLK(NULL,       "dpll_usb_clkdcoldo_ck",        &dpll_usb_clkdcoldo_ck),
+       CLK(NULL,       "dpll_usb_m2_ck",               &dpll_usb_m2_ck),
+       CLK(NULL,       "ducati_clk_mux_ck",            &ducati_clk_mux_ck),
+       CLK(NULL,       "func_12m_fclk",                &func_12m_fclk),
+       CLK(NULL,       "func_24m_clk",                 &func_24m_clk),
+       CLK(NULL,       "func_24mc_fclk",               &func_24mc_fclk),
+       CLK(NULL,       "func_48m_fclk",                &func_48m_fclk),
+       CLK(NULL,       "func_48mc_fclk",               &func_48mc_fclk),
+       CLK(NULL,       "func_64m_fclk",                &func_64m_fclk),
+       CLK(NULL,       "func_96m_fclk",                &func_96m_fclk),
+       CLK(NULL,       "init_60m_fclk",                &init_60m_fclk),
+       CLK(NULL,       "l3_div_ck",                    &l3_div_ck),
+       CLK(NULL,       "l4_div_ck",                    &l4_div_ck),
+       CLK(NULL,       "lp_clk_div_ck",                &lp_clk_div_ck),
+       CLK(NULL,       "l4_wkup_clk_mux_ck",           &l4_wkup_clk_mux_ck),
+       CLK("smp_twd",  NULL,                           &mpu_periphclk),
+       CLK(NULL,       "ocp_abe_iclk",                 &ocp_abe_iclk),
+       CLK(NULL,       "per_abe_24m_fclk",             &per_abe_24m_fclk),
+       CLK(NULL,       "per_abe_nc_fclk",              &per_abe_nc_fclk),
+       CLK(NULL,       "syc_clk_div_ck",               &syc_clk_div_ck),
+       CLK(NULL,       "aes1_fck",                     &aes1_fck),
+       CLK(NULL,       "aes2_fck",                     &aes2_fck),
+       CLK(NULL,       "dmic_sync_mux_ck",             &dmic_sync_mux_ck),
+       CLK(NULL,       "func_dmic_abe_gfclk",          &func_dmic_abe_gfclk),
+       CLK(NULL,       "dss_sys_clk",                  &dss_sys_clk),
+       CLK(NULL,       "dss_tv_clk",                   &dss_tv_clk),
+       CLK(NULL,       "dss_dss_clk",                  &dss_dss_clk),
+       CLK(NULL,       "dss_48mhz_clk",                &dss_48mhz_clk),
+       CLK(NULL,       "dss_fck",                      &dss_fck),
+       CLK("omapdss_dss",      "ick",                  &dss_fck),
+       CLK(NULL,       "fdif_fck",                     &fdif_fck),
+       CLK(NULL,       "gpio1_dbclk",                  &gpio1_dbclk),
+       CLK(NULL,       "gpio2_dbclk",                  &gpio2_dbclk),
+       CLK(NULL,       "gpio3_dbclk",                  &gpio3_dbclk),
+       CLK(NULL,       "gpio4_dbclk",                  &gpio4_dbclk),
+       CLK(NULL,       "gpio5_dbclk",                  &gpio5_dbclk),
+       CLK(NULL,       "gpio6_dbclk",                  &gpio6_dbclk),
+       CLK(NULL,       "sgx_clk_mux",                  &sgx_clk_mux),
+       CLK(NULL,       "hsi_fck",                      &hsi_fck),
+       CLK(NULL,       "iss_ctrlclk",                  &iss_ctrlclk),
+       CLK(NULL,       "mcasp_sync_mux_ck",            &mcasp_sync_mux_ck),
+       CLK(NULL,       "func_mcasp_abe_gfclk",         &func_mcasp_abe_gfclk),
+       CLK(NULL,       "mcbsp1_sync_mux_ck",           &mcbsp1_sync_mux_ck),
+       CLK(NULL,       "func_mcbsp1_gfclk",            &func_mcbsp1_gfclk),
+       CLK(NULL,       "mcbsp2_sync_mux_ck",           &mcbsp2_sync_mux_ck),
+       CLK(NULL,       "func_mcbsp2_gfclk",            &func_mcbsp2_gfclk),
+       CLK(NULL,       "mcbsp3_sync_mux_ck",           &mcbsp3_sync_mux_ck),
+       CLK(NULL,       "func_mcbsp3_gfclk",            &func_mcbsp3_gfclk),
+       CLK(NULL,       "mcbsp4_sync_mux_ck",           &mcbsp4_sync_mux_ck),
+       CLK(NULL,       "per_mcbsp4_gfclk",             &per_mcbsp4_gfclk),
+       CLK(NULL,       "hsmmc1_fclk",                  &hsmmc1_fclk),
+       CLK(NULL,       "hsmmc2_fclk",                  &hsmmc2_fclk),
+       CLK(NULL,       "ocp2scp_usb_phy_phy_48m",      &ocp2scp_usb_phy_phy_48m),
+       CLK(NULL,       "sha2md5_fck",                  &sha2md5_fck),
+       CLK(NULL,       "slimbus1_fclk_1",              &slimbus1_fclk_1),
+       CLK(NULL,       "slimbus1_fclk_0",              &slimbus1_fclk_0),
+       CLK(NULL,       "slimbus1_fclk_2",              &slimbus1_fclk_2),
+       CLK(NULL,       "slimbus1_slimbus_clk",         &slimbus1_slimbus_clk),
+       CLK(NULL,       "slimbus2_fclk_1",              &slimbus2_fclk_1),
+       CLK(NULL,       "slimbus2_fclk_0",              &slimbus2_fclk_0),
+       CLK(NULL,       "slimbus2_slimbus_clk",         &slimbus2_slimbus_clk),
+       CLK(NULL,       "smartreflex_core_fck",         &smartreflex_core_fck),
+       CLK(NULL,       "smartreflex_iva_fck",          &smartreflex_iva_fck),
+       CLK(NULL,       "smartreflex_mpu_fck",          &smartreflex_mpu_fck),
+       CLK(NULL,       "dmt1_clk_mux",                 &dmt1_clk_mux),
+       CLK(NULL,       "cm2_dm10_mux",                 &cm2_dm10_mux),
+       CLK(NULL,       "cm2_dm11_mux",                 &cm2_dm11_mux),
+       CLK(NULL,       "cm2_dm2_mux",                  &cm2_dm2_mux),
+       CLK(NULL,       "cm2_dm3_mux",                  &cm2_dm3_mux),
+       CLK(NULL,       "cm2_dm4_mux",                  &cm2_dm4_mux),
+       CLK(NULL,       "timer5_sync_mux",              &timer5_sync_mux),
+       CLK(NULL,       "timer6_sync_mux",              &timer6_sync_mux),
+       CLK(NULL,       "timer7_sync_mux",              &timer7_sync_mux),
+       CLK(NULL,       "timer8_sync_mux",              &timer8_sync_mux),
+       CLK(NULL,       "cm2_dm9_mux",                  &cm2_dm9_mux),
+       CLK(NULL,       "usb_host_fs_fck",              &usb_host_fs_fck),
+       CLK("usbhs_omap",       "fs_fck",               &usb_host_fs_fck),
+       CLK(NULL,       "utmi_p1_gfclk",                &utmi_p1_gfclk),
+       CLK(NULL,       "usb_host_hs_utmi_p1_clk",      &usb_host_hs_utmi_p1_clk),
+       CLK(NULL,       "utmi_p2_gfclk",                &utmi_p2_gfclk),
+       CLK(NULL,       "usb_host_hs_utmi_p2_clk",      &usb_host_hs_utmi_p2_clk),
+       CLK(NULL,       "usb_host_hs_utmi_p3_clk",      &usb_host_hs_utmi_p3_clk),
+       CLK(NULL,       "usb_host_hs_hsic480m_p1_clk",  &usb_host_hs_hsic480m_p1_clk),
+       CLK(NULL,       "usb_host_hs_hsic60m_p1_clk",   &usb_host_hs_hsic60m_p1_clk),
+       CLK(NULL,       "usb_host_hs_hsic60m_p2_clk",   &usb_host_hs_hsic60m_p2_clk),
+       CLK(NULL,       "usb_host_hs_hsic480m_p2_clk",  &usb_host_hs_hsic480m_p2_clk),
+       CLK(NULL,       "usb_host_hs_func48mclk",       &usb_host_hs_func48mclk),
+       CLK(NULL,       "usb_host_hs_fck",              &usb_host_hs_fck),
+       CLK("usbhs_omap",       "hs_fck",               &usb_host_hs_fck),
+       CLK(NULL,       "otg_60m_gfclk",                &otg_60m_gfclk),
+       CLK(NULL,       "usb_otg_hs_xclk",              &usb_otg_hs_xclk),
+       CLK(NULL,       "usb_otg_hs_ick",               &usb_otg_hs_ick),
+       CLK("musb-omap2430",    "ick",                  &usb_otg_hs_ick),
+       CLK(NULL,       "usb_phy_cm_clk32k",            &usb_phy_cm_clk32k),
+       CLK(NULL,       "usb_tll_hs_usb_ch2_clk",       &usb_tll_hs_usb_ch2_clk),
+       CLK(NULL,       "usb_tll_hs_usb_ch0_clk",       &usb_tll_hs_usb_ch0_clk),
+       CLK(NULL,       "usb_tll_hs_usb_ch1_clk",       &usb_tll_hs_usb_ch1_clk),
+       CLK(NULL,       "usb_tll_hs_ick",               &usb_tll_hs_ick),
+       CLK("usbhs_omap",       "usbtll_ick",           &usb_tll_hs_ick),
+       CLK("usbhs_tll",        "usbtll_ick",           &usb_tll_hs_ick),
+       CLK(NULL,       "usim_ck",                      &usim_ck),
+       CLK(NULL,       "usim_fclk",                    &usim_fclk),
+       CLK(NULL,       "pmd_stm_clock_mux_ck",         &pmd_stm_clock_mux_ck),
+       CLK(NULL,       "pmd_trace_clk_mux_ck",         &pmd_trace_clk_mux_ck),
+       CLK(NULL,       "stm_clk_div_ck",               &stm_clk_div_ck),
+       CLK(NULL,       "trace_clk_div_ck",             &trace_clk_div_ck),
+       CLK(NULL,       "auxclk0_src_ck",               &auxclk0_src_ck),
+       CLK(NULL,       "auxclk0_ck",                   &auxclk0_ck),
+       CLK(NULL,       "auxclkreq0_ck",                &auxclkreq0_ck),
+       CLK(NULL,       "auxclk1_src_ck",               &auxclk1_src_ck),
+       CLK(NULL,       "auxclk1_ck",                   &auxclk1_ck),
+       CLK(NULL,       "auxclkreq1_ck",                &auxclkreq1_ck),
+       CLK(NULL,       "auxclk2_src_ck",               &auxclk2_src_ck),
+       CLK(NULL,       "auxclk2_ck",                   &auxclk2_ck),
+       CLK(NULL,       "auxclkreq2_ck",                &auxclkreq2_ck),
+       CLK(NULL,       "auxclk3_src_ck",               &auxclk3_src_ck),
+       CLK(NULL,       "auxclk3_ck",                   &auxclk3_ck),
+       CLK(NULL,       "auxclkreq3_ck",                &auxclkreq3_ck),
+       CLK(NULL,       "auxclk4_src_ck",               &auxclk4_src_ck),
+       CLK(NULL,       "auxclk4_ck",                   &auxclk4_ck),
+       CLK(NULL,       "auxclkreq4_ck",                &auxclkreq4_ck),
+       CLK(NULL,       "auxclk5_src_ck",               &auxclk5_src_ck),
+       CLK(NULL,       "auxclk5_ck",                   &auxclk5_ck),
+       CLK(NULL,       "auxclkreq5_ck",                &auxclkreq5_ck),
+       CLK("omap-gpmc",        "fck",                  &dummy_ck),
+       CLK("omap_i2c.1",       "ick",                  &dummy_ck),
+       CLK("omap_i2c.2",       "ick",                  &dummy_ck),
+       CLK("omap_i2c.3",       "ick",                  &dummy_ck),
+       CLK("omap_i2c.4",       "ick",                  &dummy_ck),
+       CLK(NULL,       "mailboxes_ick",                &dummy_ck),
+       CLK("omap_hsmmc.0",     "ick",                  &dummy_ck),
+       CLK("omap_hsmmc.1",     "ick",                  &dummy_ck),
+       CLK("omap_hsmmc.2",     "ick",                  &dummy_ck),
+       CLK("omap_hsmmc.3",     "ick",                  &dummy_ck),
+       CLK("omap_hsmmc.4",     "ick",                  &dummy_ck),
+       CLK("omap-mcbsp.1",     "ick",                  &dummy_ck),
+       CLK("omap-mcbsp.2",     "ick",                  &dummy_ck),
+       CLK("omap-mcbsp.3",     "ick",                  &dummy_ck),
+       CLK("omap-mcbsp.4",     "ick",                  &dummy_ck),
+       CLK("omap2_mcspi.1",    "ick",                  &dummy_ck),
+       CLK("omap2_mcspi.2",    "ick",                  &dummy_ck),
+       CLK("omap2_mcspi.3",    "ick",                  &dummy_ck),
+       CLK("omap2_mcspi.4",    "ick",                  &dummy_ck),
+       CLK(NULL,       "uart1_ick",                    &dummy_ck),
+       CLK(NULL,       "uart2_ick",                    &dummy_ck),
+       CLK(NULL,       "uart3_ick",                    &dummy_ck),
+       CLK(NULL,       "uart4_ick",                    &dummy_ck),
+       CLK("usbhs_omap",       "usbhost_ick",          &dummy_ck),
+       CLK("usbhs_omap",       "usbtll_fck",           &dummy_ck),
+       CLK("usbhs_tll",        "usbtll_fck",           &dummy_ck),
+       CLK("omap_wdt", "ick",                          &dummy_ck),
+       CLK(NULL,       "timer_32k_ck", &sys_32k_ck),
        /* TODO: Remove "omap_timer.X" aliases once DT migration is complete */
-       CLK("omap_timer.1",     "timer_sys_ck", &sys_clkin_ck,  CK_443X),
-       CLK("omap_timer.2",     "timer_sys_ck", &sys_clkin_ck,  CK_443X),
-       CLK("omap_timer.3",     "timer_sys_ck", &sys_clkin_ck,  CK_443X),
-       CLK("omap_timer.4",     "timer_sys_ck", &sys_clkin_ck,  CK_443X),
-       CLK("omap_timer.9",     "timer_sys_ck", &sys_clkin_ck,  CK_443X),
-       CLK("omap_timer.10",    "timer_sys_ck", &sys_clkin_ck,  CK_443X),
-       CLK("omap_timer.11",    "timer_sys_ck", &sys_clkin_ck,  CK_443X),
-       CLK("omap_timer.5",     "timer_sys_ck", &syc_clk_div_ck,        CK_443X),
-       CLK("omap_timer.6",     "timer_sys_ck", &syc_clk_div_ck,        CK_443X),
-       CLK("omap_timer.7",     "timer_sys_ck", &syc_clk_div_ck,        CK_443X),
-       CLK("omap_timer.8",     "timer_sys_ck", &syc_clk_div_ck,        CK_443X),
-       CLK("4a318000.timer",   "timer_sys_ck", &sys_clkin_ck,  CK_443X),
-       CLK("48032000.timer",   "timer_sys_ck", &sys_clkin_ck,  CK_443X),
-       CLK("48034000.timer",   "timer_sys_ck", &sys_clkin_ck,  CK_443X),
-       CLK("48036000.timer",   "timer_sys_ck", &sys_clkin_ck,  CK_443X),
-       CLK("4803e000.timer",   "timer_sys_ck", &sys_clkin_ck,  CK_443X),
-       CLK("48086000.timer",   "timer_sys_ck", &sys_clkin_ck,  CK_443X),
-       CLK("48088000.timer",   "timer_sys_ck", &sys_clkin_ck,  CK_443X),
-       CLK("40138000.timer",   "timer_sys_ck", &syc_clk_div_ck,        CK_443X),
-       CLK("4013a000.timer",   "timer_sys_ck", &syc_clk_div_ck,        CK_443X),
-       CLK("4013c000.timer",   "timer_sys_ck", &syc_clk_div_ck,        CK_443X),
-       CLK("4013e000.timer",   "timer_sys_ck", &syc_clk_div_ck,        CK_443X),
-       CLK(NULL,       "cpufreq_ck",   &dpll_mpu_ck,   CK_443X),
+       CLK("omap_timer.1",     "timer_sys_ck", &sys_clkin_ck),
+       CLK("omap_timer.2",     "timer_sys_ck", &sys_clkin_ck),
+       CLK("omap_timer.3",     "timer_sys_ck", &sys_clkin_ck),
+       CLK("omap_timer.4",     "timer_sys_ck", &sys_clkin_ck),
+       CLK("omap_timer.9",     "timer_sys_ck", &sys_clkin_ck),
+       CLK("omap_timer.10",    "timer_sys_ck", &sys_clkin_ck),
+       CLK("omap_timer.11",    "timer_sys_ck", &sys_clkin_ck),
+       CLK("omap_timer.5",     "timer_sys_ck", &syc_clk_div_ck),
+       CLK("omap_timer.6",     "timer_sys_ck", &syc_clk_div_ck),
+       CLK("omap_timer.7",     "timer_sys_ck", &syc_clk_div_ck),
+       CLK("omap_timer.8",     "timer_sys_ck", &syc_clk_div_ck),
+       CLK("4a318000.timer",   "timer_sys_ck", &sys_clkin_ck),
+       CLK("48032000.timer",   "timer_sys_ck", &sys_clkin_ck),
+       CLK("48034000.timer",   "timer_sys_ck", &sys_clkin_ck),
+       CLK("48036000.timer",   "timer_sys_ck", &sys_clkin_ck),
+       CLK("4803e000.timer",   "timer_sys_ck", &sys_clkin_ck),
+       CLK("48086000.timer",   "timer_sys_ck", &sys_clkin_ck),
+       CLK("48088000.timer",   "timer_sys_ck", &sys_clkin_ck),
+       CLK("40138000.timer",   "timer_sys_ck", &syc_clk_div_ck),
+       CLK("4013a000.timer",   "timer_sys_ck", &syc_clk_div_ck),
+       CLK("4013c000.timer",   "timer_sys_ck", &syc_clk_div_ck),
+       CLK("4013e000.timer",   "timer_sys_ck", &syc_clk_div_ck),
+       CLK(NULL,       "cpufreq_ck",   &dpll_mpu_ck),
 };
 
 int __init omap4xxx_clk_init(void)
 {
-       u32 cpu_clkflg;
-       struct omap_clk *c;
        int rc;
 
        if (cpu_is_omap443x()) {
                cpu_mask = RATE_IN_4430;
-               cpu_clkflg = CK_443X;
+               omap_clocks_register(omap443x_clks, ARRAY_SIZE(omap443x_clks));
        } else if (cpu_is_omap446x() || cpu_is_omap447x()) {
                cpu_mask = RATE_IN_4460 | RATE_IN_4430;
-               cpu_clkflg = CK_446X | CK_443X;
-
+               omap_clocks_register(omap446x_clks, ARRAY_SIZE(omap446x_clks));
                if (cpu_is_omap447x())
                        pr_warn("WARNING: OMAP4470 clock data incomplete!\n");
        } else {
                return 0;
        }
 
-       for (c = omap44xx_clks; c < omap44xx_clks + ARRAY_SIZE(omap44xx_clks);
-                                                                       c++) {
-               if (c->cpu & cpu_clkflg) {
-                       clkdev_add(&c->lk);
-                       if (!__clk_init(NULL, c->lk.clk))
-                               omap2_init_clk_hw_omap_clocks(c->lk.clk);
-               }
-       }
+       omap_clocks_register(omap44xx_clks, ARRAY_SIZE(omap44xx_clks));
 
        omap2_clk_disable_autoidle_all();
 
index e4ec3a69ee2e749b1d40b80065956f23b4424070..8474c7d228ee241ea717dfc2ed3669b05f32acbb 100644 (file)
@@ -23,7 +23,7 @@
 #include <linux/clk-provider.h>
 #include <linux/io.h>
 #include <linux/bitops.h>
-
+#include <linux/clk-private.h>
 #include <asm/cpu.h>
 
 
@@ -568,6 +568,21 @@ const struct clk_hw_omap_ops clkhwops_wait = {
        .find_companion = omap2_clk_dflt_find_companion,
 };
 
+/**
+ * omap_clocks_register - register an array of omap_clk
+ * @ocs: pointer to an array of omap_clk to register
+ */
+void __init omap_clocks_register(struct omap_clk oclks[], int cnt)
+{
+       struct omap_clk *c;
+
+       for (c = oclks; c < oclks + cnt; c++) {
+               clkdev_add(&c->lk);
+               if (!__clk_init(NULL, c->lk.clk))
+                       omap2_init_clk_hw_omap_clocks(c->lk.clk);
+       }
+}
+
 /**
  * omap2_clk_switch_mpurate_at_boot - switch ARM MPU rate by boot-time argument
  * @mpurate_ck_name: clk name of the clock to change rate
index 60ddd8612b4d68654b3c2c3790a2559773c1b317..7aa32cd292f92bc5df52b0a108e99d49a3e3c019 100644 (file)
@@ -27,9 +27,8 @@ struct omap_clk {
        struct clk_lookup               lk;
 };
 
-#define CLK(dev, con, ck, cp)          \
+#define CLK(dev, con, ck)              \
        {                               \
-                .cpu = cp,             \
                .lk = {                 \
                        .dev_id = dev,  \
                        .con_id = con,  \
@@ -37,22 +36,6 @@ struct omap_clk {
                },                      \
        }
 
-/* Platform flags for the clkdev-OMAP integration code */
-#define CK_242X                (1 << 0)
-#define CK_243X                (1 << 1)        /* 243x, 253x */
-#define CK_3430ES1     (1 << 2)        /* 34xxES1 only */
-#define CK_3430ES2PLUS (1 << 3)        /* 34xxES2, ES3, non-Sitara 35xx only */
-#define CK_AM35XX      (1 << 4)        /* Sitara AM35xx */
-#define CK_36XX                (1 << 5)        /* 36xx/37xx-specific clocks */
-#define CK_443X                (1 << 6)
-#define CK_TI816X      (1 << 7)
-#define CK_446X                (1 << 8)
-#define CK_AM33XX      (1 << 9)        /* AM33xx specific clocks */
-
-
-#define CK_34XX                (CK_3430ES1 | CK_3430ES2PLUS)
-#define CK_3XXX                (CK_34XX | CK_AM35XX | CK_36XX)
-
 struct clockdomain;
 #define to_clk_hw_omap(_hw) container_of(_hw, struct clk_hw_omap, hw)
 
@@ -480,4 +463,5 @@ extern int am33xx_clk_init(void);
 extern int omap2_clkops_enable_clkdm(struct clk_hw *hw);
 extern void omap2_clkops_disable_clkdm(struct clk_hw *hw);
 
+extern void omap_clocks_register(struct omap_clk *oclks, int cnt);
 #endif
index 1ec7f05977102759383f05351469baeecbd3e856..4269fc1456980458f52aec7c95a5694c82d1dee6 100644 (file)
@@ -504,140 +504,31 @@ static void omap_init_rng(void)
        WARN(IS_ERR(pdev), "Can't build omap_device for omap_rng\n");
 }
 
-#if defined(CONFIG_CRYPTO_DEV_OMAP_SHAM) || defined(CONFIG_CRYPTO_DEV_OMAP_SHAM_MODULE)
-
-#ifdef CONFIG_ARCH_OMAP2
-static struct resource omap2_sham_resources[] = {
-       {
-               .start  = OMAP24XX_SEC_SHA1MD5_BASE,
-               .end    = OMAP24XX_SEC_SHA1MD5_BASE + 0x64,
-               .flags  = IORESOURCE_MEM,
-       },
-       {
-               .start  = 51 + OMAP_INTC_START,
-               .flags  = IORESOURCE_IRQ,
-       }
-};
-static int omap2_sham_resources_sz = ARRAY_SIZE(omap2_sham_resources);
-#else
-#define omap2_sham_resources           NULL
-#define omap2_sham_resources_sz                0
-#endif
-
-#ifdef CONFIG_ARCH_OMAP3
-static struct resource omap3_sham_resources[] = {
-       {
-               .start  = OMAP34XX_SEC_SHA1MD5_BASE,
-               .end    = OMAP34XX_SEC_SHA1MD5_BASE + 0x64,
-               .flags  = IORESOURCE_MEM,
-       },
-       {
-               .start  = 49 + OMAP_INTC_START,
-               .flags  = IORESOURCE_IRQ,
-       },
-       {
-               .start  = OMAP34XX_DMA_SHA1MD5_RX,
-               .flags  = IORESOURCE_DMA,
-       }
-};
-static int omap3_sham_resources_sz = ARRAY_SIZE(omap3_sham_resources);
-#else
-#define omap3_sham_resources           NULL
-#define omap3_sham_resources_sz                0
-#endif
-
-static struct platform_device sham_device = {
-       .name           = "omap-sham",
-       .id             = -1,
-};
-
-static void omap_init_sham(void)
+static void __init omap_init_sham(void)
 {
-       if (cpu_is_omap24xx()) {
-               sham_device.resource = omap2_sham_resources;
-               sham_device.num_resources = omap2_sham_resources_sz;
-       } else if (cpu_is_omap34xx()) {
-               sham_device.resource = omap3_sham_resources;
-               sham_device.num_resources = omap3_sham_resources_sz;
-       } else {
-               pr_err("%s: platform not supported\n", __func__);
-               return;
-       }
-       platform_device_register(&sham_device);
-}
-#else
-static inline void omap_init_sham(void) { }
-#endif
-
-#if defined(CONFIG_CRYPTO_DEV_OMAP_AES) || defined(CONFIG_CRYPTO_DEV_OMAP_AES_MODULE)
-
-#ifdef CONFIG_ARCH_OMAP2
-static struct resource omap2_aes_resources[] = {
-       {
-               .start  = OMAP24XX_SEC_AES_BASE,
-               .end    = OMAP24XX_SEC_AES_BASE + 0x4C,
-               .flags  = IORESOURCE_MEM,
-       },
-       {
-               .start  = OMAP24XX_DMA_AES_TX,
-               .flags  = IORESOURCE_DMA,
-       },
-       {
-               .start  = OMAP24XX_DMA_AES_RX,
-               .flags  = IORESOURCE_DMA,
-       }
-};
-static int omap2_aes_resources_sz = ARRAY_SIZE(omap2_aes_resources);
-#else
-#define omap2_aes_resources            NULL
-#define omap2_aes_resources_sz         0
-#endif
+       struct omap_hwmod *oh;
+       struct platform_device *pdev;
 
-#ifdef CONFIG_ARCH_OMAP3
-static struct resource omap3_aes_resources[] = {
-       {
-               .start  = OMAP34XX_SEC_AES_BASE,
-               .end    = OMAP34XX_SEC_AES_BASE + 0x4C,
-               .flags  = IORESOURCE_MEM,
-       },
-       {
-               .start  = OMAP34XX_DMA_AES2_TX,
-               .flags  = IORESOURCE_DMA,
-       },
-       {
-               .start  = OMAP34XX_DMA_AES2_RX,
-               .flags  = IORESOURCE_DMA,
-       }
-};
-static int omap3_aes_resources_sz = ARRAY_SIZE(omap3_aes_resources);
-#else
-#define omap3_aes_resources            NULL
-#define omap3_aes_resources_sz         0
-#endif
+       oh = omap_hwmod_lookup("sham");
+       if (!oh)
+               return;
 
-static struct platform_device aes_device = {
-       .name           = "omap-aes",
-       .id             = -1,
-};
+       pdev = omap_device_build("omap-sham", -1, oh, NULL, 0);
+       WARN(IS_ERR(pdev), "Can't build omap_device for omap-sham\n");
+}
 
-static void omap_init_aes(void)
+static void __init omap_init_aes(void)
 {
-       if (cpu_is_omap24xx()) {
-               aes_device.resource = omap2_aes_resources;
-               aes_device.num_resources = omap2_aes_resources_sz;
-       } else if (cpu_is_omap34xx()) {
-               aes_device.resource = omap3_aes_resources;
-               aes_device.num_resources = omap3_aes_resources_sz;
-       } else {
-               pr_err("%s: platform not supported\n", __func__);
+       struct omap_hwmod *oh;
+       struct platform_device *pdev;
+
+       oh = omap_hwmod_lookup("aes");
+       if (!oh)
                return;
-       }
-       platform_device_register(&aes_device);
-}
 
-#else
-static inline void omap_init_aes(void) { }
-#endif
+       pdev = omap_device_build("omap-aes", -1, oh, NULL, 0);
+       WARN(IS_ERR(pdev), "Can't build omap_device for omap-aes\n");
+}
 
 /*-------------------------------------------------------------------------*/
 
@@ -764,11 +655,11 @@ static int __init omap2_init_devices(void)
                omap_init_dmic();
                omap_init_mcpdm();
                omap_init_mcspi();
+               omap_init_sham();
+               omap_init_aes();
        }
        omap_init_sti();
        omap_init_rng();
-       omap_init_sham();
-       omap_init_aes();
        omap_init_vout();
        omap_init_ocp2scp();
 
index 6a764af6c6d3cbf3f476d673fe2baa924cb60490..5137cc84b5049fec124c20c2dd41a443886a0d6c 100644 (file)
@@ -610,6 +610,8 @@ static struct omap_hwmod_ocp_if *omap2420_hwmod_ocp_ifs[] __initdata = {
        &omap2420_l4_core__mcbsp2,
        &omap2420_l4_core__msdi1,
        &omap2xxx_l4_core__rng,
+       &omap2xxx_l4_core__sham,
+       &omap2xxx_l4_core__aes,
        &omap2420_l4_core__hdq1w,
        &omap2420_l4_wkup__counter_32k,
        &omap2420_l3__gpmc,
index d2d3840557c392b2033e3b3cbf65d1eb985e9833..4ce999ee3ee97aba27c1a7ab03f61c86c5db5eb9 100644 (file)
@@ -963,6 +963,8 @@ static struct omap_hwmod_ocp_if *omap2430_hwmod_ocp_ifs[] __initdata = {
        &omap2430_l4_core__mcbsp5,
        &omap2430_l4_core__hdq1w,
        &omap2xxx_l4_core__rng,
+       &omap2xxx_l4_core__sham,
+       &omap2xxx_l4_core__aes,
        &omap2430_l4_wkup__counter_32k,
        &omap2430_l3__gpmc,
        NULL,
index 47901a5e76de517b9f86d5f4bc83b0614857e5e1..5fd40d4a989e9954469799fd76e1509f41f88c0a 100644 (file)
@@ -138,6 +138,24 @@ static struct omap_hwmod_addr_space omap2_rng_addr_space[] = {
        { }
 };
 
+static struct omap_hwmod_addr_space omap2xxx_sham_addrs[] = {
+       {
+               .pa_start       = 0x480a4000,
+               .pa_end         = 0x480a4000 + 0x64 - 1,
+               .flags          = ADDR_TYPE_RT
+       },
+       { }
+};
+
+static struct omap_hwmod_addr_space omap2xxx_aes_addrs[] = {
+       {
+               .pa_start       = 0x480a6000,
+               .pa_end         = 0x480a6000 + 0x50 - 1,
+               .flags          = ADDR_TYPE_RT
+       },
+       { }
+};
+
 /*
  * Common interconnect data
  */
@@ -389,3 +407,21 @@ struct omap_hwmod_ocp_if omap2xxx_l4_core__rng = {
        .addr           = omap2_rng_addr_space,
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
+
+/* l4 core -> sham interface */
+struct omap_hwmod_ocp_if omap2xxx_l4_core__sham = {
+       .master         = &omap2xxx_l4_core_hwmod,
+       .slave          = &omap2xxx_sham_hwmod,
+       .clk            = "sha_ick",
+       .addr           = omap2xxx_sham_addrs,
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4 core -> aes interface */
+struct omap_hwmod_ocp_if omap2xxx_l4_core__aes = {
+       .master         = &omap2xxx_l4_core_hwmod,
+       .slave          = &omap2xxx_aes_hwmod,
+       .clk            = "aes_ick",
+       .addr           = omap2xxx_aes_addrs,
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
index e596117004d48c8faccd1c6c3b792b0b623d7b89..c8c64b3e1acc009efa24b91da269034b8603e714 100644 (file)
@@ -864,3 +864,84 @@ struct omap_hwmod omap2xxx_rng_hwmod = {
        .flags          = HWMOD_INIT_NO_RESET,
        .class          = &omap2_rng_hwmod_class,
 };
+
+/* SHAM */
+
+static struct omap_hwmod_class_sysconfig omap2_sham_sysc = {
+       .rev_offs       = 0x5c,
+       .sysc_offs      = 0x60,
+       .syss_offs      = 0x64,
+       .sysc_flags     = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
+                          SYSS_HAS_RESET_STATUS),
+       .sysc_fields    = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap2xxx_sham_class = {
+       .name   = "sham",
+       .sysc   = &omap2_sham_sysc,
+};
+
+static struct omap_hwmod_irq_info omap2_sham_mpu_irqs[] = {
+       { .irq = 51 + OMAP_INTC_START, },
+       { .irq = -1 }
+};
+
+static struct omap_hwmod_dma_info omap2_sham_sdma_chs[] = {
+       { .name = "rx", .dma_req = 13 },
+       { .dma_req = -1 }
+};
+
+struct omap_hwmod omap2xxx_sham_hwmod = {
+       .name           = "sham",
+       .mpu_irqs       = omap2_sham_mpu_irqs,
+       .sdma_reqs      = omap2_sham_sdma_chs,
+       .main_clk       = "l4_ck",
+       .prcm           = {
+               .omap2 = {
+                       .module_offs = CORE_MOD,
+                       .prcm_reg_id = 4,
+                       .module_bit = OMAP24XX_EN_SHA_SHIFT,
+                       .idlest_reg_id = 4,
+                       .idlest_idle_bit = OMAP24XX_ST_SHA_SHIFT,
+               },
+       },
+       .class          = &omap2xxx_sham_class,
+};
+
+/* AES */
+
+static struct omap_hwmod_class_sysconfig omap2_aes_sysc = {
+       .rev_offs       = 0x44,
+       .sysc_offs      = 0x48,
+       .syss_offs      = 0x4c,
+       .sysc_flags     = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE |
+                          SYSS_HAS_RESET_STATUS),
+       .sysc_fields    = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap2xxx_aes_class = {
+       .name   = "aes",
+       .sysc   = &omap2_aes_sysc,
+};
+
+static struct omap_hwmod_dma_info omap2_aes_sdma_chs[] = {
+       { .name = "tx", .dma_req = 9 },
+       { .name = "rx", .dma_req = 10 },
+       { .dma_req = -1 }
+};
+
+struct omap_hwmod omap2xxx_aes_hwmod = {
+       .name           = "aes",
+       .sdma_reqs      = omap2_aes_sdma_chs,
+       .main_clk       = "l4_ck",
+       .prcm           = {
+               .omap2 = {
+                       .module_offs = CORE_MOD,
+                       .prcm_reg_id = 4,
+                       .module_bit = OMAP24XX_EN_AES_SHIFT,
+                       .idlest_reg_id = 4,
+                       .idlest_idle_bit = OMAP24XX_ST_AES_SHIFT,
+               },
+       },
+       .class          = &omap2xxx_aes_class,
+};
index 26eee4a556ad13a82f27a09d1820eb48f6d3ebac..556a1222fde6e6b7ab5a05e980040a777fac9a56 100644 (file)
@@ -417,8 +417,6 @@ static struct omap_hwmod am33xx_adc_tsc_hwmod = {
  *    - clkdiv32k
  *    - debugss
  *    - ocp watch point
- *    - aes0
- *    - sha0
  */
 #if 0
 /*
@@ -499,25 +497,41 @@ static struct omap_hwmod am33xx_ocpwp_hwmod = {
                },
        },
 };
+#endif
 
 /*
- * 'aes' class
+ * 'aes0' class
  */
-static struct omap_hwmod_class am33xx_aes_hwmod_class = {
-       .name           = "aes",
+static struct omap_hwmod_class_sysconfig am33xx_aes0_sysc = {
+       .rev_offs       = 0x80,
+       .sysc_offs      = 0x84,
+       .syss_offs      = 0x88,
+       .sysc_flags     = SYSS_HAS_RESET_STATUS,
+};
+
+static struct omap_hwmod_class am33xx_aes0_hwmod_class = {
+       .name           = "aes0",
+       .sysc           = &am33xx_aes0_sysc,
 };
 
 static struct omap_hwmod_irq_info am33xx_aes0_irqs[] = {
-       { .irq = 102 + OMAP_INTC_START, },
+       { .irq = 103 + OMAP_INTC_START, },
        { .irq = -1 },
 };
 
+static struct omap_hwmod_dma_info am33xx_aes0_edma_reqs[] = {
+       { .name = "tx", .dma_req = 6, },
+       { .name = "rx", .dma_req = 5, },
+       { .dma_req = -1 }
+};
+
 static struct omap_hwmod am33xx_aes0_hwmod = {
-       .name           = "aes0",
-       .class          = &am33xx_aes_hwmod_class,
+       .name           = "aes",
+       .class          = &am33xx_aes0_hwmod_class,
        .clkdm_name     = "l3_clkdm",
        .mpu_irqs       = am33xx_aes0_irqs,
-       .main_clk       = "l3_gclk",
+       .sdma_reqs      = am33xx_aes0_edma_reqs,
+       .main_clk       = "aes0_fck",
        .prcm           = {
                .omap4  = {
                        .clkctrl_offs   = AM33XX_CM_PER_AES0_CLKCTRL_OFFSET,
@@ -526,21 +540,35 @@ static struct omap_hwmod am33xx_aes0_hwmod = {
        },
 };
 
-/* sha0 */
+/* sha0 HIB2 (the 'P' (public) device) */
+static struct omap_hwmod_class_sysconfig am33xx_sha0_sysc = {
+       .rev_offs       = 0x100,
+       .sysc_offs      = 0x110,
+       .syss_offs      = 0x114,
+       .sysc_flags     = SYSS_HAS_RESET_STATUS,
+};
+
 static struct omap_hwmod_class am33xx_sha0_hwmod_class = {
        .name           = "sha0",
+       .sysc           = &am33xx_sha0_sysc,
 };
 
 static struct omap_hwmod_irq_info am33xx_sha0_irqs[] = {
-       { .irq = 108 + OMAP_INTC_START, },
+       { .irq = 109 + OMAP_INTC_START, },
        { .irq = -1 },
 };
 
+static struct omap_hwmod_dma_info am33xx_sha0_edma_reqs[] = {
+       { .name = "rx", .dma_req = 36, },
+       { .dma_req = -1 }
+};
+
 static struct omap_hwmod am33xx_sha0_hwmod = {
-       .name           = "sha0",
+       .name           = "sham",
        .class          = &am33xx_sha0_hwmod_class,
        .clkdm_name     = "l3_clkdm",
        .mpu_irqs       = am33xx_sha0_irqs,
+       .sdma_reqs      = am33xx_sha0_edma_reqs,
        .main_clk       = "l3_gclk",
        .prcm           = {
                .omap4  = {
@@ -550,8 +578,6 @@ static struct omap_hwmod am33xx_sha0_hwmod = {
        },
 };
 
-#endif
-
 /* ocmcram */
 static struct omap_hwmod_class am33xx_ocmcram_hwmod_class = {
        .name = "ocmcram",
@@ -3434,6 +3460,42 @@ static struct omap_hwmod_ocp_if am33xx_l3_main__ocmc = {
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
+/* l3 main -> sha0 HIB2 */
+static struct omap_hwmod_addr_space am33xx_sha0_addrs[] = {
+       {
+               .pa_start       = 0x53100000,
+               .pa_end         = 0x53100000 + SZ_512 - 1,
+               .flags          = ADDR_TYPE_RT
+       },
+       { }
+};
+
+static struct omap_hwmod_ocp_if am33xx_l3_main__sha0 = {
+       .master         = &am33xx_l3_main_hwmod,
+       .slave          = &am33xx_sha0_hwmod,
+       .clk            = "sha0_fck",
+       .addr           = am33xx_sha0_addrs,
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l3 main -> AES0 HIB2 */
+static struct omap_hwmod_addr_space am33xx_aes0_addrs[] = {
+       {
+               .pa_start       = 0x53500000,
+               .pa_end         = 0x53500000 + SZ_1M - 1,
+               .flags          = ADDR_TYPE_RT
+       },
+       { }
+};
+
+static struct omap_hwmod_ocp_if am33xx_l3_main__aes0 = {
+       .master         = &am33xx_l3_main_hwmod,
+       .slave          = &am33xx_aes0_hwmod,
+       .clk            = "aes0_fck",
+       .addr           = am33xx_aes0_addrs,
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
 static struct omap_hwmod_ocp_if *am33xx_hwmod_ocp_ifs[] __initdata = {
        &am33xx_l4_fw__emif_fw,
        &am33xx_l3_main__emif,
@@ -3514,6 +3576,8 @@ static struct omap_hwmod_ocp_if *am33xx_hwmod_ocp_ifs[] __initdata = {
        &am33xx_l3_s__usbss,
        &am33xx_l4_hs__cpgmac0,
        &am33xx_cpgmac0__mdio,
+       &am33xx_l3_main__sha0,
+       &am33xx_l3_main__aes0,
        NULL,
 };
 
index 5112d04e7b79bd928a3d332f2ec846352e0e5b1b..4083606ea1da15e7efeb279d7c33c3f3cc7618b3 100644 (file)
@@ -3550,6 +3550,132 @@ static struct omap_hwmod_ocp_if omap3xxx_l3_main__gpmc = {
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
+/* l4_core -> SHAM2 (SHA1/MD5) (similar to omap24xx) */
+static struct omap_hwmod_sysc_fields omap3_sham_sysc_fields = {
+       .sidle_shift    = 4,
+       .srst_shift     = 1,
+       .autoidle_shift = 0,
+};
+
+static struct omap_hwmod_class_sysconfig omap3_sham_sysc = {
+       .rev_offs       = 0x5c,
+       .sysc_offs      = 0x60,
+       .syss_offs      = 0x64,
+       .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
+                          SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
+       .sysc_fields    = &omap3_sham_sysc_fields,
+};
+
+static struct omap_hwmod_class omap3xxx_sham_class = {
+       .name   = "sham",
+       .sysc   = &omap3_sham_sysc,
+};
+
+static struct omap_hwmod_irq_info omap3_sham_mpu_irqs[] = {
+       { .irq = 49 + OMAP_INTC_START, },
+       { .irq = -1 }
+};
+
+static struct omap_hwmod_dma_info omap3_sham_sdma_reqs[] = {
+       { .name = "rx", .dma_req = OMAP34XX_DMA_SHA1MD5_RX, },
+       { .dma_req = -1 }
+};
+
+static struct omap_hwmod omap3xxx_sham_hwmod = {
+       .name           = "sham",
+       .mpu_irqs       = omap3_sham_mpu_irqs,
+       .sdma_reqs      = omap3_sham_sdma_reqs,
+       .main_clk       = "sha12_ick",
+       .prcm           = {
+               .omap2 = {
+                       .module_offs = CORE_MOD,
+                       .prcm_reg_id = 1,
+                       .module_bit = OMAP3430_EN_SHA12_SHIFT,
+                       .idlest_reg_id = 1,
+                       .idlest_idle_bit = OMAP3430_ST_SHA12_SHIFT,
+               },
+       },
+       .class          = &omap3xxx_sham_class,
+};
+
+static struct omap_hwmod_addr_space omap3xxx_sham_addrs[] = {
+       {
+               .pa_start       = 0x480c3000,
+               .pa_end         = 0x480c3000 + 0x64 - 1,
+               .flags          = ADDR_TYPE_RT
+       },
+       { }
+};
+
+static struct omap_hwmod_ocp_if omap3xxx_l4_core__sham = {
+       .master         = &omap3xxx_l4_core_hwmod,
+       .slave          = &omap3xxx_sham_hwmod,
+       .clk            = "sha12_ick",
+       .addr           = omap3xxx_sham_addrs,
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_core -> AES */
+static struct omap_hwmod_sysc_fields omap3xxx_aes_sysc_fields = {
+       .sidle_shift    = 6,
+       .srst_shift     = 1,
+       .autoidle_shift = 0,
+};
+
+static struct omap_hwmod_class_sysconfig omap3_aes_sysc = {
+       .rev_offs       = 0x44,
+       .sysc_offs      = 0x48,
+       .syss_offs      = 0x4c,
+       .sysc_flags     = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
+                          SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),
+       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
+       .sysc_fields    = &omap3xxx_aes_sysc_fields,
+};
+
+static struct omap_hwmod_class omap3xxx_aes_class = {
+       .name   = "aes",
+       .sysc   = &omap3_aes_sysc,
+};
+
+static struct omap_hwmod_dma_info omap3_aes_sdma_reqs[] = {
+       { .name = "tx", .dma_req = OMAP34XX_DMA_AES2_TX, },
+       { .name = "rx", .dma_req = OMAP34XX_DMA_AES2_RX, },
+       { .dma_req = -1 }
+};
+
+static struct omap_hwmod omap3xxx_aes_hwmod = {
+       .name           = "aes",
+       .sdma_reqs      = omap3_aes_sdma_reqs,
+       .main_clk       = "aes2_ick",
+       .prcm           = {
+               .omap2 = {
+                       .module_offs = CORE_MOD,
+                       .prcm_reg_id = 1,
+                       .module_bit = OMAP3430_EN_AES2_SHIFT,
+                       .idlest_reg_id = 1,
+                       .idlest_idle_bit = OMAP3430_ST_AES2_SHIFT,
+               },
+       },
+       .class          = &omap3xxx_aes_class,
+};
+
+static struct omap_hwmod_addr_space omap3xxx_aes_addrs[] = {
+       {
+               .pa_start       = 0x480c5000,
+               .pa_end         = 0x480c5000 + 0x50 - 1,
+               .flags          = ADDR_TYPE_RT
+       },
+       { }
+};
+
+static struct omap_hwmod_ocp_if omap3xxx_l4_core__aes = {
+       .master         = &omap3xxx_l4_core_hwmod,
+       .slave          = &omap3xxx_aes_hwmod,
+       .clk            = "aes2_ick",
+       .addr           = omap3xxx_aes_addrs,
+       .user           = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
 static struct omap_hwmod_ocp_if *omap3xxx_hwmod_ocp_ifs[] __initdata = {
        &omap3xxx_l3_main__l4_core,
        &omap3xxx_l3_main__l4_per,
@@ -3601,8 +3727,32 @@ static struct omap_hwmod_ocp_if *omap3xxx_hwmod_ocp_ifs[] __initdata = {
 };
 
 /* GP-only hwmod links */
-static struct omap_hwmod_ocp_if *omap3xxx_gp_hwmod_ocp_ifs[] __initdata = {
+static struct omap_hwmod_ocp_if *omap34xx_gp_hwmod_ocp_ifs[] __initdata = {
        &omap3xxx_l4_sec__timer12,
+       &omap3xxx_l4_core__sham,
+       &omap3xxx_l4_core__aes,
+       NULL
+};
+
+static struct omap_hwmod_ocp_if *omap36xx_gp_hwmod_ocp_ifs[] __initdata = {
+       &omap3xxx_l4_sec__timer12,
+       &omap3xxx_l4_core__sham,
+       &omap3xxx_l4_core__aes,
+       NULL
+};
+
+static struct omap_hwmod_ocp_if *am35xx_gp_hwmod_ocp_ifs[] __initdata = {
+       &omap3xxx_l4_sec__timer12,
+       /*
+        * Apparently the SHA/MD5 and AES accelerator IP blocks are
+        * only present on some AM35xx chips, and no one knows which
+        * ones.  See
+        * http://www.spinics.net/lists/arm-kernel/msg215466.html So
+        * if you need these IP blocks on an AM35xx, try uncommenting
+        * the following lines.
+        */
+       /* &omap3xxx_l4_core__sham, */
+       /* &omap3xxx_l4_core__aes, */
        NULL
 };
 
@@ -3709,7 +3859,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_hwmod_ocp_ifs[] __initdata = {
 int __init omap3xxx_hwmod_init(void)
 {
        int r;
-       struct omap_hwmod_ocp_if **h = NULL;
+       struct omap_hwmod_ocp_if **h = NULL, **h_gp = NULL;
        unsigned int rev;
 
        omap_hwmod_init();
@@ -3719,13 +3869,6 @@ int __init omap3xxx_hwmod_init(void)
        if (r < 0)
                return r;
 
-       /* Register GP-only hwmod links. */
-       if (omap_type() == OMAP2_DEVICE_TYPE_GP) {
-               r = omap_hwmod_register_links(omap3xxx_gp_hwmod_ocp_ifs);
-               if (r < 0)
-                       return r;
-       }
-
        rev = omap_rev();
 
        /*
@@ -3737,11 +3880,14 @@ int __init omap3xxx_hwmod_init(void)
            rev == OMAP3430_REV_ES2_1 || rev == OMAP3430_REV_ES3_0 ||
            rev == OMAP3430_REV_ES3_1 || rev == OMAP3430_REV_ES3_1_2) {
                h = omap34xx_hwmod_ocp_ifs;
+               h_gp = omap34xx_gp_hwmod_ocp_ifs;
        } else if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) {
                h = am35xx_hwmod_ocp_ifs;
+               h_gp = am35xx_gp_hwmod_ocp_ifs;
        } else if (rev == OMAP3630_REV_ES1_0 || rev == OMAP3630_REV_ES1_1 ||
                   rev == OMAP3630_REV_ES1_2) {
                h = omap36xx_hwmod_ocp_ifs;
+               h_gp = omap36xx_gp_hwmod_ocp_ifs;
        } else {
                WARN(1, "OMAP3 hwmod family init: unknown chip type\n");
                return -EINVAL;
@@ -3751,6 +3897,14 @@ int __init omap3xxx_hwmod_init(void)
        if (r < 0)
                return r;
 
+       /* Register GP-only hwmod links. */
+       if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
+               r = omap_hwmod_register_links(h_gp);
+               if (r < 0)
+                       return r;
+       }
+
+
        /*
         * Register hwmod links specific to certain ES levels of a
         * particular family of silicon (e.g., 34xx ES1.0)
index cfcce299177c537750d7143919e294ff6aec2532..6e04ff7065e11b0b84a520d40f50afd9a1ab3547 100644 (file)
@@ -78,6 +78,8 @@ extern struct omap_hwmod omap2xxx_mcspi2_hwmod;
 extern struct omap_hwmod omap2xxx_counter_32k_hwmod;
 extern struct omap_hwmod omap2xxx_gpmc_hwmod;
 extern struct omap_hwmod omap2xxx_rng_hwmod;
+extern struct omap_hwmod omap2xxx_sham_hwmod;
+extern struct omap_hwmod omap2xxx_aes_hwmod;
 
 /* Common interface data across OMAP2xxx */
 extern struct omap_hwmod_ocp_if omap2xxx_l3_main__l4_core;
@@ -105,6 +107,8 @@ extern struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_dispc;
 extern struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_rfbi;
 extern struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_venc;
 extern struct omap_hwmod_ocp_if omap2xxx_l4_core__rng;
+extern struct omap_hwmod_ocp_if omap2xxx_l4_core__sham;
+extern struct omap_hwmod_ocp_if omap2xxx_l4_core__aes;
 
 /* Common IP block data */
 extern struct omap_hwmod_dma_info omap2_uart1_sdma_reqs[];
index 4f7379fe01e24c5f00c06e2ed92002db531250f4..b3be7994a2b1c32a981e431a9b924a78516da83c 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 2d57aa479a7bea697176537028f9fbb7f10101f7..72efb4ff2803c37e0ffc348d549eeababcdc1e55 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 e1fac57514b93ea55f36f336c4617c429bd13985..b646ff4d742ab103100f1d7e43ed45fcd476dbac 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 19ce885a3b4372af27579b3eeb68446c9b8cfcb7..1feb9a2286a83105572b7611401185c0086bb349 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 1db36537255c250a834e373e5a56e3de7f23dc70..d9edeaf6600706a875cf5cf156010059dcf4eb49 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 afa5423a0f93871351669830a07dddbaf808b616..71843dd39e16adb0593dd5f377a6baefb857116b 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 bec4c0d9b713979593e75c7c4c60ed9770fb3e7f..7d113f898e7f62b57440348d6ce201d5c2441643 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 e48606d8a2be31214168c0616ae6bc9d81ddc458..86fcdf9fde1bc8aa142bd261400a3a5dce9fadde 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 06a5da3c305090e0176373d2576f6de68feb2922..992ed213cec148584f26e6f0e5b8a71ad6f6b048 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 8807c27f71f968c15721af91f099b3ee4771cad7..f9cc4bc9c7983493f1883d37ec24d58304258368 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 91faba666d462916ec37822450b127674e8446db..a81a1d804e2eca2390160c05afee0f056319b0b6 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 47662a581c0a59d172529f06970b4e2ecb271e3d..e4545c152722e3361fd273fefb90c54f26753dea 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 c54ff9b29fe541aaa211f792bc9c3978a41f9724..042df35e71a0714a89c2f4a1a73d44d4535859ee 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 bdab575f88bcf0bc57fe267d8369a6603c9fcc26..2257a915746d080946184834924ccffd649ca61d 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 953eb1f9388d672bd763d0287ea32f214438e840..8225c16b371b47fb549b8dd6a9397b5059229b62 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 3a4acf23edcf5c920ba1c4e9a665d676d704ab47..ea4535a5c4e23e8014dc84207bb2d6c043c5d73a 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 acb46a94ccdfb8ec967ed5e52e5a9593f531c414..5ae502b16437c53dec44317f63c8f53e14edf273 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 f6b46ae2b7f868829310fa22295d251eda20b95b..e40326d0e29fa8fb6dff8e694f8539ca09e8e31f 100644 (file)
@@ -10,6 +10,7 @@ obj-y                                 += pm.o
 obj-y                                  += reset.o
 obj-y                                  += reset-handler.o
 obj-y                                  += sleep.o
+obj-y                                  += tegra.o
 obj-$(CONFIG_CPU_IDLE)                 += cpuidle.o
 obj-$(CONFIG_ARCH_TEGRA_2x_SOC)                += tegra20_speedo.o
 obj-$(CONFIG_ARCH_TEGRA_2x_SOC)                += tegra2_emc.o
@@ -27,9 +28,7 @@ obj-$(CONFIG_HOTPLUG_CPU)               += hotplug.o
 obj-$(CONFIG_CPU_FREQ)                  += cpu-tegra.o
 obj-$(CONFIG_TEGRA_PCI)                        += pcie.o
 
-obj-$(CONFIG_ARCH_TEGRA_2x_SOC)                += board-dt-tegra20.o
-obj-$(CONFIG_ARCH_TEGRA_3x_SOC)                += board-dt-tegra30.o
-obj-$(CONFIG_ARCH_TEGRA_114_SOC)       += board-dt-tegra114.o
+obj-$(CONFIG_ARCH_TEGRA_114_SOC)       += tegra114_speedo.o
 ifeq ($(CONFIG_CPU_IDLE),y)
 obj-$(CONFIG_ARCH_TEGRA_114_SOC)       += cpuidle-tegra114.o
 endif
diff --git a/arch/arm/mach-tegra/board-dt-tegra114.c b/arch/arm/mach-tegra/board-dt-tegra114.c
deleted file mode 100644 (file)
index 085d636..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * NVIDIA Tegra114 device tree board support
- *
- * Copyright (C) 2013 NVIDIA Corporation
- *
- * This software is licensed under the terms of the GNU General Public
- * License version 2, as published by the Free Software Foundation, and
- * may be copied, distributed, and modified under those terms.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- */
-
-#include <linux/of.h>
-#include <linux/of_platform.h>
-#include <linux/clocksource.h>
-
-#include <asm/mach/arch.h>
-
-#include "board.h"
-#include "common.h"
-
-static void __init tegra114_dt_init(void)
-{
-       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
-}
-
-static const char * const tegra114_dt_board_compat[] = {
-       "nvidia,tegra114",
-       NULL,
-};
-
-DT_MACHINE_START(TEGRA114_DT, "NVIDIA Tegra114 (Flattened Device Tree)")
-       .smp            = smp_ops(tegra_smp_ops),
-       .map_io         = tegra_map_common_io,
-       .init_early     = tegra114_init_early,
-       .init_irq       = tegra_dt_init_irq,
-       .init_time      = clocksource_of_init,
-       .init_machine   = tegra114_dt_init,
-       .init_late      = tegra_init_late,
-       .restart        = tegra_assert_system_reset,
-       .dt_compat      = tegra114_dt_board_compat,
-MACHINE_END
diff --git a/arch/arm/mach-tegra/board-dt-tegra30.c b/arch/arm/mach-tegra/board-dt-tegra30.c
deleted file mode 100644 (file)
index bf68567..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * arch/arm/mach-tegra/board-dt-tegra30.c
- *
- * NVIDIA Tegra30 device tree board support
- *
- * Copyright (C) 2011 NVIDIA Corporation
- *
- * Derived from:
- *
- * arch/arm/mach-tegra/board-dt-tegra20.c
- *
- * Copyright (C) 2010 Secret Lab Technologies, Ltd.
- * Copyright (C) 2010 Google, Inc.
- *
- * This software is licensed under the terms of the GNU General Public
- * License version 2, as published by the Free Software Foundation, and
- * may be copied, distributed, and modified under those terms.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- */
-
-#include <linux/clocksource.h>
-#include <linux/kernel.h>
-#include <linux/of.h>
-#include <linux/of_address.h>
-#include <linux/of_fdt.h>
-#include <linux/of_irq.h>
-#include <linux/of_platform.h>
-
-#include <asm/mach/arch.h>
-
-#include "board.h"
-#include "common.h"
-#include "iomap.h"
-
-static void __init tegra30_dt_init(void)
-{
-       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
-}
-
-static const char *tegra30_dt_board_compat[] = {
-       "nvidia,tegra30",
-       NULL
-};
-
-DT_MACHINE_START(TEGRA30_DT, "NVIDIA Tegra30 (Flattened Device Tree)")
-       .smp            = smp_ops(tegra_smp_ops),
-       .map_io         = tegra_map_common_io,
-       .init_early     = tegra30_init_early,
-       .init_irq       = tegra_dt_init_irq,
-       .init_time      = clocksource_of_init,
-       .init_machine   = tegra30_dt_init,
-       .init_late      = tegra_init_late,
-       .restart        = tegra_assert_system_reset,
-       .dt_compat      = tegra30_dt_board_compat,
-MACHINE_END
index 3cdc1bb8254c6764c453fb978f748aae6d8f526a..d195db09ea32660f438eddb74cbc5f1cc2f5b751 100644 (file)
@@ -62,7 +62,11 @@ int __init harmony_pcie_init(void)
                goto err_reg;
        }
 
-       regulator_enable(regulator);
+       err = regulator_enable(regulator);
+       if (err) {
+               pr_err("%s: regulator_enable failed: %d\n", __func__, err);
+               goto err_en;
+       }
 
        err = tegra_pcie_init(true, true);
        if (err) {
@@ -74,6 +78,7 @@ int __init harmony_pcie_init(void)
 
 err_pcie:
        regulator_disable(regulator);
+err_en:
        regulator_put(regulator);
 err_reg:
        gpio_free(en_vdd_1v05);
index 86851c81a35093a44df58a52472be5d9ed2d7229..60431de585ca71c5a42c3646227cf80338ec4aec 100644 (file)
@@ -26,9 +26,7 @@
 
 void tegra_assert_system_reset(char mode, const char *cmd);
 
-void __init tegra20_init_early(void);
-void __init tegra30_init_early(void);
-void __init tegra114_init_early(void);
+void __init tegra_init_early(void);
 void __init tegra_map_common_io(void);
 void __init tegra_init_irq(void);
 void __init tegra_dt_init_irq(void);
index 5449a3f2977bc5d642891e00ce93087947ed17d8..eb1f3c8c74ccf0ac99839b97bec66551649584a9 100644 (file)
@@ -33,6 +33,7 @@
 #include "common.h"
 #include "fuse.h"
 #include "iomap.h"
+#include "irq.h"
 #include "pmc.h"
 #include "apbio.h"
 #include "sleep.h"
@@ -61,8 +62,10 @@ u32 tegra_uart_config[4] = {
 void __init tegra_dt_init_irq(void)
 {
        tegra_clocks_init();
+       tegra_pmc_init();
        tegra_init_irq();
        irqchip_init();
+       tegra_legacy_irq_syscore_init();
 }
 #endif
 
@@ -94,40 +97,18 @@ static void __init tegra_init_cache(void)
 
 }
 
-static void __init tegra_init_early(void)
+void __init tegra_init_early(void)
 {
        tegra_cpu_reset_handler_init();
        tegra_apb_io_init();
        tegra_init_fuse();
        tegra_init_cache();
-       tegra_pmc_init();
        tegra_powergate_init();
+       tegra_hotplug_init();
 }
 
-#ifdef CONFIG_ARCH_TEGRA_2x_SOC
-void __init tegra20_init_early(void)
-{
-       tegra_init_early();
-       tegra20_hotplug_init();
-}
-#endif
-
-#ifdef CONFIG_ARCH_TEGRA_3x_SOC
-void __init tegra30_init_early(void)
-{
-       tegra_init_early();
-       tegra30_hotplug_init();
-}
-#endif
-
-#ifdef CONFIG_ARCH_TEGRA_114_SOC
-void __init tegra114_init_early(void)
-{
-       tegra_init_early();
-}
-#endif
-
 void __init tegra_init_late(void)
 {
+       tegra_init_suspend();
        tegra_powergate_debugfs_init();
 }
index 825ced4f7a404a48adc8861e35930a024aff30b2..8bbbdebed882fb7a49e8de19fb30b363858af8b6 100644 (file)
@@ -130,10 +130,6 @@ static bool tegra20_cpu_cluster_power_down(struct cpuidle_device *dev,
                                           struct cpuidle_driver *drv,
                                           int index)
 {
-       struct cpuidle_state *state = &drv->states[index];
-       u32 cpu_on_time = state->exit_latency;
-       u32 cpu_off_time = state->target_residency - state->exit_latency;
-
        while (tegra20_cpu_is_resettable_soon())
                cpu_relax();
 
@@ -142,7 +138,7 @@ static bool tegra20_cpu_cluster_power_down(struct cpuidle_device *dev,
 
        clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &dev->cpu);
 
-       tegra_idle_lp2_last(cpu_on_time, cpu_off_time);
+       tegra_idle_lp2_last();
 
        clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &dev->cpu);
 
index 8b50cf4ddd6f04819e0c8a69bf4bf7eb9d28ddc5..c0931c8bb3e5f12c65aebef545c01e9305cb963d 100644 (file)
@@ -72,10 +72,6 @@ static bool tegra30_cpu_cluster_power_down(struct cpuidle_device *dev,
                                           struct cpuidle_driver *drv,
                                           int index)
 {
-       struct cpuidle_state *state = &drv->states[index];
-       u32 cpu_on_time = state->exit_latency;
-       u32 cpu_off_time = state->target_residency - state->exit_latency;
-
        /* All CPUs entering LP2 is not working.
         * Don't let CPU0 enter LP2 when any secondary CPU is online.
         */
@@ -86,7 +82,7 @@ static bool tegra30_cpu_cluster_power_down(struct cpuidle_device *dev,
 
        clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &dev->cpu);
 
-       tegra_idle_lp2_last(cpu_on_time, cpu_off_time);
+       tegra_idle_lp2_last();
 
        clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &dev->cpu);
 
@@ -102,12 +98,8 @@ static bool tegra30_cpu_core_power_down(struct cpuidle_device *dev,
 
        smp_wmb();
 
-       save_cpu_arch_register();
-
        cpu_suspend(0, tegra30_sleep_cpu_secondary_finish);
 
-       restore_cpu_arch_register();
-
        clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &dev->cpu);
 
        return true;
index f7db0782a6b6bdbcc256a06936831ee0d38f49e7..e035cd284a6eb5e3bf1268acb00da3c5784e5ced 100644 (file)
@@ -2,6 +2,7 @@
  * arch/arm/mach-tegra/fuse.c
  *
  * Copyright (C) 2010 Google, Inc.
+ * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.
  *
  * Author:
  *     Colin Cross <ccross@android.com>
@@ -137,6 +138,9 @@ void tegra_init_fuse(void)
                tegra_fuse_spare_bit = TEGRA30_FUSE_SPARE_BIT;
                tegra_init_speedo_data = &tegra30_init_speedo_data;
                break;
+       case TEGRA114:
+               tegra_init_speedo_data = &tegra114_init_speedo_data;
+               break;
        default:
                pr_warn("Tegra: unknown chip id %d\n", tegra_chip_id);
                tegra_fuse_spare_bit = TEGRA20_FUSE_SPARE_BIT;
index da78434678c76029707c6df2d4f2b51a2f31a0bd..aacc00d059801bbfef78faa9251c276f9e4bf8da 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2010 Google, Inc.
+ * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.
  *
  * Author:
  *     Colin Cross <ccross@android.com>
@@ -66,4 +67,10 @@ void tegra30_init_speedo_data(void);
 static inline void tegra30_init_speedo_data(void) {}
 #endif
 
+#ifdef CONFIG_ARCH_TEGRA_114_SOC
+void tegra114_init_speedo_data(void);
+#else
+static inline void tegra114_init_speedo_data(void) {}
+#endif
+
 #endif
index fd473f2b4c3d981e391a3fd8560c51f0b3ddedce..045c16f2dd51fae9d86551d91cb883f6e5d03aba 100644 (file)
@@ -7,8 +7,5 @@
 
 ENTRY(tegra_secondary_startup)
         bl      v7_invalidate_l1
-       /* Enable coresight */
-       mov32   r0, 0xC5ACCE55
-       mcr     p14, 0, r0, c7, c12, 6
         b       secondary_startup
 ENDPROC(tegra_secondary_startup)
index a599f6e36dea49768c6eb18d9550b3d04fb9c1db..8da9f78475da21f81ef314bbd7e9e04939398378 100644 (file)
@@ -1,8 +1,7 @@
 /*
- *
  *  Copyright (C) 2002 ARM Ltd.
  *  All Rights Reserved
- *  Copyright (c) 2010, 2012 NVIDIA Corporation. All rights reserved.
+ *  Copyright (c) 2010, 2012-2013, NVIDIA Corporation. 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
@@ -15,6 +14,7 @@
 #include <asm/cacheflush.h>
 #include <asm/smp_plat.h>
 
+#include "fuse.h"
 #include "sleep.h"
 
 static void (*tegra_hotplug_shutdown)(void);
@@ -56,18 +56,13 @@ int tegra_cpu_disable(unsigned int cpu)
        return cpu == 0 ? -EPERM : 0;
 }
 
-#ifdef CONFIG_ARCH_TEGRA_2x_SOC
-extern void tegra20_hotplug_shutdown(void);
-void __init tegra20_hotplug_init(void)
+void __init tegra_hotplug_init(void)
 {
-       tegra_hotplug_shutdown = tegra20_hotplug_shutdown;
-}
-#endif
+       if (!IS_ENABLED(CONFIG_HOTPLUG_CPU))
+               return;
 
-#ifdef CONFIG_ARCH_TEGRA_3x_SOC
-extern void tegra30_hotplug_shutdown(void);
-void __init tegra30_hotplug_init(void)
-{
-       tegra_hotplug_shutdown = tegra30_hotplug_shutdown;
+       if (IS_ENABLED(CONFIG_ARCH_TEGRA_2x_SOC) && tegra_chip_id == TEGRA20)
+               tegra_hotplug_shutdown = tegra20_hotplug_shutdown;
+       if (IS_ENABLED(CONFIG_ARCH_TEGRA_3x_SOC) && tegra_chip_id == TEGRA30)
+               tegra_hotplug_shutdown = tegra30_hotplug_shutdown;
 }
-#endif
index 1952e82797ccd3f45eecb88e8be523dd0a3d8104..0de4eed1493dca411af5b91bbee8e2b0b6f87ed9 100644 (file)
@@ -4,7 +4,7 @@
  * Author:
  *     Colin Cross <ccross@android.com>
  *
- * Copyright (C) 2010, NVIDIA Corporation
+ * Copyright (C) 2010,2013, NVIDIA Corporation
  *
  * This software is licensed under the terms of the GNU General Public
  * License version 2, as published by the Free Software Foundation, and
@@ -23,6 +23,7 @@
 #include <linux/io.h>
 #include <linux/of.h>
 #include <linux/irqchip/arm-gic.h>
+#include <linux/syscore_ops.h>
 
 #include "board.h"
 #include "iomap.h"
@@ -43,6 +44,7 @@
 #define ICTLR_COP_IEP_CLASS    0x3c
 
 #define FIRST_LEGACY_IRQ 32
+#define TEGRA_MAX_NUM_ICTLRS   5
 
 #define SGI_MASK 0xFFFF
 
@@ -56,6 +58,15 @@ static void __iomem *ictlr_reg_base[] = {
        IO_ADDRESS(TEGRA_QUINARY_ICTLR_BASE),
 };
 
+#ifdef CONFIG_PM_SLEEP
+static u32 cop_ier[TEGRA_MAX_NUM_ICTLRS];
+static u32 cop_iep[TEGRA_MAX_NUM_ICTLRS];
+static u32 cpu_ier[TEGRA_MAX_NUM_ICTLRS];
+static u32 cpu_iep[TEGRA_MAX_NUM_ICTLRS];
+
+static u32 ictlr_wake_mask[TEGRA_MAX_NUM_ICTLRS];
+#endif
+
 bool tegra_pending_sgi(void)
 {
        u32 pending_set;
@@ -125,6 +136,87 @@ static int tegra_retrigger(struct irq_data *d)
        return 1;
 }
 
+#ifdef CONFIG_PM_SLEEP
+static int tegra_set_wake(struct irq_data *d, unsigned int enable)
+{
+       u32 irq = d->irq;
+       u32 index, mask;
+
+       if (irq < FIRST_LEGACY_IRQ ||
+               irq >= FIRST_LEGACY_IRQ + num_ictlrs * 32)
+               return -EINVAL;
+
+       index = ((irq - FIRST_LEGACY_IRQ) / 32);
+       mask = BIT((irq - FIRST_LEGACY_IRQ) % 32);
+       if (enable)
+               ictlr_wake_mask[index] |= mask;
+       else
+               ictlr_wake_mask[index] &= ~mask;
+
+       return 0;
+}
+
+static int tegra_legacy_irq_suspend(void)
+{
+       unsigned long flags;
+       int i;
+
+       local_irq_save(flags);
+       for (i = 0; i < num_ictlrs; i++) {
+               void __iomem *ictlr = ictlr_reg_base[i];
+               /* Save interrupt state */
+               cpu_ier[i] = readl_relaxed(ictlr + ICTLR_CPU_IER);
+               cpu_iep[i] = readl_relaxed(ictlr + ICTLR_CPU_IEP_CLASS);
+               cop_ier[i] = readl_relaxed(ictlr + ICTLR_COP_IER);
+               cop_iep[i] = readl_relaxed(ictlr + ICTLR_COP_IEP_CLASS);
+
+               /* Disable COP interrupts */
+               writel_relaxed(~0ul, ictlr + ICTLR_COP_IER_CLR);
+
+               /* Disable CPU interrupts */
+               writel_relaxed(~0ul, ictlr + ICTLR_CPU_IER_CLR);
+
+               /* Enable the wakeup sources of ictlr */
+               writel_relaxed(ictlr_wake_mask[i], ictlr + ICTLR_CPU_IER_SET);
+       }
+       local_irq_restore(flags);
+
+       return 0;
+}
+
+static void tegra_legacy_irq_resume(void)
+{
+       unsigned long flags;
+       int i;
+
+       local_irq_save(flags);
+       for (i = 0; i < num_ictlrs; i++) {
+               void __iomem *ictlr = ictlr_reg_base[i];
+               writel_relaxed(cpu_iep[i], ictlr + ICTLR_CPU_IEP_CLASS);
+               writel_relaxed(~0ul, ictlr + ICTLR_CPU_IER_CLR);
+               writel_relaxed(cpu_ier[i], ictlr + ICTLR_CPU_IER_SET);
+               writel_relaxed(cop_iep[i], ictlr + ICTLR_COP_IEP_CLASS);
+               writel_relaxed(~0ul, ictlr + ICTLR_COP_IER_CLR);
+               writel_relaxed(cop_ier[i], ictlr + ICTLR_COP_IER_SET);
+       }
+       local_irq_restore(flags);
+}
+
+static struct syscore_ops tegra_legacy_irq_syscore_ops = {
+       .suspend = tegra_legacy_irq_suspend,
+       .resume = tegra_legacy_irq_resume,
+};
+
+int tegra_legacy_irq_syscore_init(void)
+{
+       register_syscore_ops(&tegra_legacy_irq_syscore_ops);
+
+       return 0;
+}
+#else
+#define tegra_set_wake NULL
+#endif
+
 void __init tegra_init_irq(void)
 {
        int i;
@@ -150,6 +242,8 @@ void __init tegra_init_irq(void)
        gic_arch_extn.irq_mask = tegra_mask;
        gic_arch_extn.irq_unmask = tegra_unmask;
        gic_arch_extn.irq_retrigger = tegra_retrigger;
+       gic_arch_extn.irq_set_wake = tegra_set_wake;
+       gic_arch_extn.flags = IRQCHIP_MASK_ON_SUSPEND;
 
        /*
         * Check if there is a devicetree present, since the GIC will be
index 5142649bba05513b46ead7a336b3082141ac41da..bc05ce5613fbf79195159f8eef03324992a5c73d 100644 (file)
 
 bool tegra_pending_sgi(void);
 
+#ifdef CONFIG_PM_SLEEP
+int tegra_legacy_irq_syscore_init(void);
+#else
+static inline int tegra_legacy_irq_syscore_init(void) { return 0; }
+#endif
+
 #endif
index 2c6b3d55213b49f16ee256548279b1742111bd20..516aab28fe34217a8f99576df6b89b99a82f39f9 100644 (file)
 #include <asm/smp_scu.h>
 #include <asm/smp_plat.h>
 
-#include <mach/powergate.h>
-
 #include "fuse.h"
 #include "flowctrl.h"
 #include "reset.h"
+#include "pmc.h"
 
 #include "common.h"
 #include "iomap.h"
 
-extern void tegra_secondary_startup(void);
-
 static cpumask_t tegra_cpu_init_mask;
 
-#define EVP_CPU_RESET_VECTOR \
-       (IO_ADDRESS(TEGRA_EXCEPTION_VECTORS_BASE) + 0x100)
-
 static void __cpuinit tegra_secondary_init(unsigned int cpu)
 {
        /*
@@ -54,25 +48,43 @@ static void __cpuinit tegra_secondary_init(unsigned int cpu)
        cpumask_set_cpu(cpu, &tegra_cpu_init_mask);
 }
 
-static int tegra20_power_up_cpu(unsigned int cpu)
+
+static int tegra20_boot_secondary(unsigned int cpu, struct task_struct *idle)
 {
-       /* Enable the CPU clock. */
-       tegra_enable_cpu_clock(cpu);
+       cpu = cpu_logical_map(cpu);
+
+       /*
+        * Force the CPU into reset. The CPU must remain in reset when
+        * the flow controller state is cleared (which will cause the
+        * flow controller to stop driving reset if the CPU has been
+        * power-gated via the flow controller). This will have no
+        * effect on first boot of the CPU since it should already be
+        * in reset.
+        */
+       tegra_put_cpu_in_reset(cpu);
 
-       /* Clear flow controller CSR. */
-       flowctrl_write_cpu_csr(cpu, 0);
+       /*
+        * Unhalt the CPU. If the flow controller was used to
+        * power-gate the CPU this will cause the flow controller to
+        * stop driving reset. The CPU will remain in reset because the
+        * clock and reset block is now driving reset.
+        */
+       flowctrl_write_cpu_halt(cpu, 0);
 
+       tegra_enable_cpu_clock(cpu);
+       flowctrl_write_cpu_csr(cpu, 0); /* Clear flow controller CSR. */
+       tegra_cpu_out_of_reset(cpu);
        return 0;
 }
 
-static int tegra30_power_up_cpu(unsigned int cpu)
+static int tegra30_boot_secondary(unsigned int cpu, struct task_struct *idle)
 {
-       int ret, pwrgateid;
+       int ret;
        unsigned long timeout;
 
-       pwrgateid = tegra_cpu_powergate_id(cpu);
-       if (pwrgateid < 0)
-               return pwrgateid;
+       cpu = cpu_logical_map(cpu);
+       tegra_put_cpu_in_reset(cpu);
+       flowctrl_write_cpu_halt(cpu, 0);
 
        /*
         * The power up sequence of cold boot CPU and warm boot CPU
@@ -85,13 +97,13 @@ static int tegra30_power_up_cpu(unsigned int cpu)
         * the IO clamps.
         * For cold boot CPU, do not wait. After the cold boot CPU be
         * booted, it will run to tegra_secondary_init() and set
-        * tegra_cpu_init_mask which influences what tegra30_power_up_cpu()
+        * tegra_cpu_init_mask which influences what tegra30_boot_secondary()
         * next time around.
         */
        if (cpumask_test_cpu(cpu, &tegra_cpu_init_mask)) {
                timeout = jiffies + msecs_to_jiffies(50);
                do {
-                       if (!tegra_powergate_is_powered(pwrgateid))
+                       if (tegra_pmc_cpu_is_powered(cpu))
                                goto remove_clamps;
                        udelay(10);
                } while (time_before(jiffies, timeout));
@@ -103,14 +115,14 @@ static int tegra30_power_up_cpu(unsigned int cpu)
         * be un-gated by un-toggling the power gate register
         * manually.
         */
-       if (!tegra_powergate_is_powered(pwrgateid)) {
-               ret = tegra_powergate_power_on(pwrgateid);
+       if (!tegra_pmc_cpu_is_powered(cpu)) {
+               ret = tegra_pmc_cpu_power_on(cpu);
                if (ret)
                        return ret;
 
                /* Wait for the power to come up. */
                timeout = jiffies + msecs_to_jiffies(100);
-               while (tegra_powergate_is_powered(pwrgateid)) {
+               while (tegra_pmc_cpu_is_powered(cpu)) {
                        if (time_after(jiffies, timeout))
                                return -ETIMEDOUT;
                        udelay(10);
@@ -123,57 +135,34 @@ remove_clamps:
        udelay(10);
 
        /* Remove I/O clamps. */
-       ret = tegra_powergate_remove_clamping(pwrgateid);
-       udelay(10);
+       ret = tegra_pmc_cpu_remove_clamping(cpu);
+       if (ret)
+               return ret;
 
-       /* Clear flow controller CSR. */
-       flowctrl_write_cpu_csr(cpu, 0);
+       udelay(10);
 
+       flowctrl_write_cpu_csr(cpu, 0); /* Clear flow controller CSR. */
+       tegra_cpu_out_of_reset(cpu);
        return 0;
 }
 
-static int __cpuinit tegra_boot_secondary(unsigned int cpu, struct task_struct *idle)
+static int tegra114_boot_secondary(unsigned int cpu, struct task_struct *idle)
 {
-       int status;
-
        cpu = cpu_logical_map(cpu);
+       return tegra_pmc_cpu_power_on(cpu);
+}
 
-       /*
-        * Force the CPU into reset. The CPU must remain in reset when the
-        * flow controller state is cleared (which will cause the flow
-        * controller to stop driving reset if the CPU has been power-gated
-        * via the flow controller). This will have no effect on first boot
-        * of the CPU since it should already be in reset.
-        */
-       tegra_put_cpu_in_reset(cpu);
-
-       /*
-        * Unhalt the CPU. If the flow controller was used to power-gate the
-        * CPU this will cause the flow controller to stop driving reset.
-        * The CPU will remain in reset because the clock and reset block
-        * is now driving reset.
-        */
-       flowctrl_write_cpu_halt(cpu, 0);
-
-       switch (tegra_chip_id) {
-       case TEGRA20:
-               status = tegra20_power_up_cpu(cpu);
-               break;
-       case TEGRA30:
-               status = tegra30_power_up_cpu(cpu);
-               break;
-       default:
-               status = -EINVAL;
-               break;
-       }
-
-       if (status)
-               goto done;
-
-       /* Take the CPU out of reset. */
-       tegra_cpu_out_of_reset(cpu);
-done:
-       return status;
+static int __cpuinit tegra_boot_secondary(unsigned int cpu,
+                                         struct task_struct *idle)
+{
+       if (IS_ENABLED(CONFIG_ARCH_TEGRA_2x_SOC) && tegra_chip_id == TEGRA20)
+               return tegra20_boot_secondary(cpu, idle);
+       if (IS_ENABLED(CONFIG_ARCH_TEGRA_3x_SOC) && tegra_chip_id == TEGRA30)
+               return tegra30_boot_secondary(cpu, idle);
+       if (IS_ENABLED(CONFIG_ARCH_TEGRA_114_SOC) && tegra_chip_id == TEGRA114)
+               return tegra114_boot_secondary(cpu, idle);
+
+       return -EINVAL;
 }
 
 static void __init tegra_smp_prepare_cpus(unsigned int max_cpus)
index 523604de666f6f6369330fabadbedb2b05750cf9..d647e9e0e1970e70ffe4e4ed7a11225aff6f89e9 100644 (file)
@@ -22,7 +22,7 @@
 #include <linux/cpumask.h>
 #include <linux/delay.h>
 #include <linux/cpu_pm.h>
-#include <linux/clk.h>
+#include <linux/suspend.h>
 #include <linux/err.h>
 #include <linux/clk/tegra.h>
 
 #include "reset.h"
 #include "flowctrl.h"
 #include "fuse.h"
+#include "pmc.h"
 #include "sleep.h"
 
-#define TEGRA_POWER_CPU_PWRREQ_OE      (1 << 16)  /* CPU pwr req enable */
-
-#define PMC_CTRL               0x0
-#define PMC_CPUPWRGOOD_TIMER   0xc8
-#define PMC_CPUPWROFF_TIMER    0xcc
-
 #ifdef CONFIG_PM_SLEEP
-static unsigned int g_diag_reg;
 static DEFINE_SPINLOCK(tegra_lp2_lock);
-static void __iomem *pmc = IO_ADDRESS(TEGRA_PMC_BASE);
-static struct clk *tegra_pclk;
 void (*tegra_tear_down_cpu)(void);
 
-void save_cpu_arch_register(void)
-{
-       /* read diagnostic register */
-       asm("mrc p15, 0, %0, c15, c0, 1" : "=r"(g_diag_reg) : : "cc");
-       return;
-}
-
-void restore_cpu_arch_register(void)
-{
-       /* write diagnostic register */
-       asm("mcr p15, 0, %0, c15, c0, 1" : : "r"(g_diag_reg) : "cc");
-       return;
-}
-
-static void set_power_timers(unsigned long us_on, unsigned long us_off)
-{
-       unsigned long long ticks;
-       unsigned long long pclk;
-       unsigned long rate;
-       static unsigned long tegra_last_pclk;
-
-       if (tegra_pclk == NULL) {
-               tegra_pclk = clk_get_sys(NULL, "pclk");
-               WARN_ON(IS_ERR(tegra_pclk));
-       }
-
-       rate = clk_get_rate(tegra_pclk);
-
-       if (WARN_ON_ONCE(rate <= 0))
-               pclk = 100000000;
-       else
-               pclk = rate;
-
-       if ((rate != tegra_last_pclk)) {
-               ticks = (us_on * pclk) + 999999ull;
-               do_div(ticks, 1000000);
-               writel((unsigned long)ticks, pmc + PMC_CPUPWRGOOD_TIMER);
-
-               ticks = (us_off * pclk) + 999999ull;
-               do_div(ticks, 1000000);
-               writel((unsigned long)ticks, pmc + PMC_CPUPWROFF_TIMER);
-               wmb();
-       }
-       tegra_last_pclk = pclk;
-}
-
 /*
  * restore_cpu_complex
  *
@@ -119,8 +65,6 @@ static void restore_cpu_complex(void)
        tegra_cpu_clock_resume();
 
        flowctrl_cpu_suspend_exit(cpu);
-
-       restore_cpu_arch_register();
 }
 
 /*
@@ -145,8 +89,6 @@ static void suspend_cpu_complex(void)
        tegra_cpu_clock_suspend();
 
        flowctrl_cpu_suspend_enter(cpu);
-
-       save_cpu_arch_register();
 }
 
 void tegra_clear_cpu_in_lp2(int phy_cpu_id)
@@ -183,12 +125,7 @@ bool tegra_set_cpu_in_lp2(int phy_cpu_id)
 
 static int tegra_sleep_cpu(unsigned long v2p)
 {
-       /* Switch to the identity mapping. */
-       cpu_switch_mm(idmap_pgd, &init_mm);
-
-       /* Flush the TLB. */
-       local_flush_tlb_all();
-
+       setup_mm_for_reboot();
        tegra_sleep_cpu_finish(v2p);
 
        /* should never here */
@@ -197,16 +134,9 @@ static int tegra_sleep_cpu(unsigned long v2p)
        return 0;
 }
 
-void tegra_idle_lp2_last(u32 cpu_on_time, u32 cpu_off_time)
+void tegra_idle_lp2_last(void)
 {
-       u32 mode;
-
-       /* Only the last cpu down does the final suspend steps */
-       mode = readl(pmc + PMC_CTRL);
-       mode |= TEGRA_POWER_CPU_PWRREQ_OE;
-       writel(mode, pmc + PMC_CTRL);
-
-       set_power_timers(cpu_on_time, cpu_off_time);
+       tegra_pmc_pm_set(TEGRA_SUSPEND_LP2);
 
        cpu_cluster_pm_enter();
        suspend_cpu_complex();
@@ -216,4 +146,81 @@ void tegra_idle_lp2_last(u32 cpu_on_time, u32 cpu_off_time)
        restore_cpu_complex();
        cpu_cluster_pm_exit();
 }
+
+enum tegra_suspend_mode tegra_pm_validate_suspend_mode(
+                               enum tegra_suspend_mode mode)
+{
+       /* Tegra114 didn't support any suspending mode yet. */
+       if (tegra_chip_id == TEGRA114)
+               return TEGRA_SUSPEND_NONE;
+
+       /*
+        * The Tegra devices only support suspending to LP2 currently.
+        */
+       if (mode > TEGRA_SUSPEND_LP2)
+               return TEGRA_SUSPEND_LP2;
+
+       return mode;
+}
+
+static const char *lp_state[TEGRA_MAX_SUSPEND_MODE] = {
+       [TEGRA_SUSPEND_NONE] = "none",
+       [TEGRA_SUSPEND_LP2] = "LP2",
+       [TEGRA_SUSPEND_LP1] = "LP1",
+       [TEGRA_SUSPEND_LP0] = "LP0",
+};
+
+static int __cpuinit tegra_suspend_enter(suspend_state_t state)
+{
+       enum tegra_suspend_mode mode = tegra_pmc_get_suspend_mode();
+
+       if (WARN_ON(mode < TEGRA_SUSPEND_NONE ||
+                   mode >= TEGRA_MAX_SUSPEND_MODE))
+               return -EINVAL;
+
+       pr_info("Entering suspend state %s\n", lp_state[mode]);
+
+       tegra_pmc_pm_set(mode);
+
+       local_fiq_disable();
+
+       suspend_cpu_complex();
+       switch (mode) {
+       case TEGRA_SUSPEND_LP2:
+               tegra_set_cpu_in_lp2(0);
+               break;
+       default:
+               break;
+       }
+
+       cpu_suspend(PHYS_OFFSET - PAGE_OFFSET, &tegra_sleep_cpu);
+
+       switch (mode) {
+       case TEGRA_SUSPEND_LP2:
+               tegra_clear_cpu_in_lp2(0);
+               break;
+       default:
+               break;
+       }
+       restore_cpu_complex();
+
+       local_fiq_enable();
+
+       return 0;
+}
+
+static const struct platform_suspend_ops tegra_suspend_ops = {
+       .valid          = suspend_valid_only_mem,
+       .enter          = tegra_suspend_enter,
+};
+
+void __init tegra_init_suspend(void)
+{
+       if (tegra_pmc_get_suspend_mode() == TEGRA_SUSPEND_NONE)
+               return;
+
+       tegra_pmc_suspend_init();
+
+       suspend_set_ops(&tegra_suspend_ops);
+}
 #endif
index 787335cc964cfb38d96f12fa059b3a50331982b0..9d2d038bf12e06bdee8f9ee2e2450e58bacbc063 100644 (file)
@@ -21,6 +21,8 @@
 #ifndef _MACH_TEGRA_PM_H_
 #define _MACH_TEGRA_PM_H_
 
+#include "pmc.h"
+
 extern unsigned long l2x0_saved_regs_addr;
 
 void save_cpu_arch_register(void);
@@ -29,7 +31,20 @@ void restore_cpu_arch_register(void);
 void tegra_clear_cpu_in_lp2(int phy_cpu_id);
 bool tegra_set_cpu_in_lp2(int phy_cpu_id);
 
-void tegra_idle_lp2_last(u32 cpu_on_time, u32 cpu_off_time);
+void tegra_idle_lp2_last(void);
 extern void (*tegra_tear_down_cpu)(void);
 
+#ifdef CONFIG_PM_SLEEP
+enum tegra_suspend_mode tegra_pm_validate_suspend_mode(
+                               enum tegra_suspend_mode mode);
+void tegra_init_suspend(void);
+#else
+enum tegra_suspend_mode tegra_pm_validate_suspend_mode(
+                               enum tegra_suspend_mode mode)
+{
+       return TEGRA_SUSPEND_NONE;
+}
+static inline void tegra_init_suspend(void) {}
+#endif
+
 #endif /* _MACH_TEGRA_PM_H_ */
index d4fdb5fcec20955c95a4f0199efb1ae180f72409..32360e540ce6a8536c41d94577ab21b6d2674693 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved.
+ * Copyright (C) 2012,2013 NVIDIA CORPORATION. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms and conditions of the GNU General Public License,
  */
 
 #include <linux/kernel.h>
+#include <linux/clk.h>
 #include <linux/io.h>
 #include <linux/of.h>
+#include <linux/of_address.h>
 
-#include "iomap.h"
+#include "fuse.h"
+#include "pm.h"
+#include "pmc.h"
+#include "sleep.h"
 
-#define PMC_CTRL               0x0
-#define PMC_CTRL_INTR_LOW      (1 << 17)
+#define TEGRA_POWER_EFFECT_LP0         (1 << 14)  /* LP0 when CPU pwr gated */
+#define TEGRA_POWER_CPU_PWRREQ_POLARITY        (1 << 15)  /* CPU pwr req polarity */
+#define TEGRA_POWER_CPU_PWRREQ_OE      (1 << 16)  /* CPU pwr req enable */
+
+#define PMC_CTRL                       0x0
+#define PMC_CTRL_INTR_LOW              (1 << 17)
+#define PMC_PWRGATE_TOGGLE             0x30
+#define PMC_PWRGATE_TOGGLE_START       (1 << 8)
+#define PMC_REMOVE_CLAMPING            0x34
+#define PMC_PWRGATE_STATUS             0x38
+
+#define PMC_CPUPWRGOOD_TIMER   0xc8
+#define PMC_CPUPWROFF_TIMER    0xcc
+
+#define TEGRA_POWERGATE_PCIE   3
+#define TEGRA_POWERGATE_VDEC   4
+#define TEGRA_POWERGATE_CPU1   9
+#define TEGRA_POWERGATE_CPU2   10
+#define TEGRA_POWERGATE_CPU3   11
+
+static u8 tegra_cpu_domains[] = {
+       0xFF,                   /* not available for CPU0 */
+       TEGRA_POWERGATE_CPU1,
+       TEGRA_POWERGATE_CPU2,
+       TEGRA_POWERGATE_CPU3,
+};
+static DEFINE_SPINLOCK(tegra_powergate_lock);
+
+static void __iomem *tegra_pmc_base;
+static bool tegra_pmc_invert_interrupt;
+static struct clk *tegra_pclk;
+
+struct pmc_pm_data {
+       u32 cpu_good_time;      /* CPU power good time in uS */
+       u32 cpu_off_time;       /* CPU power off time in uS */
+       u32 core_osc_time;      /* Core power good osc time in uS */
+       u32 core_pmu_time;      /* Core power good pmu time in uS */
+       u32 core_off_time;      /* Core power off time in uS */
+       bool corereq_high;      /* Core power request active-high */
+       bool sysclkreq_high;    /* System clock request active-high */
+       bool combined_req;      /* Combined pwr req for CPU & Core */
+       bool cpu_pwr_good_en;   /* CPU power good signal is enabled */
+       u32 lp0_vec_phy_addr;   /* The phy addr of LP0 warm boot code */
+       u32 lp0_vec_size;       /* The size of LP0 warm boot code */
+       enum tegra_suspend_mode suspend_mode;
+};
+static struct pmc_pm_data pmc_pm_data;
 
 static inline u32 tegra_pmc_readl(u32 reg)
 {
-       return readl(IO_ADDRESS(TEGRA_PMC_BASE + reg));
+       return readl(tegra_pmc_base + reg);
 }
 
 static inline void tegra_pmc_writel(u32 val, u32 reg)
 {
-       writel(val, IO_ADDRESS(TEGRA_PMC_BASE + reg));
+       writel(val, tegra_pmc_base + reg);
+}
+
+static int tegra_pmc_get_cpu_powerdomain_id(int cpuid)
+{
+       if (cpuid <= 0 || cpuid >= num_possible_cpus())
+               return -EINVAL;
+       return tegra_cpu_domains[cpuid];
+}
+
+static bool tegra_pmc_powergate_is_powered(int id)
+{
+       return (tegra_pmc_readl(PMC_PWRGATE_STATUS) >> id) & 1;
+}
+
+static int tegra_pmc_powergate_set(int id, bool new_state)
+{
+       bool old_state;
+       unsigned long flags;
+
+       spin_lock_irqsave(&tegra_powergate_lock, flags);
+
+       old_state = tegra_pmc_powergate_is_powered(id);
+       WARN_ON(old_state == new_state);
+
+       tegra_pmc_writel(PMC_PWRGATE_TOGGLE_START | id, PMC_PWRGATE_TOGGLE);
+
+       spin_unlock_irqrestore(&tegra_powergate_lock, flags);
+
+       return 0;
+}
+
+static int tegra_pmc_powergate_remove_clamping(int id)
+{
+       u32 mask;
+
+       /*
+        * Tegra has a bug where PCIE and VDE clamping masks are
+        * swapped relatively to the partition ids.
+        */
+       if (id ==  TEGRA_POWERGATE_VDEC)
+               mask = (1 << TEGRA_POWERGATE_PCIE);
+       else if (id == TEGRA_POWERGATE_PCIE)
+               mask = (1 << TEGRA_POWERGATE_VDEC);
+       else
+               mask = (1 << id);
+
+       tegra_pmc_writel(mask, PMC_REMOVE_CLAMPING);
+
+       return 0;
+}
+
+bool tegra_pmc_cpu_is_powered(int cpuid)
+{
+       int id;
+
+       id = tegra_pmc_get_cpu_powerdomain_id(cpuid);
+       if (id < 0)
+               return false;
+       return tegra_pmc_powergate_is_powered(id);
 }
 
-#ifdef CONFIG_OF
+int tegra_pmc_cpu_power_on(int cpuid)
+{
+       int id;
+
+       id = tegra_pmc_get_cpu_powerdomain_id(cpuid);
+       if (id < 0)
+               return id;
+       return tegra_pmc_powergate_set(id, true);
+}
+
+int tegra_pmc_cpu_remove_clamping(int cpuid)
+{
+       int id;
+
+       id = tegra_pmc_get_cpu_powerdomain_id(cpuid);
+       if (id < 0)
+               return id;
+       return tegra_pmc_powergate_remove_clamping(id);
+}
+
+#ifdef CONFIG_PM_SLEEP
+static void set_power_timers(u32 us_on, u32 us_off, unsigned long rate)
+{
+       unsigned long long ticks;
+       unsigned long long pclk;
+       static unsigned long tegra_last_pclk;
+
+       if (WARN_ON_ONCE(rate <= 0))
+               pclk = 100000000;
+       else
+               pclk = rate;
+
+       if ((rate != tegra_last_pclk)) {
+               ticks = (us_on * pclk) + 999999ull;
+               do_div(ticks, 1000000);
+               tegra_pmc_writel((unsigned long)ticks, PMC_CPUPWRGOOD_TIMER);
+
+               ticks = (us_off * pclk) + 999999ull;
+               do_div(ticks, 1000000);
+               tegra_pmc_writel((unsigned long)ticks, PMC_CPUPWROFF_TIMER);
+               wmb();
+       }
+       tegra_last_pclk = pclk;
+}
+
+enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void)
+{
+       return pmc_pm_data.suspend_mode;
+}
+
+void tegra_pmc_pm_set(enum tegra_suspend_mode mode)
+{
+       u32 reg;
+       unsigned long rate = 0;
+
+       reg = tegra_pmc_readl(PMC_CTRL);
+       reg |= TEGRA_POWER_CPU_PWRREQ_OE;
+       reg &= ~TEGRA_POWER_EFFECT_LP0;
+
+       switch (mode) {
+       case TEGRA_SUSPEND_LP2:
+               rate = clk_get_rate(tegra_pclk);
+               break;
+       default:
+               break;
+       }
+
+       set_power_timers(pmc_pm_data.cpu_good_time, pmc_pm_data.cpu_off_time,
+                        rate);
+
+       tegra_pmc_writel(reg, PMC_CTRL);
+}
+
+void tegra_pmc_suspend_init(void)
+{
+       u32 reg;
+
+       /* Always enable CPU power request */
+       reg = tegra_pmc_readl(PMC_CTRL);
+       reg |= TEGRA_POWER_CPU_PWRREQ_OE;
+       tegra_pmc_writel(reg, PMC_CTRL);
+}
+#endif
+
 static const struct of_device_id matches[] __initconst = {
+       { .compatible = "nvidia,tegra114-pmc" },
+       { .compatible = "nvidia,tegra30-pmc" },
        { .compatible = "nvidia,tegra20-pmc" },
        { }
 };
-#endif
 
-void __init tegra_pmc_init(void)
+static void tegra_pmc_parse_dt(void)
 {
-       /*
-        * For now, Harmony is the only board that uses the PMC, and it wants
-        * the signal inverted. Seaboard would too if it used the PMC.
-        * Hopefully by the time other boards want to use the PMC, everything
-        * will be device-tree, or they also want it inverted.
-        */
-       bool invert_interrupt = true;
-       u32 val;
+       struct device_node *np;
+       u32 prop;
+       enum tegra_suspend_mode suspend_mode;
+       u32 core_good_time[2] = {0, 0};
+       u32 lp0_vec[2] = {0, 0};
 
-#ifdef CONFIG_OF
-       if (of_have_populated_dt()) {
-               struct device_node *np;
+       np = of_find_matching_node(NULL, matches);
+       BUG_ON(!np);
 
-               invert_interrupt = false;
+       tegra_pmc_base = of_iomap(np, 0);
 
-               np = of_find_matching_node(NULL, matches);
-               if (np) {
-                       if (of_find_property(np, "nvidia,invert-interrupt",
-                                               NULL))
-                               invert_interrupt = true;
+       tegra_pmc_invert_interrupt = of_property_read_bool(np,
+                                    "nvidia,invert-interrupt");
+       tegra_pclk = of_clk_get_by_name(np, "pclk");
+       WARN_ON(IS_ERR(tegra_pclk));
+
+       /* Grabbing the power management configurations */
+       if (of_property_read_u32(np, "nvidia,suspend-mode", &prop)) {
+               suspend_mode = TEGRA_SUSPEND_NONE;
+       } else {
+               switch (prop) {
+               case 0:
+                       suspend_mode = TEGRA_SUSPEND_LP0;
+                       break;
+               case 1:
+                       suspend_mode = TEGRA_SUSPEND_LP1;
+                       break;
+               case 2:
+                       suspend_mode = TEGRA_SUSPEND_LP2;
+                       break;
+               default:
+                       suspend_mode = TEGRA_SUSPEND_NONE;
+                       break;
                }
        }
-#endif
+       suspend_mode = tegra_pm_validate_suspend_mode(suspend_mode);
+
+       if (of_property_read_u32(np, "nvidia,cpu-pwr-good-time", &prop))
+               suspend_mode = TEGRA_SUSPEND_NONE;
+       pmc_pm_data.cpu_good_time = prop;
+
+       if (of_property_read_u32(np, "nvidia,cpu-pwr-off-time", &prop))
+               suspend_mode = TEGRA_SUSPEND_NONE;
+       pmc_pm_data.cpu_off_time = prop;
+
+       if (of_property_read_u32_array(np, "nvidia,core-pwr-good-time",
+                       core_good_time, ARRAY_SIZE(core_good_time)))
+               suspend_mode = TEGRA_SUSPEND_NONE;
+       pmc_pm_data.core_osc_time = core_good_time[0];
+       pmc_pm_data.core_pmu_time = core_good_time[1];
+
+       if (of_property_read_u32(np, "nvidia,core-pwr-off-time",
+                                &prop))
+               suspend_mode = TEGRA_SUSPEND_NONE;
+       pmc_pm_data.core_off_time = prop;
+
+       pmc_pm_data.corereq_high = of_property_read_bool(np,
+                               "nvidia,core-power-req-active-high");
+
+       pmc_pm_data.sysclkreq_high = of_property_read_bool(np,
+                               "nvidia,sys-clock-req-active-high");
+
+       pmc_pm_data.combined_req = of_property_read_bool(np,
+                               "nvidia,combined-power-req");
+
+       pmc_pm_data.cpu_pwr_good_en = of_property_read_bool(np,
+                               "nvidia,cpu-pwr-good-en");
+
+       if (of_property_read_u32_array(np, "nvidia,lp0-vec", lp0_vec,
+                                      ARRAY_SIZE(lp0_vec)))
+               if (suspend_mode == TEGRA_SUSPEND_LP0)
+                       suspend_mode = TEGRA_SUSPEND_LP1;
+
+       pmc_pm_data.lp0_vec_phy_addr = lp0_vec[0];
+       pmc_pm_data.lp0_vec_size = lp0_vec[1];
+
+       pmc_pm_data.suspend_mode = suspend_mode;
+}
+
+void __init tegra_pmc_init(void)
+{
+       u32 val;
+
+       tegra_pmc_parse_dt();
 
        val = tegra_pmc_readl(PMC_CTRL);
-       if (invert_interrupt)
+       if (tegra_pmc_invert_interrupt)
                val |= PMC_CTRL_INTR_LOW;
        else
                val &= ~PMC_CTRL_INTR_LOW;
index 8995ee4a87681dd80a63c990b05c324955261f24..e1c2df272f7dc6e723ea4765731fa05cb9baf0e7 100644 (file)
 #ifndef __MACH_TEGRA_PMC_H
 #define __MACH_TEGRA_PMC_H
 
+enum tegra_suspend_mode {
+       TEGRA_SUSPEND_NONE = 0,
+       TEGRA_SUSPEND_LP2,      /* CPU voltage off */
+       TEGRA_SUSPEND_LP1,      /* CPU voltage off, DRAM self-refresh */
+       TEGRA_SUSPEND_LP0,      /* CPU + core voltage off, DRAM self-refresh */
+       TEGRA_MAX_SUSPEND_MODE,
+};
+
+#ifdef CONFIG_PM_SLEEP
+enum tegra_suspend_mode tegra_pmc_get_suspend_mode(void);
+void tegra_pmc_pm_set(enum tegra_suspend_mode mode);
+void tegra_pmc_suspend_init(void);
+#endif
+
+bool tegra_pmc_cpu_is_powered(int cpuid);
+int tegra_pmc_cpu_power_on(int cpuid);
+int tegra_pmc_cpu_remove_clamping(int cpuid);
+
 void tegra_pmc_init(void);
 
 #endif
index 54382ceade4a516b0389626a511a7358af95a4d9..1676aba5e7b84ecf97c577b2ccc8d5ff565308dd 100644 (file)
@@ -41,9 +41,6 @@
  */
 ENTRY(tegra_resume)
        bl      v7_invalidate_l1
-       /* Enable coresight */
-       mov32   r0, 0xC5ACCE55
-       mcr     p14, 0, r0, c7, c12, 6
 
        cpu_id  r0
        cmp     r0, #0                          @ CPU0?
@@ -99,6 +96,8 @@ ENTRY(__tegra_cpu_reset_handler_start)
  *
  * Register usage within the reset handler:
  *
+ *      Others: scratch
+ *      R6  = SoC ID << 8
  *      R7  = CPU present (to the OS) mask
  *      R8  = CPU in LP1 state mask
  *      R9  = CPU in LP2 state mask
@@ -114,6 +113,40 @@ ENTRY(__tegra_cpu_reset_handler_start)
 ENTRY(__tegra_cpu_reset_handler)
 
        cpsid   aif, 0x13                       @ SVC mode, interrupts disabled
+
+       mov32   r6, TEGRA_APB_MISC_BASE
+       ldr     r6, [r6, #APB_MISC_GP_HIDREV]
+       and     r6, r6, #0xff00
+#ifdef CONFIG_ARCH_TEGRA_2x_SOC
+t20_check:
+       cmp     r6, #(0x20 << 8)
+       bne     after_t20_check
+t20_errata:
+       # Tegra20 is a Cortex-A9 r1p1
+       mrc     p15, 0, r0, c1, c0, 0   @ read system control register
+       orr     r0, r0, #1 << 14        @ erratum 716044
+       mcr     p15, 0, r0, c1, c0, 0   @ write system control register
+       mrc     p15, 0, r0, c15, c0, 1  @ read diagnostic register
+       orr     r0, r0, #1 << 4         @ erratum 742230
+       orr     r0, r0, #1 << 11        @ erratum 751472
+       mcr     p15, 0, r0, c15, c0, 1  @ write diagnostic register
+       b       after_errata
+after_t20_check:
+#endif
+#ifdef CONFIG_ARCH_TEGRA_3x_SOC
+t30_check:
+       cmp     r6, #(0x30 << 8)
+       bne     after_t30_check
+t30_errata:
+       # Tegra30 is a Cortex-A9 r2p9
+       mrc     p15, 0, r0, c15, c0, 1  @ read diagnostic register
+       orr     r0, r0, #1 << 6         @ erratum 743622
+       orr     r0, r0, #1 << 11        @ erratum 751472
+       mcr     p15, 0, r0, c15, c0, 1  @ write diagnostic register
+       b       after_errata
+after_t30_check:
+#endif
+after_errata:
        mrc     p15, 0, r10, c0, c0, 5          @ MPIDR
        and     r10, r10, #0x3                  @ R10 = CPU number
        mov     r11, #1
@@ -129,16 +162,13 @@ ENTRY(__tegra_cpu_reset_handler)
 
 #ifdef CONFIG_ARCH_TEGRA_2x_SOC
        /* Are we on Tegra20? */
-       mov32   r6, TEGRA_APB_MISC_BASE
-       ldr     r0, [r6, #APB_MISC_GP_HIDREV]
-       and     r0, r0, #0xff00
-       cmp     r0, #(0x20 << 8)
+       cmp     r6, #(0x20 << 8)
        bne     1f
        /* If not CPU0, don't let CPU0 reset CPU1 now that CPU1 is coming up. */
-       mov32   r6, TEGRA_PMC_BASE
+       mov32   r5, TEGRA_PMC_BASE
        mov     r0, #0
        cmp     r10, #0
-       strne   r0, [r6, #PMC_SCRATCH41]
+       strne   r0, [r5, #PMC_SCRATCH41]
 1:
 #endif
 
index 4ffae541726e1d258502007482e37585e33ad4ee..970ebd5138b99bf0a6d9cf682cee836b1f5cd5e7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2012, NVIDIA Corporation. All rights reserved.
+ * Copyright (c) 2010-2013, NVIDIA Corporation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms and conditions of the GNU General Public License,
@@ -124,11 +124,11 @@ int tegra_sleep_cpu_finish(unsigned long);
 void tegra_disable_clean_inv_dcache(void);
 
 #ifdef CONFIG_HOTPLUG_CPU
-void tegra20_hotplug_init(void);
-void tegra30_hotplug_init(void);
+void tegra20_hotplug_shutdown(void);
+void tegra30_hotplug_shutdown(void);
+void tegra_hotplug_init(void);
 #else
-static inline void tegra20_hotplug_init(void) {}
-static inline void tegra30_hotplug_init(void) {}
+static inline void tegra_hotplug_init(void) {}
 #endif
 
 void tegra20_cpu_shutdown(int cpu);
similarity index 75%
rename from arch/arm/mach-tegra/board-dt-tegra20.c
rename to arch/arm/mach-tegra/tegra.c
index a0edf2510280b60e559c50dce3731927a11de635..84deeab23ee7e6d7209d7389ce76a4cbd42cb70a 100644 (file)
@@ -1,6 +1,7 @@
 /*
- * nVidia Tegra device tree board support
+ * NVIDIA Tegra SoC device tree board support
  *
+ * Copyright (C) 2011, 2013, NVIDIA Corporation
  * Copyright (C) 2010 Secret Lab Technologies, Ltd.
  * Copyright (C) 2010 Google, Inc.
  *
@@ -32,6 +33,8 @@
 #include <linux/io.h>
 #include <linux/i2c.h>
 #include <linux/i2c-tegra.h>
+#include <linux/slab.h>
+#include <linux/sys_soc.h>
 #include <linux/usb/tegra_usb_phy.h>
 
 #include <asm/mach-types.h>
@@ -41,6 +44,7 @@
 
 #include "board.h"
 #include "common.h"
+#include "fuse.h"
 #include "iomap.h"
 
 static struct tegra_ehci_platform_data tegra_ehci1_pdata = {
@@ -79,12 +83,36 @@ static struct of_dev_auxdata tegra20_auxdata_lookup[] __initdata = {
 
 static void __init tegra_dt_init(void)
 {
+       struct soc_device_attribute *soc_dev_attr;
+       struct soc_device *soc_dev;
+       struct device *parent = NULL;
+
+       soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+       if (!soc_dev_attr)
+               goto out;
+
+       soc_dev_attr->family = kasprintf(GFP_KERNEL, "Tegra");
+       soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%d", tegra_revision);
+       soc_dev_attr->soc_id = kasprintf(GFP_KERNEL, "%d", tegra_chip_id);
+
+       soc_dev = soc_device_register(soc_dev_attr);
+       if (IS_ERR(soc_dev)) {
+               kfree(soc_dev_attr->family);
+               kfree(soc_dev_attr->revision);
+               kfree(soc_dev_attr->soc_id);
+               kfree(soc_dev_attr);
+               goto out;
+       }
+
+       parent = soc_device_to_device(soc_dev);
+
        /*
         * Finished with the static registrations now; fill in the missing
         * devices
         */
+out:
        of_platform_populate(NULL, of_default_bus_match_table,
-                               tegra20_auxdata_lookup, NULL);
+                               tegra20_auxdata_lookup, parent);
 }
 
 static void __init trimslice_init(void)
@@ -111,7 +139,8 @@ static void __init harmony_init(void)
 
 static void __init paz00_init(void)
 {
-       tegra_paz00_wifikill_init();
+       if (IS_ENABLED(CONFIG_ARCH_TEGRA_2x_SOC))
+               tegra_paz00_wifikill_init();
 }
 
 static struct {
@@ -137,19 +166,21 @@ static void __init tegra_dt_init_late(void)
        }
 }
 
-static const char *tegra20_dt_board_compat[] = {
+static const char * const tegra_dt_board_compat[] = {
+       "nvidia,tegra114",
+       "nvidia,tegra30",
        "nvidia,tegra20",
        NULL
 };
 
-DT_MACHINE_START(TEGRA_DT, "nVidia Tegra20 (Flattened Device Tree)")
+DT_MACHINE_START(TEGRA_DT, "NVIDIA Tegra SoC (Flattened Device Tree)")
        .map_io         = tegra_map_common_io,
        .smp            = smp_ops(tegra_smp_ops),
-       .init_early     = tegra20_init_early,
+       .init_early     = tegra_init_early,
        .init_irq       = tegra_dt_init_irq,
        .init_time      = clocksource_of_init,
        .init_machine   = tegra_dt_init,
        .init_late      = tegra_dt_init_late,
        .restart        = tegra_assert_system_reset,
-       .dt_compat      = tegra20_dt_board_compat,
+       .dt_compat      = tegra_dt_board_compat,
 MACHINE_END
diff --git a/arch/arm/mach-tegra/tegra114_speedo.c b/arch/arm/mach-tegra/tegra114_speedo.c
new file mode 100644 (file)
index 0000000..5218d48
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <linux/kernel.h>
+#include <linux/bug.h>
+
+#include "fuse.h"
+
+#define CORE_PROCESS_CORNERS_NUM       2
+#define CPU_PROCESS_CORNERS_NUM                2
+
+enum {
+       THRESHOLD_INDEX_0,
+       THRESHOLD_INDEX_1,
+       THRESHOLD_INDEX_COUNT,
+};
+
+static const u32 core_process_speedos[][CORE_PROCESS_CORNERS_NUM] = {
+       {1123,     UINT_MAX},
+       {0,        UINT_MAX},
+};
+
+static const u32 cpu_process_speedos[][CPU_PROCESS_CORNERS_NUM] = {
+       {1695,     UINT_MAX},
+       {0,        UINT_MAX},
+};
+
+static void rev_sku_to_speedo_ids(int rev, int sku, int *threshold)
+{
+       u32 tmp;
+
+       switch (sku) {
+       case 0x00:
+       case 0x10:
+       case 0x05:
+       case 0x06:
+               tegra_cpu_speedo_id = 1;
+               tegra_soc_speedo_id = 0;
+               *threshold = THRESHOLD_INDEX_0;
+               break;
+
+       case 0x03:
+       case 0x04:
+               tegra_cpu_speedo_id = 2;
+               tegra_soc_speedo_id = 1;
+               *threshold = THRESHOLD_INDEX_1;
+               break;
+
+       default:
+               pr_err("Tegra114 Unknown SKU %d\n", sku);
+               tegra_cpu_speedo_id = 0;
+               tegra_soc_speedo_id = 0;
+               *threshold = THRESHOLD_INDEX_0;
+               break;
+       }
+
+       if (rev == TEGRA_REVISION_A01) {
+               tmp = tegra_fuse_readl(0x270) << 1;
+               tmp |= tegra_fuse_readl(0x26c);
+               if (!tmp)
+                       tegra_cpu_speedo_id = 0;
+       }
+}
+
+void tegra114_init_speedo_data(void)
+{
+       u32 cpu_speedo_val;
+       u32 core_speedo_val;
+       int threshold;
+       int i;
+
+       BUILD_BUG_ON(ARRAY_SIZE(cpu_process_speedos) !=
+                       THRESHOLD_INDEX_COUNT);
+       BUILD_BUG_ON(ARRAY_SIZE(core_process_speedos) !=
+                       THRESHOLD_INDEX_COUNT);
+
+       rev_sku_to_speedo_ids(tegra_revision, tegra_sku_id, &threshold);
+
+       cpu_speedo_val = tegra_fuse_readl(0x12c) + 1024;
+       core_speedo_val = tegra_fuse_readl(0x134);
+
+       for (i = 0; i < CPU_PROCESS_CORNERS_NUM; i++)
+               if (cpu_speedo_val < cpu_process_speedos[threshold][i])
+                       break;
+       tegra_cpu_process_id = i;
+
+       for (i = 0; i < CORE_PROCESS_CORNERS_NUM; i++)
+               if (core_speedo_val < core_process_speedos[threshold][i])
+                       break;
+       tegra_core_process_id = i;
+}
index 1c1609da76cec13dd0032d9e123519ba83f9ba75..f815efe54c7356a4bf68dd388a19fb1824b6b22b 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
index f873dcefe0de63b4271ac82302a24892dbe4803d..bf194009e20fc029d063b70ae5e741724d4dbb64 100644 (file)
@@ -711,8 +711,8 @@ static void tegra20_pll_init(void)
 }
 
 static const char *cclk_parents[] = { "clk_m", "pll_c", "clk_32k", "pll_m",
-                                     "pll_p_cclk", "pll_p_out4_cclk",
-                                     "pll_p_out3_cclk", "clk_d", "pll_x" };
+                                     "pll_p", "pll_p_out4",
+                                     "pll_p_out3", "clk_d", "pll_x" };
 static const char *sclk_parents[] = { "clk_m", "pll_c_out1", "pll_p_out4",
                                      "pll_p_out3", "pll_p_out2", "clk_d",
                                      "clk_32k", "pll_m_out1" };
@@ -721,38 +721,6 @@ static void tegra20_super_clk_init(void)
 {
        struct clk *clk;
 
-       /*
-        * DIV_U71 dividers for CCLK, these dividers are used only
-        * if parent clock is fixed rate.
-        */
-
-       /*
-        * Clock input to cclk divided from pll_p using
-        * U71 divider of cclk.
-        */
-       clk = tegra_clk_register_divider("pll_p_cclk", "pll_p",
-                               clk_base + SUPER_CCLK_DIVIDER, 0,
-                               TEGRA_DIVIDER_INT, 16, 8, 1, NULL);
-       clk_register_clkdev(clk, "pll_p_cclk", NULL);
-
-       /*
-        * Clock input to cclk divided from pll_p_out3 using
-        * U71 divider of cclk.
-        */
-       clk = tegra_clk_register_divider("pll_p_out3_cclk", "pll_p_out3",
-                               clk_base + SUPER_CCLK_DIVIDER, 0,
-                               TEGRA_DIVIDER_INT, 16, 8, 1, NULL);
-       clk_register_clkdev(clk, "pll_p_out3_cclk", NULL);
-
-       /*
-        * Clock input to cclk divided from pll_p_out4 using
-        * U71 divider of cclk.
-        */
-       clk = tegra_clk_register_divider("pll_p_out4_cclk", "pll_p_out4",
-                               clk_base + SUPER_CCLK_DIVIDER, 0,
-                               TEGRA_DIVIDER_INT, 16, 8, 1, NULL);
-       clk_register_clkdev(clk, "pll_p_out4_cclk", NULL);
-
        /* CCLK */
        clk = tegra_clk_register_super_mux("cclk", cclk_parents,
                              ARRAY_SIZE(cclk_parents), CLK_SET_RATE_PARENT,
index 0bde03feb095365602af6fe0239a5d13b26181b3..bc4b8ad78aea3273c3d5805da722c02a51221da8 100644 (file)
@@ -189,7 +189,7 @@ static void __init tegra20_init_timer(void)
                BUG();
        }
 
-       clk = clk_get_sys("timer", NULL);
+       clk = of_clk_get(np, 0);
        if (IS_ERR(clk)) {
                pr_warn("Unable to get timer clock. Assuming 12Mhz input clock.\n");
                rate = 12000000;
@@ -216,7 +216,7 @@ static void __init tegra20_init_timer(void)
         * rtc registers are used by read_persistent_clock, keep the rtc clock
         * enabled
         */
-       clk = clk_get_sys("rtc-tegra", NULL);
+       clk = of_clk_get(np, 0);
        if (IS_ERR(clk))
                pr_warn("Unable to get rtc-tegra clock\n");
        else
index 414ad912232f9ecc1558c42e865d289920375dfc..e3956359202c23080e5f751bf5484ba9792a3eb0 100644 (file)
@@ -72,6 +72,7 @@ struct tegra_gpio_bank {
        u32 oe[4];
        u32 int_enb[4];
        u32 int_lvl[4];
+       u32 wake_enb[4];
 #endif
 };
 
@@ -333,15 +334,31 @@ static int tegra_gpio_suspend(struct device *dev)
                        bank->oe[p] = tegra_gpio_readl(GPIO_OE(gpio));
                        bank->int_enb[p] = tegra_gpio_readl(GPIO_INT_ENB(gpio));
                        bank->int_lvl[p] = tegra_gpio_readl(GPIO_INT_LVL(gpio));
+
+                       /* Enable gpio irq for wake up source */
+                       tegra_gpio_writel(bank->wake_enb[p],
+                                         GPIO_INT_ENB(gpio));
                }
        }
        local_irq_restore(flags);
        return 0;
 }
 
-static int tegra_gpio_wake_enable(struct irq_data *d, unsigned int enable)
+static int tegra_gpio_irq_set_wake(struct irq_data *d, unsigned int enable)
 {
        struct tegra_gpio_bank *bank = irq_data_get_irq_chip_data(d);
+       int gpio = d->hwirq;
+       u32 port, bit, mask;
+
+       port = GPIO_PORT(gpio);
+       bit = GPIO_BIT(gpio);
+       mask = BIT(bit);
+
+       if (enable)
+               bank->wake_enb[port] |= mask;
+       else
+               bank->wake_enb[port] &= ~mask;
+
        return irq_set_irq_wake(bank->irq, enable);
 }
 #endif
@@ -353,7 +370,7 @@ static struct irq_chip tegra_gpio_irq_chip = {
        .irq_unmask     = tegra_gpio_irq_unmask,
        .irq_set_type   = tegra_gpio_irq_set_type,
 #ifdef CONFIG_PM_SLEEP
-       .irq_set_wake   = tegra_gpio_wake_enable,
+       .irq_set_wake   = tegra_gpio_irq_set_wake,
 #endif
 };
 
index 20636772c09bd2aa2b794f44c3029e1f57559578..f8a96d652e9ede79b844b78b171a6fd8fc6a5047 100644 (file)
@@ -34,6 +34,8 @@
 #include <linux/dma-mapping.h>
 #include <linux/edma.h>
 #include <linux/mmc/mmc.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
 
 #include <linux/platform_data/mmc-davinci.h>
 
@@ -522,14 +524,16 @@ static int __init davinci_acquire_dma_channels(struct mmc_davinci_host *host)
        dma_cap_set(DMA_SLAVE, mask);
 
        host->dma_tx =
-               dma_request_channel(mask, edma_filter_fn, &host->txdma);
+               dma_request_slave_channel_compat(mask, edma_filter_fn,
+                               &host->txdma, mmc_dev(host->mmc), "tx");
        if (!host->dma_tx) {
                dev_err(mmc_dev(host->mmc), "Can't get dma_tx channel\n");
                return -ENODEV;
        }
 
        host->dma_rx =
-               dma_request_channel(mask, edma_filter_fn, &host->rxdma);
+               dma_request_slave_channel_compat(mask, edma_filter_fn,
+                               &host->rxdma, mmc_dev(host->mmc), "rx");
        if (!host->dma_rx) {
                dev_err(mmc_dev(host->mmc), "Can't get dma_rx channel\n");
                r = -ENODEV;
@@ -1157,16 +1161,86 @@ static void __init init_mmcsd_host(struct mmc_davinci_host *host)
        mmc_davinci_reset_ctrl(host, 0);
 }
 
-static int __init davinci_mmcsd_probe(struct platform_device *pdev)
+static struct platform_device_id davinci_mmc_devtype[] = {
+       {
+               .name   = "dm6441-mmc",
+               .driver_data = MMC_CTLR_VERSION_1,
+       }, {
+               .name   = "da830-mmc",
+               .driver_data = MMC_CTLR_VERSION_2,
+       },
+       {},
+};
+MODULE_DEVICE_TABLE(platform, davinci_mmc_devtype);
+
+static const struct of_device_id davinci_mmc_dt_ids[] = {
+       {
+               .compatible = "ti,dm6441-mmc",
+               .data = &davinci_mmc_devtype[MMC_CTLR_VERSION_1],
+       },
+       {
+               .compatible = "ti,da830-mmc",
+               .data = &davinci_mmc_devtype[MMC_CTLR_VERSION_2],
+       },
+       {},
+};
+MODULE_DEVICE_TABLE(of, davinci_mmc_dt_ids);
+
+static struct davinci_mmc_config
+       *mmc_parse_pdata(struct platform_device *pdev)
 {
+       struct device_node *np;
        struct davinci_mmc_config *pdata = pdev->dev.platform_data;
+       const struct of_device_id *match =
+               of_match_device(of_match_ptr(davinci_mmc_dt_ids), &pdev->dev);
+       u32 data;
+
+       np = pdev->dev.of_node;
+       if (!np)
+               return pdata;
+
+       pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
+       if (!pdata) {
+               dev_err(&pdev->dev, "Failed to allocate memory for struct davinci_mmc_config\n");
+               goto nodata;
+       }
+
+       if (match)
+               pdev->id_entry = match->data;
+
+       if (of_property_read_u32(np, "max-frequency", &pdata->max_freq))
+               dev_info(&pdev->dev, "'max-frequency' property not specified, defaulting to 25MHz\n");
+
+       of_property_read_u32(np, "bus-width", &data);
+       switch (data) {
+       case 1:
+       case 4:
+       case 8:
+               pdata->wires = data;
+               break;
+       default:
+               pdata->wires = 1;
+               dev_info(&pdev->dev, "Unsupported buswidth, defaulting to 1 bit\n");
+       }
+nodata:
+       return pdata;
+}
+
+static int __init davinci_mmcsd_probe(struct platform_device *pdev)
+{
+       struct davinci_mmc_config *pdata = NULL;
        struct mmc_davinci_host *host = NULL;
        struct mmc_host *mmc = NULL;
        struct resource *r, *mem = NULL;
        int ret = 0, irq = 0;
        size_t mem_size;
+       const struct platform_device_id *id_entry;
 
-       /* REVISIT:  when we're fully converted, fail if pdata is NULL */
+       pdata = mmc_parse_pdata(pdev);
+       if (pdata == NULL) {
+               dev_err(&pdev->dev, "Couldn't get platform data\n");
+               return -ENOENT;
+       }
 
        ret = -ENODEV;
        r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -1237,7 +1311,9 @@ static int __init davinci_mmcsd_probe(struct platform_device *pdev)
        if (pdata && (pdata->wires == 8))
                mmc->caps |= (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA);
 
-       host->version = pdata->version;
+       id_entry = platform_get_device_id(pdev);
+       if (id_entry)
+               host->version = id_entry->driver_data;
 
        mmc->ops = &mmc_davinci_ops;
        mmc->f_min = 312500;
@@ -1406,8 +1482,10 @@ static struct platform_driver davinci_mmcsd_driver = {
                .name   = "davinci_mmc",
                .owner  = THIS_MODULE,
                .pm     = davinci_mmcsd_pm_ops,
+               .of_match_table = of_match_ptr(davinci_mmc_dt_ids),
        },
        .remove         = __exit_p(davinci_mmcsd_remove),
+       .id_table       = davinci_mmc_devtype,
 };
 
 static int __init davinci_mmcsd_init(void)
index 5ba6b22ce338e791188b053301e6e768b1556294..9cea4ee377b5bedca8a95f64aa226e3870b962b9 100644 (file)
@@ -23,9 +23,6 @@ struct davinci_mmc_config {
        /* any additional host capabilities: OR'd in to mmc->f_caps */
        u32     caps;
 
-       /* Version of the MMC/SD controller */
-       u8      version;
-
        /* Number of sg segments */
        u8      nr_sg;
 };