Merge tag 'at91-cleanup2' of git://git.kernel.org/pub/scm/linux/kernel/git/nferre...
authorOlof Johansson <olof@lixom.net>
Wed, 21 Jan 2015 23:17:56 +0000 (15:17 -0800)
committerOlof Johansson <olof@lixom.net>
Wed, 21 Jan 2015 23:17:56 +0000 (15:17 -0800)
Merge "at91: cleanup for 3.20 #2" from Nicolas Ferre:

Second batch of cleanup for 3.20:
- By reworking the PM code, we can remove the AT91 more specific initialization
- We are using DT for SRAM initialization now, so we can remove its explicit
  mapping
- The PMC clock driver now hosts IDLE function for at91rm9200 with other
  SoCs ones.

* tag 'at91-cleanup2' of git://git.kernel.org/pub/scm/linux/kernel/git/nferre/linux-at91: (37 commits)
  ARM: at91: move at91rm9200_idle() to clk/at91/pmc.c
  ARM: at91: remove unused at91_init_sram
  ARM: at91: sama5d4: remove useless call to at91_init_sram
  ARM: at91: remove useless map_io
  ARM: at91: pm: prepare for multiplatform
  ARM: at91: pm: add UDP and UHP checks to newer SoCs
  ARM: at91: pm: use the mmio-sram pool to access SRAM
  ARM: at91: pm: rework cpu detection
  ARM: at91: dts: sama5d3: add ov2640 camera sensor support
  ARM: at91: dts: sama5d3: change name of pinctrl of ISI_MCK
  ARM: at91: dts: sama5d3: change name of pinctrl_isi_{power,reset}
  ARM: at91: dts: sama5d3: move the isi mck pin to mb
  ARM: at91: dts: sama5d3: add missing pins of isi
  ARM: at91: dts: sama5d3: split isi pinctrl
  ARM: at91: dts: sama5d3: add isi clock
  ARM: at91/dt: ethernut5: use at91sam9xe.dtsi
  ARM: at91/dt: Add a dtsi for at91sam9xe
  ARM: at91/dt: add SRAM nodes
  ARM: at91/dt: at91rm9200ek: enable RTC
  ARM: at91/dt: rm9200: add RTC node
  ...

Signed-off-by: Olof Johansson <olof@lixom.net>
21 files changed:
arch/arm/Kconfig.debug
arch/arm/include/debug/sirf.S
arch/arm/mach-bcm/platsmp-brcmstb.c
arch/arm/mach-hisi/Kconfig
arch/arm/mach-hisi/core.h
arch/arm/mach-hisi/headsmp.S
arch/arm/mach-hisi/hisilicon.c
arch/arm/mach-hisi/hotplug.c
arch/arm/mach-hisi/platsmp.c
arch/arm/mach-mvebu/mvebu-soc-id.h
arch/arm/mach-prima2/Kconfig
arch/arm/mach-prima2/Makefile
arch/arm/mach-prima2/common.c
arch/arm/mach-prima2/lluart.c [deleted file]
arch/arm/mach-prima2/platsmp.c
arch/arm/mach-prima2/rstc.c
arch/arm/mach-prima2/rtciobrg.c
arch/arm/mach-shmobile/Kconfig
arch/arm/mach-shmobile/clock-sh73a0.c
arch/arm/mach-shmobile/setup-rcar-gen2.c
arch/arm/mach-shmobile/smp-r8a7779.c

index e34d24949c6a7c3d94075ec584e37568abf13809..dc2b768edb8a932e4e940f7fab85a99888551483 100644 (file)
@@ -275,6 +275,14 @@ choice
                  Say Y here if you want the debug print routines to direct
                  their output to the UART on Highbank based devices.
 
+       config DEBUG_HIP01_UART
+               bool "Hisilicon Hip01 Debug UART"
+               depends on ARCH_HIP01
+               select DEBUG_UART_8250
+               help
+                 Say Y here if you want kernel low-level debugging support
+                 on HIP01 UART.
+
        config DEBUG_HIP04_UART
                bool "Hisilicon HiP04 Debug UART"
                depends on ARCH_HIP04
@@ -458,13 +466,13 @@ choice
                  Please adjust DEBUG_UART_PHYS and DEBUG_UART_BASE configuration
                  options based on your needs.
 
-       config DEBUG_MVEBU_UART
-               bool "Kernel low-level debugging messages via MVEBU UART (old bootloaders)"
+       config DEBUG_MVEBU_UART0
+               bool "Kernel low-level debugging messages via MVEBU UART0 (old bootloaders)"
                depends on ARCH_MVEBU
                select DEBUG_UART_8250
                help
                  Say Y here if you want kernel low-level debugging support
-                 on MVEBU based platforms.
+                 on MVEBU based platforms on UART0.
 
                  This option should be used with the old bootloaders
                  that left the internal registers mapped at
@@ -477,13 +485,28 @@ choice
                  when u-boot hands over to the kernel, the system
                  silently crashes, with no serial output at all.
 
-       config DEBUG_MVEBU_UART_ALTERNATE
-               bool "Kernel low-level debugging messages via MVEBU UART (new bootloaders)"
+       config DEBUG_MVEBU_UART0_ALTERNATE
+               bool "Kernel low-level debugging messages via MVEBU UART0 (new bootloaders)"
                depends on ARCH_MVEBU
                select DEBUG_UART_8250
                help
                  Say Y here if you want kernel low-level debugging support
-                 on MVEBU based platforms.
+                 on MVEBU based platforms on UART0.
+
+                 This option should be used with the new bootloaders
+                 that remap the internal registers at 0xf1000000.
+
+                 If the wrong DEBUG_MVEBU_UART* option is selected,
+                 when u-boot hands over to the kernel, the system
+                 silently crashes, with no serial output at all.
+
+       config DEBUG_MVEBU_UART1_ALTERNATE
+               bool "Kernel low-level debugging messages via MVEBU UART1 (new bootloaders)"
+               depends on ARCH_MVEBU
+               select DEBUG_UART_8250
+               help
+                 Say Y here if you want kernel low-level debugging support
+                 on MVEBU based platforms on UART1.
 
                  This option should be used with the new bootloaders
                  that remap the internal registers at 0xf1000000.
@@ -919,16 +942,28 @@ choice
        config DEBUG_SIRFPRIMA2_UART1
                bool "Kernel low-level debugging messages via SiRFprimaII UART1"
                depends on ARCH_PRIMA2
