diff options
author | Dinh Nguyen <dinguyen@opensource.altera.com> | 2015-07-20 12:23:13 -0400 |
---|---|---|
committer | Dinh Nguyen <dinguyen@opensource.altera.com> | 2015-07-20 16:44:43 -0400 |
commit | cd871d517d46f26943f3c8f61c0d2ac6665da6a2 (patch) | |
tree | 5abb55bbf4bb30df7694d27a4e783c4a4e5aadd1 /arch/arm/mach-socfpga | |
parent | b33612e183dcbaa2cc2479cedff6984a6cccdf6a (diff) |
ARM: socfpga: add reset for the Arria 10 platform
Since the Arria10's reset register offset is different from the Cyclone/Arria 5,
it's best to add a new DT_MACHINE_START() for the Arria10.
Signed-off-by: Dinh Nguyen <dinguyen@opensource.altera.com>
---
v2: use altera_a10_dt_match for the A10 machine desc
Diffstat (limited to 'arch/arm/mach-socfpga')
-rw-r--r-- | arch/arm/mach-socfpga/core.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-socfpga/socfpga.c | 26 |
2 files changed, 27 insertions, 0 deletions
diff --git a/arch/arm/mach-socfpga/core.h b/arch/arm/mach-socfpga/core.h index 7259c3732702..5bc6ea87cdf7 100644 --- a/arch/arm/mach-socfpga/core.h +++ b/arch/arm/mach-socfpga/core.h | |||
@@ -25,6 +25,7 @@ | |||
25 | #define SOCFPGA_RSTMGR_MODPERRST 0x14 | 25 | #define SOCFPGA_RSTMGR_MODPERRST 0x14 |
26 | #define SOCFPGA_RSTMGR_BRGMODRST 0x1c | 26 | #define SOCFPGA_RSTMGR_BRGMODRST 0x1c |
27 | 27 | ||
28 | #define SOCFPGA_A10_RSTMGR_CTRL 0xC | ||
28 | #define SOCFPGA_A10_RSTMGR_MODMPURST 0x20 | 29 | #define SOCFPGA_A10_RSTMGR_MODMPURST 0x20 |
29 | 30 | ||
30 | /* System Manager bits */ | 31 | /* System Manager bits */ |
diff --git a/arch/arm/mach-socfpga/socfpga.c b/arch/arm/mach-socfpga/socfpga.c index 19643a756c48..a1c0efaa8794 100644 --- a/arch/arm/mach-socfpga/socfpga.c +++ b/arch/arm/mach-socfpga/socfpga.c | |||
@@ -74,6 +74,19 @@ static void socfpga_cyclone5_restart(enum reboot_mode mode, const char *cmd) | |||
74 | writel(temp, rst_manager_base_addr + SOCFPGA_RSTMGR_CTRL); | 74 | writel(temp, rst_manager_base_addr + SOCFPGA_RSTMGR_CTRL); |
75 | } | 75 | } |
76 | 76 | ||
77 | static void socfpga_arria10_restart(enum reboot_mode mode, const char *cmd) | ||
78 | { | ||
79 | u32 temp; | ||
80 | |||
81 | temp = readl(rst_manager_base_addr + SOCFPGA_A10_RSTMGR_CTRL); | ||
82 | |||
83 | if (mode == REBOOT_HARD) | ||
84 | temp |= RSTMGR_CTRL_SWCOLDRSTREQ; | ||
85 | else | ||
86 | temp |= RSTMGR_CTRL_SWWARMRSTREQ; | ||
87 | writel(temp, rst_manager_base_addr + SOCFPGA_A10_RSTMGR_CTRL); | ||
88 | } | ||
89 | |||
77 | static const char *altera_dt_match[] = { | 90 | static const char *altera_dt_match[] = { |
78 | "altr,socfpga", | 91 | "altr,socfpga", |
79 | NULL | 92 | NULL |
@@ -86,3 +99,16 @@ DT_MACHINE_START(SOCFPGA, "Altera SOCFPGA") | |||
86 | .restart = socfpga_cyclone5_restart, | 99 | .restart = socfpga_cyclone5_restart, |
87 | .dt_compat = altera_dt_match, | 100 | .dt_compat = altera_dt_match, |
88 | MACHINE_END | 101 | MACHINE_END |
102 | |||
103 | static const char *altera_a10_dt_match[] = { | ||
104 | "altr,socfpga-arria10", | ||
105 | NULL | ||
106 | }; | ||
107 | |||
108 | DT_MACHINE_START(SOCFPGA_A10, "Altera SOCFPGA Arria10") | ||
109 | .l2c_aux_val = 0, | ||
110 | .l2c_aux_mask = ~0, | ||
111 | .init_irq = socfpga_init_irq, | ||
112 | .restart = socfpga_arria10_restart, | ||
113 | .dt_compat = altera_a10_dt_match, | ||
114 | MACHINE_END | ||