Loading drivers/firmware/qcom_scm.c +1 −0 Original line number Diff line number Diff line Loading @@ -1229,6 +1229,7 @@ static void qcom_scm_shutdown(struct platform_device *pdev) { qcom_scm_disable_sdi(); qcom_scm_halt_spmi_pmic_arbiter(); /* Clean shutdown, disable download mode to allow normal restart */ qcom_scm_set_download_mode(QCOM_DOWNLOAD_NODUMP, 0); } Loading drivers/power/reset/qcom-dload-mode.c +14 −22 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ enum qcom_download_dest { struct qcom_dload { struct notifier_block panic_nb; struct notifier_block reboot_nb; struct notifier_block restart_nb; struct kobject kobj; bool in_panic; Loading Loading @@ -251,28 +251,15 @@ static int qcom_dload_panic(struct notifier_block *this, unsigned long event, 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) { 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 (!poweroff->in_panic) 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) if (cmd && !strcmp(cmd, "edl")) { set_download_mode(QCOM_DOWNLOAD_EDL); reboot_mode = REBOOT_WARM; } return NOTIFY_OK; } Loading Loading @@ -381,9 +368,14 @@ static int qcom_dload_probe(struct platform_device *pdev) atomic_notifier_chain_register(&panic_notifier_list, &poweroff->panic_nb); poweroff->reboot_nb.notifier_call = qcom_dload_reboot; poweroff->reboot_nb.priority = 255; register_reboot_notifier(&poweroff->reboot_nb); poweroff->restart_nb.notifier_call = qcom_dload_restart; /* Here, Restart handler priority should be higher than * 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); Loading @@ -396,7 +388,7 @@ static int qcom_dload_remove(struct platform_device *pdev) atomic_notifier_chain_unregister(&panic_notifier_list, &poweroff->panic_nb); unregister_reboot_notifier(&poweroff->reboot_nb); unregister_restart_handler(&poweroff->restart_nb); if (poweroff->dload_dest_addr) iounmap(poweroff->dload_dest_addr); Loading Loading
drivers/firmware/qcom_scm.c +1 −0 Original line number Diff line number Diff line Loading @@ -1229,6 +1229,7 @@ static void qcom_scm_shutdown(struct platform_device *pdev) { qcom_scm_disable_sdi(); qcom_scm_halt_spmi_pmic_arbiter(); /* Clean shutdown, disable download mode to allow normal restart */ qcom_scm_set_download_mode(QCOM_DOWNLOAD_NODUMP, 0); } Loading
drivers/power/reset/qcom-dload-mode.c +14 −22 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ enum qcom_download_dest { struct qcom_dload { struct notifier_block panic_nb; struct notifier_block reboot_nb; struct notifier_block restart_nb; struct kobject kobj; bool in_panic; Loading Loading @@ -251,28 +251,15 @@ static int qcom_dload_panic(struct notifier_block *this, unsigned long event, 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) { 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 (!poweroff->in_panic) 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) if (cmd && !strcmp(cmd, "edl")) { set_download_mode(QCOM_DOWNLOAD_EDL); reboot_mode = REBOOT_WARM; } return NOTIFY_OK; } Loading Loading @@ -381,9 +368,14 @@ static int qcom_dload_probe(struct platform_device *pdev) atomic_notifier_chain_register(&panic_notifier_list, &poweroff->panic_nb); poweroff->reboot_nb.notifier_call = qcom_dload_reboot; poweroff->reboot_nb.priority = 255; register_reboot_notifier(&poweroff->reboot_nb); poweroff->restart_nb.notifier_call = qcom_dload_restart; /* Here, Restart handler priority should be higher than * 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); Loading @@ -396,7 +388,7 @@ static int qcom_dload_remove(struct platform_device *pdev) atomic_notifier_chain_unregister(&panic_notifier_list, &poweroff->panic_nb); unregister_reboot_notifier(&poweroff->reboot_nb); unregister_restart_handler(&poweroff->restart_nb); if (poweroff->dload_dest_addr) iounmap(poweroff->dload_dest_addr); Loading