]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
Merge tag 'at91-cleanup2' of git://git.kernel.org/pub/scm/linux/kernel/git/nferre...
authorArnd Bergmann <arnd@arndb.de>
Fri, 13 Mar 2015 21:08:58 +0000 (22:08 +0100)
committerArnd Bergmann <arnd@arndb.de>
Fri, 13 Mar 2015 21:08:58 +0000 (22:08 +0100)
Pull "Second batch of cleanup for 4.1" from Nicolas Ferre:

- remove unused matrix header files
- dbgu + chip identification: new driver for SoC detection
  this allow to remove all additional io mapping
- remove old non-standard AT91 setup code

First batch of cleanup for 4.1:
  - little phy fixup that is not needed anymore
  - hudge cleanup of the PM code:
  - removal of "use slow clock" option => always use this for suspend to RAM
  - quicker suspend as the asm function is copied only once to SRAM
  - use of the same asm function for "standby" and "mem" types of suspend
    actions
  - adaptation to the ARMv7 processors

* tag 'at91-cleanup2' of git://git.kernel.org/pub/scm/linux/kernel/git/nferre/linux-at91: (44 commits)
  ARM: at91: remove old setup
  ARM: at91: sama5d4: remove useless map_io
  ARM: at91: sama5 use SoC detection infrastructure
  ARM: at91: at91sam9: use SoC detection infrastructure
  ARM: at91: at91rm9200 use SoC detection infrastructure
  ARM: at91: add soc detection infrastructure
  ARM: at91/dt: introduce atmel,<chip>-dbgu
  ARM: at91: remove unused _matrix.h headers
  ARM: at91: remove unused at91_ioremap_matrix and header
  ARM: at91: remove NEED_MACH_IO_H
  ARM: at91/pm: flush data cache and clean, invalidate and disable the L2 cache
  ARM: at91/pm_suspend: add the WFI instruction support for ARMv7
  ARM: at91/pm: remove unused void (*at91_pm_standby)(void)
  ARM: at91/pm: rename function name: at91_slow_clock() --> at91_pm_suspend_sram_fn()
  ARM: at91/pm: rename file name: pm_slowclock.S --> pm_suspend.S
  ARM: at91/pm: standby mode uses same sram function as suspend to memory mode
  ARM: at91/pm: move the copying the sram function to the sram initialization phase
  ARM: at91/pm_slowclock: create the procedure to handle the sdram self-refresh
  ARM: at91/pm_slowclock: remove clocks which are already stopped when entering slow clock mode
  ARM: at91/pm: remove CONFIG_AT91_SLOW_CLOCK config option
  ...

41 files changed:
Documentation/devicetree/bindings/serial/atmel-usart.txt
Documentation/devicetree/bindings/watchdog/atmel-wdt.txt
arch/arm/Kconfig
arch/arm/boot/dts/at91rm9200.dtsi
arch/arm/boot/dts/at91sam9260.dtsi
arch/arm/boot/dts/at91sam9261.dtsi
arch/arm/boot/dts/at91sam9263.dtsi
arch/arm/boot/dts/at91sam9g45.dtsi
arch/arm/boot/dts/at91sam9n12.dtsi
arch/arm/boot/dts/at91sam9rl.dtsi
arch/arm/boot/dts/at91sam9x5.dtsi
arch/arm/boot/dts/sama5d3.dtsi
arch/arm/boot/dts/sama5d4.dtsi
arch/arm/configs/at91_dt_defconfig
arch/arm/configs/sama5_defconfig
arch/arm/include/debug/at91.S
arch/arm/mach-at91/Kconfig
arch/arm/mach-at91/Makefile
arch/arm/mach-at91/at91rm9200.c
arch/arm/mach-at91/at91sam9.c
arch/arm/mach-at91/generic.h
arch/arm/mach-at91/include/mach/at91_matrix.h [deleted file]
arch/arm/mach-at91/include/mach/at91sam9260_matrix.h [deleted file]
arch/arm/mach-at91/include/mach/at91sam9261_matrix.h [deleted file]
arch/arm/mach-at91/include/mach/at91sam9263_matrix.h [deleted file]
arch/arm/mach-at91/include/mach/at91sam9g45_matrix.h [deleted file]
arch/arm/mach-at91/include/mach/at91sam9n12_matrix.h [deleted file]
arch/arm/mach-at91/include/mach/at91sam9rl_matrix.h [deleted file]
arch/arm/mach-at91/include/mach/at91sam9x5_matrix.h [deleted file]
arch/arm/mach-at91/include/mach/io.h [deleted file]
arch/arm/mach-at91/pm.c
arch/arm/mach-at91/pm.h
arch/arm/mach-at91/pm_slowclock.S [deleted file]
arch/arm/mach-at91/pm_suspend.S [new file with mode: 0644]
arch/arm/mach-at91/sama5.c
arch/arm/mach-at91/setup.c [deleted file]
arch/arm/mach-at91/soc.c [new file with mode: 0644]
arch/arm/mach-at91/soc.h [new file with mode: 0644]
drivers/pcmcia/Kconfig
drivers/pcmcia/at91_cf.c
include/soc/at91/at91sam9_ddrsdr.h

index a6391e70a8fd84086b8982a6e3844f59dfb20949..90787aa2e648c55a91df5a71b9b10d7f4f7ae7c7 100644 (file)
@@ -1,9 +1,10 @@
 * Atmel Universal Synchronous Asynchronous Receiver/Transmitter (USART)
 
 Required properties:
-- compatible: Should be "atmel,<chip>-usart"
+- compatible: Should be "atmel,<chip>-usart" or "atmel,<chip>-dbgu"
   The compatible <chip> indicated will be the first SoC to support an
   additional mode or an USART new feature.
+  For the dbgu UART, use "atmel,<chip>-dbgu", "atmel,<chip>-usart"
 - reg: Should contain registers location and length
 - interrupts: Should contain interrupt
 - clock-names: tuple listing input clock names.
index f90e294d7631f9b538ba3e5e72c2ab1b096a5479..a4d869744f5958f7bd0311868ef3c7b1c3956386 100644 (file)
@@ -26,6 +26,11 @@ Optional properties:
 - atmel,disable : Should be present if you want to disable the watchdog.
 - atmel,idle-halt : Should be present if you want to stop the watchdog when
        entering idle state.
+       CAUTION: This property should be used with care, it actually makes the
+       watchdog not counting when the CPU is in idle state, therefore the
+       watchdog reset time depends on mean CPU usage and will not reset at all
+       if the CPU stop working while it is in idle state, which is probably
+       not what you want.
 - atmel,dbg-halt : Should be present if you want to stop the watchdog when
        entering debug state.
 
index 9f1f09a2bc9bf28894777c08d6968d7faeba55a6..f6c5b05e8de881c059eca030d6032d92c059f0b0 100644 (file)
@@ -361,9 +361,9 @@ config ARCH_AT91
        select ARCH_REQUIRE_GPIOLIB
        select CLKDEV_LOOKUP
        select IRQ_DOMAIN
-       select NEED_MACH_IO_H if PCCARD
        select PINCTRL
        select PINCTRL_AT91
+       select SOC_BUS
        select USE_OF
        help
          This enables support for systems based on Atmel
index 21c2b504f977d16088ce290386ba73ddb4333b6b..c515e4b160be641343014e2c35b17ce52777d0aa 100644 (file)
                        };
 
                        dbgu: serial@fffff200 {
-                               compatible = "atmel,at91rm9200-usart";
+                               compatible = "atmel,at91rm9200-dbgu", "atmel,at91rm9200-usart";
                                reg = <0xfffff200 0x200>;
                                interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
                                pinctrl-names = "default";
index fff0ee69aab495361898b503268fd300a02832c1..7d989a8a9cf782bc8fc4dc42e86ba038c2372656 100644 (file)
 
                                        pinctrl_usart3_rts: usart3_rts-0 {
                                                atmel,pins =
-                                                       <AT91_PIOB 8 AT91_PERIPH_B AT91_PINCTRL_NONE>;  /* PC8 periph B */
+                                                       <AT91_PIOC 8 AT91_PERIPH_B AT91_PINCTRL_NONE>;
                                        };
 
                                        pinctrl_usart3_cts: usart3_cts-0 {
                                                atmel,pins =
-                                                       <AT91_PIOB 10 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PC10 periph B */
+                                                       <AT91_PIOC 10 AT91_PERIPH_B AT91_PINCTRL_NONE>;
                                        };
                                };
 
                        };
 
                        dbgu: serial@fffff200 {
-                               compatible = "atmel,at91sam9260-usart";
+                               compatible = "atmel,at91sam9260-dbgu", "atmel,at91sam9260-usart";
                                reg = <0xfffff200 0x200>;
                                interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
                                pinctrl-names = "default";
                        };
 
                        usb1: gadget@fffa4000 {
-                               compatible = "atmel,at91rm9200-udc";
+                               compatible = "atmel,at91sam9260-udc";
                                reg = <0xfffa4000 0x4000>;
                                interrupts = <10 IRQ_TYPE_LEVEL_HIGH 2>;
                                clocks = <&udc_clk>, <&udpck>;
                                atmel,watchdog-type = "hardware";
                                atmel,reset-type = "all";
                                atmel,dbg-halt;
-                               atmel,idle-halt;
                                status = "disabled";
                        };
 
index e247b0b5fdab2fe1cb41e57fd51450ae723256dd..bf8d1856a55a55a3668bd69879df1ef2c8d1dd26 100644 (file)
                        };
 
                        usb1: gadget@fffa4000 {
-                               compatible = "atmel,at91rm9200-udc";
+                               compatible = "atmel,at91sam9261-udc";
                                reg = <0xfffa4000 0x4000>;
                                interrupts = <10 IRQ_TYPE_LEVEL_HIGH 2>;
-                               clocks = <&usb>, <&udc_clk>, <&udpck>;
-                               clock-names = "usb_clk", "udc_clk", "udpck";
+                               clocks = <&udc_clk>, <&udpck>;
+                               clock-names = "pclk", "hclk";
+                               atmel,matrix = <&matrix>;
                                status = "disabled";
                        };
 
                        };
 
                        matrix: matrix@ffffee00 {
-                               compatible = "atmel,at91sam9260-bus-matrix";
+                               compatible = "atmel,at91sam9260-bus-matrix", "syscon";
                                reg = <0xffffee00 0x200>;
                        };
 
                        };
 
                        dbgu: serial@fffff200 {
-                               compatible = "atmel,at91sam9260-usart";
+                               compatible = "atmel,at91sam9260-dbgu", "atmel,at91sam9260-usart";
                                reg = <0xfffff200 0x200>;
                                interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
                                pinctrl-names = "default";
index 1f67bb4c144eef2489891b63b64edda96402f100..e07dae75be7765ef735b8d9e442eeafad40c4ad2 100644 (file)
@@ -69,7 +69,7 @@
 
        sram1: sram@00500000 {
                compatible = "mmio-sram";
-               reg = <0x00300000 0x4000>;
+               reg = <0x00500000 0x4000>;
        };
 
        ahb {
                        };
 
                        dbgu: serial@ffffee00 {
-                               compatible = "atmel,at91sam9260-usart";
+                               compatible = "atmel,at91sam9260-dbgu", "atmel,at91sam9260-usart";
                                reg = <0xffffee00 0x200>;
                                interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
                                pinctrl-names = "default";
                        };
 
                        usb1: gadget@fff78000 {
-                               compatible = "atmel,at91rm9200-udc";
+                               compatible = "atmel,at91sam9263-udc";
                                reg = <0xfff78000 0x4000>;
                                interrupts = <24 IRQ_TYPE_LEVEL_HIGH 2>;
                                clocks = <&udc_clk>, <&udpck>;
                                atmel,watchdog-type = "hardware";
                                atmel,reset-type = "all";
                                atmel,dbg-halt;
-                               atmel,idle-halt;
                                status = "disabled";
                        };
 
index ee80aa9c0759c17f178965181fb28f2a562f6b13..56b66a795df73f10d9efb0d384b018e8d487db6e 100644 (file)
                        };
 
                        dbgu: serial@ffffee00 {
-                               compatible = "atmel,at91sam9260-usart";
+                               compatible = "atmel,at91sam9260-dbgu", "atmel,at91sam9260-usart";
                                reg = <0xffffee00 0x200>;
                                interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
                                pinctrl-names = "default";
                                atmel,watchdog-type = "hardware";
                                atmel,reset-type = "all";
                                atmel,dbg-halt;
-                               atmel,idle-halt;
                                status = "disabled";
                        };
 
                        compatible = "atmel,at91sam9g45-ehci", "usb-ehci";
                        reg = <0x00800000 0x100000>;
                        interrupts = <22 IRQ_TYPE_LEVEL_HIGH 2>;
-                       clocks = <&usb>, <&uhphs_clk>, <&uhphs_clk>, <&uhpck>;
+                       clocks = <&utmi>, <&uhphs_clk>, <&uhphs_clk>, <&uhpck>;
                        clock-names = "usb_clk", "ehci_clk", "hclk", "uhpck";
                        status = "disabled";
                };
index c2666a7cb5b19b547d31f11d58d5af1c13d36acb..ea0af0f6ec7d7a3fd6f9d2a910bdc7b1efcf2b8c 100644 (file)
                        };
 
                        dbgu: serial@fffff200 {
-                               compatible = "atmel,at91sam9260-usart";
+                               compatible = "atmel,at91sam9260-dbgu", "atmel,at91sam9260-usart";
                                reg = <0xfffff200 0x200>;
                                interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
                                pinctrl-names = "default";
                                atmel,watchdog-type = "hardware";
                                atmel,reset-type = "all";
                                atmel,dbg-halt;
-                               atmel,idle-halt;
                                status = "disabled";
                        };
 
index 40f645b8fe25699d51904e5bdcaba8251375686a..ebfd5ce9cb3867d52c821ca075906b57be86abe8 100644 (file)
                        };
 
                        dbgu: serial@fffff200 {
-                               compatible = "atmel,at91sam9260-usart";
+                               compatible = "atmel,at91sam9260-dbgu", "atmel,at91sam9260-usart";
                                reg = <0xfffff200 0x200>;
                                interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
                                pinctrl-names = "default";
index 818dabdd8c0e08e3089092f27117c1927bc6122f..3aa56ae3410a5f96692df4d0f9f04238e2c06469 100644 (file)
                        };
 
                        dbgu: serial@fffff200 {
-                               compatible = "atmel,at91sam9260-usart";
+                               compatible = "atmel,at91sam9260-dbgu", "atmel,at91sam9260-usart";
                                reg = <0xfffff200 0x200>;
                                interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
                                pinctrl-names = "default";
                                reg = <0x00500000 0x80000
                                       0xf803c000 0x400>;
                                interrupts = <23 IRQ_TYPE_LEVEL_HIGH 0>;
-                               clocks = <&usb>, <&udphs_clk>;
+                               clocks = <&utmi>, <&udphs_clk>;
                                clock-names = "hclk", "pclk";
                                status = "disabled";
 
                                atmel,watchdog-type = "hardware";
                                atmel,reset-type = "all";
                                atmel,dbg-halt;
-                               atmel,idle-halt;
                                status = "disabled";
                        };
 
                        compatible = "atmel,at91sam9g45-ehci", "usb-ehci";
                        reg = <0x00700000 0x100000>;
                        interrupts = <22 IRQ_TYPE_LEVEL_HIGH 2>;
-                       clocks = <&usb>, <&uhphs_clk>, <&uhpck>;
+                       clocks = <&utmi>, <&uhphs_clk>, <&uhpck>;
                        clock-names = "usb_clk", "ehci_clk", "uhpck";
                        status = "disabled";
                };
index 261311bdf65bcb601ee5824b57ea3dcf68920db2..c0a8dfcf8380ef58755b28264e4a5bc40fbb4455 100644 (file)
                        };
 
                        dbgu: serial@ffffee00 {
-                               compatible = "atmel,at91sam9260-usart";
+                               compatible = "atmel,at91sam9260-dbgu", "atmel,at91sam9260-usart";
                                reg = <0xffffee00 0x200>;
                                interrupts = <2 IRQ_TYPE_LEVEL_HIGH 7>;
                                dmas = <&dma1 2 AT91_DMA_CFG_PER_ID(13)>,
                                atmel,watchdog-type = "hardware";
                                atmel,reset-type = "all";
                                atmel,dbg-halt;
-                               atmel,idle-halt;
                                status = "disabled";
                        };
 
                        compatible = "atmel,at91sam9g45-ehci", "usb-ehci";
                        reg = <0x00700000 0x100000>;
                        interrupts = <32 IRQ_TYPE_LEVEL_HIGH 2>;
-                       clocks = <&usb>, <&uhphs_clk>, <&uhpck>;
+                       clocks = <&utmi>, <&uhphs_clk>, <&uhpck>;
                        clock-names = "usb_clk", "ehci_clk", "uhpck";
                        status = "disabled";
                };
index d986b41b965495bce29dc0d610a715ff4ffc0208..782587df5f3fd747247d4da2539c49b4c1cfae9b 100644 (file)
@@ -66,6 +66,7 @@
                gpio4 = &pioE;
                tcb0 = &tcb0;
                tcb1 = &tcb1;
+               i2c0 = &i2c0;
                i2c2 = &i2c2;
        };
        cpus {
                        compatible = "atmel,at91sam9g45-ehci", "usb-ehci";
                        reg = <0x00600000 0x100000>;
                        interrupts = <46 IRQ_TYPE_LEVEL_HIGH 2>;
-                       clocks = <&usb>, <&uhphs_clk>, <&uhpck>;
+                       clocks = <&utmi>, <&uhphs_clk>, <&uhpck>;
                        clock-names = "usb_clk", "ehci_clk", "uhpck";
                        status = "disabled";
                };
 
                                        lcdck: lcdck {
                                                #clock-cells = <0>;
-                                               reg = <4>;
-                                               clocks = <&smd>;
+                                               reg = <3>;
+                                               clocks = <&mck>;
                                        };
 
                                        smdck: smdck {
                                                reg = <50>;
                                        };
 
