ARM: 9094/1: Register with kernel restart handler
authorGuenter Roeck <linux@roeck-us.net>
Fri, 4 Jun 2021 14:07:35 +0000 (15:07 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Sun, 13 Jun 2021 17:16:46 +0000 (18:16 +0100)
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.

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>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
arch/arm/kernel/setup.c

index 1a5edf5..08c5676 100644 (file)
@@ -1081,6 +1081,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 = NULL;
@@ -1149,8 +1163,10 @@ void __init setup_arch(char **cmdline_p)
        kasan_init();
        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();