void reboot_device(unsigned reboot_reason) { uint32_t soc_ver = 0; uint8_t reset_type = 0; soc_ver = board_soc_version(); /* Write the reboot reason */ if (platform_is_8974() && BOARD_SOC_VERSION1(soc_ver)) writel(reboot_reason, RESTART_REASON_ADDR); else writel(reboot_reason, RESTART_REASON_ADDR_V2); if(reboot_reason == FASTBOOT_MODE) reset_type = PON_PSHOLD_WARM_RESET; else reset_type = PON_PSHOLD_HARD_RESET; /* Configure PMIC for warm reset */ if (platform_is_8974() && (pmic_ver == PM8X41_VERSION_V2)) pm8x41_v2_reset_configure(reset_type); else pm8x41_reset_configure(reset_type); /* Drop PS_HOLD for MSM */ writel(0x00, MPM2_MPM_PS_HOLD); mdelay(5000); dprintf(CRITICAL, "Rebooting failed\n"); }
void reboot_device(unsigned reboot_reason) { uint8_t reset_type = 0; /* Write the reboot reason */ writel(reboot_reason, RESTART_REASON_ADDR); /* Configure PMIC for warm reset */ /* PM 8019 v1 aligns with PM8941 v2. * This call should be based on the pmic version * when PM8019 v2 is available. */ if(reboot_reason) reset_type = PON_PSHOLD_WARM_RESET; else reset_type = PON_PSHOLD_HARD_RESET; pm8x41_v2_reset_configure(reset_type); /* Drop PS_HOLD for MSM */ writel(0x00, MPM2_MPM_PS_HOLD); mdelay(5000); dprintf(CRITICAL, "Rebooting failed\n"); return; }
void shutdown_device() { dprintf(CRITICAL, "Going down for shutdown.\n"); /* Configure PMIC for shutdown. */ if (pmic_ver == PMIC_VERSION_V2) pm8x41_v2_reset_configure(PON_PSHOLD_SHUTDOWN); else pm8x41_reset_configure(PON_PSHOLD_SHUTDOWN); /* Drop PS_HOLD for MSM */ writel(0x00, MPM2_MPM_PS_HOLD); mdelay(5000); dprintf(CRITICAL, "Shutdown failed\n"); }
void reboot_device(unsigned reboot_reason) { uint32_t soc_ver = 0; uint8_t reset_type = 0; soc_ver = board_soc_version(); /* Write the reboot reason */ if (target_is_8974() && BOARD_SOC_VERSION1(soc_ver)) writel(reboot_reason, RESTART_REASON_ADDR); else writel(reboot_reason, RESTART_REASON_ADDR_V2); if(reboot_reason == FASTBOOT_MODE) reset_type = PON_PSHOLD_WARM_RESET; else reset_type = PON_PSHOLD_HARD_RESET; /* Configure PMIC for warm reset */ if (target_is_8974() && (pmic_ver == PM8X41_VERSION_V2)) pm8x41_v2_reset_configure(reset_type); else pm8x41_reset_configure(reset_type); /* Disable Watchdog Debug. * Required becuase of a H/W bug which causes the system to * reset partially even for non watchdog resets. */ writel(readl(GCC_WDOG_DEBUG) & ~(1 << WDOG_DEBUG_DISABLE_BIT), GCC_WDOG_DEBUG); dsb(); /* Wait until the write takes effect. */ while(readl(GCC_WDOG_DEBUG) & (1 << WDOG_DEBUG_DISABLE_BIT)); /* Drop PS_HOLD for MSM */ writel(0x00, MPM2_MPM_PS_HOLD); mdelay(5000); dprintf(CRITICAL, "Rebooting failed\n"); }