From: 许盛飞 Date: Mon, 3 Nov 2014 19:00:53 +0000 (+0800) Subject: rk3288-resume: save the wake-up time X-Git-Tag: firefly_0821_release~4507 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=61be0c1b0a09cbc2ee425525030ba403ab14ebed;p=firefly-linux-kernel-4.4.55.git rk3288-resume: save the wake-up time Signed-off-by: 许盛飞 --- diff --git a/arch/arm/mach-rockchip/pm-rk3288.c b/arch/arm/mach-rockchip/pm-rk3288.c index 850cf0edf684..d2f98c5857f8 100755 --- a/arch/arm/mach-rockchip/pm-rk3288.c +++ b/arch/arm/mach-rockchip/pm-rk3288.c @@ -32,7 +32,6 @@ __weak void rk_usb_power_up(void); //static void ddr_gpio_set_in_output(u8 port,u8 bank,u8 b_gpio,u8 type); static void ddr_pin_set_fun(u8 port,u8 bank,u8 b_gpio,u8 fun); - /*************************cru define********************************************/ @@ -60,7 +59,6 @@ enum rk_plls_id { #define RK3288_PLL_BYPASS CRU_W_MSK_SETBITS(1,0,0x1) #define RK3288_PLL_NO_BYPASS CRU_W_MSK_SETBITS(0,0,0x1) - /*******************************gpio define **********************************************/ /* GPIO control registers */ @@ -932,7 +930,6 @@ static u32 sgrf_soc_con0,pmu_wakeup_cfg0,pmu_wakeup_cfg1,pmu_pwr_mode_con0,pmu_p static u32 rkpm_slp_mode_set(u32 ctrbits) { u32 mode_set,mode_set1; - // setting gpio0_a0 arm off pin sgrf_soc_con0=reg_readl(RK_SGRF_VIRT+RK3288_SGRF_SOC_CON0); @@ -970,8 +967,11 @@ static u32 rkpm_slp_mode_set(u32 ctrbits) } else if(rkpm_chk_val_ctrbits(ctrbits,RKPM_CTR_ARMDP_LPMD)) { - rkpm_ddr_printascii("-armdp-"); - mode_set|=BIT(pmu_a12_0_pd_en); + rkpm_ddr_printascii("-armdp-"); + mode_set |= BIT(pmu_a12_0_pd_en) + | BIT(pmu_sref0_enter_en) | BIT(pmu_sref1_enter_en) + | BIT(pmu_ddr0_gating_en) | BIT(pmu_ddr1_gating_en) + | BIT(pmu_chip_pd_en); } else if(rkpm_chk_val_ctrbits(ctrbits,RKPM_CTR_ARMOFF_LPMD)) { @@ -1022,13 +1022,17 @@ static u32 rkpm_slp_mode_set(u32 ctrbits) rkpm_ddr_printascii("osc_off"); pmu_writel(32*30,RK3288_PMU_OSC_CNT); pmu_writel(32*30,RK3288_PMU_STABL_CNT); - } - else - { - pmu_writel(24*1000*10,RK3288_PMU_STABL_CNT); - - // pmu_writel(24*1000*20,RK3288_PMU_CORE_PWRDWN_CNT); - } + } else if (mode_set & BIT(pmu_a12_0_pd_en)) { + pmu_writel(0x0, RK3288_PMU_STABL_CNT); + pmu_writel(0x0, RK3288_PMU_OSC_CNT); + pmu_writel(0x0, RK3288_PMU_PLL_CNT); + pmu_writel(0x0, RK3288_PMU_DDR0IO_PWRON_CNT); + pmu_writel(0x0, RK3288_PMU_DDR1IO_PWRON_CNT); + pmu_writel(0x0, RK3288_PMU_GPU_PWRUP_CNT); + pmu_writel(0x0, RK3288_PMU_WAKEUP_RST_CLR_CNT); + /*pmu_writel(100,RK3288_PMU_CORE_PWRUP_CNT);*/ + } else + pmu_writel(24*1000*10, RK3288_PMU_STABL_CNT); if(mode_set&BIT(pmu_ddr0io_ret_en)) { @@ -1043,7 +1047,7 @@ static u32 rkpm_slp_mode_set(u32 ctrbits) // rkpm_ddr_printhex(mode_set); // rkpm_ddr_printhex(pmu_readl(RK3288_PMU_PWRMODE_CON)); - + return (pmu_readl(RK3288_PMU_PWRMODE_CON)); } @@ -1127,10 +1131,8 @@ static void rkpm_peri_save(u32 power_mode) { // u32 gpio_gate[2]; - if(power_mode&BIT(pmu_scu_en)) - { - rkpm_gic_dist_save(&slp_gic_save[0]); - } + if (power_mode & (BIT(pmu_scu_en) | BIT(pmu_a12_0_pd_en))) + rkpm_gic_dist_save(&slp_gic_save[0]); #if 0 gpio_gate[0]=cru_readl(RK3288_CRU_GATEID_CONS(RK3288_CLKGATE_PCLK_GPIO0)); gpio_gate[1]=cru_readl(RK3288_CRU_GATEID_CONS(RK3288_CLKGATE_PCLK_GPIO1)); @@ -1176,13 +1178,12 @@ static void rkpm_peri_save(u32 power_mode) static inline void rkpm_peri_resume(u32 power_mode) { - if(power_mode&BIT(pmu_scu_en)) - { - //fiq_glue_resume(); - rkpm_gic_dist_resume(&slp_gic_save[0]); - fiq_glue_resume(); - //rkpm_ddr_printascii("gic res"); - } + if (power_mode & (BIT(pmu_scu_en) | BIT(pmu_a12_0_pd_en))) { + /*fiq_glue_resume();*/ + rkpm_gic_dist_resume(&slp_gic_save[0]); + fiq_glue_resume(); + /*rkpm_ddr_printascii("gic res");*/ + } if(power_mode&BIT(pmu_bus_pd_en)) { slp_i2c_resume(0);// i2c pmu @@ -1963,7 +1964,8 @@ int gpio7_pin_iomux1; static void gtclks_suspend(void) { - int i; + int i; + gpio7_pin_data1= gpio7_readl(0); gpio7_pin_dir1 = gpio7_readl(0x04); gpio7_pin_iomux1 = gpio7_readl(0x6c); @@ -1973,6 +1975,7 @@ static void gtclks_suspend(void) // rkpm_ddr_regs_dump(RK_CRU_VIRT,RK3288_CRU_CLKGATES_CON(0) // ,RK3288_CRU_CLKGATES_CON(RK3288_CRU_CLKGATES_CON_CNT-1)); + for(i=0;i