+               select DEBUG_SIRFSOC_UART
                help
                  Say Y here if you want the debug print routines to direct
                  their output to the uart1 port on SiRFprimaII devices.
 
-       config DEBUG_SIRFMARCO_UART1
-               bool "Kernel low-level debugging messages via SiRFmarco UART1"
-               depends on ARCH_MARCO
+       config DEBUG_SIRFATLAS7_UART0
+               bool "Kernel low-level debugging messages via SiRFatlas7 UART0"
+               depends on ARCH_ATLAS7
+               select DEBUG_SIRFSOC_UART
                help
                  Say Y here if you want the debug print routines to direct
-                 their output to the uart1 port on SiRFmarco devices.
+                 their output to the uart0 port on SiRFATLAS7 devices.The uart0
+                 is used on SiRFATLAS7 as a extra debug port.sometimes an extra
+                 debug port can be very useful.
+
+       config DEBUG_SIRFATLAS7_UART1
+               bool "Kernel low-level debugging messages via SiRFatlas7 UART1"
+               depends on ARCH_ATLAS7
+               select DEBUG_SIRFSOC_UART
+               help
+                 Say Y here if you want the debug print routines to direct
+                 their output to the uart1 port on SiRFATLAS7 devices.
 
        config STIH41X_DEBUG_ASC2
                bool "Use StiH415/416 ASC2 UART for low-level debug"
@@ -1164,6 +1199,10 @@ config DEBUG_STI_UART
        bool
        depends on ARCH_STI
 
+config DEBUG_SIRFSOC_UART
+       bool
+       depends on ARCH_SIRF
+
 config DEBUG_LL_INCLUDE
        string
        default "debug/sa1100.S" if DEBUG_SA1100
@@ -1200,7 +1239,7 @@ config DEBUG_LL_INCLUDE
        default "debug/renesas-scif.S" if DEBUG_RMOBILE_SCIFA4
        default "debug/s3c24xx.S" if DEBUG_S3C24XX_UART
        default "debug/s5pv210.S" if DEBUG_S5PV210_UART
-       default "debug/sirf.S" if DEBUG_SIRFPRIMA2_UART1 || DEBUG_SIRFMARCO_UART1
+       default "debug/sirf.S" if DEBUG_SIRFSOC_UART
        default "debug/sti.S" if DEBUG_STI_UART
        default "debug/tegra.S" if DEBUG_TEGRA_UART
        default "debug/ux500.S" if DEBUG_UX500_UART
@@ -1256,7 +1295,10 @@ config DEBUG_UART_PHYS
        default 0x11009000 if DEBUG_MT8135_UART3
        default 0x16000000 if ARCH_INTEGRATOR
        default 0x18000300 if DEBUG_BCM_5301X
+       default 0x18010000 if DEBUG_SIRFATLAS7_UART0
+       default 0x18020000 if DEBUG_SIRFATLAS7_UART1
        default 0x1c090000 if DEBUG_VEXPRESS_UART0_RS1
+       default 0x20001000 if DEBUG_HIP01_UART
        default 0x20060000 if DEBUG_RK29_UART0
        default 0x20064000 if DEBUG_RK29_UART1 || DEBUG_RK3X_UART2
        default 0x20068000 if DEBUG_RK29_UART2 || DEBUG_RK3X_UART3
@@ -1282,12 +1324,13 @@ config DEBUG_UART_PHYS
        default 0x808c0000 if ARCH_EP93XX
        default 0x90020000 if DEBUG_NSPIRE_CLASSIC_UART || DEBUG_NSPIRE_CX_UART
        default 0xa9a00000 if DEBUG_MSM_UART
+       default 0xb0060000 if DEBUG_SIRFPRIMA2_UART1
        default 0xb0090000 if DEBUG_VEXPRESS_UART0_CRX
        default 0xc0013000 if DEBUG_U300_UART
        default 0xc8000000 if ARCH_IXP4XX && !CPU_BIG_ENDIAN
        default 0xc8000003 if ARCH_IXP4XX && CPU_BIG_ENDIAN
        default 0xd0000000 if ARCH_SPEAR3XX || ARCH_SPEAR6XX
-       default 0xd0012000 if DEBUG_MVEBU_UART
+       default 0xd0012000 if DEBUG_MVEBU_UART0
        default 0xc81004c0 if DEBUG_MESON_UARTAO
        default 0xd4017000 if DEBUG_MMP_UART2
        default 0xd4018000 if DEBUG_MMP_UART3
@@ -1301,7 +1344,8 @@ config DEBUG_UART_PHYS
        default 0xe8008000 if DEBUG_R7S72100_SCIF2
        default 0xf0000be0 if ARCH_EBSA110
        default 0xf040ab00 if DEBUG_BRCMSTB_UART
-       default 0xf1012000 if DEBUG_MVEBU_UART_ALTERNATE
+       default 0xf1012000 if DEBUG_MVEBU_UART0_ALTERNATE
+       default 0xf1012100 if DEBUG_MVEBU_UART1_ALTERNATE
        default 0xf1012000 if ARCH_DOVE || ARCH_MV78XX0 || \
                                ARCH_ORION5X
        default 0xf7fc9000 if DEBUG_BERLIN_UART
@@ -1325,7 +1369,8 @@ config DEBUG_UART_PHYS
                DEBUG_RCAR_GEN2_SCIF0 || DEBUG_RCAR_GEN2_SCIF2 || \
                DEBUG_RMOBILE_SCIFA0 || DEBUG_RMOBILE_SCIFA1 || \
                DEBUG_RMOBILE_SCIFA4 || DEBUG_S3C24XX_UART || \
-               DEBUG_UART_BCM63XX || DEBUG_ASM9260_UART
+               DEBUG_UART_BCM63XX || DEBUG_ASM9260_UART || \
+               DEBUG_SIRFSOC_UART
 
 config DEBUG_UART_VIRT
        hex "Virtual base address of debug UART"
@@ -1382,8 +1427,12 @@ config DEBUG_UART_VIRT
        default 0xfeb30c00 if DEBUG_KEYSTONE_UART0
        default 0xfeb31000 if DEBUG_KEYSTONE_UART1
        default 0xfec02000 if DEBUG_SOCFPGA_UART
-       default 0xfec12000 if DEBUG_MVEBU_UART || DEBUG_MVEBU_UART_ALTERNATE
+       default 0xfec12000 if DEBUG_MVEBU_UART0 || DEBUG_MVEBU_UART0_ALTERNATE
+       default 0xfec12100 if DEBUG_MVEBU_UART1_ALTERNATE
+       default 0xfec10000 if DEBUG_SIRFATLAS7_UART0
        default 0xfec20000 if DEBUG_DAVINCI_DMx_UART0
