void reboot_device(unsigned reboot_reason) { uint8_t reset_type = 0; uint32_t ret = 0; /* Need to clear the SW_RESET_ENTRY register and * write to the BOOT_MISC_REG for known reset cases */ if(reboot_reason != DLOAD) scm_dload_mode(NORMAL_MODE); writel(reboot_reason, RESTART_REASON_ADDR); /* For Reboot-bootloader and Dload cases do a warm reset * For Reboot cases do a hard reset */ if((reboot_reason == FASTBOOT_MODE) || (reboot_reason == DLOAD) || (reboot_reason == RECOVERY_MODE)) reset_type = PON_PSHOLD_WARM_RESET; else reset_type = PON_PSHOLD_HARD_RESET; pm8x41_reset_configure(reset_type); ret = scm_halt_pmic_arbiter(); if (ret) dprintf(CRITICAL , "Failed to halt pmic arbiter: %d\n", ret); /* Drop PS_HOLD for MSM */ writel(0x00, MPM2_MPM_PS_HOLD); mdelay(5000); dprintf(CRITICAL, "Rebooting failed\n"); }
int set_download_mode(enum dload_mode mode) { int ret = 0; ret = scm_dload_mode(mode); pm8x41_clear_pmic_watchdog(); return ret; }