1
0
Fork 0

ARM: integrator: move restart to the device tree

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>
hifive-unleashed-5.1
Linus Walleij 2014-10-17 16:18:59 +02:00
parent beb5818bd0
commit b437c52c29
7 changed files with 5 additions and 13 deletions

View File

@ -6,7 +6,7 @@
/ { / {
core-module@10000000 { core-module@10000000 {
compatible = "arm,core-module-integrator"; compatible = "arm,core-module-integrator", "syscon";
reg = <0x10000000 0x200>; reg = <0x10000000 0x200>;
}; };

View File

@ -8,8 +8,12 @@ config ARCH_INTEGRATOR
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select HAVE_TCM select HAVE_TCM
select ICST select ICST
select MFD_SYSCON
select MULTI_IRQ_HANDLER select MULTI_IRQ_HANDLER
select PLAT_VERSATILE select PLAT_VERSATILE
select POWER_RESET
select POWER_RESET_VERSATILE
select POWER_SUPPLY
select SPARSE_IRQ select SPARSE_IRQ
select USE_OF select USE_OF
select VERSATILE_FPGA_IRQ select VERSATILE_FPGA_IRQ

View File

@ -11,7 +11,6 @@ void cm_clear_irqs(void);
#define CM_CTRL_LED (1 << 0) #define CM_CTRL_LED (1 << 0)
#define CM_CTRL_nMBDET (1 << 1) #define CM_CTRL_nMBDET (1 << 1)
#define CM_CTRL_REMAP (1 << 2) #define CM_CTRL_REMAP (1 << 2)
#define CM_CTRL_RESET (1 << 3)
/* /*
* Integrator/AP,PP2 specific * Integrator/AP,PP2 specific

View File

@ -4,5 +4,4 @@ extern struct amba_pl010_data ap_uart_data;
void integrator_init_early(void); void integrator_init_early(void);
int integrator_init(bool is_cp); int integrator_init(bool is_cp);
void integrator_reserve(void); void integrator_reserve(void);
void integrator_restart(enum reboot_mode, const char *);
void integrator_init_sysfs(struct device *parent, u32 id); void integrator_init_sysfs(struct device *parent, u32 id);

View File

@ -140,14 +140,6 @@ void __init integrator_reserve(void)
memblock_reserve(PHYS_OFFSET, __pa(swapper_pg_dir) - PHYS_OFFSET); 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 u32 integrator_id;
static ssize_t intcp_get_manf(struct device *dev, static ssize_t intcp_get_manf(struct device *dev,

View File

@ -365,6 +365,5 @@ DT_MACHINE_START(INTEGRATOR_AP_DT, "ARM Integrator/AP (Device Tree)")
.init_early = ap_init_early, .init_early = ap_init_early,
.init_irq = ap_init_irq_of, .init_irq = ap_init_irq_of,
.init_machine = ap_init_of, .init_machine = ap_init_of,
.restart = integrator_restart,
.dt_compat = ap_dt_board_compat, .dt_compat = ap_dt_board_compat,
MACHINE_END MACHINE_END

View File

@ -324,6 +324,5 @@ DT_MACHINE_START(INTEGRATOR_CP_DT, "ARM Integrator/CP (Device Tree)")
.init_early = intcp_init_early, .init_early = intcp_init_early,
.init_irq = intcp_init_irq_of, .init_irq = intcp_init_irq_of,
.init_machine = intcp_init_of, .init_machine = intcp_init_of,
.restart = integrator_restart,
.dt_compat = intcp_dt_board_compat, .dt_compat = intcp_dt_board_compat,
MACHINE_END MACHINE_END