From a356d234f8e95ff7a95637a0599e0642a1f16eef Mon Sep 17 00:00:00 2001 From: Crystal Guo Date: Mon, 12 Aug 2024 15:02:36 +0800 Subject: soc/mediatek: Obtain LPDDR type from trained memory info Add lpddr_type to ddr_base_info struct to obtain LPDDR type from trained memory info. BUG=b:357743097 TEST=build pass Change-Id: I73c9014784cc4872826d721f3fab9ed1c5255f31 Signed-off-by: Crystal Guo Reviewed-on: https://review.coreboot.org/c/coreboot/+/85033 Reviewed-by: Yidi Lin Tested-by: build bot (Jenkins) Reviewed-by: Yu-Ping Wu --- src/soc/mediatek/common/include/soc/dramc_param_common.h | 3 ++- src/soc/mediatek/common/include/soc/emi.h | 1 + src/soc/mediatek/common/memory.c | 7 ++++++- 3 files changed, 9 insertions(+), 2 deletions(-) (limited to 'src/soc/mediatek') diff --git a/src/soc/mediatek/common/include/soc/dramc_param_common.h b/src/soc/mediatek/common/include/soc/dramc_param_common.h index 7dd8bba5d8..a1fac9af85 100644 --- a/src/soc/mediatek/common/include/soc/dramc_param_common.h +++ b/src/soc/mediatek/common/include/soc/dramc_param_common.h @@ -92,7 +92,8 @@ enum SDRAM_VOLTAGE_TYPE { struct ddr_base_info { u32 config_dvfs; /* SDRAM_DVFS_FLAG */ struct sdram_info sdram; - u32 voltage_type; /* SDRAM_VOLTAGE_TYPE */ + u16 lpddr_type; + u16 voltage_type; /* SDRAM_VOLTAGE_TYPE */ u32 support_ranks; u64 rank_size[RANK_MAX]; struct emi_mdl emi_config; diff --git a/src/soc/mediatek/common/include/soc/emi.h b/src/soc/mediatek/common/include/soc/emi.h index 0070ec1bcd..313ccff30e 100644 --- a/src/soc/mediatek/common/include/soc/emi.h +++ b/src/soc/mediatek/common/include/soc/emi.h @@ -16,5 +16,6 @@ bool is_dvfs_enabled(void); u32 get_ddr_geometry(void); u32 get_ddr_type(void); void init_dram_by_params(struct dramc_param *dparam); +enum mem_chip_type map_to_lpddr_dram_type(uint16_t lpddr_type); #endif /* SOC_MEDIATEK_COMMON_EMI_H */ diff --git a/src/soc/mediatek/common/memory.c b/src/soc/mediatek/common/memory.c index 089c6affac..f08b1d55cf 100644 --- a/src/soc/mediatek/common/memory.c +++ b/src/soc/mediatek/common/memory.c @@ -106,6 +106,11 @@ size_t mtk_dram_size(void) return size; } +__weak enum mem_chip_type map_to_lpddr_dram_type(uint16_t lpddr_type) +{ + return MEM_CHIP_LPDDR4X; +} + static void fill_dram_info(struct mem_chip_info *mc, const struct ddr_base_info *ddr) { unsigned int c, r; @@ -118,7 +123,7 @@ static void fill_dram_info(struct mem_chip_info *mc, const struct ddr_base_info for (r = 0; r < ddr->mrr_info.rank_nums; r++) { entry->channel = c; entry->rank = r; - entry->type = MEM_CHIP_LPDDR4X; + entry->type = map_to_lpddr_dram_type(ddr->lpddr_type); entry->channel_io_width = DQ_DATA_WIDTH_LP4; entry->density_mbits = ddr->mrr_info.mr8_density[r] / CHANNEL_MAX / (MiB / 8); -- cgit v1.2.3