-                                       lcd_clk: lcd_clk {
+                                       lcdc_clk: lcdc_clk {
                                                #clock-cells = <0>;
                                                reg = <51>;
                                        };
                        };
 
                        dbgu: serial@fc069000 {
-                               compatible = "atmel,at91sam9260-usart";
+                               compatible = "atmel,at91sam9260-dbgu", "atmel,at91sam9260-usart";
                                reg = <0xfc069000 0x200>;
                                interrupts = <2 IRQ_TYPE_LEVEL_HIGH 7>;
                                pinctrl-names = "default";
index f2670f638e97564ac8e3a01ea5bc9a1cbc24be6f..811e72bbe6429b6e6a18ac5c31c267c178d17714 100644 (file)
@@ -70,6 +70,7 @@ CONFIG_SCSI=y
 CONFIG_BLK_DEV_SD=y
 # CONFIG_SCSI_LOWLEVEL is not set
 CONFIG_NETDEVICES=y
+CONFIG_ARM_AT91_ETHER=y
 CONFIG_MACB=y
 # CONFIG_NET_VENDOR_BROADCOM is not set
 CONFIG_DM9000=y
index 41d856effe6cadcf928ddd6f6fd8efa6edbc951d..510c747c65b446b173fb241d15da8c16983a989e 100644 (file)
@@ -3,8 +3,6 @@
 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
index 80a6501b4d5068ceed534f43ba3b1d59083d0b2a..c3c45e628e33bb9bf80a96014f1b510ede78580c 100644 (file)
 #define AT91_DBGU 0xfc00c000 /* SAMA5D4_BASE_USART3 */
 #endif
 
-/* Keep in sync with mach-at91/include/mach/hardware.h */
+#ifdef CONFIG_MMU
 #define AT91_IO_P2V(x) ((x) - 0x01000000)
+#else
+#define AT91_IO_P2V(x) (x)
+#endif
 
 #define AT91_DBGU_SR           (0x14)  /* Status Register */
 #define AT91_DBGU_THR          (0x1c)  /* Transmitter Holding Register */
index c74a44324e5bc3dc7cb4b5e0f31e64ca8c167f5f..4da6bae047f3e1ed3b5fa4915590a4e08236e43b 100644 (file)
@@ -24,7 +24,7 @@ config SOC_SAMA5
        select GENERIC_CLOCKEVENTS
        select MEMORY
        select ATMEL_SDRAMC
-       select PHYLIB if NETDEVICES
+       select SRAM if PM
 
 menu "Atmel AT91 System-on-Chip"
 
@@ -81,6 +81,8 @@ config SOC_AT91RM9200
        select CPU_ARM920T
        select GENERIC_CLOCKEVENTS
        select HAVE_AT91_USB_CLK
+       select MIGHT_HAVE_PCI
+       select SRAM if PM
 
 config SOC_AT91SAM9
        bool "AT91SAM9"
@@ -94,6 +96,7 @@ config SOC_AT91SAM9
        select HAVE_AT91_UTMI
        select HAVE_FB_ATMEL
        select MEMORY
+       select SRAM if PM
        help
          Select this if you are using one of those Atmel SoC:
            AT91SAM9260
@@ -116,20 +119,6 @@ endif # SOC_SAM_V4_V5
 
 comment "AT91 Feature Selections"
 
-config AT91_SLOW_CLOCK
-       bool "Suspend-to-RAM disables main oscillator"
-       select SRAM
-       depends on SUSPEND
-       help
-         Select this if you want Suspend-to-RAM to save the most power
-         possible (without powering off the CPU) by disabling the PLLs
-         and main oscillator so that only the 32 KiHz clock is available.
-
-         When only that slow-clock is available, some peripherals lose
-         functionality.  Many can't issue wakeup events unless faster
-         clocks are available.  Some lose their operating state and
-         need to be completely re-initialized.
-
 config AT91_TIMER_HZ
        int "Kernel HZ (jiffies per second)"
        range 32 1024
index 827fdbcce1c7a69c1a8372db97c99e90e3019452..ea54c9824d891bfbaeb1d71a719ebc15784f6f4d 100644 (file)
@@ -2,7 +2,7 @@
 # Makefile for the linux kernel.
 #
 
-obj-y          := setup.o
+obj-y          := soc.o
 
 obj-$(CONFIG_SOC_AT91SAM9)     += sam9_smc.o
 
@@ -13,7 +13,7 @@ obj-$(CONFIG_SOC_SAMA5)               += sama5.o
 
 # Power Management
 obj-$(CONFIG_PM)               += pm.o
-obj-$(CONFIG_AT91_SLOW_CLOCK)  += pm_slowclock.o
+obj-$(CONFIG_PM)               += pm_suspend.o
 
 ifeq ($(CONFIG_PM_DEBUG),y)
 CFLAGS_pm.o += -DDEBUG
index 8fcfb70f712456e66a26e871dc6f524546980913..bfc9aed90b91382b88ef8af5412efc2b19f98575 100644 (file)
@@ -8,25 +8,22 @@
  * Licensed under GPLv2 or later.
  */
 
-#include <linux/types.h>
-#include <linux/init.h>
-#include <linux/module.h>
-#include <linux/gpio.h>
+#include <linux/clk-provider.h>
 #include <linux/of.h>
-#include <linux/of_irq.h>
 #include <linux/of_platform.h>
-#include <linux/clk-provider.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 <asm/system_misc.h>
 
 #include <mach/at91_st.h>
 
 #include "generic.h"
+#include "soc.h"
+
+static const struct at91_soc rm9200_socs[] = {
+       AT91_SOC(AT91RM9200_CIDR_MATCH, 0, "at91rm9200 BGA", "at91rm9200"),
+       { /* sentinel */ },
+};
 
 static void at91rm9200_restart(enum reboot_mode reboot_mode, const char *cmd)
 {
@@ -45,15 +42,20 @@ static void __init at91rm9200_dt_timer_init(void)
 
 static void __init at91rm9200_dt_device_init(void)
 {
-       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+       struct soc_device *soc;
+       struct device *soc_dev = NULL;
+
+       soc = at91_soc_init(rm9200_socs);
+       if (soc != NULL)
+               soc_dev = soc_device_to_device(soc);
+
+       of_platform_populate(NULL, of_default_bus_match_table, NULL, soc_dev);
 
        arm_pm_idle = at91rm9200_idle;
        arm_pm_restart = at91rm9200_restart;
        at91rm9200_pm_init();
 }
 
-
-
 static const char *at91rm9200_dt_board_compat[] __initconst = {
        "atmel,at91rm9200",
        NULL
@@ -61,7 +63,6 @@ static const char *at91rm9200_dt_board_compat[] __initconst = {
 
 DT_MACHINE_START(at91rm9200_dt, "Atmel AT91RM9200")
        .init_time      = at91rm9200_dt_timer_init,
-       .map_io         = at91_map_io,
        .init_machine   = at91rm9200_dt_device_init,
        .dt_compat      = at91rm9200_dt_board_compat,
 MACHINE_END
index 56e3ba73ec407727eb0c2746b2f88c9edbe4b39a..e47a2093a0e723a1ef477dfc9954798f130b00f7 100644 (file)
@@ -7,29 +7,68 @@
  * Licensed under GPLv2 or later.
  */
 
-#include <linux/types.h>
-#include <linux/init.h>
-#include <linux/module.h>
-#include <linux/gpio.h>
 #include <linux/of.h>
-#include <linux/of_irq.h>
 #include <linux/of_platform.h>
-#include <linux/clk-provider.h>
 
-#include <asm/system_misc.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 <asm/system_misc.h>
 
 #include "generic.h"
+#include "soc.h"
 
-static void __init at91sam9_dt_device_init(void)
+static const struct at91_soc at91sam9_socs[] = {
+       AT91_SOC(AT91SAM9260_CIDR_MATCH, 0, "at91sam9260", NULL),
+       AT91_SOC(AT91SAM9261_CIDR_MATCH, 0, "at91sam9261", NULL),
+       AT91_SOC(AT91SAM9263_CIDR_MATCH, 0, "at91sam9263", NULL),
+       AT91_SOC(AT91SAM9G20_CIDR_MATCH, 0, "at91sam9g20", NULL),
+       AT91_SOC(AT91SAM9RL64_CIDR_MATCH, 0, "at91sam9rl64", NULL),
+       AT91_SOC(AT91SAM9G45_CIDR_MATCH, AT91SAM9M11_EXID_MATCH,
+                "at91sam9m11", "at91sam9g45"),
+       AT91_SOC(AT91SAM9G45_CIDR_MATCH, AT91SAM9M10_EXID_MATCH,
+                "at91sam9m10", "at91sam9g45"),
+       AT91_SOC(AT91SAM9G45_CIDR_MATCH, AT91SAM9G46_EXID_MATCH,
+                "at91sam9g46", "at91sam9g45"),
+       AT91_SOC(AT91SAM9G45_CIDR_MATCH, AT91SAM9G45_EXID_MATCH,
+                "at91sam9g45", "at91sam9g45"),
+       AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9G15_EXID_MATCH,
+                "at91sam9g15", "at91sam9x5"),
+       AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9G35_EXID_MATCH,
+                "at91sam9g35", "at91sam9x5"),
+       AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9X35_EXID_MATCH,
+                "at91sam9x35", "at91sam9x5"),
+       AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9G25_EXID_MATCH,
+                "at91sam9g25", "at91sam9x5"),
+       AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9X25_EXID_MATCH,
+                "at91sam9x25", "at91sam9x5"),
+       AT91_SOC(AT91SAM9N12_CIDR_MATCH, AT91SAM9CN12_EXID_MATCH,
+                "at91sam9cn12", "at91sam9n12"),
+       AT91_SOC(AT91SAM9N12_CIDR_MATCH, AT91SAM9N12_EXID_MATCH,
+                "at91sam9n12", "at91sam9n12"),
+       AT91_SOC(AT91SAM9N12_CIDR_MATCH, AT91SAM9CN11_EXID_MATCH,
+                "at91sam9cn11", "at91sam9n12"),
+       AT91_SOC(AT91SAM9XE128_CIDR_MATCH, 0, "at91sam9xe128", "at91sam9xe128"),
+       AT91_SOC(AT91SAM9XE256_CIDR_MATCH, 0, "at91sam9xe256", "at91sam9xe256"),
+       AT91_SOC(AT91SAM9XE512_CIDR_MATCH, 0, "at91sam9xe512", "at91sam9xe512"),
+       { /* sentinel */ },
+};
+
+static void __init at91sam9_common_init(void)
 {
-       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+       struct soc_device *soc;
+       struct device *soc_dev = NULL;
+
+       soc = at91_soc_init(at91sam9_socs);
+       if (soc != NULL)
+               soc_dev = soc_device_to_device(soc);
+
+       of_platform_populate(NULL, of_default_bus_match_table, NULL, soc_dev);
 
        arm_pm_idle = at91sam9_idle;
+}
+
+static void __init at91sam9_dt_device_init(void)
+{
+       at91sam9_common_init();
        at91sam9260_pm_init();
 }
 
