Loading Documentation/admin-guide/kernel-parameters.txt +3 −1 Original line number Diff line number Diff line Loading @@ -3911,7 +3911,9 @@ [[,]s[mp]#### \ [[,]b[ios] | a[cpi] | k[bd] | t[riple] | e[fi] | p[ci]] \ [[,]f[orce] Where reboot_mode is one of warm (soft) or cold (hard) or gpio, Where reboot_mode is one of warm (soft) or cold (hard) or gpio (prefix with 'panic_' to set mode for panic reboot only), reboot_type is one of bios, acpi, kbd, triple, efi, or pci, reboot_force is either force or not specified, reboot_cpu is s[mp]#### with #### being the processor Loading drivers/firmware/psci.c +23 −1 Original line number Diff line number Diff line Loading @@ -88,6 +88,7 @@ static u32 psci_function_id[PSCI_FN_MAX]; PSCI_1_0_EXT_POWER_STATE_TYPE_MASK) static u32 psci_cpu_suspend_feature; static bool psci_system_reset2_supported; static inline bool psci_has_ext_power_state(void) { Loading Loading @@ -253,8 +254,18 @@ static int get_set_conduit_method(struct device_node *np) static void psci_sys_reset(enum reboot_mode reboot_mode, const char *cmd) { if ((reboot_mode == REBOOT_WARM || reboot_mode == REBOOT_SOFT) && psci_system_reset2_supported) { /* * reset_type[31] = 0 (architectural) * reset_type[30:0] = 0 (SYSTEM_WARM_RESET) * cookie = 0 (ignored by the implementation) */ invoke_psci_fn(PSCI_FN_NATIVE(1_1, SYSTEM_RESET2), 0, 0, 0); } else { invoke_psci_fn(PSCI_0_2_FN_SYSTEM_RESET, 0, 0, 0); } } static void psci_sys_poweroff(void) { Loading Loading @@ -448,6 +459,16 @@ static const struct platform_suspend_ops psci_suspend_ops = { .enter = psci_system_suspend_enter, }; static void __init psci_init_system_reset2(void) { int ret; ret = psci_features(PSCI_FN_NATIVE(1_1, SYSTEM_RESET2)); if (ret != PSCI_RET_NOT_SUPPORTED) psci_system_reset2_supported = true; } static void __init psci_init_system_suspend(void) { int ret; Loading Loading @@ -585,6 +606,7 @@ static int __init psci_probe(void) psci_init_smccc(); psci_init_cpu_suspend(); psci_init_system_suspend(); psci_init_system_reset2(); } return 0; Loading include/linux/reboot.h +2 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ struct device; #define SYS_POWER_OFF 0x0003 /* Notify of system power off */ enum reboot_mode { REBOOT_UNDEFINED = -1, REBOOT_COLD = 0, REBOOT_WARM, REBOOT_HARD, Loading @@ -21,6 +22,7 @@ enum reboot_mode { REBOOT_GPIO, }; extern enum reboot_mode reboot_mode; extern enum reboot_mode panic_reboot_mode; enum reboot_type { BOOT_TRIPLE = 't', Loading include/uapi/linux/psci.h +2 −0 Original line number Diff line number Diff line Loading @@ -49,8 +49,10 @@ #define PSCI_1_0_FN_PSCI_FEATURES PSCI_0_2_FN(10) #define PSCI_1_0_FN_SYSTEM_SUSPEND PSCI_0_2_FN(14) #define PSCI_1_1_FN_SYSTEM_RESET2 PSCI_0_2_FN(18) #define PSCI_1_0_FN64_SYSTEM_SUSPEND PSCI_0_2_FN64(14) #define PSCI_1_1_FN64_SYSTEM_RESET2 PSCI_0_2_FN64(18) /* PSCI v0.2 power state encoding for CPU_SUSPEND function */ #define PSCI_0_2_POWER_STATE_ID_MASK 0xffff Loading kernel/panic.c +2 −0 Original line number Diff line number Diff line Loading @@ -277,6 +277,8 @@ void panic(const char *fmt, ...) * shutting down. But if there is a chance of * rebooting the system it will be rebooted. */ if (panic_reboot_mode != REBOOT_UNDEFINED) reboot_mode = panic_reboot_mode; emergency_restart(); } #ifdef __sparc__ Loading Loading
Documentation/admin-guide/kernel-parameters.txt +3 −1 Original line number Diff line number Diff line Loading @@ -3911,7 +3911,9 @@ [[,]s[mp]#### \ [[,]b[ios] | a[cpi] | k[bd] | t[riple] | e[fi] | p[ci]] \ [[,]f[orce] Where reboot_mode is one of warm (soft) or cold (hard) or gpio, Where reboot_mode is one of warm (soft) or cold (hard) or gpio (prefix with 'panic_' to set mode for panic reboot only), reboot_type is one of bios, acpi, kbd, triple, efi, or pci, reboot_force is either force or not specified, reboot_cpu is s[mp]#### with #### being the processor Loading
drivers/firmware/psci.c +23 −1 Original line number Diff line number Diff line Loading @@ -88,6 +88,7 @@ static u32 psci_function_id[PSCI_FN_MAX]; PSCI_1_0_EXT_POWER_STATE_TYPE_MASK) static u32 psci_cpu_suspend_feature; static bool psci_system_reset2_supported; static inline bool psci_has_ext_power_state(void) { Loading Loading @@ -253,8 +254,18 @@ static int get_set_conduit_method(struct device_node *np) static void psci_sys_reset(enum reboot_mode reboot_mode, const char *cmd) { if ((reboot_mode == REBOOT_WARM || reboot_mode == REBOOT_SOFT) && psci_system_reset2_supported) { /* * reset_type[31] = 0 (architectural) * reset_type[30:0] = 0 (SYSTEM_WARM_RESET) * cookie = 0 (ignored by the implementation) */ invoke_psci_fn(PSCI_FN_NATIVE(1_1, SYSTEM_RESET2), 0, 0, 0); } else { invoke_psci_fn(PSCI_0_2_FN_SYSTEM_RESET, 0, 0, 0); } } static void psci_sys_poweroff(void) { Loading Loading @@ -448,6 +459,16 @@ static const struct platform_suspend_ops psci_suspend_ops = { .enter = psci_system_suspend_enter, }; static void __init psci_init_system_reset2(void) { int ret; ret = psci_features(PSCI_FN_NATIVE(1_1, SYSTEM_RESET2)); if (ret != PSCI_RET_NOT_SUPPORTED) psci_system_reset2_supported = true; } static void __init psci_init_system_suspend(void) { int ret; Loading Loading @@ -585,6 +606,7 @@ static int __init psci_probe(void) psci_init_smccc(); psci_init_cpu_suspend(); psci_init_system_suspend(); psci_init_system_reset2(); } return 0; Loading
include/linux/reboot.h +2 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ struct device; #define SYS_POWER_OFF 0x0003 /* Notify of system power off */ enum reboot_mode { REBOOT_UNDEFINED = -1, REBOOT_COLD = 0, REBOOT_WARM, REBOOT_HARD, Loading @@ -21,6 +22,7 @@ enum reboot_mode { REBOOT_GPIO, }; extern enum reboot_mode reboot_mode; extern enum reboot_mode panic_reboot_mode; enum reboot_type { BOOT_TRIPLE = 't', Loading
include/uapi/linux/psci.h +2 −0 Original line number Diff line number Diff line Loading @@ -49,8 +49,10 @@ #define PSCI_1_0_FN_PSCI_FEATURES PSCI_0_2_FN(10) #define PSCI_1_0_FN_SYSTEM_SUSPEND PSCI_0_2_FN(14) #define PSCI_1_1_FN_SYSTEM_RESET2 PSCI_0_2_FN(18) #define PSCI_1_0_FN64_SYSTEM_SUSPEND PSCI_0_2_FN64(14) #define PSCI_1_1_FN64_SYSTEM_RESET2 PSCI_0_2_FN64(18) /* PSCI v0.2 power state encoding for CPU_SUSPEND function */ #define PSCI_0_2_POWER_STATE_ID_MASK 0xffff Loading
kernel/panic.c +2 −0 Original line number Diff line number Diff line Loading @@ -277,6 +277,8 @@ void panic(const char *fmt, ...) * shutting down. But if there is a chance of * rebooting the system it will be rebooted. */ if (panic_reboot_mode != REBOOT_UNDEFINED) reboot_mode = panic_reboot_mode; emergency_restart(); } #ifdef __sparc__ Loading