diff options
| -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 | } | ||
