ARM: integrator: move restart to the device tree
authorLinus Walleij <linus.walleij@linaro.org>
Fri, 17 Oct 2014 14:18:59 +0000 (16:18 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 13 Nov 2014 09:32:02 +0000 (10:32 +0100)
Using the augmented reset driver for the Versatile family,
we can move the reset handling for the Integrator out of the
machine. We add a "syscon" attribute to the core module, and
access the syscon registers using this handle. We need to
select SYSCON, POWER, POWER_RESET and POWER_RESET_VERSATILE
in order for the restart functionality to always be
available on all systems (it should not be optional).

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
arch/arm/boot/dts/integrator.dtsi
arch/arm/mach-integrator/Kconfig
arch/arm/mach-integrator/cm.h
arch/arm/mach-integrator/common.h
arch/arm/mach-integrator/core.c
arch/arm/mach-integrator/integrator_ap.c
arch/arm/mach-integrator/integrator_cp.c

index 88e3d47..5546630 100644 (file)
@@ -6,7 +6,7 @@
 
 / {
        core-module@10000000 {
-               compatible = "arm,core-module-integrator";
+               compatible = "arm,core-module-integrator", "syscon";
                reg = <0x10000000 0x200>;
        };
 
index aa7eb27..62e6db4 100644 (file)
@@ -8,8 +8,12 @@ config ARCH_INTEGRATOR
        select GENERIC_CLOCKEVENTS
        select HAVE_TCM
        select ICST
+       select MFD_SYSCON
        select MULTI_IRQ_HANDLER
        select PLAT_VERSATILE
+       select POWER_RESET
+       select POWER_RESET_VERSATILE
+       select POWER_SUPPLY
        select SPARSE_IRQ
        select USE_OF
        select VERSATILE_FPGA_IRQ
index 4ecff7b..5b8ba82 100644 (file)
@@ -11,7 +11,6 @@ void cm_clear_irqs(void);
 #define CM_CTRL_LED                    (1 << 0)
 #define CM_CTRL_nMBDET                 (1 << 1)
 #define CM_CTRL_REMAP                  (1 << 2)
-#define CM_CTRL_RESET                  (1 << 3)
 
 /*
  * Integrator/AP,PP2 specific
index ad0ac55..27a627a 100644 (file)
@@ -4,5 +4,4 @@ extern struct amba_pl010_data ap_uart_data;
 void integrator_init_early(void);
 int integrator_init(bool is_cp);
 void integrator_reserve(void);
-void integrator_restart(enum reboot_mode, const char *);
 void integrator_init_sysfs(struct device *parent, u32 id);
index e3f3aca..b06fd9f 100644 (file)
@@ -140,14 +140,6 @@ void __init integrator_reserve(void)
        memblock_reserve(PHYS_OFFSET, __pa(swapper_pg_dir) - PHYS_OFFSET);
 }
 
-/*
- * To reset, we hit the on-board reset register in the system FPGA
- */
-void integrator_restart(enum reboot_mode mode, const char *cmd)
-{
-       cm_control(CM_CTRL_RESET, CM_CTRL_RESET);
-}
-
 static u32 integrator_id;
 
 static ssize_t intcp_get_manf(struct device *dev,
index 8a879b6..e6854c3 100644 (file)
@@ -365,6 +365,5 @@ DT_MACHINE_START(INTEGRATOR_AP_DT, "ARM Integrator/AP (Device Tree)")
        .init_early     = ap_init_early,
        .init_irq       = ap_init_irq_of,
        .init_machine   = ap_init_of,
-       .restart        = integrator_restart,
        .dt_compat      = ap_dt_board_compat,
 MACHINE_END
index cca02eb..fa8475b 100644 (file)
@@ -324,6 +324,5 @@ DT_MACHINE_START(INTEGRATOR_CP_DT, "ARM Integrator/CP (Device Tree)")
        .init_early     = intcp_init_early,
        .init_irq       = intcp_init_irq_of,
        .init_machine   = intcp_init_of,
-       .restart        = integrator_restart,
        .dt_compat      = intcp_dt_board_compat,
 MACHINE_END