void mt_power_gs_dump_suspend(void) { mt_power_gs_compare("Suspend", \ mt6582_power_gs_suspend, mt6582_power_gs_suspend_len, \ mt6323_power_gs_suspend, mt6323_power_gs_suspend_len, \ mt6333_power_gs_suspend, sizeof(mt6333_power_gs_suspend)); if(slp_read(0xf0010044) != 0x88492480) { printk("slp_read(0xf0010044)=0x%x\n",slp_read(0xf0010044)); // slp_write(0xf0010044, 0x88492480); } if(slp_read(0xf0010040) != 0x00000080) { printk("slp_read(0xf0010044)=0x%x\n",slp_read(0xf0010040)); // slp_write(0xf0010040, 0x00000080); } if(slp_read(0xf0010000) != 0x00000400) { printk("slp_read(0xf0010000)=0x%x\n",slp_read(0xf0010000)); // slp_write(0xf0010000, 0x00000400); } if(slp_read(0xf0010004) != 0x00000820) { printk("slp_read(0xf0010004)=0x%x\n",slp_read(0xf0010004)); // slp_write(0xf0010004, 0x00000820); } if(slp_read(0xf0010008) != 0x00000400) { printk("slp_read(0xf0010008)=0x%x\n",slp_read(0xf0010008)); // slp_write(0xf0010008, 0x00000400); } if(slp_read(0xf001000C) != 0x00000100) { printk("slp_read(0xf001000C)=0x%x\n",slp_read(0xf001000C)); // slp_write(0xf001000C, 0x00000100); } if(slp_read(0xf0010010) != 0x00000100) { printk("slp_read(0xf0010010)=0x%x\n",slp_read(0xf0010010)); // slp_write(0xf0010010, 0x00000100); } if(slp_read(0xf0010014) != 0x00000100) { printk("slp_read(0xf0010014)=0x%x\n",slp_read(0xf0010014)); // slp_write(0xf0010014, 0x00000100); } if(slp_read(0xf0010068) != 0x0000002) { printk("slp_read(0xf0010068)=0x%x\n",slp_read(0xf0010068)); // slp_write(0xf0010068, 0x00000002); } if(slp_read(0xf0010050) != 0x00000000) { printk("slp_read(0xf0010050)=0x%x\n",slp_read(0xf0010050)); // slp_write(0xf0010050, 0x00000000); } if(slp_read(0xf0010824) != 0x24248800) { printk("slp_read(0xf0010824)=0x%x\n",slp_read(0xf0010824)); // slp_write(0xf0010824, 0x24248800); } if(slp_read(0xf0010820) != 0x00000000) { printk("slp_read(0xf0010820)=0x%x\n",slp_read(0xf0010820)); // slp_write(0xf0010820, 0x00000000); } if(slp_read(0xf0010800) != 0x00008000) { printk("slp_read(0xf0010800)=0x%x\n",slp_read(0xf0010800)); // slp_write(0xf0010800, 0x00008000); } if(slp_read(0xf0010804) != 0x00008000) { printk("slp_read(0xf0010804)=0x%x\n",slp_read(0xf0010804)); // slp_write(0xf0010804, 0x00008000); } if(slp_read(0xf0010808) != 0x00008000) { printk("slp_read(0xf0010808)=0x%x\n",slp_read(0xf0010808)); // slp_write(0xf0010808, 0x00008000); } if(slp_read(0xf001080C) != 0x00008000) { printk("slp_read(0xf001080C)=0x%x\n",slp_read(0xf001080C)); // slp_write(0xf001080C, 0x00008000); } if(slp_read(0xf0010810) != 0x00008000) { printk("slp_read(0xf0010810)=0x%x\n",slp_read(0xf0010810)); // slp_write(0xf0010810, 0x00008000); } }
static void slp_dump_pm_regs(void) { /* PLL/TOPCKGEN register */ slp_debug("AP_PLL_CON0 0x%x = 0x%x\n", AP_PLL_CON0 , slp_read(AP_PLL_CON0)); slp_debug("AP_PLL_CON1 0x%x = 0x%x\n", AP_PLL_CON1 , slp_read(AP_PLL_CON1)); slp_debug("AP_PLL_CON2 0x%x = 0x%x\n", AP_PLL_CON2 , slp_read(AP_PLL_CON2)); slp_debug("UNIVPLL_CON0 0x%x = 0x%x\n", UNIVPLL_CON0 , slp_read(UNIVPLL_CON0)); slp_debug("UNIVPLL_PWR_CON 0x%x = 0x%x\n", UNIVPLL_PWR_CON0 , slp_read(UNIVPLL_PWR_CON0)); slp_debug("MMPLL_CON0 0x%x = 0x%x\n", MMPLL_CON0 , slp_read(MMPLL_CON0)); slp_debug("MMPLL_PWR_CON 0x%x = 0x%x\n", MMPLL_PWR_CON0 , slp_read(MMPLL_PWR_CON0)); slp_debug("CLK_SCP_CFG_0 0x%x = 0x%x\n", CLK_SCP_CFG_0 , slp_read(CLK_SCP_CFG_0)); slp_debug("CLK_SCP_CFG_1 0x%x = 0x%x\n", CLK_SCP_CFG_1 , slp_read(CLK_SCP_CFG_1)); /* INFRA/PERICFG register */ slp_debug("INFRA_PDN_STA 0x%x = 0x%x\n", INFRA_PDN_STA , slp_read(INFRA_PDN_STA)); slp_debug("PERI_PDN0_STA 0x%x = 0x%x\n", PERI_PDN0_STA , slp_read(PERI_PDN0_STA)); /* SPM register */ slp_debug("POWER_ON_VAL0 0x%x = 0x%x\n", SPM_POWER_ON_VAL0 , slp_read(SPM_POWER_ON_VAL0)); slp_debug("POWER_ON_VAL1 0x%x = 0x%x\n", SPM_POWER_ON_VAL1 , slp_read(SPM_POWER_ON_VAL1)); slp_debug("SPM_PCM_CON1 0x%x = 0x%x\n", SPM_PCM_CON1 , slp_read(SPM_PCM_CON1)); slp_debug("PCM_PWR_IO_EN 0x%x = 0x%x\n", SPM_PCM_PWR_IO_EN , slp_read(SPM_PCM_PWR_IO_EN)); slp_debug("PCM_REG0_DATA 0x%x = 0x%x\n", SPM_PCM_REG0_DATA , slp_read(SPM_PCM_REG0_DATA)); slp_debug("PCM_REG7_DATA 0x%x = 0x%x\n", SPM_PCM_REG7_DATA , slp_read(SPM_PCM_REG7_DATA)); slp_debug("PCM_REG13_DATA 0x%x = 0x%x\n", SPM_PCM_REG13_DATA , slp_read(SPM_PCM_REG13_DATA)); slp_debug("CLK_CON 0x%x = 0x%x\n", SPM_CLK_CON , slp_read(SPM_CLK_CON)); slp_debug("AP_DVFS_CON 0x%x = 0x%x\n", SPM_AP_DVFS_CON_SET, slp_read(SPM_AP_DVFS_CON_SET)); slp_debug("PWR_STATUS 0x%x = 0x%x\n", SPM_PWR_STATUS , slp_read(SPM_PWR_STATUS)); slp_debug("SPM_PCM_SRC_REQ 0x%x = 0x%x\n", SPM_PCM_SRC_REQ , slp_read(SPM_PCM_SRC_REQ)); }
static int slp_suspend_ops_enter(suspend_state_t state) { int ret = 0; #ifdef CONFIG_MTK_TC1_FM_AT_SUSPEND int fm_radio_is_playing = 0; if ( ConditionEnterSuspend() == true ) fm_radio_is_playing = 0; else fm_radio_is_playing = 1; #endif /* CONFIG_MTK_TC1_FM_AT_SUSPEND */ #ifdef CONFIG_MTKPASR /* PASR SW operations */ enter_pasrdpd(); #endif /* legacy log */ slp_notice("@@@@@@@@@@@@@@@@@@@@\n"); slp_crit2("Chip_pm_enter\n"); slp_notice("@@@@@@@@@@@@@@@@@@@@\n"); //FIXME: for K2 bring up if (slp_dump_gpio) gpio_dump_regs(); #if 0 if (slp_dump_regs) slp_dump_pm_regs(); #endif if (slp_check_mtcmos_pll) slp_check_pm_mtcmos_pll(); if (!spm_cpusys0_can_power_down()) { slp_error("CANNOT SLEEP DUE TO CPU1~x PON, SPM_PWR_STATUS = 0x%x, SPM_PWR_STATUS_2ND = 0x%x\n", slp_read(SPM_PWR_STATUS), slp_read(SPM_PWR_STATUS_2ND)); //return -EPERM; ret = -EPERM; goto LEAVE_SLEEP; } if (is_infra_pdn(slp_spm_flags) && !is_cpu_pdn(slp_spm_flags)) { slp_error("CANNOT SLEEP DUE TO INFRA PDN BUT CPU PON\n"); //return -EPERM; ret = -EPERM; goto LEAVE_SLEEP; } /* only for test */ #if 0 slp_pasr_en(1, 0x0); slp_dpd_en(1); #endif #if SLP_SLEEP_DPIDLE_EN #ifdef CONFIG_MTK_TC1_FM_AT_SUSPEND if (slp_ck26m_on | fm_radio_is_playing) #else if (slp_ck26m_on) #endif slp_wake_reason = spm_go_to_sleep_dpidle(slp_spm_deepidle_flags, slp_spm_data); else #endif slp_wake_reason = spm_go_to_sleep(slp_spm_flags, slp_spm_data); LEAVE_SLEEP: #ifdef CONFIG_MTKPASR /* PASR SW operations */ leave_pasrdpd(); #endif #ifdef CONFIG_MTK_SYSTRACKER systracker_enable(); #endif return ret; }
static void slp_dump_pm_regs(void) { /* PLL register */ slp_debug("AP_PLL_CON0 0x%x = 0x%x\n", AP_PLL_CON0 , slp_read(AP_PLL_CON0)); slp_debug("AP_PLL_CON1 0x%x = 0x%x\n", AP_PLL_CON1 , slp_read(AP_PLL_CON1)); slp_debug("AP_PLL_CON2 0x%x = 0x%x\n", AP_PLL_CON2 , slp_read(AP_PLL_CON2)); slp_debug("MAINPLL_CON0 0x%x = 0x%x\n", MAINPLL_CON0 , slp_read(MAINPLL_CON0)); slp_debug("MAINPLL_PWR_CON 0x%x = 0x%x\n", MAINPLL_PWR_CON0 , slp_read(MAINPLL_PWR_CON0)); slp_debug("MMPLL_CON0 0x%x = 0x%x\n", MMPLL_CON0 , slp_read(MMPLL_CON0)); slp_debug("ISPPLL_CON0 0x%x = 0x%x\n", ISPPLL_CON0 , slp_read(ISPPLL_CON0)); slp_debug("MSDCPLL_CON0 0x%x = 0x%x\n", MSDCPLL_CON0 , slp_read(MSDCPLL_CON0)); slp_debug("MSDCPLL_PWR_CON 0x%x = 0x%x\n", MSDCPLL_PWR_CON0 , slp_read(MSDCPLL_PWR_CON0)); slp_debug("TVDPLL_CON0 0x%x = 0x%x\n", TVDPLL_CON0 , slp_read(TVDPLL_CON0)); slp_debug("TVDPLL_PWR_CON 0x%x = 0x%x\n", TVDPLL_PWR_CON0 , slp_read(TVDPLL_PWR_CON0)); slp_debug("LVDSPLL_CON0 0x%x = 0x%x\n", LVDSPLL_CON0 , slp_read(LVDSPLL_CON0)); slp_debug("LVDSPLL_PWR_CON 0x%x = 0x%x\n", LVDSPLL_PWR_CON0 , slp_read(LVDSPLL_PWR_CON0)); /* INFRA/PERICFG register */ slp_debug("INFRA_PDN_STA 0x%x = 0x%x\n", INFRA_PDN_STA , slp_read(INFRA_PDN_STA)); slp_debug("PERI_PDN0_STA 0x%x = 0x%x\n", PERI_PDN0_STA , slp_read(PERI_PDN0_STA)); slp_debug("PERI_PDN1_STA 0x%x = 0x%x\n", PERI_PDN1_STA , slp_read(PERI_PDN1_STA)); /* SPM register */ slp_debug("POWER_ON_VAL0 0x%x = 0x%x\n", SPM_POWER_ON_VAL0 , slp_read(SPM_POWER_ON_VAL0)); slp_debug("POWER_ON_VAL1 0x%x = 0x%x\n", SPM_POWER_ON_VAL1 , slp_read(SPM_POWER_ON_VAL1)); slp_debug("PCM_PWR_IO_EN 0x%x = 0x%x\n", SPM_PCM_PWR_IO_EN , slp_read(SPM_PCM_PWR_IO_EN)); slp_debug("PCM_REG0_DATA 0x%x = 0x%x\n", SPM_PCM_REG0_DATA , slp_read(SPM_PCM_REG0_DATA)); slp_debug("PCM_REG7_DATA 0x%x = 0x%x\n", SPM_PCM_REG7_DATA , slp_read(SPM_PCM_REG7_DATA)); slp_debug("PCM_REG13_DATA 0x%x = 0x%x\n", SPM_PCM_REG13_DATA , slp_read(SPM_PCM_REG13_DATA)); slp_debug("CLK_CON 0x%x = 0x%x\n", SPM_CLK_CON , slp_read(SPM_CLK_CON)); slp_debug("AP_DVFS_CON 0x%x = 0x%x\n", SPM_AP_DVFS_CON_SET, slp_read(SPM_AP_DVFS_CON_SET)); slp_debug("PWR_STATUS 0x%x = 0x%x\n", SPM_PWR_STATUS , slp_read(SPM_PWR_STATUS)); slp_debug("PWR_STATUS_S 0x%x = 0x%x\n", SPM_PWR_STATUS_S , slp_read(SPM_PWR_STATUS_S)); slp_debug("SLEEP_TIMER_STA 0x%x = 0x%x\n", SPM_SLEEP_TIMER_STA, slp_read(SPM_SLEEP_TIMER_STA)); }