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 <crystal.guo@mediatek.corp-partner.google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/85033
Reviewed-by: Yidi Lin <yidilin@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Yu-Ping Wu <yupingso@google.com>
This commit is contained in:
Crystal Guo 2024-08-12 15:02:36 +08:00 committed by Yu-Ping Wu
commit a356d234f8
3 changed files with 9 additions and 2 deletions

View file

@ -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;

View file

@ -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 */

View file

@ -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);