int pwrctrl_dfs_init(void) { void __iomem *reg_addr; struct acpufreqinfo *p_freqinfo; reg_addr = (void __iomem *)HISI_VA_ADDRESS(SOC_PERI_SCTRL_SC_RESERVED8_ADDR(SOC_PERI_SCTRL_BASE_ADDR)); g_dfs_data_addr = ioremap(ACPU_DFS_FREQ_ADDR, ACPU_DFS_FREQ_ADDR_SIZE); p_freqinfo = (struct acpufreqinfo *)g_dfs_data_addr; p_freqinfo->dfs_flag = 0; p_freqinfo->dfs_acpu_freq = 0; p_freqinfo->dfs_temp_freq = 0; g_stPwcSwitch = (ST_PWC_SWITCH_STRU *)(reg_addr); dt_insmod_buslow(); dt_insmod_bus_dfs(); if(!dt_insmod_dvfs()){g_adfs_module = 1;} wake_lock_init(&acpu_freq_lock,WAKE_LOCK_SUSPEND,"acpu_freq_lock"); ddr_min_req.pm_qos_class = 0; ddr_max_req.pm_qos_class = 0; pm_qos_add_request(&ddr_min_req, DFS_QOS_ID_DDR_MINFREQ, QOS_DDR_MIN_DEFAULT_VALUE + 2); pm_qos_add_request(&ddr_max_req, DFS_QOS_ID_DDR_MAXFREQ, QOS_DDR_MAX_DEFAULT_VALUE - 2); return RET_OK; }
s32_t __init pwrctrl_early_init(void_t) { g_stAcpuPwcSwitch =(ST_PWC_SWITCH_STRU *)IO_ADDRESS(SOC_PERI_SCTRL_SC_RESERVED8_ADDR(SOC_PERI_SCTRL_BASE_ADDR)); LOG_IF(pwrctrl_dfs_init() != RET_OK); LOG_IF(pwrctrl_timer_addr_remap() != RET_OK); /*******拷贝低功耗代码至SARM********/ pwrctrl_asm_mem_copy(); }
int pwrctrl_dfs_init(void) { unsigned int sys_off_addr; sys_off_addr = IO_ADDRESS(SOC_PERI_SCTRL_BASE_ADDR); #if defined(CHIP_BB_HI6210) g_stPwcSwitch = (ST_PWC_SWITCH_STRU *)SOC_PERI_SCTRL_SC_RESERVED8_ADDR(sys_off_addr); #else g_stPwcSwitch = (ST_PWC_SWITCH_STRU *)SOC_PERI_SCTRL_SC_RESERVED8_ADDR(sys_off_addr); #endif #if 0 RET_ERR_IF(pm_qos_add_notifier(PM_QOS_DDR_MINFREQ, &ddr_minfreq_notifier) < 0); RET_ERR_IF(pm_qos_add_notifier(PM_QOS_DDR_MAXFREQ, &ddr_maxfreq_notifier) < 0); RET_ERR_IF(pm_qos_add_notifier(PM_QOS_ACPU_MINFREQ, &acpu_minfreq_notifier) < 0); RET_ERR_IF(pm_qos_add_notifier(PM_QOS_ACPU_MAXFREQ, &acpu_maxfreq_notifier) < 0); #endif #if 0 RET_ERR_IF(pm_qos_add_notifier(PM_QOS_GPU_MINFREQ, &gpu_minfreq_notifier) < 0); RET_ERR_IF(pm_qos_add_notifier(PM_QOS_GPU_MAXFREQ, &gpu_maxfreq_notifier) < 0); #endif return RET_OK; }