+       default 0xfec20000 if DEBUG_SIRFATLAS7_UART1
+       default 0xfec60000 if DEBUG_SIRFPRIMA2_UART1
        default 0xfec90000 if DEBUG_RK32_UART2
        default 0xfed0c000 if DEBUG_DAVINCI_DA8XX_UART1
        default 0xfed0d000 if DEBUG_DAVINCI_DA8XX_UART2
@@ -1399,11 +1448,12 @@ config DEBUG_UART_VIRT
        default 0xfef36000 if DEBUG_HIGHBANK_UART
        default 0xfefff700 if ARCH_IOP33X
        default 0xff003000 if DEBUG_U300_UART
+       default 0xffd01000 if DEBUG_HIP01_UART
        default DEBUG_UART_PHYS if !MMU
        depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \
                DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_MESON_UARTAO || \
                DEBUG_MSM_UART || DEBUG_QCOM_UARTDM || DEBUG_S3C24XX_UART || \
-               DEBUG_UART_BCM63XX || DEBUG_ASM9260_UART
+               DEBUG_UART_BCM63XX || DEBUG_ASM9260_UART || DEBUG_SIRFSOC_UART
 
 config DEBUG_UART_8250_SHIFT
        int "Register offset shift for the 8250 debug UART"
index dbf250cf18e62ac7952a58630392a3f126e88898..630f231f2f375dc561754546015dc14adc641b89 100644 (file)
@@ -6,37 +6,33 @@
  * Licensed under GPLv2 or later.
  */
 
-#if defined(CONFIG_DEBUG_SIRFPRIMA2_UART1)
-#define SIRFSOC_UART1_PA_BASE          0xb0060000
-#elif defined(CONFIG_DEBUG_SIRFMARCO_UART1)
-#define SIRFSOC_UART1_PA_BASE          0xcc060000
-#else
-#define SIRFSOC_UART1_PA_BASE          0
-#endif
+#define SIRF_LLUART_TXFIFO_STATUS      0x0114
+#define SIRF_LLUART_TXFIFO_DATA        0x0118
 
-#define SIRFSOC_UART1_VA_BASE          0xFEC60000
+#define SIRF_LLUART_TXFIFO_FULL                       (1 << 5)
 
-#define SIRFSOC_UART_TXFIFO_STATUS     0x0114
-#define SIRFSOC_UART_TXFIFO_DATA       0x0118
+#ifdef CONFIG_DEBUG_SIRFATLAS7_UART0
+#define SIRF_LLUART_TXFIFO_EMPTY                       (1 << 8)
+#else
+#define SIRF_LLUART_TXFIFO_EMPTY                       (1 << 6)
+#endif
 
-#define SIRFSOC_UART1_TXFIFO_FULL                       (1 << 5)
-#define SIRFSOC_UART1_TXFIFO_EMPTY                     (1 << 6)
 
        .macro  addruart, rp, rv, tmp
-       ldr     \rp, =SIRFSOC_UART1_PA_BASE             @ physical
-       ldr     \rv, =SIRFSOC_UART1_VA_BASE             @ virtual
+       ldr     \rp, =CONFIG_DEBUG_UART_PHYS            @ physical
+       ldr     \rv, =CONFIG_DEBUG_UART_VIRT            @ virtual
        .endm
 
        .macro  senduart,rd,rx
