Merge "qcom-dload-mode: Convert reboot notifier to restart notifier"

This commit is contained in:
qctecmdr 2024-01-04 03:54:15 -08:00 committed by Gerrit - the friendly Code Review server
commit bd73268ecf
2 changed files with 15 additions and 22 deletions

View File

@ -1229,6 +1229,7 @@ static void qcom_scm_shutdown(struct platform_device *pdev)
{ {
qcom_scm_disable_sdi(); qcom_scm_disable_sdi();
qcom_scm_halt_spmi_pmic_arbiter(); qcom_scm_halt_spmi_pmic_arbiter();
/* Clean shutdown, disable download mode to allow normal restart */
qcom_scm_set_download_mode(QCOM_DOWNLOAD_NODUMP, 0); qcom_scm_set_download_mode(QCOM_DOWNLOAD_NODUMP, 0);
} }

View File

@ -24,7 +24,7 @@ enum qcom_download_dest {
struct qcom_dload { struct qcom_dload {
struct notifier_block panic_nb; struct notifier_block panic_nb;
struct notifier_block reboot_nb; struct notifier_block restart_nb;
struct kobject kobj; struct kobject kobj;
bool in_panic; bool in_panic;
@ -251,28 +251,15 @@ static int qcom_dload_panic(struct notifier_block *this, unsigned long event,
return NOTIFY_OK; return NOTIFY_OK;
} }
static int qcom_dload_reboot(struct notifier_block *this, unsigned long event, static int qcom_dload_restart(struct notifier_block *this, unsigned long event,
void *ptr) void *ptr)
{ {
char *cmd = ptr; char *cmd = ptr;
struct qcom_dload *poweroff = container_of(this, struct qcom_dload,
reboot_nb);
/* Clean shutdown, disable dump mode to allow normal restart */ if (cmd && !strcmp(cmd, "edl")) {
if (!poweroff->in_panic) set_download_mode(QCOM_DOWNLOAD_EDL);
set_download_mode(QCOM_DOWNLOAD_NODUMP);
if (cmd) {
if (!strcmp(cmd, "edl")) {
early_pcie_init_enable ? set_download_mode(QCOM_EDLOAD_PCI_MODE)
: set_download_mode(QCOM_DOWNLOAD_EDL);
}
else if (!strcmp(cmd, "qcom_dload"))
msm_enable_dump_mode(true);
}
if (current_download_mode != QCOM_DOWNLOAD_NODUMP)
reboot_mode = REBOOT_WARM; reboot_mode = REBOOT_WARM;
}
return NOTIFY_OK; return NOTIFY_OK;
} }
@ -381,9 +368,14 @@ static int qcom_dload_probe(struct platform_device *pdev)
atomic_notifier_chain_register(&panic_notifier_list, atomic_notifier_chain_register(&panic_notifier_list,
&poweroff->panic_nb); &poweroff->panic_nb);
poweroff->reboot_nb.notifier_call = qcom_dload_reboot; poweroff->restart_nb.notifier_call = qcom_dload_restart;
poweroff->reboot_nb.priority = 255; /* Here, Restart handler priority should be higher than
register_reboot_notifier(&poweroff->reboot_nb); * of restart handler present in scm driver so that
* reboot_mode set by this handler seen by SCM's one
* for EDL mode.
*/
poweroff->restart_nb.priority = 131;
register_restart_handler(&poweroff->restart_nb);
platform_set_drvdata(pdev, poweroff); platform_set_drvdata(pdev, poweroff);
@ -396,7 +388,7 @@ static int qcom_dload_remove(struct platform_device *pdev)
atomic_notifier_chain_unregister(&panic_notifier_list, atomic_notifier_chain_unregister(&panic_notifier_list,
&poweroff->panic_nb); &poweroff->panic_nb);
unregister_reboot_notifier(&poweroff->reboot_nb); unregister_restart_handler(&poweroff->restart_nb);
if (poweroff->dload_dest_addr) if (poweroff->dload_dest_addr)
iounmap(poweroff->dload_dest_addr); iounmap(poweroff->dload_dest_addr);