aboutsummaryrefslogtreecommitdiff
path: root/src/soc/broadcom/cygnus/ddr_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/broadcom/cygnus/ddr_init.c')
-rwxr-xr-xsrc/soc/broadcom/cygnus/ddr_init.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/soc/broadcom/cygnus/ddr_init.c b/src/soc/broadcom/cygnus/ddr_init.c
index 27a981ee66..9aac58f7e9 100755
--- a/src/soc/broadcom/cygnus/ddr_init.c
+++ b/src/soc/broadcom/cygnus/ddr_init.c
@@ -1490,6 +1490,27 @@ void ddr_init2(void)
}
}
+#if CONFIG_CYGNUS_DDR_AUTO_SELF_REFRESH_ENABLE
+#if (DDR_AUTO_SELF_REFRESH_IDLE_COUNT > 0) & (DDR_AUTO_SELF_REFRESH_IDLE_COUNT <= 0xff)
+ /* Enable auto self-refresh */
+ reg32_set_bits((unsigned int *)DDR_DENALI_CTL_57,
+ 0x2 << DDR_DENALI_CTL_57__LP_AUTO_EXIT_EN_R |
+ 0x2 << DDR_DENALI_CTL_57__LP_AUTO_ENTRY_EN_R );
+
+ reg32_set_bits((unsigned int *)DDR_DENALI_CTL_58,
+ DDR_AUTO_SELF_REFRESH_IDLE_COUNT << DDR_DENALI_CTL_58__LP_AUTO_SR_IDLE_R);
+#else
+ #error DDR_AUTO_SELF_REFRESH_IDLE_COUNT out of range
+#endif
+#else
+ /* Disable auto-self refresh */
+ reg32_clear_bits((unsigned int *)DDR_DENALI_CTL_57,
+ 0x2 << DDR_DENALI_CTL_57__LP_AUTO_EXIT_EN_R |
+ 0x2 << DDR_DENALI_CTL_57__LP_AUTO_ENTRY_EN_R );
+ reg32_clear_bits((unsigned int *)DDR_DENALI_CTL_58,
+ 0xff << DDR_DENALI_CTL_58__LP_AUTO_SR_IDLE_R );
+#endif
+
/* Start the DDR */
reg32_set_bits((volatile uint32_t *)DDR_DENALI_CTL_00, 0x01);