BSP_S32 BSP_IPF_ST_402() { s32 result = 0; u32 reg_table_size =0; result = ipf_drx_bak_reg(); if(IPF_SUCCESS != result) { bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_IPF, "BSP_IPF_ST_402 backup reg fail!\n"); return IPF_ERROR; } /*ʹÓÃsyssc reset ipf£¬¸ù¾Ýmengbiao£¬Õâ»áʹËùÓмĴæÆ÷Çå0*/ ipf_drx_restore_reg(); reg_table_size = sizeof(g_ipf_setting_table_test); result = compare_reg_table(g_ipf_setting_table_test, (u32*)IPF_PWRCTL_INFO_ADDR, reg_table_size); if(IPF_SUCCESS != result) { bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_IPF, "BSP_IPF_ST_402 restore g_ipf_setting_table_test fail!\n"); return IPF_ERROR; } reg_table_size = sizeof(g_ipf_adq_rptr_table_test); result = compare_reg_table(g_ipf_adq_rptr_table_test, (u32*)IPF_PWRCTL_ADQ_WPTR_INFO_ADDR, reg_table_size); if(IPF_SUCCESS != result) { bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_IPF, "BSP_IPF_ST_402 restore g_ipf_setting_table_test fail!\n"); return IPF_ERROR; } reg_table_size = sizeof(g_ipf_adq_wptr_chctrl_table_test); result = compare_reg_table(g_ipf_adq_wptr_chctrl_table_test, (u32*)IPF_PWRCTL_ADQ_RPTR_CHCTRL_ADDR, reg_table_size); if(IPF_SUCCESS != result) { bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_IPF, "BSP_IPF_ST_402 restore g_ipf_setting_table_test fail!\n"); return IPF_ERROR; } return IPF_SUCCESS; }
/*Check of ipf filter restore success or not test*/ BSP_S32 BSP_IPF_ST_403() { s32 result = 0; result = ipf_drx_bak_reg(); if(IPF_SUCCESS != result) { bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_IPF, "BSP_IPF_ST_402 backup reg fail!\n"); return IPF_ERROR; } ipf_drx_restore_reg(); return check_filter_restore_status(); }
/*各模块填写时,注意suspend顺序与resume顺序相反*/ static s32 enter_suspend_and_resume(u32 pm_msg) { s32 ret = 0; pm_suspend_flag = 0; pm_resume_flag = 0; if(PMSG_SUSPEND==pm_msg){ /*可维可测,记录进入suspend总次数*/ dpm_debug[DPM_BUTTON][0]++; /*本分支回调各设备的suspend回调函数,顺序往下加*/ writel(bsp_get_slice_value(), DPM_SRAM_TIMER1); ret=tem_protect_suspend(); if(ret !=0) { pm_suspend_flag = 1; dpm_debug[DPM_TEM][0] +=1; goto end; } writel(bsp_get_slice_value(), DPM_SRAM_TIMER2); ret=bsp_socp_suspend(); writel(bsp_get_slice_value(), DPM_SRAM_TIMER3); if(ret !=0) { pm_suspend_flag = 1; dpm_debug[DPM_SOCP][0] +=1; goto tem_resume; } bsp_ipc_suspend(); bsp_amon_suspend(); writel(bsp_get_slice_value(), DPM_SRAM_TIMER4); (void)uart_suspend_port(); writel(bsp_get_slice_value(), DPM_SRAM_TIMER5); ret = ipf_drx_bak_reg(); writel(bsp_get_slice_value(), DPM_SRAM_TIMER6); if(ret !=0) { pm_suspend_flag = 1; dpm_debug[DPM_IPF][0] +=1; goto uart_resume; } ret = bsp_pmu_suspend(); writel(bsp_get_slice_value(), DPM_SRAM_TIMER7); if(ret != 0) { pm_suspend_flag = 1; dpm_debug[DPM_PMU][0] +=1; goto ipf_resume; } bsp_wdt_suspend(0); } else if(PMSG_RESUME==pm_msg){ dpm_debug[DPM_BUTTON][1]++;/*可维可测,记录进入resume总次数*/ /*本分支回调各设备的resume回调函数,顺序往上加*/ writel(bsp_get_slice_value(), DPM_SRAM_TIMER8); ret = bsp_pmu_resume(); writel(bsp_get_slice_value(), DPM_SRAM_TIMER9); if(ret != 0) { pm_resume_flag = 1; dpm_debug[DPM_PMU][1] +=1; goto resume; } ipf_resume: ipf_drx_restore_reg(); writel(bsp_get_slice_value(), DPM_SRAM_TIMER10); uart_resume: (void)uart_resume_port(); writel(bsp_get_slice_value(), DPM_SRAM_TIMER11); bsp_amon_resume(); bsp_ipc_resume(); writel(bsp_get_slice_value(), DPM_SRAM_TIMER12); bsp_socp_resume(); writel(bsp_get_slice_value(), DPM_SRAM_TIMER13); tem_resume: tem_protect_resume(); writel(bsp_get_slice_value(), DPM_SRAM_TIMER14); bsp_hkadc_resume(); writel(bsp_get_slice_value(), DPM_SRAM_TIMER15); bsp_wdt_resume(); } end: if(PMSG_SUSPEND==pm_msg) { if(0==pm_suspend_flag) return DPM_OK; else return DPM_ERROR; } resume: if(PMSG_RESUME==pm_msg) { if(0==pm_resume_flag) return DPM_OK; else return DPM_ERROR; } return DPM_OK; }