void set_refresh_rate(unsigned int auto_refresh) { /* * uRlk = FIN / 100000; * refresh_usec = (unsigned int)(fMicrosec * 10); * uRegVal = ((unsigned int)(uRlk * uMicroSec / 100)) - 1; */ pr_debug("@@@ set_auto_refresh = 0x%02x\n", auto_refresh); #ifdef CONFIG_ARCH_EXYNOS4 #ifdef CONFIG_ARM_TRUSTZONE exynos_smc(SMC_CMD_REG, SMC_REG_ID_SFR_W((EXYNOS4_PA_DMC0_4212 + TIMING_AREF_OFFSET)), auto_refresh, 0); exynos_smc(SMC_CMD_REG, SMC_REG_ID_SFR_W((EXYNOS4_PA_DMC1_4212 + TIMING_AREF_OFFSET)), auto_refresh, 0); #else /* change auto refresh period in TIMING_AREF register of dmc0 */ __raw_writel(auto_refresh, S5P_VA_DMC0 + TIMING_AREF_OFFSET); /* change auto refresh period in TIMING_AREF regisger of dmc1 */ __raw_writel(auto_refresh, S5P_VA_DMC1 + TIMING_AREF_OFFSET); #endif #endif /* CONFIG_ARCH_EXYNOS4 */ }
static void set_refresh_period(unsigned int freq_ref, unsigned int refresh_nsec) { unsigned int rclk, auto_refresh; rclk = freq_ref / 1000000; auto_refresh = ((unsigned int)(rclk * refresh_nsec / 1000)); /* change auto refresh period in TIMING_AREF register of DMC */ #if defined(CONFIG_ARM_TRUSTZONE) exynos_smc(SMC_CMD_REG, SMC_REG_ID_SFR_W(EXYNOS5_PA_DREXII + EXYNOS_DMC_TIMINGAREF_OFFSET), auto_refresh, 0); #else __raw_writel(auto_refresh, S5P_VA_DREXII + EXYNOS_DMC_TIMING_AREF_OFFSET); #endif }
static void exynos_memory_auto_refresh(unsigned long event, void *v) { switch (event) { #ifdef CONFIG_ARM_TRUSTZONE case TMU_THR_LV1: exynos_smc(SMC_CMD_REG, SMC_REG_ID_SFR_W(EXYNOS4_PA_DMC0_4X12 + DREX_TIMINGAREF), AREF_NORMAL, 0); exynos_smc(SMC_CMD_REG, SMC_REG_ID_SFR_W(EXYNOS4_PA_DMC1_4X12 + DREX_TIMINGAREF), AREF_NORMAL, 0); break; case TMU_THR_LV2: exynos_smc(SMC_CMD_REG, SMC_REG_ID_SFR_W(EXYNOS4_PA_DMC0_4X12 + DREX_TIMINGAREF), AREF_HOT, 0); exynos_smc(SMC_CMD_REG, SMC_REG_ID_SFR_W(EXYNOS4_PA_DMC1_4X12 + DREX_TIMINGAREF), AREF_HOT, 0); break; case TMU_THR_LV3: exynos_smc(SMC_CMD_REG, SMC_REG_ID_SFR_W(EXYNOS4_PA_DMC0_4X12 + DREX_TIMINGAREF), AREF_CRITICAL, 0); exynos_smc(SMC_CMD_REG, SMC_REG_ID_SFR_W(EXYNOS4_PA_DMC1_4X12 + DREX_TIMINGAREF), AREF_CRITICAL, 0); break; #else case TMU_THR_LV1: __raw_writel(AREF_NORMAL,(exynos4_base_drex0 + DREX_TIMINGAREF)); __raw_writel(AREF_NORMAL,(exynos4_base_drex1 + DREX_TIMINGAREF)); break; case TMU_THR_LV2: __raw_writel(AREF_HOT,(exynos4_base_drex0 + DREX_TIMINGAREF)); __raw_writel(AREF_HOT,(exynos4_base_drex1 + DREX_TIMINGAREF)); break; case TMU_THR_LV3: __raw_writel(AREF_CRITICAL,(exynos4_base_drex0 + DREX_TIMINGAREF)); __raw_writel(AREF_CRITICAL,(exynos4_base_drex1 + DREX_TIMINGAREF)); break; #endif } }