-       str     \rd, [\rx, #SIRFSOC_UART_TXFIFO_DATA]
+       str     \rd, [\rx, #SIRF_LLUART_TXFIFO_DATA]
        .endm
 
        .macro  busyuart,rd,rx
        .endm
 
        .macro  waituart,rd,rx
-1001:  ldr     \rd, [\rx, #SIRFSOC_UART_TXFIFO_STATUS]
-       tst     \rd, #SIRFSOC_UART1_TXFIFO_EMPTY
+1001:  ldr     \rd, [\rx, #SIRF_LLUART_TXFIFO_STATUS]
+       tst     \rd, #SIRF_LLUART_TXFIFO_EMPTY
        beq     1001b
        .endm
 
index 31c87a284a342800d296587449e97c2d8921e2cf..e209e6fc7cafa553fa56ec5f0f2b845d447a0ff7 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/errno.h>
 #include <linux/init.h>
 #include <linux/io.h>
+#include <linux/jiffies.h>
 #include <linux/of_address.h>
 #include <linux/of_platform.h>
 #include <linux/printk.h>
@@ -94,10 +95,35 @@ static u32 pwr_ctrl_rd(u32 cpu)
        return readl_relaxed(base);
 }
 
-static void pwr_ctrl_wr(u32 cpu, u32 val)
+static void pwr_ctrl_set(unsigned int cpu, u32 val, u32 mask)
 {
        void __iomem *base = pwr_ctrl_get_base(cpu);
-       writel(val, base);
+       writel((readl(base) & mask) | val, base);
+}
+
+static void pwr_ctrl_clr(unsigned int cpu, u32 val, u32 mask)
+{
+       void __iomem *base = pwr_ctrl_get_base(cpu);
+       writel((readl(base) & mask) & ~val, base);
+}
+
+#define POLL_TMOUT_MS 500
+static int pwr_ctrl_wait_tmout(unsigned int cpu, u32 set, u32 mask)
+{
+       const unsigned long timeo = jiffies + msecs_to_jiffies(POLL_TMOUT_MS);
+       u32 tmp;
+
+       do {
+               tmp = pwr_ctrl_rd(cpu) & mask;
+               if (!set == !tmp)
+                       return 0;
+       } while (time_before(jiffies, timeo));
+
+       tmp = pwr_ctrl_rd(cpu) & mask;
+       if (!set == !tmp)
+               return 0;
+
+       return -ETIMEDOUT;
 }
 
 static void cpu_rst_cfg_set(u32 cpu, int set)
@@ -139,15 +165,22 @@ static void brcmstb_cpu_power_on(u32 cpu)
         * The secondary cores power was cut, so we must go through
         * power-on initialization.
         */
-       u32 tmp;
+       pwr_ctrl_set(cpu, ZONE_MAN_ISO_CNTL_MASK, 0xffffff00);
+       pwr_ctrl_set(cpu, ZONE_MANUAL_CONTROL_MASK, -1);
+       pwr_ctrl_set(cpu, ZONE_RESERVED_1_MASK, -1);
 
-       /* Request zone power up */
-       pwr_ctrl_wr(cpu, ZONE_PWR_UP_REQ_MASK);
+       pwr_ctrl_set(cpu, ZONE_MAN_MEM_PWR_MASK, -1);
 
-       /* Wait for the power up FSM to complete */
-       do {
-               tmp = pwr_ctrl_rd(cpu);
-       } while (!(tmp & ZONE_PWR_ON_STATE_MASK));
+       if (pwr_ctrl_wait_tmout(cpu, 1, ZONE_MEM_PWR_STATE_MASK))
+               panic("ZONE_MEM_PWR_STATE_MASK set timeout");
+
+       pwr_ctrl_set(cpu, ZONE_MAN_CLKEN_MASK, -1);
+
+       if (pwr_ctrl_wait_tmout(cpu, 1, ZONE_DPG_PWR_STATE_MASK))
+               panic("ZONE_DPG_PWR_STATE_MASK set timeout");
+
+       pwr_ctrl_clr(cpu, ZONE_MAN_ISO_CNTL_MASK, -1);
+       pwr_ctrl_set(cpu, ZONE_MAN_RESET_CNTL_MASK, -1);
 }
 
 static int brcmstb_cpu_get_power_state(u32 cpu)
@@ -174,25 +207,33 @@ static void brcmstb_cpu_die(u32 cpu)
 
 static int brcmstb_cpu_kill(u32 cpu)
 {
-       u32 tmp;
+       /*
+        * Ordinarily, the hardware forbids power-down of CPU0 (which is good
+        * because it is the boot CPU), but this is not true when using BPCM
+        * manual mode.  Consequently, we must avoid turning off CPU0 here to
+        * ensure that TI2C master reset will work.
+        */
+       if (cpu == 0) {
+               pr_warn("SMP: refusing to power off CPU0\n");
+               return 1;
+       }
 
        while (per_cpu_sw_state_rd(cpu))
                ;
 
-       /* Program zone reset */
-       pwr_ctrl_wr(cpu, ZONE_RESET_STATE_MASK | ZONE_BLK_RST_ASSERT_MASK |
-                             ZONE_PWR_DN_REQ_MASK);
+       pwr_ctrl_set(cpu, ZONE_MANUAL_CONTROL_MASK, -1);
+       pwr_ctrl_clr(cpu, ZONE_MAN_RESET_CNTL_MASK, -1);
+       pwr_ctrl_clr(cpu, ZONE_MAN_CLKEN_MASK, -1);
+       pwr_ctrl_set(cpu, ZONE_MAN_ISO_CNTL_MASK, -1);
+       pwr_ctrl_clr(cpu, ZONE_MAN_MEM_PWR_MASK, -1);
 
-       /* Verify zone reset */
-       tmp = pwr_ctrl_rd(cpu);
-       if (!(tmp & ZONE_RESET_STATE_MASK))
-               pr_err("%s: Zone reset bit for CPU %d not asserted!\n",
-                       __func__, cpu);
+       if (pwr_ctrl_wait_tmout(cpu, 0, ZONE_MEM_PWR_STATE_MASK))
+               panic("ZONE_MEM_PWR_STATE_MASK clear timeout");
 
-       /* Wait for power down */
-       do {
-               tmp = pwr_ctrl_rd(cpu);
-       } while (!(tmp & ZONE_PWR_OFF_STATE_MASK));
+       pwr_ctrl_clr(cpu, ZONE_RESERVED_1_MASK, -1);
+
+       if (pwr_ctrl_wait_tmout(cpu, 0, ZONE_DPG_PWR_STATE_MASK))
+               panic("ZONE_DPG_PWR_STATE_MASK clear timeout");
 
        /* Flush pipeline before resetting CPU */
        mb();
index cd19433f76d3de7f862d8e8d1c1d312f2155d7c0..83061ad0e28232cfe227d21ccf3c8905f2b909b3 100644 (file)
@@ -22,6 +22,14 @@ config ARCH_HI3xxx
        help
          Support for Hisilicon Hi36xx SoC family
 
+config ARCH_HIP01
+       bool "Hisilicon HIP01 family" if ARCH_MULTI_V7
+       select HAVE_ARM_SCU if SMP
+       select HAVE_ARM_TWD if SMP
+       select ARM_GLOBAL_TIMER
+       help
+         Support for Hisilicon HIP01 SoC family
+
 config ARCH_HIP04
        bool "Hisilicon HiP04 Cortex A15 family" if ARCH_MULTI_V7
        select ARM_ERRATA_798181 if SMP
index 88b1f487d06581683ef420d9924d1f614904f147..92a682d8e93943e3b1aa0bb813119b8451737597 100644 (file)
@@ -12,9 +12,12 @@ extern void hi3xxx_cpu_die(unsigned int cpu);
 extern int hi3xxx_cpu_kill(unsigned int cpu);
 extern void hi3xxx_set_cpu(int cpu, bool enable);
 
-extern void hix5hd2_secondary_startup(void);
+extern void hisi_secondary_startup(void);
 extern struct smp_operations hix5hd2_smp_ops;
 extern void hix5hd2_set_cpu(int cpu, bool enable);
 extern void hix5hd2_cpu_die(unsigned int cpu);
 
+extern struct smp_operations hip01_smp_ops;
+extern void hip01_set_cpu(int cpu, bool enable);
+extern void hip01_cpu_die(unsigned int cpu);
 #endif
index 278889c00b77075fd48c1d40a5082a126d9baa43..81e35b159e75e3fb03b2f1423c9bf375e7ee5ff5 100644 (file)
@@ -11,6 +11,6 @@
 
        __CPUINIT
 
-ENTRY(hix5hd2_secondary_startup)
+ENTRY(hisi_secondary_startup)
        bl      v7_invalidate_l1
        b       secondary_startup
index 7744c351bbfd6d7f4efdf631c0050159779f96e0..76b907078b58d365a1acaa73ac85e98e9862833f 100644 (file)
@@ -72,3 +72,13 @@ static const char *hip04_compat[] __initconst = {
 DT_MACHINE_START(HIP04, "Hisilicon HiP04 (Flattened Device Tree)")
        .dt_compat      = hip04_compat,
 MACHINE_END
+
+static const char *hip01_compat[] __initconst = {
+       "hisilicon,hip01",
+       "hisilicon,hip01-ca9x2",
+       NULL,
+};
+
+DT_MACHINE_START(HIP01, "Hisilicon HIP01 (Flattened Device Tree)")
+       .dt_compat      = hip01_compat,
+MACHINE_END
index 84e6919f68c7316f3b866a0ba61087066eaa111d..a129aae7260286fcaf77bc110bce3dea71fb679e 100644 (file)
@@ -65,6 +65,9 @@
 #define PMC0_CPU1_PMC_ENABLE           (1 << 7)
 #define PMC0_CPU1_POWERDOWN            (1 << 3)
 
+#define HIP01_PERI9                    0x50
+#define PERI9_CPU1_RESET               (1 << 1)
+
 enum {
        HI3620_CTRL,
        ERROR_CTRL,
@@ -209,6 +212,34 @@ void hix5hd2_set_cpu(int cpu, bool enable)
        }
 }
 
+void hip01_set_cpu(int cpu, bool enable)
+{
+       unsigned int temp;
+       struct device_node *np;
+
+       if (!ctrl_base) {
+               np = of_find_compatible_node(NULL, NULL, "hisilicon,hip01-sysctrl");
+               if (np)
+                       ctrl_base = of_iomap(np, 0);
+               else
+                       BUG();
+       }
+
+       if (enable) {
+               /* reset on CPU1  */
+               temp = readl_relaxed(ctrl_base + HIP01_PERI9);
+               temp |= PERI9_CPU1_RESET;
+               writel_relaxed(temp, ctrl_base + HIP01_PERI9);
+
+               udelay(50);
+
+               /* unreset on CPU1 */
+               temp = readl_relaxed(ctrl_base + HIP01_PERI9);
+               temp &= ~PERI9_CPU1_RESET;
+               writel_relaxed(temp, ctrl_base + HIP01_PERI9);
+       }
+}
+
 static inline void cpu_enter_lowpower(void)
 {
        unsigned int v;
index 575dd8285f1fb67b6a7789f8fd27a1613692daf0..8880c8e8b296fab3b6695c9505c886843afdac94 100644 (file)
 #include <linux/smp.h>
 #include <linux/io.h>
 #include <linux/of_address.h>
+#include <linux/delay.h>
 
 #include <asm/cacheflush.h>
 #include <asm/smp_plat.h>
 #include <asm/smp_scu.h>
+#include <asm/mach/map.h>
 
 #include "core.h"
 
@@ -96,7 +98,7 @@ struct smp_operations hi3xxx_smp_ops __initdata = {
 #endif
 };
 
-static void __init hix5hd2_smp_prepare_cpus(unsigned int max_cpus)
+static void __init hisi_common_smp_prepare_cpus(unsigned int max_cpus)
 {
        hisi_enable_scu_a9();
 }
@@ -116,7 +118,7 @@ static int hix5hd2_boot_secondary(unsigned int cpu, struct task_struct *idle)
 {
        phys_addr_t jumpaddr;
 
-       jumpaddr = virt_to_phys(hix5hd2_secondary_startup);
+       jumpaddr = virt_to_phys(hisi_secondary_startup);
        hix5hd2_set_scu_boot_addr(HIX5HD2_BOOT_ADDRESS, jumpaddr);
        hix5hd2_set_cpu(cpu, true);
        arch_send_wakeup_ipi_mask(cpumask_of(cpu));
@@ -125,12 +127,60 @@ static int hix5hd2_boot_secondary(unsigned int cpu, struct task_struct *idle)
 
 
 struct smp_operations hix5hd2_smp_ops __initdata = {
-       .smp_prepare_cpus       = hix5hd2_smp_prepare_cpus,
+       .smp_prepare_cpus       = hisi_common_smp_prepare_cpus,
        .smp_boot_secondary     = hix5hd2_boot_secondary,
 #ifdef CONFIG_HOTPLUG_CPU
        .cpu_die                = hix5hd2_cpu_die,
 #endif
 };
 
+
+#define SC_SCTL_REMAP_CLR      0x00000100
+#define HIP01_BOOT_ADDRESS     0x80000000
+#define REG_SC_CTRL            0x000
+
+void hip01_set_boot_addr(phys_addr_t start_addr, phys_addr_t jump_addr)
+{
+       void __iomem *virt;
+
+       virt = phys_to_virt(start_addr);
+
+       writel_relaxed(0xe51ff004, virt);
+       writel_relaxed(jump_addr, virt + 4);
+}
+
+static int hip01_boot_secondary(unsigned int cpu, struct task_struct *idle)
+{
+       phys_addr_t jumpaddr;
+       unsigned int remap_reg_value = 0;
+       struct device_node *node;
+
+
+       jumpaddr = virt_to_phys(hisi_secondary_startup);
+       hip01_set_boot_addr(HIP01_BOOT_ADDRESS, jumpaddr);
+
+       node = of_find_compatible_node(NULL, NULL, "hisilicon,hip01-sysctrl");
+       if (WARN_ON(!node))
+               return -1;
+       ctrl_base = of_iomap(node, 0);
+
+       /* set the secondary core boot from DDR */
+       remap_reg_value = readl_relaxed(ctrl_base + REG_SC_CTRL);
+       barrier();
+       remap_reg_value |= SC_SCTL_REMAP_CLR;
+       barrier();
+       writel_relaxed(remap_reg_value, ctrl_base + REG_SC_CTRL);
+
+       hip01_set_cpu(cpu, true);
+
+       return 0;
+}
+
+struct smp_operations hip01_smp_ops __initdata = {
+       .smp_prepare_cpus       = hisi_common_smp_prepare_cpus,
+       .smp_boot_secondary     = hip01_boot_secondary,
+};
+
 CPU_METHOD_OF_DECLARE(hi3xxx_smp, "hisilicon,hi3620-smp", &hi3xxx_smp_ops);
 CPU_METHOD_OF_DECLARE(hix5hd2_smp, "hisilicon,hix5hd2-smp", &hix5hd2_smp_ops);
+CPU_METHOD_OF_DECLARE(hip01_smp, "hisilicon,hip01-smp", &hip01_smp_ops);
index c16bb68ca81fd93255a489e8bf9034d5851972f5..e124a0b82a3e70cca97ed741428925455184a50d 100644 (file)
 #define MV78XX0_A0_REV     0x1
 #define MV78XX0_B0_REV     0x2
 
+/* Amada 370 ID */
+#define ARMADA_370_DEV_ID   0x6710
+
+/* Amada 370 Revision */
+#define ARMADA_370_A1_REV   0x1
+
+/* Armada 375 ID */
+#define ARMADA_375_DEV_ID   0x6720
+
 /* Armada 375 */
 #define ARMADA_375_Z1_REV   0x0
 #define ARMADA_375_A0_REV   0x3
 
+/* Armada 38x ID */
+#define ARMADA_380_DEV_ID   0x6810
+#define ARMADA_385_DEV_ID   0x6820
+#define ARMADA_388_DEV_ID   0x6828
+
+/* Armada 38x Revision */
+#define ARMADA_38x_Z1_REV   0x0
+#define ARMADA_38x_A0_REV   0x4
+
 #ifdef CONFIG_ARCH_MVEBU
 int mvebu_get_soc_id(u32 *dev, u32 *rev);
 #else
index 042f693ef4236b1adb3d52b02c572babd126c4d3..a219dc310d5de545527030fe169b88a494c0578a 100644 (file)
@@ -11,7 +11,7 @@ menuconfig ARCH_SIRF
 
 if ARCH_SIRF
 
-comment "CSR SiRF atlas6/primaII/Marco/Polo Specific Features"
+comment "CSR SiRF atlas6/primaII/Atlas7 Specific Features"
 
 config ARCH_ATLAS6
        bool "CSR SiRFSoC ATLAS6 ARM Cortex A9 Platform"
@@ -20,6 +20,17 @@ config ARCH_ATLAS6
        help
           Support for CSR SiRFSoC ARM Cortex A9 Platform
 
+config ARCH_ATLAS7
+       bool "CSR SiRFSoC ATLAS7 ARM Cortex A7 Platform"
+       default y
+       select ARM_GIC
+       select CPU_V7
+       select HAVE_ARM_SCU if SMP
+       select HAVE_SMP
+       select SMP_ON_UP if SMP
+       help
+          Support for CSR SiRFSoC ARM Cortex A7 Platform
+
 config ARCH_PRIMA2
        bool "CSR SiRFSoC PRIMA2 ARM Cortex A9 Platform"
        default y
@@ -28,15 +39,6 @@ config ARCH_PRIMA2
        help
           Support for CSR SiRFSoC ARM Cortex A9 Platform
 
-config ARCH_MARCO
-       bool "CSR SiRFSoC MARCO ARM Cortex A9 Platform"
-       default y
-       select ARM_GIC
-       select HAVE_ARM_SCU if SMP
-       select SMP_ON_UP if SMP
-       help
-          Support for CSR SiRFSoC ARM Cortex A9 Platform
-
 config SIRF_IRQ
        bool
 
index 8846e7d87ea58cbd953b264a36370c9307c71832..d7d02b04344927ef096c5f701e20557a99a83c70 100644 (file)
@@ -1,7 +1,6 @@
 obj-y += rstc.o
 obj-y += common.o
 obj-y += rtciobrg.o
-obj-$(CONFIG_DEBUG_LL) += lluart.o
 obj-$(CONFIG_SUSPEND) += pm.o sleep.o
 obj-$(CONFIG_SMP) += platsmp.o headsmp.o
 obj-$(CONFIG_HOTPLUG_CPU)  += hotplug.o
index a860ea27e8ae645027791f4a070a15bfe0c720d1..0c819bb88418369bab10f336766c9974c89f48dc 100644 (file)
@@ -20,12 +20,6 @@ static void __init sirfsoc_init_late(void)
        sirfsoc_pm_init();
 }
 
-static __init void sirfsoc_map_io(void)
-{
-       sirfsoc_map_lluart();
-       sirfsoc_map_scu();
-}
-
 #ifdef CONFIG_ARCH_ATLAS6
 static const char *atlas6_dt_match[] __initconst = {
        "sirf,atlas6",
@@ -36,7 +30,6 @@ DT_MACHINE_START(ATLAS6_DT, "Generic ATLAS6 (Flattened Device Tree)")
        /* Maintainer: Barry Song <baohua.song@csr.com> */
        .l2c_aux_val    = 0,
        .l2c_aux_mask   = ~0,
-       .map_io         = sirfsoc_map_io,
        .init_late      = sirfsoc_init_late,
        .dt_compat      = atlas6_dt_match,
 MACHINE_END
@@ -52,26 +45,21 @@ DT_MACHINE_START(PRIMA2_DT, "Generic PRIMA2 (Flattened Device Tree)")
        /* Maintainer: Barry Song <baohua.song@csr.com> */
        .l2c_aux_val    = 0,
        .l2c_aux_mask   = ~0,
-       .map_io         = sirfsoc_map_io,
        .dma_zone_size  = SZ_256M,
        .init_late      = sirfsoc_init_late,
        .dt_compat      = prima2_dt_match,
 MACHINE_END
 #endif
 
-#ifdef CONFIG_ARCH_MARCO
-static const char *marco_dt_match[] __initconst = {
-       "sirf,marco",
+#ifdef CONFIG_ARCH_ATLAS7
+static const char *atlas7_dt_match[] __initdata = {
+       "sirf,atlas7",
        NULL
 };
 
-DT_MACHINE_START(MARCO_DT, "Generic MARCO (Flattened Device Tree)")
+DT_MACHINE_START(ATLAS7_DT, "Generic ATLAS7 (Flattened Device Tree)")
        /* Maintainer: Barry Song <baohua.song@csr.com> */
-       .l2c_aux_val    = 0,
-       .l2c_aux_mask   = ~0,
        .smp            = smp_ops(sirfsoc_smp_ops),
-       .map_io         = sirfsoc_map_io,
-       .init_late      = sirfsoc_init_late,
-       .dt_compat      = marco_dt_match,
+       .dt_compat      = atlas7_dt_match,
 MACHINE_END
 #endif
diff --git a/arch/arm/mach-prima2/lluart.c b/arch/arm/mach-prima2/lluart.c
deleted file mode 100644 (file)
index 99c0c92..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Static memory mapping for DEBUG_LL
- *
- * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company.
- *
- * Licensed under GPLv2 or later.
- */
-
-#include <linux/kernel.h>
-#include <asm/page.h>
-#include <asm/mach/map.h>
-#include "common.h"
-
-#if defined(CONFIG_DEBUG_SIRFPRIMA2_UART1)
-#define SIRFSOC_UART1_PA_BASE          0xb0060000
-#elif defined(CONFIG_DEBUG_SIRFMARCO_UART1)
-#define SIRFSOC_UART1_PA_BASE          0xcc060000
-#else
-#define SIRFSOC_UART1_PA_BASE          0
-#endif
-
-#define SIRFSOC_UART1_VA_BASE          SIRFSOC_VA(0x060000)
-#define SIRFSOC_UART1_SIZE             SZ_4K
-
-void __init sirfsoc_map_lluart(void)
-{
-       struct map_desc sirfsoc_lluart_map = {
-               .virtual        = SIRFSOC_UART1_VA_BASE,
-               .pfn            = __phys_to_pfn(SIRFSOC_UART1_PA_BASE),
-               .length         = SIRFSOC_UART1_SIZE,
-               .type           = MT_DEVICE,
-       };
-
-       iotable_init(&sirfsoc_lluart_map, 1);
-}
index 335c12e922621a1f67e0e9df730d2bc2cad00e96..fc2b03c81e5f57f2f6be7146afa7022f3f22d476 100644 (file)
 
 #include "common.h"
 
-static void __iomem *scu_base;
-static void __iomem *rsc_base;
+static void __iomem *clk_base;
 
 static DEFINE_SPINLOCK(boot_lock);
 
-static struct map_desc scu_io_desc __initdata = {
-       .length         = SZ_4K,
-       .type           = MT_DEVICE,
-};
-
-void __init sirfsoc_map_scu(void)
-{
-       unsigned long base;
-
-       /* Get SCU base */
-       asm("mrc p15, 4, %0, c15, c0, 0" : "=r" (base));
-
-       scu_io_desc.virtual = SIRFSOC_VA(base);
-       scu_io_desc.pfn = __phys_to_pfn(base);
-       iotable_init(&scu_io_desc, 1);
-
-       scu_base = (void __iomem *)SIRFSOC_VA(base);
-}
-
 static void sirfsoc_secondary_init(unsigned int cpu)
 {
        /*
@@ -60,8 +40,8 @@ static void sirfsoc_secondary_init(unsigned int cpu)
        spin_unlock(&boot_lock);
 }
 
-static struct of_device_id rsc_ids[]  = {
-       { .compatible = "sirf,marco-rsc" },
+static struct of_device_id clk_ids[]  = {
+       { .compatible = "sirf,atlas7-clkc" },
        {},
 };
 
@@ -70,27 +50,27 @@ static int sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle)
        unsigned long timeout;
        struct device_node *np;
 
-       np = of_find_matching_node(NULL, rsc_ids);
+       np = of_find_matching_node(NULL, clk_ids);
        if (!np)
                return -ENODEV;
 
-       rsc_base = of_iomap(np, 0);
-       if (!rsc_base)
+       clk_base = of_iomap(np, 0);
+       if (!clk_base)
                return -ENOMEM;
 
        /*
-        * write the address of secondary startup into the sram register
-        * at offset 0x2C, then write the magic number 0x3CAF5D62 to the
-        * RSC register at offset 0x28, which is what boot rom code is
+        * write the address of secondary startup into the clkc register
+        * at offset 0x2bC, then write the magic number 0x3CAF5D62 to the
+        * clkc register at offset 0x2b8, which is what boot rom code is
         * waiting for. This would wake up the secondary core from WFE
         */
-#define SIRFSOC_CPU1_JUMPADDR_OFFSET 0x2C
+#define SIRFSOC_CPU1_JUMPADDR_OFFSET 0x2bc
        __raw_writel(virt_to_phys(sirfsoc_secondary_startup),
-               rsc_base + SIRFSOC_CPU1_JUMPADDR_OFFSET);
+               clk_base + SIRFSOC_CPU1_JUMPADDR_OFFSET);
 
-#define SIRFSOC_CPU1_WAKEMAGIC_OFFSET 0x28
+#define SIRFSOC_CPU1_WAKEMAGIC_OFFSET 0x2b8
        __raw_writel(0x3CAF5D62,
-               rsc_base + SIRFSOC_CPU1_WAKEMAGIC_OFFSET);
+               clk_base + SIRFSOC_CPU1_WAKEMAGIC_OFFSET);
 
        /* make sure write buffer is drained */
        mb();
@@ -132,13 +112,7 @@ static int sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle)
        return pen_release != -1 ? -ENOSYS : 0;
 }
 
-static void __init sirfsoc_smp_prepare_cpus(unsigned int max_cpus)
-{
-       scu_enable(scu_base);
-}
-
 struct smp_operations sirfsoc_smp_ops __initdata = {
-       .smp_prepare_cpus       = sirfsoc_smp_prepare_cpus,
        .smp_secondary_init     = sirfsoc_secondary_init,
        .smp_boot_secondary     = sirfsoc_boot_secondary,
 #ifdef CONFIG_HOTPLUG_CPU
index e1f1f86f6a95184c73e1c6964e067324e0972510..7c251eb11d012616a4c9ee75fc7af70120f6e99a 100644 (file)
@@ -34,36 +34,20 @@ static int sirfsoc_reset_module(struct reset_controller_dev *rcdev,
 
        mutex_lock(&rstc_lock);
 
-       if (of_device_is_compatible(rcdev->of_node, "sirf,prima2-rstc")) {
-               /*
-                * Writing 1 to this bit resets corresponding block.
-                * Writing 0 to this bit de-asserts reset signal of the
-                * corresponding block. datasheet doesn't require explicit
-                * delay between the set and clear of reset bit. it could
-                * be shorter if tests pass.
-                */
-               writel(readl(sirfsoc_rstc_base +
+       /*
+        * Writing 1 to this bit resets corresponding block.
+        * Writing 0 to this bit de-asserts reset signal of the
+        * corresponding block. datasheet doesn't require explicit
+        * delay between the set and clear of reset bit. it could
+        * be shorter if tests pass.
+        */
+       writel(readl(sirfsoc_rstc_base +
                        (reset_bit / 32) * 4) | (1 << reset_bit),
-                       sirfsoc_rstc_base + (reset_bit / 32) * 4);
-               msleep(20);
-               writel(readl(sirfsoc_rstc_base +
+               sirfsoc_rstc_base + (reset_bit / 32) * 4);
+       msleep(20);
+       writel(readl(sirfsoc_rstc_base +
                        (reset_bit / 32) * 4) & ~(1 << reset_bit),
-                       sirfsoc_rstc_base + (reset_bit / 32) * 4);
-       } else {
-               /*
-                * For MARCO and POLO
-                * Writing 1 to SET register resets corresponding block.
-                * Writing 1 to CLEAR register de-asserts reset signal of the
-                * corresponding block.
-                * datasheet doesn't require explicit delay between the set and
-                * clear of reset bit. it could be shorter if tests pass.
-                */
-               writel(1 << reset_bit,
-                       sirfsoc_rstc_base + (reset_bit / 32) * 8);
-               msleep(20);
-               writel(1 << reset_bit,
-                       sirfsoc_rstc_base + (reset_bit / 32) * 8 + 4);
-       }
+               sirfsoc_rstc_base + (reset_bit / 32) * 4);
 
        mutex_unlock(&rstc_lock);
 
@@ -106,7 +90,6 @@ static int sirfsoc_rstc_probe(struct platform_device *pdev)
 
 static const struct of_device_id rstc_ids[]  = {
        { .compatible = "sirf,prima2-rstc" },
-       { .compatible = "sirf,marco-rstc" },
        {},
 };
 
index 70a0b475062b285f9ef85badf0298274e9d2c5a5..8f66d8f7ca75e5d12ccbfb14b5f632918b722edb 100644 (file)
@@ -104,7 +104,6 @@ EXPORT_SYMBOL_GPL(sirfsoc_rtc_iobrg_writel);
 
 static const struct of_device_id rtciobrg_ids[] = {
        { .compatible = "sirf,prima2-rtciobg" },
-       { .compatible = "sirf,marco-rtciobg" },
        {}
 };
 
index 1b4fafe524ffeb4135d123ed3e0ce9e54be98755..d107b9386bda5806ec2219e89d21fb90d585d772 100644 (file)
@@ -51,6 +51,11 @@ config ARCH_R7S72100
        bool "RZ/A1H (R7S72100)"
        select SYS_SUPPORTS_SH_MTU2
 
+config ARCH_R8A73A4
+       bool "R-Mobile APE6 (R8A73A40)"
+       select ARCH_RMOBILE
+       select RENESAS_IRQC
+
 config ARCH_R8A7740
        bool "R-Mobile A1 (R8A77400)"
        select ARCH_RMOBILE
index 6b4c1f313cc987c15ab0028b0f82ed4cde98a0fb..3855fb024fdbb1ca7aecd9780ed9e42533927879 100644 (file)
@@ -553,6 +553,7 @@ enum { MSTP001,
        MSTP314, MSTP313, MSTP312, MSTP311,
        MSTP304, MSTP303, MSTP302, MSTP301, MSTP300,
        MSTP411, MSTP410, MSTP403,
+       MSTP508,
        MSTP_NR };
 
 #define MSTP(_parent, _reg, _bit, _flags) \
@@ -597,6 +598,7 @@ static struct clk mstp_clks[MSTP_NR] = {
        [MSTP411] = MSTP(&div4_clks[DIV4_HP], SMSTPCR4, 11, 0), /* IIC3 */
        [MSTP410] = MSTP(&div4_clks[DIV4_HP], SMSTPCR4, 10, 0), /* IIC4 */
        [MSTP403] = MSTP(&r_clk, SMSTPCR4, 3, 0), /* KEYSC */
+       [MSTP508] = MSTP(&div4_clks[DIV4_HP], SMSTPCR5, 8, 0), /* INTCA0 */
 };
 
 /* The lookups structure below includes duplicate entries for some clocks
@@ -677,6 +679,14 @@ static struct clk_lookup lookups[] = {
        CLKDEV_DEV_ID("i2c-sh_mobile.4", &mstp_clks[MSTP410]), /* I2C4 */
        CLKDEV_DEV_ID("e6828000.i2c", &mstp_clks[MSTP410]), /* I2C4 */
        CLKDEV_DEV_ID("sh_keysc.0", &mstp_clks[MSTP403]), /* KEYSC */
+       CLKDEV_DEV_ID("renesas_intc_irqpin.0",  &mstp_clks[MSTP508]), /* INTCA0 */
+       CLKDEV_DEV_ID("e6900000.irqpin",        &mstp_clks[MSTP508]), /* INTCA0 */
+       CLKDEV_DEV_ID("renesas_intc_irqpin.1",  &mstp_clks[MSTP508]), /* INTCA0 */
+       CLKDEV_DEV_ID("e6900004.irqpin",        &mstp_clks[MSTP508]), /* INTCA0 */
+       CLKDEV_DEV_ID("renesas_intc_irqpin.2",  &mstp_clks[MSTP508]), /* INTCA0 */
+       CLKDEV_DEV_ID("e6900008.irqpin",        &mstp_clks[MSTP508]), /* INTCA0 */
+       CLKDEV_DEV_ID("renesas_intc_irqpin.3",  &mstp_clks[MSTP508]), /* INTCA0 */
+       CLKDEV_DEV_ID("e690000c.irqpin",        &mstp_clks[MSTP508]), /* INTCA0 */
 
        /* ICK */
        CLKDEV_ICK_ID("dsit_clk", "sh-mipi-dsi.0", &div6_clks[DIV6_DSIT]),
index 3dd6edd9bd1d3dfe5b6bb7787e4d672c1a6f63be..c35b91d92190720aedf1aaccd54408fd9ce3e67c 100644 (file)
@@ -52,15 +52,13 @@ void __init rcar_gen2_timer_init(void)
 {
 #if defined(CONFIG_ARM_ARCH_TIMER) || defined(CONFIG_COMMON_CLK)
        u32 mode = rcar_gen2_read_mode_pins();
-       bool is_e2 = (bool)of_find_compatible_node(NULL, NULL,
-               "renesas,r8a7794");
 #endif
 #ifdef CONFIG_ARM_ARCH_TIMER
        void __iomem *base;
        int extal_mhz = 0;
        u32 freq;
 
-       if (is_e2) {
+       if (of_machine_is_compatible("renesas,r8a7794")) {
                freq = 260000000 / 8;   /* ZS / 8 */
                /* CNTVOFF has to be initialized either from non-secure
                 * Hypervisor mode or secure Monitor mode with SCR.NS==1.
index 3f761f8390430d61fa7753511412d06827eaf284..9fc280e24ef49cfa5c7892be1bcceb5ef4879d4a 100644 (file)
@@ -56,7 +56,7 @@ static struct rcar_sysc_ch *r8a7779_ch_cpu[4] = {
        [3] = &r8a7779_ch_cpu3,
 };
 
-#ifdef CONFIG_HAVE_ARM_TWD
+#if defined(CONFIG_HAVE_ARM_TWD) && !defined(CONFIG_ARCH_MULTIPLATFORM)
 static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, R8A7779_SCU_BASE + 0x600, 29);
 void __init r8a7779_register_twd(void)
 {