@@ -40,16 +79,13 @@ static const char *at91_dt_board_compat[] __initconst = {
 
 DT_MACHINE_START(at91sam_dt, "Atmel AT91SAM9")
        /* Maintainer: Atmel */
-       .map_io         = at91_map_io,
        .init_machine   = at91sam9_dt_device_init,
        .dt_compat      = at91_dt_board_compat,
 MACHINE_END
 
 static void __init at91sam9g45_dt_device_init(void)
 {
-       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
-
-       arm_pm_idle = at91sam9_idle;
+       at91sam9_common_init();
        at91sam9g45_pm_init();
 }
 
@@ -60,16 +96,13 @@ static const char *at91sam9g45_board_compat[] __initconst = {
 
 DT_MACHINE_START(at91sam9g45_dt, "Atmel AT91SAM9G45")
        /* Maintainer: Atmel */
-       .map_io         = at91_map_io,
        .init_machine   = at91sam9g45_dt_device_init,
        .dt_compat      = at91sam9g45_board_compat,
 MACHINE_END
 
 static void __init at91sam9x5_dt_device_init(void)
 {
-       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
-
-       arm_pm_idle = at91sam9_idle;
+       at91sam9_common_init();
        at91sam9x5_pm_init();
 }
 
@@ -81,7 +114,6 @@ static const char *at91sam9x5_board_compat[] __initconst = {
 
 DT_MACHINE_START(at91sam9x5_dt, "Atmel AT91SAM9")
        /* Maintainer: Atmel */
-       .map_io         = at91_map_io,
        .init_machine   = at91sam9x5_dt_device_init,
        .dt_compat      = at91sam9x5_board_compat,
 MACHINE_END
index 583369ffc284d5588b4c7f4c742cedbefb7614f3..2b396c4e1fc1650b80dc0f44ea370e69b149b6d6 100644 (file)
@@ -25,10 +25,6 @@ extern void at91rm9200_timer_init(void);
 extern void at91rm9200_idle(void);
 extern void at91sam9_idle(void);
 
-/* Matrix */
-extern void at91_ioremap_matrix(u32 base_addr);
-
-
 #ifdef CONFIG_PM
 extern void __init at91rm9200_pm_init(void);
 extern void __init at91sam9260_pm_init(void);
diff --git a/arch/arm/mach-at91/include/mach/at91_matrix.h b/arch/arm/mach-at91/include/mach/at91_matrix.h
deleted file mode 100644 (file)
index f8996c9..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
- *
- * Under GPLv2
- */
-
-#ifndef __MACH_AT91_MATRIX_H__
-#define __MACH_AT91_MATRIX_H__
-
-#ifndef __ASSEMBLY__
-extern void __iomem *at91_matrix_base;
-
-#define at91_matrix_read(field) \
-       __raw_readl(at91_matrix_base + field)
-
-#define at91_matrix_write(field, value) \
-       __raw_writel(value, at91_matrix_base + field)
-
-#else
-.extern at91_matrix_base
-#endif
-
-#endif /* __MACH_AT91_MATRIX_H__ */
diff --git a/arch/arm/mach-at91/include/mach/at91sam9260_matrix.h b/arch/arm/mach-at91/include/mach/at91sam9260_matrix.h
deleted file mode 100644 (file)
index f459df4..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * arch/arm/mach-at91/include/mach/at91sam9260_matrix.h
- *
- *  Copyright (C) 2007 Atmel Corporation.
- *
- * Memory Controllers (MATRIX, EBI) - System peripherals registers.
- * Based on AT91SAM9260 datasheet revision B.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- */
-
-#ifndef AT91SAM9260_MATRIX_H
-#define AT91SAM9260_MATRIX_H
-
-#define AT91_MATRIX_MCFG0      0x00                    /* Master Configuration Register 0 */
-#define AT91_MATRIX_MCFG1      0x04                    /* Master Configuration Register 1 */
-#define AT91_MATRIX_MCFG2      0x08                    /* Master Configuration Register 2 */
-#define AT91_MATRIX_MCFG3      0x0C                    /* Master Configuration Register 3 */
-#define AT91_MATRIX_MCFG4      0x10                    /* Master Configuration Register 4 */
-#define AT91_MATRIX_MCFG5      0x14                    /* Master Configuration Register 5 */
-#define                AT91_MATRIX_ULBT                (7 << 0)        /* Undefined Length Burst Type */
-#define                        AT91_MATRIX_ULBT_INFINITE       (0 << 0)
-#define                        AT91_MATRIX_ULBT_SINGLE         (1 << 0)
-#define                        AT91_MATRIX_ULBT_FOUR           (2 << 0)
-#define                        AT91_MATRIX_ULBT_EIGHT          (3 << 0)
-#define                        AT91_MATRIX_ULBT_SIXTEEN        (4 << 0)
-
-#define AT91_MATRIX_SCFG0      0x40                    /* Slave Configuration Register 0 */
-#define AT91_MATRIX_SCFG1      0x44                    /* Slave Configuration Register 1 */
-#define AT91_MATRIX_SCFG2      0x48                    /* Slave Configuration Register 2 */
-#define AT91_MATRIX_SCFG3      0x4C                    /* Slave Configuration Register 3 */
-#define AT91_MATRIX_SCFG4      0x50                    /* Slave Configuration Register 4 */
-#define                AT91_MATRIX_SLOT_CYCLE          (0xff <<  0)    /* Maximum Number of Allowed Cycles for a Burst */
-#define                AT91_MATRIX_DEFMSTR_TYPE        (3    << 16)    /* Default Master Type */
-#define                        AT91_MATRIX_DEFMSTR_TYPE_NONE   (0 << 16)
-#define                        AT91_MATRIX_DEFMSTR_TYPE_LAST   (1 << 16)
-#define                        AT91_MATRIX_DEFMSTR_TYPE_FIXED  (2 << 16)
-#define                AT91_MATRIX_FIXED_DEFMSTR       (7    << 18)    /* Fixed Index of Default Master */
-#define                AT91_MATRIX_ARBT                (3    << 24)    /* Arbitration Type */
-#define                        AT91_MATRIX_ARBT_ROUND_ROBIN    (0 << 24)
-#define                        AT91_MATRIX_ARBT_FIXED_PRIORITY (1 << 24)
-
-#define AT91_MATRIX_PRAS0      0x80                    /* Priority Register A for Slave 0 */
-#define AT91_MATRIX_PRAS1      0x88                    /* Priority Register A for Slave 1 */
-#define AT91_MATRIX_PRAS2      0x90                    /* Priority Register A for Slave 2 */
-#define AT91_MATRIX_PRAS3      0x98                    /* Priority Register A for Slave 3 */
-#define AT91_MATRIX_PRAS4      0xA0                    /* Priority Register A for Slave 4 */
-#define                AT91_MATRIX_M0PR                (3 << 0)        /* Master 0 Priority */
-#define                AT91_MATRIX_M1PR                (3 << 4)        /* Master 1 Priority */
-#define                AT91_MATRIX_M2PR                (3 << 8)        /* Master 2 Priority */
-#define                AT91_MATRIX_M3PR                (3 << 12)       /* Master 3 Priority */
-#define                AT91_MATRIX_M4PR                (3 << 16)       /* Master 4 Priority */
-#define                AT91_MATRIX_M5PR                (3 << 20)       /* Master 5 Priority */
-
-#define AT91_MATRIX_MRCR       0x100                   /* Master Remap Control Register */
-#define                AT91_MATRIX_RCB0                (1 << 0)        /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
-#define                AT91_MATRIX_RCB1                (1 << 1)        /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
-
-#define AT91_MATRIX_EBICSA     0x11C                   /* EBI Chip Select Assignment Register */
-#define                AT91_MATRIX_CS1A                (1 << 1)        /* Chip Select 1 Assignment */
-#define                        AT91_MATRIX_CS1A_SMC            (0 << 1)
-#define                        AT91_MATRIX_CS1A_SDRAMC         (1 << 1)
-#define                AT91_MATRIX_CS3A                (1 << 3)        /* Chip Select 3 Assignment */
-#define                        AT91_MATRIX_CS3A_SMC            (0 << 3)
-#define                        AT91_MATRIX_CS3A_SMC_SMARTMEDIA (1 << 3)
-#define                AT91_MATRIX_CS4A                (1 << 4)        /* Chip Select 4 Assignment */
-#define                        AT91_MATRIX_CS4A_SMC            (0 << 4)
-#define                        AT91_MATRIX_CS4A_SMC_CF1        (1 << 4)
-#define                AT91_MATRIX_CS5A                (1 << 5)        /* Chip Select 5 Assignment */
-#define                        AT91_MATRIX_CS5A_SMC            (0 << 5)
-#define                        AT91_MATRIX_CS5A_SMC_CF2        (1 << 5)
-#define                AT91_MATRIX_DBPUC               (1 << 8)        /* Data Bus Pull-up Configuration */
-#define                AT91_MATRIX_VDDIOMSEL           (1 << 16)       /* Memory voltage selection */
-#define                        AT91_MATRIX_VDDIOMSEL_1_8V      (0 << 16)
-#define                        AT91_MATRIX_VDDIOMSEL_3_3V      (1 << 16)
-
-#endif
diff --git a/arch/arm/mach-at91/include/mach/at91sam9261_matrix.h b/arch/arm/mach-at91/include/mach/at91sam9261_matrix.h
deleted file mode 100644 (file)
index a50cdf8..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * arch/arm/mach-at91/include/mach/at91sam9261_matrix.h
- *
- *  Copyright (C) 2007 Atmel Corporation.
- *
- * Memory Controllers (MATRIX, EBI) - System peripherals registers.
- * Based on AT91SAM9261 datasheet revision D.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- */
-
-#ifndef AT91SAM9261_MATRIX_H
-#define AT91SAM9261_MATRIX_H
-
-#define AT91_MATRIX_MCFG       0x00                    /* Master Configuration Register */
-#define                AT91_MATRIX_RCB0        (1 << 0)                /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
-#define                AT91_MATRIX_RCB1        (1 << 1)                /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
-
-#define AT91_MATRIX_SCFG0      0x04                    /* Slave Configuration Register 0 */
-#define AT91_MATRIX_SCFG1      0x08                    /* Slave Configuration Register 1 */
-#define AT91_MATRIX_SCFG2      0x0C                    /* Slave Configuration Register 2 */
-#define AT91_MATRIX_SCFG3      0x10                    /* Slave Configuration Register 3 */
-#define AT91_MATRIX_SCFG4      0x14                    /* Slave Configuration Register 4 */
-#define                AT91_MATRIX_SLOT_CYCLE          (0xff << 0)     /* Maximum Number of Allowed Cycles for a Burst */
-#define                AT91_MATRIX_DEFMSTR_TYPE        (3    << 16)    /* Default Master Type */
-#define                        AT91_MATRIX_DEFMSTR_TYPE_NONE   (0 << 16)
-#define                        AT91_MATRIX_DEFMSTR_TYPE_LAST   (1 << 16)
-#define                        AT91_MATRIX_DEFMSTR_TYPE_FIXED  (2 << 16)
-#define                AT91_MATRIX_FIXED_DEFMSTR       (7    << 18)    /* Fixed Index of Default Master */
-
-#define AT91_MATRIX_TCR                0x24                    /* TCM Configuration Register */
-#define                AT91_MATRIX_ITCM_SIZE           (0xf << 0)      /* Size of ITCM enabled memory block */
-#define                        AT91_MATRIX_ITCM_0              (0 << 0)
-#define                        AT91_MATRIX_ITCM_16             (5 << 0)
-#define                        AT91_MATRIX_ITCM_32             (6 << 0)
-#define                        AT91_MATRIX_ITCM_64             (7 << 0)
-#define                AT91_MATRIX_DTCM_SIZE           (0xf << 4)      /* Size of DTCM enabled memory block */
-#define                        AT91_MATRIX_DTCM_0              (0 << 4)
-#define                        AT91_MATRIX_DTCM_16             (5 << 4)
-#define                        AT91_MATRIX_DTCM_32             (6 << 4)
-#define                        AT91_MATRIX_DTCM_64             (7 << 4)
-
-#define AT91_MATRIX_EBICSA     0x30                    /* EBI Chip Select Assignment Register */
-#define                AT91_MATRIX_CS1A                (1 << 1)        /* Chip Select 1 Assignment */
-#define                        AT91_MATRIX_CS1A_SMC            (0 << 1)
-#define                        AT91_MATRIX_CS1A_SDRAMC         (1 << 1)
-#define                AT91_MATRIX_CS3A                (1 << 3)        /* Chip Select 3 Assignment */
-#define                        AT91_MATRIX_CS3A_SMC            (0 << 3)
-#define                        AT91_MATRIX_CS3A_SMC_SMARTMEDIA (1 << 3)
-#define                AT91_MATRIX_CS4A                (1 << 4)        /* Chip Select 4 Assignment */
-#define                        AT91_MATRIX_CS4A_SMC            (0 << 4)
-#define                        AT91_MATRIX_CS4A_SMC_CF1        (1 << 4)
-#define                AT91_MATRIX_CS5A                (1 << 5)        /* Chip Select 5 Assignment */
-#define                        AT91_MATRIX_CS5A_SMC            (0 << 5)
-#define                        AT91_MATRIX_CS5A_SMC_CF2        (1 << 5)
-#define                AT91_MATRIX_DBPUC               (1 << 8)        /* Data Bus Pull-up Configuration */
-
-#define AT91_MATRIX_USBPUCR    0x34                    /* USB Pad Pull-Up Control Register */
-#define                AT91_MATRIX_USBPUCR_PUON        (1 << 30)       /* USB Device PAD Pull-up Enable */
-
-#endif
diff --git a/arch/arm/mach-at91/include/mach/at91sam9263_matrix.h b/arch/arm/mach-at91/include/mach/at91sam9263_matrix.h
deleted file mode 100644 (file)
index ebb5fdb..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * arch/arm/mach-at91/include/mach/at91sam9263_matrix.h
- *
- *  Copyright (C) 2006 Atmel Corporation.
- *
- * Memory Controllers (MATRIX, EBI) - System peripherals registers.
- * Based on AT91SAM9263 datasheet revision B (Preliminary).
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- */
-
-#ifndef AT91SAM9263_MATRIX_H
-#define AT91SAM9263_MATRIX_H
-
-#define AT91_MATRIX_MCFG0      0x00                    /* Master Configuration Register 0 */
-#define AT91_MATRIX_MCFG1      0x04                    /* Master Configuration Register 1 */
-#define AT91_MATRIX_MCFG2      0x08                    /* Master Configuration Register 2 */
-#define AT91_MATRIX_MCFG3      0x0C                    /* Master Configuration Register 3 */
-#define AT91_MATRIX_MCFG4      0x10                    /* Master Configuration Register 4 */
-#define AT91_MATRIX_MCFG5      0x14                    /* Master Configuration Register 5 */
-#define AT91_MATRIX_MCFG6      0x18                    /* Master Configuration Register 6 */
-#define AT91_MATRIX_MCFG7      0x1C                    /* Master Configuration Register 7 */
-#define AT91_MATRIX_MCFG8      0x20                    /* Master Configuration Register 8 */
-#define                AT91_MATRIX_ULBT        (7 << 0)        /* Undefined Length Burst Type */
-#define                        AT91_MATRIX_ULBT_INFINITE       (0 << 0)
-#define                        AT91_MATRIX_ULBT_SINGLE         (1 << 0)
-#define                        AT91_MATRIX_ULBT_FOUR           (2 << 0)
-#define                        AT91_MATRIX_ULBT_EIGHT          (3 << 0)
-#define                        AT91_MATRIX_ULBT_SIXTEEN        (4 << 0)
-
-#define AT91_MATRIX_SCFG0      0x40                    /* Slave Configuration Register 0 */
-#define AT91_MATRIX_SCFG1      0x44                    /* Slave Configuration Register 1 */
-#define AT91_MATRIX_SCFG2      0x48                    /* Slave Configuration Register 2 */
-#define AT91_MATRIX_SCFG3      0x4C                    /* Slave Configuration Register 3 */
-#define AT91_MATRIX_SCFG4      0x50                    /* Slave Configuration Register 4 */
-#define AT91_MATRIX_SCFG5      0x54                    /* Slave Configuration Register 5 */
-#define AT91_MATRIX_SCFG6      0x58                    /* Slave Configuration Register 6 */
-#define AT91_MATRIX_SCFG7      0x5C                    /* Slave Configuration Register 7 */
-#define                AT91_MATRIX_SLOT_CYCLE          (0xff << 0)     /* Maximum Number of Allowed Cycles for a Burst */
-#define                AT91_MATRIX_DEFMSTR_TYPE        (3    << 16)    /* Default Master Type */
-#define                        AT91_MATRIX_DEFMSTR_TYPE_NONE   (0 << 16)
-#define                        AT91_MATRIX_DEFMSTR_TYPE_LAST   (1 << 16)
-#define                        AT91_MATRIX_DEFMSTR_TYPE_FIXED  (2 << 16)
-#define                AT91_MATRIX_FIXED_DEFMSTR       (0xf  << 18)    /* Fixed Index of Default Master */
-#define                AT91_MATRIX_ARBT                (3    << 24)    /* Arbitration Type */
-#define                        AT91_MATRIX_ARBT_ROUND_ROBIN    (0 << 24)
-#define                        AT91_MATRIX_ARBT_FIXED_PRIORITY (1 << 24)
-
-#define AT91_MATRIX_PRAS0      0x80                    /* Priority Register A for Slave 0 */
-#define AT91_MATRIX_PRBS0      0x84                    /* Priority Register B for Slave 0 */
-#define AT91_MATRIX_PRAS1      0x88                    /* Priority Register A for Slave 1 */
-#define AT91_MATRIX_PRBS1      0x8C                    /* Priority Register B for Slave 1 */
-#define AT91_MATRIX_PRAS2      0x90                    /* Priority Register A for Slave 2 */
-#define AT91_MATRIX_PRBS2      0x94                    /* Priority Register B for Slave 2 */
-#define AT91_MATRIX_PRAS3      0x98                    /* Priority Register A for Slave 3 */
-#define AT91_MATRIX_PRBS3      0x9C                    /* Priority Register B for Slave 3 */
-#define AT91_MATRIX_PRAS4      0xA0                    /* Priority Register A for Slave 4 */
-#define AT91_MATRIX_PRBS4      0xA4                    /* Priority Register B for Slave 4 */
-#define AT91_MATRIX_PRAS5      0xA8                    /* Priority Register A for Slave 5 */
-#define AT91_MATRIX_PRBS5      0xAC                    /* Priority Register B for Slave 5 */
-#define AT91_MATRIX_PRAS6      0xB0                    /* Priority Register A for Slave 6 */
-#define AT91_MATRIX_PRBS6      0xB4                    /* Priority Register B for Slave 6 */
-#define AT91_MATRIX_PRAS7      0xB8                    /* Priority Register A for Slave 7 */
-#define AT91_MATRIX_PRBS7      0xBC                    /* Priority Register B for Slave 7 */
-#define                AT91_MATRIX_M0PR                (3 << 0)        /* Master 0 Priority */
-#define                AT91_MATRIX_M1PR                (3 << 4)        /* Master 1 Priority */
-#define                AT91_MATRIX_M2PR                (3 << 8)        /* Master 2 Priority */
-#define                AT91_MATRIX_M3PR                (3 << 12)       /* Master 3 Priority */
-#define                AT91_MATRIX_M4PR                (3 << 16)       /* Master 4 Priority */
-#define                AT91_MATRIX_M5PR                (3 << 20)       /* Master 5 Priority */
-#define                AT91_MATRIX_M6PR                (3 << 24)       /* Master 6 Priority */
-#define                AT91_MATRIX_M7PR                (3 << 28)       /* Master 7 Priority */
-#define                AT91_MATRIX_M8PR                (3 << 0)        /* Master 8 Priority (in Register B) */
-
-#define AT91_MATRIX_MRCR       0x100                   /* Master Remap Control Register */
-#define                AT91_MATRIX_RCB0                (1 << 0)        /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
-#define                AT91_MATRIX_RCB1                (1 << 1)        /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
-#define                AT91_MATRIX_RCB2                (1 << 2)
-#define                AT91_MATRIX_RCB3                (1 << 3)
-#define                AT91_MATRIX_RCB4                (1 << 4)
-#define                AT91_MATRIX_RCB5                (1 << 5)
-#define                AT91_MATRIX_RCB6                (1 << 6)
-#define                AT91_MATRIX_RCB7                (1 << 7)
-#define                AT91_MATRIX_RCB8                (1 << 8)
-
-#define AT91_MATRIX_TCMR       0x114                   /* TCM Configuration Register */
-#define                AT91_MATRIX_ITCM_SIZE           (0xf << 0)      /* Size of ITCM enabled memory block */
-#define                        AT91_MATRIX_ITCM_0              (0 << 0)
-#define                        AT91_MATRIX_ITCM_16             (5 << 0)
-#define                        AT91_MATRIX_ITCM_32             (6 << 0)
-#define                AT91_MATRIX_DTCM_SIZE           (0xf << 4)      /* Size of DTCM enabled memory block */
-#define                        AT91_MATRIX_DTCM_0              (0 << 4)
-#define                        AT91_MATRIX_DTCM_16             (5 << 4)
-#define                        AT91_MATRIX_DTCM_32             (6 << 4)
-
-#define AT91_MATRIX_EBI0CSA    0x120                   /* EBI0 Chip Select Assignment Register */
-#define                AT91_MATRIX_EBI0_CS1A           (1 << 1)        /* Chip Select 1 Assignment */
-#define                        AT91_MATRIX_EBI0_CS1A_SMC               (0 << 1)
-#define                        AT91_MATRIX_EBI0_CS1A_SDRAMC            (1 << 1)
-#define                AT91_MATRIX_EBI0_CS3A           (1 << 3)        /* Chip Select 3 Assignment */
-#define                        AT91_MATRIX_EBI0_CS3A_SMC               (0 << 3)
-#define                        AT91_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA    (1 << 3)
-#define                AT91_MATRIX_EBI0_CS4A           (1 << 4)        /* Chip Select 4 Assignment */
-#define                        AT91_MATRIX_EBI0_CS4A_SMC               (0 << 4)
-#define                        AT91_MATRIX_EBI0_CS4A_SMC_CF1           (1 << 4)
-#define                AT91_MATRIX_EBI0_CS5A           (1 << 5)        /* Chip Select 5 Assignment */
-#define                        AT91_MATRIX_EBI0_CS5A_SMC               (0 << 5)
-#define                        AT91_MATRIX_EBI0_CS5A_SMC_CF2           (1 << 5)
-#define                AT91_MATRIX_EBI0_DBPUC          (1 << 8)        /* Data Bus Pull-up Configuration */
-#define                AT91_MATRIX_EBI0_VDDIOMSEL      (1 << 16)       /* Memory voltage selection */
-#define                        AT91_MATRIX_EBI0_VDDIOMSEL_1_8V         (0 << 16)
-#define                        AT91_MATRIX_EBI0_VDDIOMSEL_3_3V         (1 << 16)
-
-#define AT91_MATRIX_EBI1CSA    0x124                   /* EBI1 Chip Select Assignment Register */
-#define                AT91_MATRIX_EBI1_CS1A           (1 << 1)        /* Chip Select 1 Assignment */
-#define                        AT91_MATRIX_EBI1_CS1A_SMC               (0 << 1)
-#define                        AT91_MATRIX_EBI1_CS1A_SDRAMC            (1 << 1)
-#define                AT91_MATRIX_EBI1_CS2A           (1 << 3)        /* Chip Select 3 Assignment */
-#define                        AT91_MATRIX_EBI1_CS2A_SMC               (0 << 3)
-#define                        AT91_MATRIX_EBI1_CS2A_SMC_SMARTMEDIA    (1 << 3)
-#define                AT91_MATRIX_EBI1_DBPUC          (1 << 8)        /* Data Bus Pull-up Configuration */
-#define                AT91_MATRIX_EBI1_VDDIOMSEL      (1 << 16)       /* Memory voltage selection */
-#define                        AT91_MATRIX_EBI1_VDDIOMSEL_1_8V         (0 << 16)
-#define                        AT91_MATRIX_EBI1_VDDIOMSEL_3_3V         (1 << 16)
-
-#endif
diff --git a/arch/arm/mach-at91/include/mach/at91sam9g45_matrix.h b/arch/arm/mach-at91/include/mach/at91sam9g45_matrix.h
deleted file mode 100644 (file)
index b76e2ed..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Matrix-centric header file for the AT91SAM9G45 family
- *
- *  Copyright (C) 2008-2009 Atmel Corporation.
- *
- * Memory Controllers (MATRIX, EBI) - System peripherals registers.
- * Based on AT91SAM9G45 preliminary datasheet.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- */
-
-#ifndef AT91SAM9G45_MATRIX_H
-#define AT91SAM9G45_MATRIX_H
-
-#define AT91_MATRIX_MCFG0      0x00                    /* Master Configuration Register 0 */
-#define AT91_MATRIX_MCFG1      0x04                    /* Master Configuration Register 1 */
-#define AT91_MATRIX_MCFG2      0x08                    /* Master Configuration Register 2 */
-#define AT91_MATRIX_MCFG3      0x0C                    /* Master Configuration Register 3 */
-#define AT91_MATRIX_MCFG4      0x10                    /* Master Configuration Register 4 */
-#define AT91_MATRIX_MCFG5      0x14                    /* Master Configuration Register 5 */
-#define AT91_MATRIX_MCFG6      0x18                    /* Master Configuration Register 6 */
-#define AT91_MATRIX_MCFG7      0x1C                    /* Master Configuration Register 7 */
-#define AT91_MATRIX_MCFG8      0x20                    /* Master Configuration Register 8 */
-#define AT91_MATRIX_MCFG9      0x24                    /* Master Configuration Register 9 */
-#define AT91_MATRIX_MCFG10     0x28                    /* Master Configuration Register 10 */
-#define AT91_MATRIX_MCFG11     0x2C                    /* Master Configuration Register 11 */
-#define                AT91_MATRIX_ULBT        (7 << 0)        /* Undefined Length Burst Type */
-#define                        AT91_MATRIX_ULBT_INFINITE       (0 << 0)
-#define                        AT91_MATRIX_ULBT_SINGLE         (1 << 0)
-#define                        AT91_MATRIX_ULBT_FOUR           (2 << 0)
-#define                        AT91_MATRIX_ULBT_EIGHT          (3 << 0)
-#define                        AT91_MATRIX_ULBT_SIXTEEN        (4 << 0)
-#define                        AT91_MATRIX_ULBT_THIRTYTWO      (5 << 0)
-#define                        AT91_MATRIX_ULBT_SIXTYFOUR      (6 << 0)
-#define                        AT91_MATRIX_ULBT_128            (7 << 0)
-
-#define AT91_MATRIX_SCFG0      0x40                    /* Slave Configuration Register 0 */
-#define AT91_MATRIX_SCFG1      0x44                    /* Slave Configuration Register 1 */
-#define AT91_MATRIX_SCFG2      0x48                    /* Slave Configuration Register 2 */
-#define AT91_MATRIX_SCFG3      0x4C                    /* Slave Configuration Register 3 */
-#define AT91_MATRIX_SCFG4      0x50                    /* Slave Configuration Register 4 */
-#define AT91_MATRIX_SCFG5      0x54                    /* Slave Configuration Register 5 */
-#define AT91_MATRIX_SCFG6      0x58                    /* Slave Configuration Register 6 */
-#define AT91_MATRIX_SCFG7      0x5C                    /* Slave Configuration Register 7 */
-#define                AT91_MATRIX_SLOT_CYCLE          (0x1ff << 0)    /* Maximum Number of Allowed Cycles for a Burst */
-#define                AT91_MATRIX_DEFMSTR_TYPE        (3    << 16)    /* Default Master Type */
-#define                        AT91_MATRIX_DEFMSTR_TYPE_NONE   (0 << 16)
-#define                        AT91_MATRIX_DEFMSTR_TYPE_LAST   (1 << 16)
-#define                        AT91_MATRIX_DEFMSTR_TYPE_FIXED  (2 << 16)
-#define                AT91_MATRIX_FIXED_DEFMSTR       (0xf  << 18)    /* Fixed Index of Default Master */
-
-#define AT91_MATRIX_PRAS0      0x80                    /* Priority Register A for Slave 0 */
-#define AT91_MATRIX_PRBS0      0x84                    /* Priority Register B for Slave 0 */
-#define AT91_MATRIX_PRAS1      0x88                    /* Priority Register A for Slave 1 */
-#define AT91_MATRIX_PRBS1      0x8C                    /* Priority Register B for Slave 1 */
-#define AT91_MATRIX_PRAS2      0x90                    /* Priority Register A for Slave 2 */
-#define AT91_MATRIX_PRBS2      0x94                    /* Priority Register B for Slave 2 */
-#define AT91_MATRIX_PRAS3      0x98                    /* Priority Register A for Slave 3 */
-#define AT91_MATRIX_PRBS3      0x9C                    /* Priority Register B for Slave 3 */
-#define AT91_MATRIX_PRAS4      0xA0                    /* Priority Register A for Slave 4 */
-#define AT91_MATRIX_PRBS4      0xA4                    /* Priority Register B for Slave 4 */
-#define AT91_MATRIX_PRAS5      0xA8                    /* Priority Register A for Slave 5 */
-#define AT91_MATRIX_PRBS5      0xAC                    /* Priority Register B for Slave 5 */
-#define AT91_MATRIX_PRAS6      0xB0                    /* Priority Register A for Slave 6 */
-#define AT91_MATRIX_PRBS6      0xB4                    /* Priority Register B for Slave 6 */
-#define AT91_MATRIX_PRAS7      0xB8                    /* Priority Register A for Slave 7 */
-#define AT91_MATRIX_PRBS7      0xBC                    /* Priority Register B for Slave 7 */
-#define                AT91_MATRIX_M0PR                (3 << 0)        /* Master 0 Priority */
-#define                AT91_MATRIX_M1PR                (3 << 4)        /* Master 1 Priority */
-#define                AT91_MATRIX_M2PR                (3 << 8)        /* Master 2 Priority */
-#define                AT91_MATRIX_M3PR                (3 << 12)       /* Master 3 Priority */
-#define                AT91_MATRIX_M4PR                (3 << 16)       /* Master 4 Priority */
-#define                AT91_MATRIX_M5PR                (3 << 20)       /* Master 5 Priority */
-#define                AT91_MATRIX_M6PR                (3 << 24)       /* Master 6 Priority */
-#define                AT91_MATRIX_M7PR                (3 << 28)       /* Master 7 Priority */
-#define                AT91_MATRIX_M8PR                (3 << 0)        /* Master 8 Priority (in Register B) */
-#define                AT91_MATRIX_M9PR                (3 << 4)        /* Master 9 Priority (in Register B) */
-#define                AT91_MATRIX_M10PR               (3 << 8)        /* Master 10 Priority (in Register B) */
-#define                AT91_MATRIX_M11PR               (3 << 12)       /* Master 11 Priority (in Register B) */
-
-#define AT91_MATRIX_MRCR       0x100                   /* Master Remap Control Register */
-#define                AT91_MATRIX_RCB0                (1 << 0)        /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
-#define                AT91_MATRIX_RCB1                (1 << 1)        /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
-#define                AT91_MATRIX_RCB2                (1 << 2)
-#define                AT91_MATRIX_RCB3                (1 << 3)
-#define                AT91_MATRIX_RCB4                (1 << 4)
-#define                AT91_MATRIX_RCB5                (1 << 5)
-#define                AT91_MATRIX_RCB6                (1 << 6)
-#define                AT91_MATRIX_RCB7                (1 << 7)
-#define                AT91_MATRIX_RCB8                (1 << 8)
-#define                AT91_MATRIX_RCB9                (1 << 9)
-#define                AT91_MATRIX_RCB10               (1 << 10)
-#define                AT91_MATRIX_RCB11               (1 << 11)
-
-#define AT91_MATRIX_TCMR       0x110                   /* TCM Configuration Register */
-#define                AT91_MATRIX_ITCM_SIZE           (0xf << 0)      /* Size of ITCM enabled memory block */
-#define                        AT91_MATRIX_ITCM_0              (0 << 0)
-#define                        AT91_MATRIX_ITCM_32             (6 << 0)
-#define                AT91_MATRIX_DTCM_SIZE           (0xf << 4)      /* Size of DTCM enabled memory block */
-#define                        AT91_MATRIX_DTCM_0              (0 << 4)
-#define                        AT91_MATRIX_DTCM_32             (6 << 4)
-#define                        AT91_MATRIX_DTCM_64             (7 << 4)
-#define                AT91_MATRIX_TCM_NWS             (0x1 << 11)     /* Wait state TCM register */
-#define                        AT91_MATRIX_TCM_NO_WS           (0x0 << 11)
-#define                        AT91_MATRIX_TCM_ONE_WS          (0x1 << 11)
-
-#define AT91_MATRIX_VIDEO      0x118                   /* Video Mode Configuration Register */
-#define                AT91C_VDEC_SEL                  (0x1 <<  0) /* Video Mode Selection */
-#define                        AT91C_VDEC_SEL_OFF              (0 << 0)
-#define                        AT91C_VDEC_SEL_ON               (1 << 0)
-
-#define AT91_MATRIX_EBICSA     0x128                   /* EBI Chip Select Assignment Register */
-#define                AT91_MATRIX_EBI_CS1A            (1 << 1)        /* Chip Select 1 Assignment */
-#define                        AT91_MATRIX_EBI_CS1A_SMC                (0 << 1)
-#define                        AT91_MATRIX_EBI_CS1A_SDRAMC             (1 << 1)
-#define                AT91_MATRIX_EBI_CS3A            (1 << 3)        /* Chip Select 3 Assignment */
-#define                        AT91_MATRIX_EBI_CS3A_SMC                (0 << 3)
-#define                        AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA     (1 << 3)
-#define                AT91_MATRIX_EBI_CS4A            (1 << 4)        /* Chip Select 4 Assignment */
-#define                        AT91_MATRIX_EBI_CS4A_SMC                (0 << 4)
-#define                        AT91_MATRIX_EBI_CS4A_SMC_CF0            (1 << 4)
-#define                AT91_MATRIX_EBI_CS5A            (1 << 5)        /* Chip Select 5 Assignment */
-#define                        AT91_MATRIX_EBI_CS5A_SMC                (0 << 5)
-#define                        AT91_MATRIX_EBI_CS5A_SMC_CF1            (1 << 5)
-#define                AT91_MATRIX_EBI_DBPUC           (1 << 8)        /* Data Bus Pull-up Configuration */
-#define                        AT91_MATRIX_EBI_DBPU_ON                 (0 << 8)
-#define                        AT91_MATRIX_EBI_DBPU_OFF                (1 << 8)
-#define                AT91_MATRIX_EBI_VDDIOMSEL       (1 << 16)       /* Memory voltage selection */
-#define                        AT91_MATRIX_EBI_VDDIOMSEL_1_8V          (0 << 16)
-#define                        AT91_MATRIX_EBI_VDDIOMSEL_3_3V          (1 << 16)
-#define                AT91_MATRIX_EBI_EBI_IOSR        (1 << 17)       /* EBI I/O slew rate selection */
-#define                        AT91_MATRIX_EBI_EBI_IOSR_REDUCED        (0 << 17)
-#define                        AT91_MATRIX_EBI_EBI_IOSR_NORMAL         (1 << 17)
-#define                AT91_MATRIX_EBI_DDR_IOSR        (1 << 18)       /* DDR2 dedicated port I/O slew rate selection */
-#define                        AT91_MATRIX_EBI_DDR_IOSR_REDUCED        (0 << 18)
-#define                        AT91_MATRIX_EBI_DDR_IOSR_NORMAL         (1 << 18)
-
-#define AT91_MATRIX_WPMR       0x1E4                   /* Write Protect Mode Register */
-#define                AT91_MATRIX_WPMR_WPEN           (1 << 0)        /* Write Protect ENable */
-#define                        AT91_MATRIX_WPMR_WP_WPDIS               (0 << 0)
-#define                        AT91_MATRIX_WPMR_WP_WPEN                (1 << 0)
-#define                AT91_MATRIX_WPMR_WPKEY          (0xFFFFFF << 8) /* Write Protect KEY */
-
-#define AT91_MATRIX_WPSR       0x1E8                   /* Write Protect Status Register */
-#define                AT91_MATRIX_WPSR_WPVS           (1 << 0)        /* Write Protect Violation Status */
-#define                        AT91_MATRIX_WPSR_NO_WPV         (0 << 0)
-#define                        AT91_MATRIX_WPSR_WPV            (1 << 0)
-#define                AT91_MATRIX_WPSR_WPVSRC         (0xFFFF << 8)   /* Write Protect Violation Source */
-
-#endif
diff --git a/arch/arm/mach-at91/include/mach/at91sam9n12_matrix.h b/arch/arm/mach-at91/include/mach/at91sam9n12_matrix.h
deleted file mode 100644 (file)
index 40060cd..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Matrix-centric header file for the AT91SAM9N12
- *
- * Copyright (C) 2012 Atmel Corporation.
- *
- * Only EBI related registers.
- * Write Protect register definitions may be useful.
- *
- * Licensed under GPLv2 or later.
- */
-
-#ifndef _AT91SAM9N12_MATRIX_H_
-#define _AT91SAM9N12_MATRIX_H_
-
-#define AT91_MATRIX_EBICSA     (AT91_MATRIX + 0x118)   /* EBI Chip Select Assignment Register */
-#define                AT91_MATRIX_EBI_CS1A            (1 << 1)        /* Chip Select 1 Assignment */
-#define                        AT91_MATRIX_EBI_CS1A_SMC                (0 << 1)
-#define                        AT91_MATRIX_EBI_CS1A_SDRAMC             (1 << 1)
-#define                AT91_MATRIX_EBI_CS3A            (1 << 3)        /* Chip Select 3 Assignment */
-#define                        AT91_MATRIX_EBI_CS3A_SMC                (0 << 3)
-#define                        AT91_MATRIX_EBI_CS3A_SMC_NANDFLASH      (1 << 3)
-#define                AT91_MATRIX_EBI_DBPUC           (1 << 8)        /* Data Bus Pull-up Configuration */
-#define                        AT91_MATRIX_EBI_DBPU_ON                 (0 << 8)
-#define                        AT91_MATRIX_EBI_DBPU_OFF                (1 << 8)
-#define                AT91_MATRIX_EBI_VDDIOMSEL       (1 << 16)       /* Memory voltage selection */
-#define                        AT91_MATRIX_EBI_VDDIOMSEL_1_8V          (0 << 16)
-#define                        AT91_MATRIX_EBI_VDDIOMSEL_3_3V          (1 << 16)
-#define                AT91_MATRIX_EBI_EBI_IOSR        (1 << 17)       /* EBI I/O slew rate selection */
-#define                        AT91_MATRIX_EBI_EBI_IOSR_REDUCED        (0 << 17)
-#define                        AT91_MATRIX_EBI_EBI_IOSR_NORMAL         (1 << 17)
-#define                AT91_MATRIX_EBI_DDR_IOSR        (1 << 18)       /* DDR2 dedicated port I/O slew rate selection */
-#define                        AT91_MATRIX_EBI_DDR_IOSR_REDUCED        (0 << 18)
-#define                        AT91_MATRIX_EBI_DDR_IOSR_NORMAL         (1 << 18)
-#define                AT91_MATRIX_NFD0_SELECT         (1 << 24)       /* NAND Flash Data Bus Selection */
-#define                        AT91_MATRIX_NFD0_ON_D0                  (0 << 24)
-#define                        AT91_MATRIX_NFD0_ON_D16                 (1 << 24)
-#define                AT91_MATRIX_DDR_MP_EN           (1 << 25)       /* DDR Multi-port Enable */
-#define                        AT91_MATRIX_MP_OFF                      (0 << 25)
-#define                        AT91_MATRIX_MP_ON                       (1 << 25)
-
-#define AT91_MATRIX_WPMR       (AT91_MATRIX + 0x1E4)   /* Write Protect Mode Register */
-#define                AT91_MATRIX_WPMR_WPEN           (1 << 0)        /* Write Protect ENable */
-#define                        AT91_MATRIX_WPMR_WP_WPDIS               (0 << 0)
-#define                        AT91_MATRIX_WPMR_WP_WPEN                (1 << 0)
-#define                AT91_MATRIX_WPMR_WPKEY          (0xFFFFFF << 8) /* Write Protect KEY */
-
-#define AT91_MATRIX_WPSR       (AT91_MATRIX + 0x1E8)   /* Write Protect Status Register */
-#define                AT91_MATRIX_WPSR_WPVS           (1 << 0)        /* Write Protect Violation Status */
-#define                        AT91_MATRIX_WPSR_NO_WPV         (0 << 0)
-#define                        AT91_MATRIX_WPSR_WPV            (1 << 0)
-#define                AT91_MATRIX_WPSR_WPVSRC         (0xFFFF << 8)   /* Write Protect Violation Source */
-
-#endif
diff --git a/arch/arm/mach-at91/include/mach/at91sam9rl_matrix.h b/arch/arm/mach-at91/include/mach/at91sam9rl_matrix.h
deleted file mode 100644 (file)
index 6d160ad..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * arch/arm/mach-at91/include/mach/at91sam9rl_matrix.h
- *
- *  Copyright (C) 2007 Atmel Corporation
- *
- * Memory Controllers (MATRIX, EBI) - System peripherals registers.
- * Based on AT91SAM9RL datasheet revision A. (Preliminary)
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file COPYING in the main directory of this archive for
- * more details.
- */
-
-#ifndef AT91SAM9RL_MATRIX_H
-#define AT91SAM9RL_MATRIX_H
-
-#define AT91_MATRIX_MCFG0      0x00                    /* Master Configuration Register 0 */
-#define AT91_MATRIX_MCFG1      0x04                    /* Master Configuration Register 1 */
-#define AT91_MATRIX_MCFG2      0x08                    /* Master Configuration Register 2 */
-#define AT91_MATRIX_MCFG3      0x0C                    /* Master Configuration Register 3 */
-#define AT91_MATRIX_MCFG4      0x10                    /* Master Configuration Register 4 */
-#define AT91_MATRIX_MCFG5      0x14                    /* Master Configuration Register 5 */
-#define                AT91_MATRIX_ULBT        (7 << 0)        /* Undefined Length Burst Type */
-#define                        AT91_MATRIX_ULBT_INFINITE       (0 << 0)
-#define                        AT91_MATRIX_ULBT_SINGLE         (1 << 0)
-#define                        AT91_MATRIX_ULBT_FOUR           (2 << 0)
-#define                        AT91_MATRIX_ULBT_EIGHT          (3 << 0)
-#define                        AT91_MATRIX_ULBT_SIXTEEN        (4 << 0)
-
-#define AT91_MATRIX_SCFG0      0x40                    /* Slave Configuration Register 0 */
-#define AT91_MATRIX_SCFG1      0x44                    /* Slave Configuration Register 1 */
-#define AT91_MATRIX_SCFG2      0x48                    /* Slave Configuration Register 2 */
-#define AT91_MATRIX_SCFG3      0x4C                    /* Slave Configuration Register 3 */
-#define AT91_MATRIX_SCFG4      0x50                    /* Slave Configuration Register 4 */
-#define AT91_MATRIX_SCFG5      0x54                    /* Slave Configuration Register 5 */
-#define                AT91_MATRIX_SLOT_CYCLE          (0xff << 0)     /* Maximum Number of Allowed Cycles for a Burst */
-#define                AT91_MATRIX_DEFMSTR_TYPE        (3    << 16)    /* Default Master Type */
-#define                        AT91_MATRIX_DEFMSTR_TYPE_NONE   (0 << 16)
-#define                        AT91_MATRIX_DEFMSTR_TYPE_LAST   (1 << 16)
-#define                        AT91_MATRIX_DEFMSTR_TYPE_FIXED  (2 << 16)
-#define                AT91_MATRIX_FIXED_DEFMSTR       (0xf  << 18)    /* Fixed Index of Default Master */
-#define                AT91_MATRIX_ARBT                (3    << 24)    /* Arbitration Type */
-#define                        AT91_MATRIX_ARBT_ROUND_ROBIN    (0 << 24)
-#define                        AT91_MATRIX_ARBT_FIXED_PRIORITY (1 << 24)
-
-#define AT91_MATRIX_PRAS0      0x80                    /* Priority Register A for Slave 0 */
-#define AT91_MATRIX_PRAS1      0x88                    /* Priority Register A for Slave 1 */
-#define AT91_MATRIX_PRAS2      0x90                    /* Priority Register A for Slave 2 */
-#define AT91_MATRIX_PRAS3      0x98                    /* Priority Register A for Slave 3 */
-#define AT91_MATRIX_PRAS4      0xA0                    /* Priority Register A for Slave 4 */
-#define AT91_MATRIX_PRAS5      0xA8                    /* Priority Register A for Slave 5 */
-#define                AT91_MATRIX_M0PR                (3 << 0)        /* Master 0 Priority */
-#define                AT91_MATRIX_M1PR                (3 << 4)        /* Master 1 Priority */
-#define                AT91_MATRIX_M2PR                (3 << 8)        /* Master 2 Priority */
-#define                AT91_MATRIX_M3PR                (3 << 12)       /* Master 3 Priority */
-#define                AT91_MATRIX_M4PR                (3 << 16)       /* Master 4 Priority */
-#define                AT91_MATRIX_M5PR                (3 << 20)       /* Master 5 Priority */
-
-#define AT91_MATRIX_MRCR       0x100                   /* Master Remap Control Register */
-#define                AT91_MATRIX_RCB0                (1 << 0)        /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
-#define                AT91_MATRIX_RCB1                (1 << 1)        /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
-#define                AT91_MATRIX_RCB2                (1 << 2)
-#define                AT91_MATRIX_RCB3                (1 << 3)
-#define                AT91_MATRIX_RCB4                (1 << 4)
-#define                AT91_MATRIX_RCB5                (1 << 5)
-
-#define AT91_MATRIX_TCMR       0x114                   /* TCM Configuration Register */
-#define                AT91_MATRIX_ITCM_SIZE           (0xf << 0)      /* Size of ITCM enabled memory block */
-#define                        AT91_MATRIX_ITCM_0              (0 << 0)
-#define                        AT91_MATRIX_ITCM_16             (5 << 0)
-#define                        AT91_MATRIX_ITCM_32             (6 << 0)
-#define                AT91_MATRIX_DTCM_SIZE           (0xf << 4)      /* Size of DTCM enabled memory block */
-#define                        AT91_MATRIX_DTCM_0              (0 << 4)
-#define                        AT91_MATRIX_DTCM_16             (5 << 4)
-#define                        AT91_MATRIX_DTCM_32             (6 << 4)
-
-#define AT91_MATRIX_EBICSA     0x120                   /* EBI0 Chip Select Assignment Register */
-#define                AT91_MATRIX_CS1A                (1 << 1)        /* Chip Select 1 Assignment */
-#define                        AT91_MATRIX_CS1A_SMC            (0 << 1)
-#define                        AT91_MATRIX_CS1A_SDRAMC         (1 << 1)
-#define                AT91_MATRIX_CS3A                (1 << 3)        /* Chip Select 3 Assignment */
-#define                        AT91_MATRIX_CS3A_SMC            (0 << 3)
-#define                        AT91_MATRIX_CS3A_SMC_SMARTMEDIA (1 << 3)
-#define                AT91_MATRIX_CS4A                (1 << 4)        /* Chip Select 4 Assignment */
-#define                        AT91_MATRIX_CS4A_SMC            (0 << 4)
-#define                        AT91_MATRIX_CS4A_SMC_CF1        (1 << 4)
-#define                AT91_MATRIX_CS5A                (1 << 5)        /* Chip Select 5 Assignment */
-#define                        AT91_MATRIX_CS5A_SMC            (0 << 5)
-#define                        AT91_MATRIX_CS5A_SMC_CF2        (1 << 5)
-#define                AT91_MATRIX_DBPUC               (1 << 8)        /* Data Bus Pull-up Configuration */
-#define                AT91_MATRIX_VDDIOMSEL           (1 << 16)       /* Memory voltage selection */
-#define                        AT91_MATRIX_VDDIOMSEL_1_8V      (0 << 16)
-#define                        AT91_MATRIX_VDDIOMSEL_3_3V      (1 << 16)
-
-
-#endif
diff --git a/arch/arm/mach-at91/include/mach/at91sam9x5_matrix.h b/arch/arm/mach-at91/include/mach/at91sam9x5_matrix.h
deleted file mode 100644 (file)
index a606d39..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Matrix-centric header file for the AT91SAM9x5 family
- *
- *  Copyright (C) 2009-2012 Atmel Corporation.
- *
- * Only EBI related registers.
- * Write Protect register definitions may be useful.
- *
- * Licensed under GPLv2 or later.
- */
-
-#ifndef AT91SAM9X5_MATRIX_H
-#define AT91SAM9X5_MATRIX_H
-
-#define AT91_MATRIX_EBICSA     (AT91_MATRIX + 0x120)   /* EBI Chip Select Assignment Register */
-#define                AT91_MATRIX_EBI_CS1A            (1 << 1)        /* Chip Select 1 Assignment */
-#define                        AT91_MATRIX_EBI_CS1A_SMC                (0 << 1)
-#define                        AT91_MATRIX_EBI_CS1A_SDRAMC             (1 << 1)
-#define                AT91_MATRIX_EBI_CS3A            (1 << 3)        /* Chip Select 3 Assignment */
-#define                        AT91_MATRIX_EBI_CS3A_SMC                (0 << 3)
-#define                        AT91_MATRIX_EBI_CS3A_SMC_NANDFLASH      (1 << 3)
-#define                AT91_MATRIX_EBI_DBPUC           (1 << 8)        /* Data Bus Pull-up Configuration */
-#define                        AT91_MATRIX_EBI_DBPU_ON                 (0 << 8)
-#define                        AT91_MATRIX_EBI_DBPU_OFF                (1 << 8)
-#define                AT91_MATRIX_EBI_VDDIOMSEL       (1 << 16)       /* Memory voltage selection */
-#define                        AT91_MATRIX_EBI_VDDIOMSEL_1_8V          (0 << 16)
-#define                        AT91_MATRIX_EBI_VDDIOMSEL_3_3V          (1 << 16)
-#define                AT91_MATRIX_EBI_EBI_IOSR        (1 << 17)       /* EBI I/O slew rate selection */
-#define                        AT91_MATRIX_EBI_EBI_IOSR_REDUCED        (0 << 17)
-#define                        AT91_MATRIX_EBI_EBI_IOSR_NORMAL         (1 << 17)
-#define                AT91_MATRIX_EBI_DDR_IOSR        (1 << 18)       /* DDR2 dedicated port I/O slew rate selection */
-#define                        AT91_MATRIX_EBI_DDR_IOSR_REDUCED        (0 << 18)
-#define                        AT91_MATRIX_EBI_DDR_IOSR_NORMAL         (1 << 18)
-#define                AT91_MATRIX_NFD0_SELECT         (1 << 24)       /* NAND Flash Data Bus Selection */
-#define                        AT91_MATRIX_NFD0_ON_D0                  (0 << 24)
-#define                        AT91_MATRIX_NFD0_ON_D16                 (1 << 24)
-#define                AT91_MATRIX_DDR_MP_EN           (1 << 25)       /* DDR Multi-port Enable */
-#define                        AT91_MATRIX_MP_OFF                      (0 << 25)
-#define                        AT91_MATRIX_MP_ON                       (1 << 25)
-
-#define AT91_MATRIX_WPMR       (AT91_MATRIX + 0x1E4)   /* Write Protect Mode Register */
-#define                AT91_MATRIX_WPMR_WPEN           (1 << 0)        /* Write Protect ENable */
-#define                        AT91_MATRIX_WPMR_WP_WPDIS               (0 << 0)
-#define                        AT91_MATRIX_WPMR_WP_WPEN                (1 << 0)
-#define                AT91_MATRIX_WPMR_WPKEY          (0xFFFFFF << 8) /* Write Protect KEY */
-
-#define AT91_MATRIX_WPSR       (AT91_MATRIX + 0x1E8)   /* Write Protect Status Register */
-#define                AT91_MATRIX_WPSR_WPVS           (1 << 0)        /* Write Protect Violation Status */
-#define                        AT91_MATRIX_WPSR_NO_WPV         (0 << 0)
-#define                        AT91_MATRIX_WPSR_WPV            (1 << 0)
-#define                AT91_MATRIX_WPSR_WPVSRC         (0xFFFF << 8)   /* Write Protect Violation Source */
-
-#endif
diff --git a/arch/arm/mach-at91/include/mach/io.h b/arch/arm/mach-at91/include/mach/io.h
deleted file mode 100644 (file)
index 2d9ca04..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * arch/arm/mach-at91/include/mach/io.h
- *
- *  Copyright (C) 2003 SAN People
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef __ASM_ARCH_IO_H
-#define __ASM_ARCH_IO_H
-
-#define IO_SPACE_LIMIT         0xFFFFFFFF
-#define __io(a)                        __typesafe_io(a)
-
-#endif
index 5e34fb1433098aee3916f2b4c3019a14d2aa5ba8..ac947cdd506cb819ba044e9579b8721cb9aabc07 100644 (file)
@@ -29,6 +29,8 @@
 #include <linux/atomic.h>
 #include <asm/mach/time.h>
 #include <asm/mach/irq.h>
+#include <asm/fncpy.h>
+#include <asm/cacheflush.h>
 
 #include <mach/cpu.h>
 #include <mach/hardware.h>
@@ -41,7 +43,6 @@ static struct {
        int memctrl;
 } at91_pm_data;
 
-static void (*at91_pm_standby)(void);
 void __iomem *at91_ramc_base[2];
 
 static int at91_pm_valid_state(suspend_state_t state)
@@ -119,76 +120,67 @@ int at91_suspend_entering_slow_clock(void)
 }
 EXPORT_SYMBOL(at91_suspend_entering_slow_clock);
 
-
-static void (*slow_clock)(void __iomem *pmc, void __iomem *ramc0,
+static void (*at91_suspend_sram_fn)(void __iomem *pmc, void __iomem *ramc0,
                          void __iomem *ramc1, int memctrl);
 
-#ifdef CONFIG_AT91_SLOW_CLOCK
-extern void at91_slow_clock(void __iomem *pmc, void __iomem *ramc0,
+extern void at91_pm_suspend_in_sram(void __iomem *pmc, void __iomem *ramc0,
                            void __iomem *ramc1, int memctrl);
-extern u32 at91_slow_clock_sz;
-#endif
+extern u32 at91_pm_suspend_in_sram_sz;
+
+static void at91_pm_suspend(suspend_state_t state)
+{
+       unsigned int pm_data = at91_pm_data.memctrl;
+
+       pm_data |= (state == PM_SUSPEND_MEM) ?
+                               AT91_PM_MODE(AT91_PM_SLOW_CLOCK) : 0;
+
+       flush_cache_all();
+       outer_disable();
+
+       at91_suspend_sram_fn(at91_pmc_base, at91_ramc_base[0],
+                               at91_ramc_base[1], pm_data);
+
+       outer_resume();
+}
 
 static int at91_pm_enter(suspend_state_t state)
 {
        at91_pinctrl_gpio_suspend();
 
        switch (state) {
+       /*
+        * Suspend-to-RAM is like STANDBY plus slow clock mode, so
+        * drivers must suspend more deeply, the master clock switches
+        * to the clk32k and turns off the main oscillator
+        */
+       case PM_SUSPEND_MEM:
                /*
-                * Suspend-to-RAM is like STANDBY plus slow clock mode, so
-                * drivers must suspend more deeply:  only the master clock
-                * controller may be using the main oscillator.
+                * Ensure that clocks are in a valid state.
                 */
-               case PM_SUSPEND_MEM:
-                       /*
-                        * Ensure that clocks are in a valid state.
-                        */
-                       if (!at91_pm_verify_clocks())
-                               goto error;
-
-                       /*
-                        * Enter slow clock mode by switching over to clk32k and
-                        * turning off the main oscillator; reverse on wakeup.
-                        */
-                       if (slow_clock) {
-#ifdef CONFIG_AT91_SLOW_CLOCK
-                               /* copy slow_clock handler to SRAM, and call it */
-                               memcpy(slow_clock, at91_slow_clock, at91_slow_clock_sz);
-#endif
-                               slow_clock(at91_pmc_base, at91_ramc_base[0],
-                                          at91_ramc_base[1],
-                                          at91_pm_data.memctrl);
-                               break;
-                       } else {
-                               pr_info("AT91: PM - no slow clock mode enabled ...\n");
-                               /* FALLTHROUGH leaving master clock alone */
-                       }
+               if (!at91_pm_verify_clocks())
+                       goto error;
 
-               /*
-                * STANDBY mode has *all* drivers suspended; ignores irqs not
-                * marked as 'wakeup' event sources; and reduces DRAM power.
-                * But otherwise it's identical to PM_SUSPEND_ON:  cpu idle, and
-                * nothing fancy done with main or cpu clocks.
-                */
-               case PM_SUSPEND_STANDBY:
-                       /*
-                        * NOTE: the Wait-for-Interrupt instruction needs to be
-                        * in icache so no SDRAM accesses are needed until the
-                        * wakeup IRQ occurs and self-refresh is terminated.
-                        * For ARM 926 based chips, this requirement is weaker
-                        * as at91sam9 can access a RAM in self-refresh mode.
-                        */
-                       if (at91_pm_standby)
-                               at91_pm_standby();
-                       break;
+               at91_pm_suspend(state);
 
-               case PM_SUSPEND_ON:
-                       cpu_do_idle();
-                       break;
+               break;
 
-               default:
-                       pr_debug("AT91: PM - bogus suspend state %d\n", state);
-                       goto error;
+       /*
+        * STANDBY mode has *all* drivers suspended; ignores irqs not
+        * marked as 'wakeup' event sources; and reduces DRAM power.
+        * But otherwise it's identical to PM_SUSPEND_ON: cpu idle, and
+        * nothing fancy done with main or cpu clocks.
+        */
+       case PM_SUSPEND_STANDBY:
+               at91_pm_suspend(state);
+               break;
+
+       case PM_SUSPEND_ON:
+               cpu_do_idle();
+               break;
+
+       default:
+               pr_debug("AT91: PM - bogus suspend state %d\n", state);
+               goto error;
        }
 
 error:
@@ -218,12 +210,10 @@ static struct platform_device at91_cpuidle_device = {
        .name = "cpuidle-at91",
 };
 
-void at91_pm_set_standby(void (*at91_standby)(void))
+static void at91_pm_set_standby(void (*at91_standby)(void))
 {
-       if (at91_standby) {
+       if (at91_standby)
                at91_cpuidle_device.dev.platform_data = at91_standby;
-               at91_pm_standby = at91_standby;
-       }
 }
 
 static const struct of_device_id ramc_ids[] __initconst = {
@@ -263,60 +253,63 @@ static __init void at91_dt_ramc(void)
        at91_pm_set_standby(standby);
 }
 
-#ifdef CONFIG_AT91_SLOW_CLOCK
 static void __init at91_pm_sram_init(void)
 {
        struct gen_pool *sram_pool;
        phys_addr_t sram_pbase;
        unsigned long sram_base;
        struct device_node *node;
-       struct platform_device *pdev;
+       struct platform_device *pdev = NULL;
 
-       node = of_find_compatible_node(NULL, NULL, "mmio-sram");
-       if (!node) {
-               pr_warn("%s: failed to find sram node!\n", __func__);
-               return;
+       for_each_compatible_node(node, NULL, "mmio-sram") {
+               pdev = of_find_device_by_node(node);
+               if (pdev) {
+                       of_node_put(node);
+                       break;
+               }
        }
 
-       pdev = of_find_device_by_node(node);
        if (!pdev) {
                pr_warn("%s: failed to find sram device!\n", __func__);
-               goto put_node;
+               return;
        }
 
        sram_pool = dev_get_gen_pool(&pdev->dev);
        if (!sram_pool) {
                pr_warn("%s: sram pool unavailable!\n", __func__);
-               goto put_node;
+               return;
        }
 
-       sram_base = gen_pool_alloc(sram_pool, at91_slow_clock_sz);
+       sram_base = gen_pool_alloc(sram_pool, at91_pm_suspend_in_sram_sz);
        if (!sram_base) {
-               pr_warn("%s: unable to alloc ocram!\n", __func__);
-               goto put_node;
+               pr_warn("%s: unable to alloc sram!\n", __func__);
+               return;
        }
 
        sram_pbase = gen_pool_virt_to_phys(sram_pool, sram_base);
-       slow_clock = __arm_ioremap_exec(sram_pbase, at91_slow_clock_sz, false);
+       at91_suspend_sram_fn = __arm_ioremap_exec(sram_pbase,
+                                       at91_pm_suspend_in_sram_sz, false);
+       if (!at91_suspend_sram_fn) {
+               pr_warn("SRAM: Could not map\n");
+               return;
+       }
 
-put_node:
-       of_node_put(node);
+       /* Copy the pm suspend handler to SRAM */
+       at91_suspend_sram_fn = fncpy(at91_suspend_sram_fn,
+                       &at91_pm_suspend_in_sram, at91_pm_suspend_in_sram_sz);
 }
-#endif
-
 
 static void __init at91_pm_init(void)
 {
-#ifdef CONFIG_AT91_SLOW_CLOCK
        at91_pm_sram_init();
-#endif
-
-       pr_info("AT91: Power Management%s\n", (slow_clock ? " (with slow clock mode)" : ""));
 
        if (at91_cpuidle_device.dev.platform_data)
                platform_device_register(&at91_cpuidle_device);
 
-       suspend_set_ops(&at91_pm_ops);
+       if (at91_suspend_sram_fn)
+               suspend_set_ops(&at91_pm_ops);
+       else
+               pr_info("AT91: PM not supported, due to no SRAM allocated\n");
 }
 
 void __init at91rm9200_pm_init(void)
index d2c89963af2d168179e01e72d51f6684decc8d5e..dcacfa1ad3fa2976e5ee36f359f316e64706cee2 100644 (file)
 
 #include <mach/at91_ramc.h>
 
-#ifdef CONFIG_PM
-extern void at91_pm_set_standby(void (*at91_standby)(void));
-#else
-static inline void at91_pm_set_standby(void (*at91_standby)(void)) { }
-#endif
+#define        AT91_PM_MEMTYPE_MASK    0x0f
+
+#define        AT91_PM_MODE_OFFSET     4
+#define        AT91_PM_MODE_MASK       0x01
+#define        AT91_PM_MODE(x)         (((x) & AT91_PM_MODE_MASK) << AT91_PM_MODE_OFFSET)
+
+#define        AT91_PM_SLOW_CLOCK      0x01
 
 /*
  * The AT91RM9200 goes into self-refresh mode with this command, and will
@@ -31,6 +33,7 @@ static inline void at91_pm_set_standby(void (*at91_standby)(void)) { }
  * still in self-refresh is "not recommended", but seems to work.
  */
 
+#ifndef __ASSEMBLY__
 static inline void at91rm9200_standby(void)
 {
        u32 lpr = at91_ramc_read(0, AT91RM9200_SDRAMC_LPR);
@@ -44,7 +47,7 @@ static inline void at91rm9200_standby(void)
                "    mcr    p15, 0, %0, c7, c0, 4\n\t"
                "    str    %5, [%1, %2]"
                :
-               : "r" (0), "r" (AT91_BASE_SYS), "r" (AT91RM9200_SDRAMC_LPR),
+               : "r" (0), "r" (at91_ramc_base[0]), "r" (AT91RM9200_SDRAMC_LPR),
                  "r" (1), "r" (AT91RM9200_SDRAMC_SRR),
                  "r" (lpr));
 }
@@ -112,3 +115,4 @@ static inline void at91sam9_sdram_standby(void)
 }
 
 #endif
+#endif
diff --git a/arch/arm/mach-at91/pm_slowclock.S b/arch/arm/mach-at91/pm_slowclock.S
deleted file mode 100644 (file)
index 556151e..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * arch/arm/mach-at91/pm_slow_clock.S
- *
- *  Copyright (C) 2006 Savin Zlobec
- *
- * AT91SAM9 support:
- *  Copyright (C) 2007 Anti Sullin <anti.sullin@artecdesign.ee
- *
- * 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/linkage.h>
-#include <linux/clk/at91_pmc.h>
-#include <mach/hardware.h>
-#include <mach/at91_ramc.h>
-
-/*
- * When SLOWDOWN_MASTER_CLOCK is defined we will also slow down the Master
- * clock during suspend by adjusting its prescalar and divisor.
- * NOTE: This hasn't been shown to be stable on SAM9s; and on the RM9200 there
- *       are errata regarding adjusting the prescalar and divisor.
- */
-#undef SLOWDOWN_MASTER_CLOCK
-
-#define MCKRDY_TIMEOUT         1000
-#define MOSCRDY_TIMEOUT        1000
-#define PLLALOCK_TIMEOUT       1000
-#define PLLBLOCK_TIMEOUT       1000
-
-pmc    .req    r0
-sdramc .req    r1
-ramc1  .req    r2
-memctrl        .req    r3
-tmp1   .req    r4
-tmp2   .req    r5
-
-/*
- * Wait until master clock is ready (after switching master clock source)
- */
-       .macro wait_mckrdy
-       mov     tmp2, #MCKRDY_TIMEOUT
-1:     sub     tmp2, tmp2, #1
-       cmp     tmp2, #0
-       beq     2f
-       ldr     tmp1, [pmc, #AT91_PMC_SR]
-       tst     tmp1, #AT91_PMC_MCKRDY
-       beq     1b
-2:
-       .endm
-
-/*
- * Wait until master oscillator has stabilized.
- */
-       .macro wait_moscrdy
-       mov     tmp2, #MOSCRDY_TIMEOUT
-1:     sub     tmp2, tmp2, #1
-       cmp     tmp2, #0
-       beq     2f
-       ldr     tmp1, [pmc, #AT91_PMC_SR]
-       tst     tmp1, #AT91_PMC_MOSCS
-       beq     1b
-2:
-       .endm
-
-/*
- * Wait until PLLA has locked.
- */
-       .macro wait_pllalock
-       mov     tmp2, #PLLALOCK_TIMEOUT
-1:     sub     tmp2, tmp2, #1
-       cmp     tmp2, #0
-       beq     2f
-       ldr     tmp1, [pmc, #AT91_PMC_SR]
-       tst     tmp1, #AT91_PMC_LOCKA
-       beq     1b
-2:
-       .endm
-
-/*
- * Wait until PLLB has locked.
- */
-       .macro wait_pllblock
-       mov     tmp2, #PLLBLOCK_TIMEOUT
-1:     sub     tmp2, tmp2, #1
-       cmp     tmp2, #0
-       beq     2f
-       ldr     tmp1, [pmc, #AT91_PMC_SR]
-       tst     tmp1, #AT91_PMC_LOCKB
-       beq     1b
-2:
-       .endm
-
-       .text
-
-/* void at91_slow_clock(void __iomem *pmc, void __iomem *sdramc,
- *                     void __iomem *ramc1, int memctrl)
- */
-ENTRY(at91_slow_clock)
-       /* Save registers on stack */
-       stmfd   sp!, {r4 - r12, lr}
-
-       /*
-        * Register usage:
-        *  R0 = Base address of AT91_PMC
-        *  R1 = Base address of RAM Controller (SDRAM, DDRSDR, or AT91_SYS)
-        *  R2 = Base address of second RAM Controller or 0 if not present
-        *  R3 = Memory controller
-        *  R4 = temporary register
-        *  R5 = temporary register
-        */
-
-       /* Drain write buffer */
-       mov     tmp1, #0
-       mcr     p15, 0, tmp1, c7, c10, 4
-
-       cmp     memctrl, #AT91_MEMCTRL_MC
-       bne     ddr_sr_enable
-
-       /*
-        * at91rm9200 Memory controller
-        */
-       /* Put SDRAM in self-refresh mode */
-       mov     tmp1, #1
-       str     tmp1, [sdramc, #AT91RM9200_SDRAMC_SRR]
-       b       sdr_sr_done
-
-       /*
-        * DDRSDR Memory controller
-        */
-ddr_sr_enable:
-       cmp     memctrl, #AT91_MEMCTRL_DDRSDR
-       bne     sdr_sr_enable
-
-       /* prepare for DDRAM self-refresh mode */
-       ldr     tmp1, [sdramc, #AT91_DDRSDRC_LPR]
-       str     tmp1, .saved_sam9_lpr
-       bic     tmp1, #AT91_DDRSDRC_LPCB
-       orr     tmp1, #AT91_DDRSDRC_LPCB_SELF_REFRESH
-
-       /* figure out if we use the second ram controller */
-       cmp     ramc1, #0
-       ldrne   tmp2, [ramc1, #AT91_DDRSDRC_LPR]
-       strne   tmp2, .saved_sam9_lpr1
-       bicne   tmp2, #AT91_DDRSDRC_LPCB
-       orrne   tmp2, #AT91_DDRSDRC_LPCB_SELF_REFRESH
-
-       /* Enable DDRAM self-refresh mode */
-       str     tmp1, [sdramc, #AT91_DDRSDRC_LPR]
-       strne   tmp2, [ramc1, #AT91_DDRSDRC_LPR]
-
-       b       sdr_sr_done
-
-       /*
-        * SDRAMC Memory controller
-        */
-sdr_sr_enable:
-       /* Enable SDRAM self-refresh mode */
-       ldr     tmp1, [sdramc, #AT91_SDRAMC_LPR]
-       str     tmp1, .saved_sam9_lpr
-
-       bic     tmp1, #AT91_SDRAMC_LPCB
-       orr     tmp1, #AT91_SDRAMC_LPCB_SELF_REFRESH
-       str     tmp1, [sdramc, #AT91_SDRAMC_LPR]
-
-sdr_sr_done:
-       /* Save Master clock setting */
-       ldr     tmp1, [pmc, #AT91_PMC_MCKR]
-       str     tmp1, .saved_mckr
-
-       /*
-        * Set the Master clock source to slow clock
-        */
-       bic     tmp1, tmp1, #AT91_PMC_CSS
-       str     tmp1, [pmc, #AT91_PMC_MCKR]
-
-       wait_mckrdy
-
-#ifdef SLOWDOWN_MASTER_CLOCK
-       /*
-        * Set the Master Clock PRES and MDIV fields.
-        *
-        * See AT91RM9200 errata #27 and #28 for details.
-        */
-       mov     tmp1, #0
-       str     tmp1, [pmc, #AT91_PMC_MCKR]
-
-       wait_mckrdy
-#endif
-
-       /* Save PLLA setting and disable it */
-       ldr     tmp1, [pmc, #AT91_CKGR_PLLAR]
-       str     tmp1, .saved_pllar
-
-       mov     tmp1, #AT91_PMC_PLLCOUNT
-       orr     tmp1, tmp1, #(1 << 29)          /* bit 29 always set */
-       str     tmp1, [pmc, #AT91_CKGR_PLLAR]
-
-       /* Save PLLB setting and disable it */
-       ldr     tmp1, [pmc, #AT91_CKGR_PLLBR]
-       str     tmp1, .saved_pllbr
-
-       mov     tmp1, #AT91_PMC_PLLCOUNT
-       str     tmp1, [pmc, #AT91_CKGR_PLLBR]
-
-       /* Turn off the main oscillator */
-       ldr     tmp1, [pmc, #AT91_CKGR_MOR]
-       bic     tmp1, tmp1, #AT91_PMC_MOSCEN
-       str     tmp1, [pmc, #AT91_CKGR_MOR]
-
-       /* Wait for interrupt */
-       mcr     p15, 0, tmp1, c7, c0, 4
-
-       /* Turn on the main oscillator */
-       ldr     tmp1, [pmc, #AT91_CKGR_MOR]
-       orr     tmp1, tmp1, #AT91_PMC_MOSCEN
-       str     tmp1, [pmc, #AT91_CKGR_MOR]
-
-       wait_moscrdy
-
-       /* Restore PLLB setting */
-       ldr     tmp1, .saved_pllbr
-       str     tmp1, [pmc, #AT91_CKGR_PLLBR]
-
-       tst     tmp1, #(AT91_PMC_MUL &  0xff0000)
-       bne     1f
-       tst     tmp1, #(AT91_PMC_MUL & ~0xff0000)
-       beq     2f
-1:
-       wait_pllblock
-2:
-
-       /* Restore PLLA setting */
-       ldr     tmp1, .saved_pllar
-       str     tmp1, [pmc, #AT91_CKGR_PLLAR]
-
-       tst     tmp1, #(AT91_PMC_MUL &  0xff0000)
-       bne     3f
-       tst     tmp1, #(AT91_PMC_MUL & ~0xff0000)
-       beq     4f
-3:
-       wait_pllalock
-4:
-
-#ifdef SLOWDOWN_MASTER_CLOCK
-       /*
-        * First set PRES if it was not 0,
-        * than set CSS and MDIV fields.
-        *
-        * See AT91RM9200 errata #27 and #28 for details.
-        */
-       ldr     tmp1, .saved_mckr
-       tst     tmp1, #AT91_PMC_PRES
-       beq     2f
-       and     tmp1, tmp1, #AT91_PMC_PRES
-       str     tmp1, [pmc, #AT91_PMC_MCKR]
-
-       wait_mckrdy
-#endif
-
-       /*
-        * Restore master clock setting
-        */
-2:     ldr     tmp1, .saved_mckr
-       str     tmp1, [pmc, #AT91_PMC_MCKR]
-
-       wait_mckrdy
-
-       /*
-        * at91rm9200 Memory controller
-        * Do nothing - self-refresh is automatically disabled.
-        */
-       cmp     memctrl, #AT91_MEMCTRL_MC
-       beq     ram_restored
-
-       /*
-        * DDRSDR Memory controller
-        */
-       cmp     memctrl, #AT91_MEMCTRL_DDRSDR
-       bne     sdr_en_restore
-       /* Restore LPR on AT91 with DDRAM */
-       ldr     tmp1, .saved_sam9_lpr
-       str     tmp1, [sdramc, #AT91_DDRSDRC_LPR]
-
-       /* if we use the second ram controller */
-       cmp     ramc1, #0
-       ldrne   tmp2, .saved_sam9_lpr1
-       strne   tmp2, [ramc1, #AT91_DDRSDRC_LPR]
-
-       b       ram_restored
-
-       /*
-        * SDRAMC Memory controller
-        */
-sdr_en_restore:
-       /* Restore LPR on AT91 with SDRAM */
-       ldr     tmp1, .saved_sam9_lpr
-       str     tmp1, [sdramc, #AT91_SDRAMC_LPR]
-
-ram_restored:
-       /* Restore registers, and return */
-       ldmfd   sp!, {r4 - r12, pc}
-
-
-.saved_mckr:
-       .word 0
-
-.saved_pllar:
-       .word 0
-
-.saved_pllbr:
-       .word 0
-
-.saved_sam9_lpr:
-       .word 0
-
-.saved_sam9_lpr1:
-       .word 0
-
-ENTRY(at91_slow_clock_sz)
-       .word .-at91_slow_clock
diff --git a/arch/arm/mach-at91/pm_suspend.S b/arch/arm/mach-at91/pm_suspend.S
new file mode 100644 (file)
index 0000000..7c444c2
--- /dev/null
@@ -0,0 +1,338 @@
+/*
+ * arch/arm/mach-at91/pm_slow_clock.S
+ *
+ *  Copyright (C) 2006 Savin Zlobec
+ *
+ * AT91SAM9 support:
+ *  Copyright (C) 2007 Anti Sullin <anti.sullin@artecdesign.ee
+ *
+ * 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/linkage.h>
+#include <linux/clk/at91_pmc.h>
+#include <mach/hardware.h>
+#include <mach/at91_ramc.h>
+#include "pm.h"
+
+#define        SRAMC_SELF_FRESH_ACTIVE         0x01
+#define        SRAMC_SELF_FRESH_EXIT           0x00
+
+pmc    .req    r0
+tmp1   .req    r4
+tmp2   .req    r5
+
+/*
+ * Wait until master clock is ready (after switching master clock source)
+ */
+       .macro wait_mckrdy
+1:     ldr     tmp1, [pmc, #AT91_PMC_SR]
+       tst     tmp1, #AT91_PMC_MCKRDY
+       beq     1b
+       .endm
+
+/*
+ * Wait until master oscillator has stabilized.
+ */
+       .macro wait_moscrdy
+1:     ldr     tmp1, [pmc, #AT91_PMC_SR]
+       tst     tmp1, #AT91_PMC_MOSCS
+       beq     1b
+       .endm
+
+/*
+ * Wait until PLLA has locked.
+ */
+       .macro wait_pllalock
+1:     ldr     tmp1, [pmc, #AT91_PMC_SR]
+       tst     tmp1, #AT91_PMC_LOCKA
+       beq     1b
+       .endm
+
+/*
+ * Put the processor to enter the idle state
+ */
+       .macro at91_cpu_idle
+
+#if defined(CONFIG_CPU_V7)
+       mov     tmp1, #AT91_PMC_PCK
+       str     tmp1, [pmc, #AT91_PMC_SCDR]
+
+       dsb
+
+       wfi             @ Wait For Interrupt
+#else
+       mcr     p15, 0, tmp1, c7, c0, 4
+#endif
+
+       .endm
+
+       .text
+
+       .arm
+
+/*
+ * void at91_pm_suspend_in_sram(void __iomem *pmc, void __iomem *sdramc,
+ *                     void __iomem *ramc1, int memctrl)
+ * @input param:
+ *     @r0: base address of AT91_PMC
+ *     @r1: base address of SDRAM Controller (SDRAM, DDRSDR, or AT91_SYS)
+ *     @r2: base address of second SDRAM Controller or 0 if not present
+ *     @r3: pm information
+ */
+ENTRY(at91_pm_suspend_in_sram)
+       /* Save registers on stack */
+       stmfd   sp!, {r4 - r12, lr}
+
+       /* Drain write buffer */
+       mov     tmp1, #0
+       mcr     p15, 0, tmp1, c7, c10, 4
+
+       str     r0, .pmc_base
+       str     r1, .sramc_base
+       str     r2, .sramc1_base
+
+       and     r0, r3, #AT91_PM_MEMTYPE_MASK
+       str     r0, .memtype
+
+       lsr     r0, r3, #AT91_PM_MODE_OFFSET
+       and     r0, r0, #AT91_PM_MODE_MASK
+       str     r0, .pm_mode
+
+       /* Active the self-refresh mode */
+       mov     r0, #SRAMC_SELF_FRESH_ACTIVE
+       bl      at91_sramc_self_refresh
+
+       ldr     r0, .pm_mode
+       tst     r0, #AT91_PM_SLOW_CLOCK
+       beq     skip_disable_main_clock
+
+       ldr     pmc, .pmc_base
+
+       /* Save Master clock setting */
+       ldr     tmp1, [pmc, #AT91_PMC_MCKR]
+       str     tmp1, .saved_mckr
+
+       /*
+        * Set the Master clock source to slow clock
+        */
+       bic     tmp1, tmp1, #AT91_PMC_CSS
+       str     tmp1, [pmc, #AT91_PMC_MCKR]
+
+       wait_mckrdy
+
+       /* Save PLLA setting and disable it */
+       ldr     tmp1, [pmc, #AT91_CKGR_PLLAR]
+       str     tmp1, .saved_pllar
+
+       mov     tmp1, #AT91_PMC_PLLCOUNT
+       orr     tmp1, tmp1, #(1 << 29)          /* bit 29 always set */
+       str     tmp1, [pmc, #AT91_CKGR_PLLAR]
+
+       /* Turn off the main oscillator */
+       ldr     tmp1, [pmc, #AT91_CKGR_MOR]
+       bic     tmp1, tmp1, #AT91_PMC_MOSCEN
+       orr     tmp1, tmp1, #AT91_PMC_KEY
+       str     tmp1, [pmc, #AT91_CKGR_MOR]
+
+skip_disable_main_clock:
+       ldr     pmc, .pmc_base
+
+       /* Wait for interrupt */
+       at91_cpu_idle
+
+       ldr     r0, .pm_mode
+       tst     r0, #AT91_PM_SLOW_CLOCK
+       beq     skip_enable_main_clock
+
+       ldr     pmc, .pmc_base
+
+       /* Turn on the main oscillator */
+       ldr     tmp1, [pmc, #AT91_CKGR_MOR]
+       orr     tmp1, tmp1, #AT91_PMC_MOSCEN
+       orr     tmp1, tmp1, #AT91_PMC_KEY
+       str     tmp1, [pmc, #AT91_CKGR_MOR]
+
+       wait_moscrdy
+
+       /* Restore PLLA setting */
+       ldr     tmp1, .saved_pllar
+       str     tmp1, [pmc, #AT91_CKGR_PLLAR]
+
+       tst     tmp1, #(AT91_PMC_MUL &  0xff0000)
+       bne     3f
+       tst     tmp1, #(AT91_PMC_MUL & ~0xff0000)
+       beq     4f
+3:
+       wait_pllalock
+4:
+
+       /*
+        * Restore master clock setting
+        */
+       ldr     tmp1, .saved_mckr
+       str     tmp1, [pmc, #AT91_PMC_MCKR]
+
+       wait_mckrdy
+
+skip_enable_main_clock:
+       /* Exit the self-refresh mode */
+       mov     r0, #SRAMC_SELF_FRESH_EXIT
+       bl      at91_sramc_self_refresh
+
+       /* Restore registers, and return */
+       ldmfd   sp!, {r4 - r12, pc}
+ENDPROC(at91_pm_suspend_in_sram)
+
+/*
+ * void at91_sramc_self_refresh(unsigned int is_active)
+ *
+ * @input param:
+ *     @r0: 1 - active self-refresh mode
+ *          0 - exit self-refresh mode
+ * register usage:
+ *     @r1: memory type
+ *     @r2: base address of the sram controller
+ */
+
+ENTRY(at91_sramc_self_refresh)
+       ldr     r1, .memtype
+       ldr     r2, .sramc_base
+
+       cmp     r1, #AT91_MEMCTRL_MC
+       bne     ddrc_sf
+
+       /*
+        * at91rm9200 Memory controller
+        */
+
+        /*
+         * For exiting the self-refresh mode, do nothing,
+         * automatically exit the self-refresh mode.
+         */
+       tst     r0, #SRAMC_SELF_FRESH_ACTIVE
+       beq     exit_sramc_sf
+
+       /* Active SDRAM self-refresh mode */
+       mov     r3, #1
+       str     r3, [r2, #AT91RM9200_SDRAMC_SRR]
+       b       exit_sramc_sf
+
+ddrc_sf:
+       cmp     r1, #AT91_MEMCTRL_DDRSDR
+       bne     sdramc_sf
+
+       /*
+        * DDR Memory controller
+        */
+       tst     r0, #SRAMC_SELF_FRESH_ACTIVE
+       beq     ddrc_exit_sf
+
+       /* LPDDR1 --> force DDR2 mode during self-refresh */
+       ldr     r3, [r2, #AT91_DDRSDRC_MDR]
+       str     r3, .saved_sam9_mdr
+       bic     r3, r3, #~AT91_DDRSDRC_MD
+       cmp     r3, #AT91_DDRSDRC_MD_LOW_POWER_DDR
+       ldreq   r3, [r2, #AT91_DDRSDRC_MDR]
+       biceq   r3, r3, #AT91_DDRSDRC_MD
+       orreq   r3, r3, #AT91_DDRSDRC_MD_DDR2
+       streq   r3, [r2, #AT91_DDRSDRC_MDR]
+
+       /* Active DDRC self-refresh mode */
+       ldr     r3, [r2, #AT91_DDRSDRC_LPR]
+       str     r3, .saved_sam9_lpr
+       bic     r3, r3, #AT91_DDRSDRC_LPCB
+       orr     r3, r3, #AT91_DDRSDRC_LPCB_SELF_REFRESH
+       str     r3, [r2, #AT91_DDRSDRC_LPR]
+
+       /* If using the 2nd ddr controller */
+       ldr     r2, .sramc1_base
+       cmp     r2, #0
+       beq     no_2nd_ddrc
+
+       ldr     r3, [r2, #AT91_DDRSDRC_MDR]
+       str     r3, .saved_sam9_mdr1
+       bic     r3, r3, #~AT91_DDRSDRC_MD
+       cmp     r3, #AT91_DDRSDRC_MD_LOW_POWER_DDR
+       ldreq   r3, [r2, #AT91_DDRSDRC_MDR]
+       biceq   r3, r3, #AT91_DDRSDRC_MD
+       orreq   r3, r3, #AT91_DDRSDRC_MD_DDR2
+       streq   r3, [r2, #AT91_DDRSDRC_MDR]
+
+       /* Active DDRC self-refresh mode */
+       ldr     r3, [r2, #AT91_DDRSDRC_LPR]
+       str     r3, .saved_sam9_lpr1
+       bic     r3, r3, #AT91_DDRSDRC_LPCB
+       orr     r3, r3, #AT91_DDRSDRC_LPCB_SELF_REFRESH
+       str     r3, [r2, #AT91_DDRSDRC_LPR]
+
+no_2nd_ddrc:
+       b       exit_sramc_sf
+
+ddrc_exit_sf:
+       /* Restore MDR in case of LPDDR1 */
+       ldr     r3, .saved_sam9_mdr
+       str     r3, [r2, #AT91_DDRSDRC_MDR]
+       /* Restore LPR on AT91 with DDRAM */
+       ldr     r3, .saved_sam9_lpr
+       str     r3, [r2, #AT91_DDRSDRC_LPR]
+
+       /* If using the 2nd ddr controller */
+       ldr     r2, .sramc1_base
+       cmp     r2, #0
+       ldrne   r3, .saved_sam9_mdr1
+       strne   r3, [r2, #AT91_DDRSDRC_MDR]
+       ldrne   r3, .saved_sam9_lpr1
+       strne   r3, [r2, #AT91_DDRSDRC_LPR]
+
+       b       exit_sramc_sf
+
+       /*
+        * SDRAMC Memory controller
+        */
+sdramc_sf:
+       tst     r0, #SRAMC_SELF_FRESH_ACTIVE
+       beq     sdramc_exit_sf
+
+       /* Active SDRAMC self-refresh mode */
+       ldr     r3, [r2, #AT91_SDRAMC_LPR]
+       str     r3, .saved_sam9_lpr
+       bic     r3, r3, #AT91_SDRAMC_LPCB
+       orr     r3, r3, #AT91_SDRAMC_LPCB_SELF_REFRESH
+       str     r3, [r2, #AT91_SDRAMC_LPR]
+
+sdramc_exit_sf:
+       ldr     r3, .saved_sam9_lpr
+       str     r3, [r2, #AT91_SDRAMC_LPR]
+
+exit_sramc_sf:
+       mov     pc, lr
+ENDPROC(at91_sramc_self_refresh)
+
+.pmc_base:
+       .word 0
+.sramc_base:
+       .word 0
+.sramc1_base:
+       .word 0
+.memtype:
+       .word 0
+.pm_mode:
+       .word 0
+.saved_mckr:
+       .word 0
+.saved_pllar:
+       .word 0
+.saved_sam9_lpr:
+       .word 0
+.saved_sam9_lpr1:
+       .word 0
+.saved_sam9_mdr:
+       .word 0
+.saved_sam9_mdr1:
+       .word 0
+
+ENTRY(at91_pm_suspend_in_sram_sz)
+       .word .-at91_pm_suspend_in_sram
index 03dcb441f3d24662c3e7b00b8eea136426723a86..ef5d2073774becc4181791f65f2613d460afe4c1 100644 (file)
@@ -7,48 +7,50 @@
  * 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 <linux/clk-provider.h>
-#include <linux/phy.h>
 
-#include <mach/hardware.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 "generic.h"
+#include <asm/system_misc.h>
 
-static int ksz8081_phy_fixup(struct phy_device *phy)
-{
-       int value;
+#include <mach/hardware.h>
 
-       value = phy_read(phy, 0x16);
-       value &= ~0x20;
-       phy_write(phy, 0x16, value);
+#include "generic.h"
+#include "soc.h"
 
-       return 0;
-}
+static const struct at91_soc sama5_socs[] = {
+       AT91_SOC(SAMA5D3_CIDR_MATCH, SAMA5D31_EXID_MATCH,
+                "sama5d31", "sama5d3"),
+       AT91_SOC(SAMA5D3_CIDR_MATCH, SAMA5D33_EXID_MATCH,
+                "sama5d33", "sama5d3"),
+       AT91_SOC(SAMA5D3_CIDR_MATCH, SAMA5D34_EXID_MATCH,
+                "sama5d34", "sama5d3"),
+       AT91_SOC(SAMA5D3_CIDR_MATCH, SAMA5D35_EXID_MATCH,
+                "sama5d35", "sama5d3"),
+       AT91_SOC(SAMA5D3_CIDR_MATCH, SAMA5D36_EXID_MATCH,
+                "sama5d36", "sama5d3"),
+       AT91_SOC(SAMA5D4_CIDR_MATCH, SAMA5D41_EXID_MATCH,
+                "sama5d41", "sama5d4"),
+       AT91_SOC(SAMA5D4_CIDR_MATCH, SAMA5D42_EXID_MATCH,
+                "sama5d42", "sama5d4"),
+       AT91_SOC(SAMA5D4_CIDR_MATCH, SAMA5D43_EXID_MATCH,
+                "sama5d43", "sama5d4"),
+       AT91_SOC(SAMA5D4_CIDR_MATCH, SAMA5D44_EXID_MATCH,
+                "sama5d44", "sama5d4"),
+       { /* sentinel */ },
+};
 
 static void __init sama5_dt_device_init(void)
 {
-       if (of_machine_is_compatible("atmel,sama5d4ek") &&
-          IS_ENABLED(CONFIG_PHYLIB)) {
-               phy_register_fixup_for_id("fc028000.etherne:00",
-                                               ksz8081_phy_fixup);
-       }
+       struct soc_device *soc;
+       struct device *soc_dev = NULL;
+
+       soc = at91_soc_init(sama5_socs);
+       if (soc != NULL)
+               soc_dev = soc_device_to_device(soc);
 
-       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+       of_platform_populate(NULL, of_default_bus_match_table, NULL, soc_dev);
        at91sam9x5_pm_init();
 }
 
@@ -59,44 +61,10 @@ static const char *sama5_dt_board_compat[] __initconst = {
 
 DT_MACHINE_START(sama5_dt, "Atmel SAMA5")
        /* Maintainer: Atmel */
-       .map_io         = at91_map_io,
        .init_machine   = sama5_dt_device_init,
        .dt_compat      = sama5_dt_board_compat,
 MACHINE_END
 
-static struct map_desc at91_io_desc[] __initdata = {
-       {
-       .virtual        = (unsigned long)AT91_ALT_IO_P2V(SAMA5D4_BASE_MPDDRC),
-       .pfn            = __phys_to_pfn(SAMA5D4_BASE_MPDDRC),
-       .length         = SZ_512,
-       .type           = MT_DEVICE,
-       },
-       {
-       .virtual        = (unsigned long)AT91_ALT_IO_P2V(SAMA5D4_BASE_PMC),
-       .pfn            = __phys_to_pfn(SAMA5D4_BASE_PMC),
-       .length         = SZ_512,
-       .type           = MT_DEVICE,
-       },
-       { /* On sama5d4, we use USART3 as serial console */
-       .virtual        = (unsigned long)AT91_ALT_IO_P2V(SAMA5D4_BASE_USART3),
-       .pfn            = __phys_to_pfn(SAMA5D4_BASE_USART3),
-       .length         = SZ_256,
-       .type           = MT_DEVICE,
-       },
-       { /* A bunch of peripheral with fine grained IO space */
-       .virtual        = (unsigned long)AT91_ALT_IO_P2V(SAMA5D4_BASE_SYS2),
-       .pfn            = __phys_to_pfn(SAMA5D4_BASE_SYS2),
-       .length         = SZ_2K,
-       .type           = MT_DEVICE,
-       },
-};
-
-static void __init sama5_alt_map_io(void)
-{
-       at91_alt_map_io();
-       iotable_init(at91_io_desc, ARRAY_SIZE(at91_io_desc));
-}
-
 static const char *sama5_alt_dt_board_compat[] __initconst = {
        "atmel,sama5d4",
        NULL
@@ -104,7 +72,6 @@ static const char *sama5_alt_dt_board_compat[] __initconst = {
 
 DT_MACHINE_START(sama5_alt_dt, "Atmel SAMA5")
        /* Maintainer: Atmel */
-       .map_io         = sama5_alt_map_io,
        .init_machine   = sama5_dt_device_init,
        .dt_compat      = sama5_alt_dt_board_compat,
        .l2c_aux_mask   = ~0UL,
diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c
deleted file mode 100644 (file)
index 4e58bc9..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * Copyright (C) 2007 Atmel Corporation.
- * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
- *
- * Under GPLv2
- */
-
-#define pr_fmt(fmt)    "AT91: " fmt
-
-#include <linux/module.h>
-#include <linux/io.h>
-#include <linux/mm.h>
-#include <linux/pm.h>
-#include <linux/of_address.h>
-#include <linux/pinctrl/machine.h>
-#include <linux/clk/at91_pmc.h>
-
-#include <asm/system_misc.h>
-#include <asm/mach/map.h>
-
-#include <mach/hardware.h>
-#include <mach/cpu.h>
-#include <mach/at91_dbgu.h>
-
-#include "generic.h"
-#include "pm.h"
-
-struct at91_socinfo at91_soc_initdata;
-EXPORT_SYMBOL(at91_soc_initdata);
-
-static struct map_desc at91_io_desc __initdata __maybe_unused = {
-       .virtual        = (unsigned long)AT91_VA_BASE_SYS,
-       .pfn            = __phys_to_pfn(AT91_BASE_SYS),
-       .length         = SZ_16K,
-       .type           = MT_DEVICE,
-};
-
-static struct map_desc at91_alt_io_desc __initdata __maybe_unused = {
-       .virtual        = (unsigned long)AT91_ALT_VA_BASE_SYS,
-       .pfn            = __phys_to_pfn(AT91_ALT_BASE_SYS),
-       .length         = 24 * SZ_1K,
-       .type           = MT_DEVICE,
-};
-
-static void __init soc_detect(u32 dbgu_base)
-{
-       u32 cidr, socid;
-
-       cidr = __raw_readl(AT91_IO_P2V(dbgu_base) + AT91_DBGU_CIDR);
-       socid = cidr & ~AT91_CIDR_VERSION;
-
-       switch (socid) {
-       case ARCH_ID_AT91RM9200:
-               at91_soc_initdata.type = AT91_SOC_RM9200;
-               if (at91_soc_initdata.subtype == AT91_SOC_SUBTYPE_UNKNOWN)
-                       at91_soc_initdata.subtype = AT91_SOC_RM9200_BGA;
-               break;
-
-       case ARCH_ID_AT91SAM9260:
-               at91_soc_initdata.type = AT91_SOC_SAM9260;
-               at91_soc_initdata.subtype = AT91_SOC_SUBTYPE_NONE;
-               break;
-
-       case ARCH_ID_AT91SAM9261:
-               at91_soc_initdata.type = AT91_SOC_SAM9261;
-               at91_soc_initdata.subtype = AT91_SOC_SUBTYPE_NONE;
-               break;
-
-       case ARCH_ID_AT91SAM9263:
-               at91_soc_initdata.type = AT91_SOC_SAM9263;
-               at91_soc_initdata.subtype = AT91_SOC_SUBTYPE_NONE;
-               break;
-
-       case ARCH_ID_AT91SAM9G20:
-               at91_soc_initdata.type = AT91_SOC_SAM9G20;
-               at91_soc_initdata.subtype = AT91_SOC_SUBTYPE_NONE;
-               break;
-
-       case ARCH_ID_AT91SAM9G45:
-               at91_soc_initdata.type = AT91_SOC_SAM9G45;
-               if (cidr == ARCH_ID_AT91SAM9G45ES)
-                       at91_soc_initdata.subtype = AT91_SOC_SAM9G45ES;
-               break;
-
-       case ARCH_ID_AT91SAM9RL64:
-               at91_soc_initdata.type = AT91_SOC_SAM9RL;
-               at91_soc_initdata.subtype = AT91_SOC_SUBTYPE_NONE;
-               break;
-
-       case ARCH_ID_AT91SAM9X5:
-               at91_soc_initdata.type = AT91_SOC_SAM9X5;
-               break;
-
-       case ARCH_ID_AT91SAM9N12:
-               at91_soc_initdata.type = AT91_SOC_SAM9N12;
-               break;
-
-       case ARCH_ID_SAMA5:
-               at91_soc_initdata.exid = __raw_readl(AT91_IO_P2V(dbgu_base) + AT91_DBGU_EXID);
-               if (at91_soc_initdata.exid & ARCH_EXID_SAMA5D3) {
-                       at91_soc_initdata.type = AT91_SOC_SAMA5D3;
-               }
-               break;
-       }
-
-       /* at91sam9g10 */
-       if ((socid & ~AT91_CIDR_EXT) == ARCH_ID_AT91SAM9G10) {
-               at91_soc_initdata.type = AT91_SOC_SAM9G10;
-               at91_soc_initdata.subtype = AT91_SOC_SUBTYPE_NONE;
-       }
-       /* at91sam9xe */
-       else if ((cidr & AT91_CIDR_ARCH) == ARCH_FAMILY_AT91SAM9XE) {
-               at91_soc_initdata.type = AT91_SOC_SAM9260;
-               at91_soc_initdata.subtype = AT91_SOC_SAM9XE;
-       }
-
-       if (!at91_soc_is_detected())
-               return;
-
-       at91_soc_initdata.cidr = cidr;
-
-       /* sub version of soc */
-       if (!at91_soc_initdata.exid)
-               at91_soc_initdata.exid = __raw_readl(AT91_IO_P2V(dbgu_base) + AT91_DBGU_EXID);
-
-       if (at91_soc_initdata.type == AT91_SOC_SAM9G45) {
-               switch (at91_soc_initdata.exid) {
-               case ARCH_EXID_AT91SAM9M10:
-                       at91_soc_initdata.subtype = AT91_SOC_SAM9M10;
-                       break;
-               case ARCH_EXID_AT91SAM9G46:
-                       at91_soc_initdata.subtype = AT91_SOC_SAM9G46;
-                       break;
-               case ARCH_EXID_AT91SAM9M11:
-                       at91_soc_initdata.subtype = AT91_SOC_SAM9M11;
-                       break;
-               }
-       }
-
-       if (at91_soc_initdata.type == AT91_SOC_SAM9X5) {
-               switch (at91_soc_initdata.exid) {
-               case ARCH_EXID_AT91SAM9G15:
-                       at91_soc_initdata.subtype = AT91_SOC_SAM9G15;
-                       break;
-               case ARCH_EXID_AT91SAM9G35:
-                       at91_soc_initdata.subtype = AT91_SOC_SAM9G35;
-                       break;
-               case ARCH_EXID_AT91SAM9X35:
-                       at91_soc_initdata.subtype = AT91_SOC_SAM9X35;
-                       break;
-               case ARCH_EXID_AT91SAM9G25:
-                       at91_soc_initdata.subtype = AT91_SOC_SAM9G25;
-                       break;
-               case ARCH_EXID_AT91SAM9X25:
-                       at91_soc_initdata.subtype = AT91_SOC_SAM9X25;
-                       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;
-               case ARCH_EXID_SAMA5D36:
-                       at91_soc_initdata.subtype = AT91_SOC_SAMA5D36;
-                       break;
-               }
-       }
-}
-
-static void __init alt_soc_detect(u32 dbgu_base)
-{
-       u32 cidr, socid;
-
-       /* SoC ID */
-       cidr = __raw_readl(AT91_ALT_IO_P2V(dbgu_base) + AT91_DBGU_CIDR);
-       socid = cidr & ~AT91_CIDR_VERSION;
-
-       switch (socid) {
-       case ARCH_ID_SAMA5:
-               at91_soc_initdata.exid = __raw_readl(AT91_ALT_IO_P2V(dbgu_base) + AT91_DBGU_EXID);
-               if (at91_soc_initdata.exid & ARCH_EXID_SAMA5D3) {
-                       at91_soc_initdata.type = AT91_SOC_SAMA5D3;
-               } else if (at91_soc_initdata.exid & ARCH_EXID_SAMA5D4) {
-                       at91_soc_initdata.type = AT91_SOC_SAMA5D4;
-               }
-               break;
-       }
-
-       if (!at91_soc_is_detected())
-               return;
-
-       at91_soc_initdata.cidr = cidr;
-
-       /* sub version of soc */
-       if (!at91_soc_initdata.exid)
-               at91_soc_initdata.exid = __raw_readl(AT91_ALT_IO_P2V(dbgu_base) + AT91_DBGU_EXID);
-
-       if (at91_soc_initdata.type == AT91_SOC_SAMA5D4) {
-               switch (at91_soc_initdata.exid) {
-               case ARCH_EXID_SAMA5D41:
-                       at91_soc_initdata.subtype = AT91_SOC_SAMA5D41;
-                       break;
-               case ARCH_EXID_SAMA5D42:
-                       at91_soc_initdata.subtype = AT91_SOC_SAMA5D42;
-                       break;
-               case ARCH_EXID_SAMA5D43:
-                       at91_soc_initdata.subtype = AT91_SOC_SAMA5D43;
-                       break;
-               case ARCH_EXID_SAMA5D44:
-                       at91_soc_initdata.subtype = AT91_SOC_SAMA5D44;
-                       break;
-               }
-       }
-}
-
-static const char *soc_name[] = {
-       [AT91_SOC_RM9200]       = "at91rm9200",
-       [AT91_SOC_SAM9260]      = "at91sam9260",
-       [AT91_SOC_SAM9261]      = "at91sam9261",
-       [AT91_SOC_SAM9263]      = "at91sam9263",
-       [AT91_SOC_SAM9G10]      = "at91sam9g10",
-       [AT91_SOC_SAM9G20]      = "at91sam9g20",
-       [AT91_SOC_SAM9G45]      = "at91sam9g45",
-       [AT91_SOC_SAM9RL]       = "at91sam9rl",
-       [AT91_SOC_SAM9X5]       = "at91sam9x5",
-       [AT91_SOC_SAM9N12]      = "at91sam9n12",
-       [AT91_SOC_SAMA5D3]      = "sama5d3",
-       [AT91_SOC_SAMA5D4]      = "sama5d4",
-       [AT91_SOC_UNKNOWN]      = "Unknown",
-};
-
-const char *at91_get_soc_type(struct at91_socinfo *c)
-{
-       return soc_name[c->type];
-}
-EXPORT_SYMBOL(at91_get_soc_type);
-
-static const char *soc_subtype_name[] = {
-       [AT91_SOC_RM9200_BGA]   = "at91rm9200 BGA",
-       [AT91_SOC_RM9200_PQFP]  = "at91rm9200 PQFP",
-       [AT91_SOC_SAM9XE]       = "at91sam9xe",
-       [AT91_SOC_SAM9G45ES]    = "at91sam9g45es",
-       [AT91_SOC_SAM9M10]      = "at91sam9m10",
-       [AT91_SOC_SAM9G46]      = "at91sam9g46",
-       [AT91_SOC_SAM9M11]      = "at91sam9m11",
-       [AT91_SOC_SAM9G15]      = "at91sam9g15",
-       [AT91_SOC_SAM9G35]      = "at91sam9g35",
-       [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_SAMA5D36]     = "sama5d36",
-       [AT91_SOC_SAMA5D41]     = "sama5d41",
-       [AT91_SOC_SAMA5D42]     = "sama5d42",
-       [AT91_SOC_SAMA5D43]     = "sama5d43",
-       [AT91_SOC_SAMA5D44]     = "sama5d44",
-       [AT91_SOC_SUBTYPE_NONE] = "None",
-       [AT91_SOC_SUBTYPE_UNKNOWN] = "Unknown",
-};
-
-const char *at91_get_soc_subtype(struct at91_socinfo *c)
-{
-       return soc_subtype_name[c->subtype];
-}
-EXPORT_SYMBOL(at91_get_soc_subtype);
-
-void __init at91_map_io(void)
-{
-       /* Map peripherals */
-       iotable_init(&at91_io_desc, 1);
-
-       at91_soc_initdata.type = AT91_SOC_UNKNOWN;
-       at91_soc_initdata.subtype = AT91_SOC_SUBTYPE_UNKNOWN;
-
-       soc_detect(AT91_BASE_DBGU0);
-       if (!at91_soc_is_detected())
-               soc_detect(AT91_BASE_DBGU1);
-
-       if (!at91_soc_is_detected())
-               panic(pr_fmt("Impossible to detect the SOC type"));
-
-       pr_info("Detected soc type: %s\n",
-               at91_get_soc_type(&at91_soc_initdata));
-       if (at91_soc_initdata.subtype != AT91_SOC_SUBTYPE_NONE)
-               pr_info("Detected soc subtype: %s\n",
-                       at91_get_soc_subtype(&at91_soc_initdata));
-}
-
-void __init at91_alt_map_io(void)
-{
-       /* Map peripherals */
-       iotable_init(&at91_alt_io_desc, 1);
-
-       at91_soc_initdata.type = AT91_SOC_UNKNOWN;
-       at91_soc_initdata.subtype = AT91_SOC_SUBTYPE_UNKNOWN;
-
-       alt_soc_detect(AT91_BASE_DBGU2);
-       if (!at91_soc_is_detected())
-               panic("AT91: Impossible to detect the SOC type");
-
-       pr_info("AT91: Detected soc type: %s\n",
-               at91_get_soc_type(&at91_soc_initdata));
-       if (at91_soc_initdata.subtype != AT91_SOC_SUBTYPE_NONE)
-               pr_info("AT91: Detected soc subtype: %s\n",
-                       at91_get_soc_subtype(&at91_soc_initdata));
-}
-
-void __iomem *at91_matrix_base;
-EXPORT_SYMBOL_GPL(at91_matrix_base);
-
-void __init at91_ioremap_matrix(u32 base_addr)
-{
-       at91_matrix_base = ioremap(base_addr, 512);
-       if (!at91_matrix_base)
-               panic(pr_fmt("Impossible to ioremap at91_matrix_base\n"));
-}
diff --git a/arch/arm/mach-at91/soc.c b/arch/arm/mach-at91/soc.c
new file mode 100644 (file)
index 0000000..54343ff
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2015 Atmel
+ *
+ * Alexandre Belloni <alexandre.belloni@free-electrons.com
+ * Boris Brezillon <boris.brezillon@free-electrons.com
+ *
+ * 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.
+ *
+ */
+
+#define pr_fmt(fmt)    "AT91: " fmt
+
+#include <linux/io.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_platform.h>
+#include <linux/slab.h>
+#include <linux/sys_soc.h>
+
+#include "soc.h"
+
+#define AT91_DBGU_CIDR                 0x40
+#define AT91_DBGU_CIDR_VERSION(x)      ((x) & 0x1f)
+#define AT91_DBGU_CIDR_EXT             BIT(31)
+#define AT91_DBGU_CIDR_MATCH_MASK      0x7fffffe0
+#define AT91_DBGU_EXID                 0x44
+
+struct soc_device * __init at91_soc_init(const struct at91_soc *socs)
+{
+       struct soc_device_attribute *soc_dev_attr;
+       const struct at91_soc *soc;
+       struct soc_device *soc_dev;
+       struct device_node *np;
+       void __iomem *regs;
+       u32 cidr, exid;
+
+       np = of_find_compatible_node(NULL, NULL, "atmel,at91rm9200-dbgu");
+       if (!np)
+               np = of_find_compatible_node(NULL, NULL,
+                                            "atmel,at91sam9260-dbgu");
+
+       if (!np) {
+               pr_warn("Could not find DBGU node");
+               return NULL;
+       }
+
+       regs = of_iomap(np, 0);
+       of_node_put(np);
+
+       if (!regs) {
+               pr_warn("Could not map DBGU iomem range");
+               return NULL;
+       }
+
+       cidr = readl(regs + AT91_DBGU_CIDR);
+       exid = readl(regs + AT91_DBGU_EXID);
+
+       iounmap(regs);
+
+       for (soc = socs; soc->name; soc++) {
+               if (soc->cidr_match != (cidr & AT91_DBGU_CIDR_MATCH_MASK))
+                       continue;
+
+               if (!(cidr & AT91_DBGU_CIDR_EXT) || soc->exid_match == exid)
+                       break;
+       }
+
+       if (!soc->name) {
+               pr_warn("Could not find matching SoC description\n");
+               return NULL;
+       }
+
+       soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+       if (!soc_dev_attr)
+               return NULL;
+
+       soc_dev_attr->family = soc->family;
+       soc_dev_attr->soc_id = soc->name;
+       soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%X",
+                                          AT91_DBGU_CIDR_VERSION(cidr));
+       soc_dev = soc_device_register(soc_dev_attr);
+       if (IS_ERR(soc_dev)) {
+               kfree(soc_dev_attr->revision);
+               kfree(soc_dev_attr);
+               pr_warn("Could not register SoC device\n");
+               return NULL;
+       }
+
+       if (soc->family)
+               pr_info("Detected SoC family: %s\n", soc->family);
+       pr_info("Detected SoC: %s, revision %X\n", soc->name,
+               AT91_DBGU_CIDR_VERSION(cidr));
+
+       return soc_dev;
+}
diff --git a/arch/arm/mach-at91/soc.h b/arch/arm/mach-at91/soc.h
new file mode 100644 (file)
index 0000000..be23c40
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2015 Atmel
+ *
+ * Boris Brezillon <boris.brezillon@free-electrons.com
+ *
+ * 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.
+ *
+ */
+
+#ifndef __AT91_SOC_H
+#define __AT91_SOC_H
+
+#include <linux/sys_soc.h>
+
+struct at91_soc {
+       u32 cidr_match;
+       u32 exid_match;
+       const char *name;
+       const char *family;
+};
+
+#define AT91_SOC(__cidr, __exid, __name, __family)             \
+       {                                                       \
+               .cidr_match = (__cidr),                         \
+               .exid_match = (__exid),                         \
+               .name = (__name),                               \
+               .family = (__family),                           \
+       }
+
+struct soc_device * __init
+at91_soc_init(const struct at91_soc *socs);
+
+#define AT91RM9200_CIDR_MATCH          0x09290780
+
+#define AT91SAM9260_CIDR_MATCH         0x019803a0
+#define AT91SAM9261_CIDR_MATCH         0x019703a0
+#define AT91SAM9263_CIDR_MATCH         0x019607a0
+#define AT91SAM9G20_CIDR_MATCH         0x019905a0
+#define AT91SAM9RL64_CIDR_MATCH                0x019b03a0
+#define AT91SAM9G45_CIDR_MATCH         0x019b05a0
+#define AT91SAM9X5_CIDR_MATCH          0x019a05a0
+#define AT91SAM9N12_CIDR_MATCH         0x019a07a0
+
+#define AT91SAM9M11_EXID_MATCH         0x00000001
+#define AT91SAM9M10_EXID_MATCH         0x00000002
+#define AT91SAM9G46_EXID_MATCH         0x00000003
+#define AT91SAM9G45_EXID_MATCH         0x00000004
+
+#define AT91SAM9G15_EXID_MATCH         0x00000000
+#define AT91SAM9G35_EXID_MATCH         0x00000001
+#define AT91SAM9X35_EXID_MATCH         0x00000002
+#define AT91SAM9G25_EXID_MATCH         0x00000003
+#define AT91SAM9X25_EXID_MATCH         0x00000004
+
+#define AT91SAM9CN12_EXID_MATCH                0x00000005
+#define AT91SAM9N12_EXID_MATCH         0x00000006
+#define AT91SAM9CN11_EXID_MATCH                0x00000009
+
+#define AT91SAM9XE128_CIDR_MATCH       0x329973a0
+#define AT91SAM9XE256_CIDR_MATCH       0x329a93a0
+#define AT91SAM9XE512_CIDR_MATCH       0x329aa3a0
+
+#define SAMA5D3_CIDR_MATCH             0x0a5c07c0
+#define SAMA5D31_EXID_MATCH            0x00444300
+#define SAMA5D33_EXID_MATCH            0x00414300
+#define SAMA5D34_EXID_MATCH            0x00414301
+#define SAMA5D35_EXID_MATCH            0x00584300
+#define SAMA5D36_EXID_MATCH            0x00004301
+
+#define SAMA5D4_CIDR_MATCH             0x0a5c07c0
+#define SAMA5D41_EXID_MATCH            0x00000001
+#define SAMA5D42_EXID_MATCH            0x00000002
+#define SAMA5D43_EXID_MATCH            0x00000003
+#define SAMA5D44_EXID_MATCH            0x00000004
+
+#endif /* __AT91_SOC_H */
index 3bb49252a098b0b3d4c72b0895044c538d2af17d..075d5cd4c5ab4759eb376d8e2d0020e28dd64437 100644 (file)
@@ -278,6 +278,7 @@ config BFIN_CFPCMCIA
 
 config AT91_CF
        tristate "AT91 CompactFlash Controller"
+       depends on PCI
        depends on PCMCIA && ARCH_AT91
        depends on !ARCH_MULTIPLATFORM
        help
index bfb799c7b343a055edd97b621c1f85f8ed79e873..e7775a41ae5d11f397012194e20daa1ebf05d9b9 100644 (file)
@@ -317,13 +317,14 @@ static int at91_cf_probe(struct platform_device *pdev)
        } else
                cf->socket.pci_irq = nr_irqs + 1;
 
-       /* pcmcia layer only remaps "real" memory not iospace */
-       cf->socket.io_offset = (unsigned long) devm_ioremap(&pdev->dev,
-                                       cf->phys_baseaddr + CF_IO_PHYS, SZ_2K);
-       if (!cf->socket.io_offset) {
-               status = -ENXIO;
+       /*
+        * pcmcia layer only remaps "real" memory not iospace
+        * io_offset is set to 0x10000 to avoid the check in static_find_io().
+        * */
+       cf->socket.io_offset = 0x10000;
+       status = pci_ioremap_io(0x10000, cf->phys_baseaddr + CF_IO_PHYS);
+       if (status)
                goto fail0a;
-       }
 
        /* reserve chip-select regions */
        if (!devm_request_mem_region(&pdev->dev, io->start, resource_size(io), "at91_cf")) {
index 0210797abf2e95e88f67dd480ae24597325842d3..dc10c52e0e9199e7e878a87a714569106a955df3 100644 (file)
@@ -92,7 +92,7 @@
 #define                AT91_DDRSDRC_UPD_MR     (3 << 20)        /* Update load mode register and extended mode register */
 
 #define AT91_DDRSDRC_MDR       0x20    /* Memory Device Register */
-#define                AT91_DDRSDRC_MD         (3 << 0)                /* Memory Device Type */
+#define                AT91_DDRSDRC_MD         (7 << 0)        /* Memory Device Type */
 #define                        AT91_DDRSDRC_MD_SDR             0
 #define                        AT91_DDRSDRC_MD_LOW_POWER_SDR   1
 #define                        AT91_DDRSDRC_MD_LOW_POWER_DDR   3