diff options
author | Tony Lindgren <tony@atomide.com> | 2015-01-14 20:37:16 -0500 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2015-01-14 20:37:16 -0500 |
commit | bc7235c97f90c9def22ebda620d7eae2b49a7642 (patch) | |
tree | c5a4b904acc3f26aee7a39d2340a3e76d57b4583 | |
parent | 132754e483d55309ddd714a2c44580379e4ac55a (diff) |
ARM: OMAP2+: Fix reboot for 81xx
We are missing proper hooks for 81xx for reboot to work.
Cc: Brian Hutchinson <b.hutchman@gmail.com>
Reviewed-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
-rw-r--r-- | arch/arm/mach-omap2/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/mach-omap2/common.h | 8 | ||||
-rw-r--r-- | arch/arm/mach-omap2/ti81xx-restart.c | 34 |
3 files changed, 43 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 5d27dfdef66b..3a6463f88ea2 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile | |||
@@ -58,6 +58,7 @@ AFLAGS_sram34xx.o :=-Wa,-march=armv7-a | |||
58 | # Restart code (OMAP4/5 currently in omap4-common.c) | 58 | # Restart code (OMAP4/5 currently in omap4-common.c) |
59 | obj-$(CONFIG_SOC_OMAP2420) += omap2-restart.o | 59 | obj-$(CONFIG_SOC_OMAP2420) += omap2-restart.o |
60 | obj-$(CONFIG_SOC_OMAP2430) += omap2-restart.o | 60 | obj-$(CONFIG_SOC_OMAP2430) += omap2-restart.o |
61 | obj-$(CONFIG_SOC_TI81XX) += ti81xx-restart.o | ||
61 | obj-$(CONFIG_SOC_AM33XX) += am33xx-restart.o | 62 | obj-$(CONFIG_SOC_AM33XX) += am33xx-restart.o |
62 | obj-$(CONFIG_SOC_AM43XX) += omap4-restart.o | 63 | obj-$(CONFIG_SOC_AM43XX) += omap4-restart.o |
63 | obj-$(CONFIG_ARCH_OMAP3) += omap3-restart.o | 64 | obj-$(CONFIG_ARCH_OMAP3) += omap3-restart.o |
diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h index 900ebdd544a0..65b4371b3361 100644 --- a/arch/arm/mach-omap2/common.h +++ b/arch/arm/mach-omap2/common.h | |||
@@ -164,6 +164,14 @@ static inline void omap3xxx_restart(enum reboot_mode mode, const char *cmd) | |||
164 | } | 164 | } |
165 | #endif | 165 | #endif |
166 | 166 | ||
167 | #ifdef CONFIG_SOC_TI81XX | ||
168 | void ti81xx_restart(enum reboot_mode mode, const char *cmd); | ||
169 | #else | ||
170 | static inline void ti81xx_restart(enum reboot_mode mode, const char *cmd) | ||
171 | { | ||
172 | } | ||
173 | #endif | ||
174 | |||
167 | #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \ | 175 | #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \ |
168 | defined(CONFIG_SOC_DRA7XX) || defined(CONFIG_SOC_AM43XX) | 176 | defined(CONFIG_SOC_DRA7XX) || defined(CONFIG_SOC_AM43XX) |
169 | void omap44xx_restart(enum reboot_mode mode, const char *cmd); | 177 | void omap44xx_restart(enum reboot_mode mode, const char *cmd); |
diff --git a/arch/arm/mach-omap2/ti81xx-restart.c b/arch/arm/mach-omap2/ti81xx-restart.c new file mode 100644 index 000000000000..6c3ce7c46ddd --- /dev/null +++ b/arch/arm/mach-omap2/ti81xx-restart.c | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License version 2 as | ||
4 | * published by the Free Software Foundation. | ||
5 | */ | ||
6 | #include <linux/kernel.h> | ||
7 | #include <linux/init.h> | ||
8 | #include <linux/reboot.h> | ||
9 | |||
10 | #include "iomap.h" | ||
11 | #include "common.h" | ||
12 | #include "control.h" | ||
13 | #include "prm3xxx.h" | ||
14 | |||
15 | #define TI81XX_PRM_DEVICE_RSTCTRL 0x00a0 | ||
16 | #define TI81XX_GLOBAL_RST_COLD BIT(1) | ||
17 | |||
18 | /** | ||
19 | * ti81xx_restart - trigger a software restart of the SoC | ||
20 | * @mode: the "reboot mode", see arch/arm/kernel/{setup,process}.c | ||
21 | * @cmd: passed from the userspace program rebooting the system (if provided) | ||
22 | * | ||
23 | * Resets the SoC. For @cmd, see the 'reboot' syscall in | ||
24 | * kernel/sys.c. No return value. | ||
25 | * | ||
26 | * NOTE: Warm reset does not seem to work, may require resetting | ||
27 | * clocks to bypass mode. | ||
28 | */ | ||
29 | void ti81xx_restart(enum reboot_mode mode, const char *cmd) | ||
30 | { | ||
31 | omap2_prm_set_mod_reg_bits(TI81XX_GLOBAL_RST_COLD, 0, | ||
32 | TI81XX_PRM_DEVICE_RSTCTRL); | ||
33 | while (1); | ||
34 | } | ||