drivers/ram/rockchip/sdram_px30.c | 35 ++++++++++++--------
2 files changed, 74 insertions(+), 28 deletions(-)
diff --git a/drivers/ram/rockchip/Kconfig b/drivers/ram/rockchip/Kconfig
index 61a3193b3f5..d74980402ad 100644
--- a/drivers/ram/rockchip/Kconfig
+++ b/drivers/ram/rockchip/Kconfig
@@ -24,38 +24,77 @@ config RAM_ROCKCHIP_DEBUG
This is an option for developers to understand the ram drivers
initialization, configurations and etc.
+config RAM_ROCKCHIP_DDR3
+ bool "DDR3 support for Rockchip SoCs"
+ depends on ROCKCHIP_PX30
+ help
+ Enable DDR3 sdram support on Rockchip SoCs.
+
+ Note that enabling support for multiple DDR/LPDDR types may cause TPL
+ to exceed its maximum size constraint (TPL_MAX_SIZE), depending on
+ other configuration options selection (such as RAM_ROCKCHIP_DEBUG).
+
+ The driver applies selected sdram parameters sets in the following
+ order - DDR4 LPDDR2 LPDDR3 DDR3 - stopping at first set that makes
+ sdram_init_detect() to complete successfully.
+
+ If no DDR/LPDDR option is selected, DDR3 sdram support is enabled by
+ default for backward compatibility with existing board configurations.
+ Therefore this option is only useful for multiple DDR/LPDDR types
+ selection.
+
config RAM_ROCKCHIP_DDR4
bool "DDR4 support for Rockchip SoCs"
- depends on ROCKCHIP_PX30 || ROCKCHIP_RV1126
+ depends on ROCKCHIP_PX30
help
- This enables DDR4 sdram support instead of the default DDR3 support
- on Rockchip SoCs.
+ Enable DDR4 sdram support on Rockchip SoCs.
- Note that even if multiple DDR/LPDDR types are selected, support is
- enabled only for the selected one that comes first in the following
- list: LPDDR4, DDR4, LPDDR2, LPDDR3, DDR3.
+ Note that enabling support for multiple DDR/LPDDR types may cause TPL
+ to exceed its maximum size constraint (TPL_MAX_SIZE), depending on
+ other configuration options selection (such as RAM_ROCKCHIP_DEBUG).
+
+ The driver applies selected sdram parameters sets in the following
+ order - DDR4 LPDDR2 LPDDR3 DDR3 - stopping at first set that makes
+ sdram_init_detect() to complete successfully.
config RAM_ROCKCHIP_LPDDR2
bool "LPDDR2 support for Rockchip SoCs"
depends on ROCKCHIP_PX30
help
- This enables LPDDR2 sdram support instead of the default DDR3 support
- on Rockchip SoCs.
+ Enable LPDDR2 sdram support on Rockchip SoCs.
- Note that even if multiple DDR/LPDDR types are selected, support is
- enabled only for the selected one that comes first in the following
- list: LPDDR4, DDR4, LPDDR2, LPDDR3, DDR3.
+ Note that enabling support for multiple DDR/LPDDR types may cause TPL
+ to exceed its maximum size constraint (TPL_MAX_SIZE), depending on
+ other configuration options selection (such as RAM_ROCKCHIP_DEBUG).
+
+ The driver applies selected sdram parameters sets in the following
+ order - DDR4 LPDDR2 LPDDR3 DDR3 - stopping at first set that makes
+ sdram_init_detect() to complete successfully.
config RAM_ROCKCHIP_LPDDR3
bool "LPDDR3 support for Rockchip SoCs"
depends on ROCKCHIP_PX30
help
- This enables LPDDR3 sdram support instead of the default DDR3 support
+ Enable LPDDR3 sdram support on Rockchip SoCs.
+
+ Note that enabling support for multiple DDR/LPDDR types may cause TPL
+ to exceed its maximum size constraint (TPL_MAX_SIZE), depending on
+ other configuration options selection (such as RAM_ROCKCHIP_DEBUG).
+
+ The driver applies selected sdram parameters sets in the following
+ order - DDR4 LPDDR2 LPDDR3 DDR3 - stopping at first set that makes
+ sdram_init_detect() to complete successfully.
+
+config RAM_ROCKCHIP_DDR4
+ bool "DDR4 support for Rockchip SoCs"
+ depends on ROCKCHIP_RV1126
+ help
+ This enables DDR4 sdram support instead of the default DDR3 support
on Rockchip SoCs.
Note that even if multiple DDR/LPDDR types are selected, support is
enabled only for the selected one that comes first in the following
- list: LPDDR4, DDR4, LPDDR2, LPDDR3, DDR3.
+ list: LPDDR4, DDR4, DDR3.
config RAM_ROCKCHIP_LPDDR4
depends on ROCKCHIP_RV1126
@@ -66,7 +105,7 @@ config RAM_ROCKCHIP_LPDDR4
Note that even if multiple DDR/LPDDR types are selected, support is
enabled only for the selected one that comes first in the following
- list: LPDDR4, DDR4, LPDDR2, LPDDR3, DDR3.
+ list: LPDDR4, DDR4, DDR3.
config RAM_ROCKCHIP_LPDDR4
bool "LPDDR4 support for Rockchip SoCs"
diff --git a/drivers/ram/rockchip/sdram_px30.c
b/drivers/ram/rockchip/sdram_px30.c
index 37e62120504..ac9f5827d1d 100644
--- a/drivers/ram/rockchip/sdram_px30.c
+++ b/drivers/ram/rockchip/sdram_px30.c
@@ -126,11 +126,17 @@ struct dram_info dram_info;
struct px30_sdram_params sdram_configs[] = {
#if defined(CONFIG_RAM_ROCKCHIP_DDR4)
#include "sdram-px30-ddr4-detect-333.inc"
-#elif defined(CONFIG_RAM_ROCKCHIP_LPDDR2)
+#endif
+#if defined(CONFIG_RAM_ROCKCHIP_LPDDR2)
#include "sdram-px30-lpddr2-detect-333.inc"
-#elif defined(CONFIG_RAM_ROCKCHIP_LPDDR3)
+#endif
+#if defined(CONFIG_RAM_ROCKCHIP_LPDDR3)
#include "sdram-px30-lpddr3-detect-333.inc"
-#else
+#endif
+#if defined(CONFIG_RAM_ROCKCHIP_DDR3) || \
+ (!defined(CONFIG_RAM_ROCKCHIP_DDR4) && \
+ !defined(CONFIG_RAM_ROCKCHIP_LPDDR2) && \
+ !defined(CONFIG_RAM_ROCKCHIP_LPDDR3))
#include "sdram-px30-ddr3-detect-333.inc"
#endif
};
@@ -682,19 +688,11 @@ out:
return ret;
}
-struct px30_sdram_params
- *get_default_sdram_config(void)
-{
- sdram_configs[0].skew = &skew;
-
- return &sdram_configs[0];
-}
-
/* return: 0 = success, other = fail */
int sdram_init(void)
{
struct px30_sdram_params *sdram_params;
- int ret = 0;
+ int ret, i = 0;
dram_info.phy = (void *)DDR_PHY_BASE_ADDR;
dram_info.pctl = (void *)DDRC_BASE_ADDR;
@@ -704,12 +702,21 @@ int sdram_init(void)
dram_info.ddr_grf = (void *)DDR_GRF_BASE_ADDR;
dram_info.pmugrf = (void *)PMUGRF_BASE_ADDR;
- sdram_params = get_default_sdram_config();
- ret = sdram_init_detect(&dram_info, sdram_params);
+ do {
+ sdram_configs[i].skew = &skew;
+ sdram_params = &sdram_configs[i];
+ ret = sdram_init_detect(&dram_info, sdram_params);
+ } while (ret && ++i < ARRAY_SIZE(sdram_configs));