| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
| From: Guenter Roeck <linux@roeck-us.net> |
| Date: Tue, 15 Oct 2019 16:51:45 +0200 |
| Subject: FROMLIST: ARM: Register with kernel restart handler |
| |
| By making use of the kernel restart handler, board specific restart |
| handlers can be prioritized amongst available mechanisms for a particular |
| board or system. |
| |
| Select the default priority of 128 to indicate that the restart callback |
| in the machine description is the default restart mechanism. |
| |
| Bug: 146512338 |
| Change-Id: I9253eab4b521d8b39196909cb0780aa0aaa041db |
| Link: https://lore.kernel.org/patchwork/patch/1139629/ |
| Acked-by: Arnd Bergmann <arnd@arndb.de> |
| Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com> |
| Signed-off-by: Guenter Roeck <linux@roeck-us.net> |
| Signed-off-by: Thierry Reding <treding@nvidia.com> |
| --- |
| arch/arm/kernel/setup.c | 20 ++++++++++++++++++-- |
| 1 file changed, 18 insertions(+), 2 deletions(-) |
| |
| diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c |
| index d0a464e317ea..d403648195de 100644 |
| --- a/arch/arm/kernel/setup.c |
| +++ b/arch/arm/kernel/setup.c |
| @@ -1073,6 +1073,20 @@ void __init hyp_mode_check(void) |
| #endif |
| } |
| |
| +static void (*__arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd); |
| + |
| +static int arm_restart(struct notifier_block *nb, unsigned long action, |
| + void *data) |
| +{ |
| + __arm_pm_restart(action, data); |
| + return NOTIFY_DONE; |
| +} |
| + |
| +static struct notifier_block arm_restart_nb = { |
| + .notifier_call = arm_restart, |
| + .priority = 128, |
| +}; |
| + |
| void __init setup_arch(char **cmdline_p) |
| { |
| const struct machine_desc *mdesc; |
| @@ -1132,8 +1146,10 @@ void __init setup_arch(char **cmdline_p) |
| paging_init(mdesc); |
| request_standard_resources(mdesc); |
| |
| - if (mdesc->restart) |
| - arm_pm_restart = mdesc->restart; |
| + if (mdesc->restart) { |
| + __arm_pm_restart = mdesc->restart; |
| + register_restart_handler(&arm_restart_nb); |
| + } |
| |
| unflatten_device_tree(); |
| |