diff options
author | Joel Stanley <joel@jms.id.au> | 2020-12-27 19:44:46 +1030 |
---|---|---|
committer | Stafford Horne <shorne@gmail.com> | 2021-01-01 15:00:08 +0900 |
commit | 131172a4a8ce3fccfd4a9f0f8b3c0d0e59222f1d (patch) | |
tree | 6b961fa64950bb9dfc906ad0205d0a16b42398d1 /arch/openrisc | |
parent | 472ab9ee15c6a28adbac65a543af58461b49a947 (diff) |
openrisc: restart: Call common handlers before hanging
Currently openrisc will print a message and then hang in an infinite
loop when rebooting.
This patch adopts some code from ARM, which calls the common restart
infrastructure and hangs after a small delay if the restart infra
doesn't do anything.
Signed-off-by: Joel Stanley <joel@jms.id.au>
Signed-off-by: Stafford Horne <shorne@gmail.com>
Diffstat (limited to 'arch/openrisc')
-rw-r--r-- | arch/openrisc/kernel/process.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/arch/openrisc/kernel/process.c b/arch/openrisc/kernel/process.c index 3c98728cce24..181448f74316 100644 --- a/arch/openrisc/kernel/process.c +++ b/arch/openrisc/kernel/process.c @@ -34,6 +34,7 @@ #include <linux/init_task.h> #include <linux/mqueue.h> #include <linux/fs.h> +#include <linux/reboot.h> #include <linux/uaccess.h> #include <asm/io.h> @@ -49,10 +50,16 @@ */ struct thread_info *current_thread_info_set[NR_CPUS] = { &init_thread_info, }; -void machine_restart(void) +void machine_restart(char *cmd) { - printk(KERN_INFO "*** MACHINE RESTART ***\n"); - __asm__("l.nop 1"); + do_kernel_restart(cmd); + + /* Give a grace period for failure to restart of 1s */ + mdelay(1000); + + /* Whoops - the platform was unable to reboot. Tell the user! */ + pr_emerg("Reboot failed -- System halted\n"); + while (1); } /* |