Unify Power menu bootloader entry as 'Reboot to loader' into lk2nd Fastboot menu
This commit is contained in:
@@ -62,7 +62,7 @@
|
||||
|
||||
static char next_reboot_mode[32];
|
||||
module_param_string(next_reboot_mode, next_reboot_mode, sizeof(next_reboot_mode), 0644);
|
||||
MODULE_PARM_DESC(next_reboot_mode, "Next reboot target mode (bootloader, fastboot, edl)");
|
||||
MODULE_PARM_DESC(next_reboot_mode, "Next reboot target mode (loader, bootloader, fastboot, edl)");
|
||||
|
||||
static void __iomem *tlmm_gpio32_base;
|
||||
static void __iomem *gcc_camss_base;
|
||||
@@ -192,8 +192,11 @@ static unsigned int msm8905_pon_prepare_restart_mode(const char *cmd)
|
||||
if ((!mode || !mode[0]) && cmd && cmd[0])
|
||||
mode = cmd;
|
||||
|
||||
if (!mode || !mode[0])
|
||||
if (!mode || !mode[0]) {
|
||||
if (pon_regmap)
|
||||
regmap_write(pon_regmap, QPNP_PON_SOFT_RB_SPARE, 0x00U);
|
||||
return PON_POWER_OFF_HARD_RESET;
|
||||
}
|
||||
|
||||
strscpy(trimmed, mode, sizeof(trimmed));
|
||||
len = strlen(trimmed);
|
||||
@@ -202,21 +205,26 @@ static unsigned int msm8905_pon_prepare_restart_mode(const char *cmd)
|
||||
trimmed[--len] = '\0';
|
||||
}
|
||||
|
||||
if (strcmp(trimmed, "bootloader") == 0 || strcmp(trimmed, "fastboot") == 0) {
|
||||
if (strcmp(trimmed, "loader") == 0 ||
|
||||
strcmp(trimmed, "bootloader") == 0 ||
|
||||
strcmp(trimmed, "fastboot") == 0) {
|
||||
if (pon_regmap) {
|
||||
/*
|
||||
* Write 0x04 (1 << 2) into PON_SOFT_RB_SPARE (0x088f) matching
|
||||
* mode-bootloader = <0x02> so lk2nd enters Fastboot mode on reboot.
|
||||
* Stock Nokia aboot (0x2327c) reads PON_SOFT_RB_SPARE (0x088f), clears
|
||||
* bits [7:2] via `and r1, r4, #3`, and writes bits [1:0] back to 0x088f
|
||||
* before chainloading lk2nd from the boot partition.
|
||||
* Write 0x02 (FASTBOOT_MODE = 2 in bits [1:0], 0 in bits [7:2]) so
|
||||
* stock aboot boots lk2nd normally and lk2nd enters its Fastboot menu.
|
||||
*/
|
||||
regmap_update_bits(pon_regmap, QPNP_PON_SOFT_RB_SPARE, 0xfcU, 0x04U);
|
||||
regmap_write(pon_regmap, QPNP_PON_SOFT_RB_SPARE, 0x02U);
|
||||
}
|
||||
pr_info("leds-msm8905-torch: armed PM8909 PON_SOFT_RB_SPARE for lk2nd Fastboot\n");
|
||||
pr_info("leds-msm8905-torch: armed PM8909 PON_SOFT_RB_SPARE (0x02) for lk2nd Fastboot menu\n");
|
||||
return PON_POWER_OFF_HARD_RESET;
|
||||
}
|
||||
|
||||
if (strcmp(trimmed, "edl") == 0) {
|
||||
if (pon_regmap)
|
||||
regmap_update_bits(pon_regmap, QPNP_PON_SOFT_RB_SPARE, 0xfcU, 0x00U);
|
||||
regmap_write(pon_regmap, QPNP_PON_SOFT_RB_SPARE, 0x00U);
|
||||
|
||||
ret = qcom_scm_io_writel(MSM8905_TCSR_BOOT_MISC_DETECT, MSM8905_DLOAD_EDL);
|
||||
if (ret) {
|
||||
@@ -232,12 +240,17 @@ static unsigned int msm8905_pon_prepare_restart_mode(const char *cmd)
|
||||
return PON_POWER_OFF_WARM_RESET;
|
||||
}
|
||||
|
||||
if (pon_regmap)
|
||||
regmap_write(pon_regmap, QPNP_PON_SOFT_RB_SPARE, 0x00U);
|
||||
|
||||
return PON_POWER_OFF_HARD_RESET;
|
||||
}
|
||||
|
||||
static int msm8905_pon_sys_poweroff(struct sys_off_data *data)
|
||||
{
|
||||
msm8905_torch_hw_disable();
|
||||
if (pon_regmap)
|
||||
regmap_write(pon_regmap, QPNP_PON_SOFT_RB_SPARE, 0x00U);
|
||||
msm8905_pon_config_reset(PON_POWER_OFF_SHUTDOWN);
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
+5
-11
@@ -2190,10 +2190,8 @@ open_builtin_menu(const char *menu_name, int keep_idx)
|
||||
add_menu_item(label, "@menu:confirm_logout", 1);
|
||||
snprintf(label, sizeof(label), "%s Reboot", ICON_RLD);
|
||||
add_menu_item(label, "@menu:confirm_reboot", 1);
|
||||
snprintf(label, sizeof(label), "%s Reboot to Fastboot", ICON_RLD);
|
||||
add_menu_item(label, "@menu:confirm_fastboot", 1);
|
||||
snprintf(label, sizeof(label), "%s Reboot to EDL", ICON_RLD);
|
||||
add_menu_item(label, "@menu:confirm_edl", 1);
|
||||
snprintf(label, sizeof(label), "%s Reboot to loader", ICON_RLD);
|
||||
add_menu_item(label, "@menu:confirm_loader", 1);
|
||||
snprintf(label, sizeof(label), "%s Poweroff", ICON_PWR);
|
||||
add_menu_item(label, "@menu:confirm_poweroff", 1);
|
||||
snprintf(label, sizeof(label), "%s System Menu", ICON_MNU);
|
||||
@@ -2208,13 +2206,9 @@ open_builtin_menu(const char *menu_name, int keep_idx)
|
||||
reset_session_defaults(1, "Confirm Reboot");
|
||||
add_menu_item("Yes", "sxmo_power.sh reboot", 0);
|
||||
add_menu_item("No", "@menu:power", 1);
|
||||
} else if (strcmp(menu_name, "confirm_fastboot") == 0) {
|
||||
reset_session_defaults(1, "Confirm Fastboot");
|
||||
add_menu_item("Yes", "sxmo_power.sh fastboot", 0);
|
||||
add_menu_item("No", "@menu:power", 1);
|
||||
} else if (strcmp(menu_name, "confirm_edl") == 0) {
|
||||
reset_session_defaults(1, "Confirm EDL Mode");
|
||||
add_menu_item("Yes", "sxmo_power.sh edl", 0);
|
||||
} else if (strcmp(menu_name, "confirm_loader") == 0) {
|
||||
reset_session_defaults(1, "Confirm Loader");
|
||||
add_menu_item("Yes", "sxmo_power.sh loader", 0);
|
||||
add_menu_item("No", "@menu:power", 1);
|
||||
} else if (strcmp(menu_name, "confirm_poweroff") == 0) {
|
||||
reset_session_defaults(1, "Confirm Poweroff");
|
||||
|
||||
Reference in New Issue
Block a user