Attention is currently required from: Tim Wawrzynczak, Patrick Rudolph. Subrata Banik has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/62737 )
Change subject: soc/intel/common: Pass `FSPM_UPD *` argument for spd functions ......................................................................
soc/intel/common: Pass `FSPM_UPD *` argument for spd functions
This patch adds `FSPM_UPD *` as argument for mem_populate_channel_data() and read_spd_dimm().
This change will help to update the architectural FSP-M UPDs in read_spd_dimm().
BUG=b:200243989 BRANCH=firmware-brya-14505.B TEST=Able to build and boot redrix without any visible failure/errors.
Signed-off-by: Subrata Banik subratabanik@google.com Change-Id: I770cfd05194c33e11f98f95c5b93157b0ead70c1 --- M src/soc/intel/alderlake/meminit.c M src/soc/intel/common/block/include/intelblocks/meminit.h M src/soc/intel/common/block/memory/meminit.c M src/soc/intel/tigerlake/meminit.c 4 files changed, 12 insertions(+), 9 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/37/62737/1
diff --git a/src/soc/intel/alderlake/meminit.c b/src/soc/intel/alderlake/meminit.c index 31b3ae1..2c915ef 100644 --- a/src/soc/intel/alderlake/meminit.c +++ b/src/soc/intel/alderlake/meminit.c @@ -279,8 +279,8 @@ die("Unsupported memory type(%d)\n", mb_cfg->type); }
- mem_populate_channel_data(&soc_mem_cfg[mb_cfg->type], spd_info, half_populated, &data, - dimms_changed); + mem_populate_channel_data(memupd, &soc_mem_cfg[mb_cfg->type], spd_info, half_populated, + &data, dimms_changed); mem_init_spd_upds(mem_cfg, &data); mem_init_dq_upds(mem_cfg, &data, mb_cfg, dq_dqs_auto_detect); mem_init_dqs_upds(mem_cfg, &data, mb_cfg, dq_dqs_auto_detect); diff --git a/src/soc/intel/common/block/include/intelblocks/meminit.h b/src/soc/intel/common/block/include/intelblocks/meminit.h index 130249c..c01daf4 100644 --- a/src/soc/intel/common/block/include/intelblocks/meminit.h +++ b/src/soc/intel/common/block/include/intelblocks/meminit.h @@ -3,6 +3,7 @@ #ifndef __SOC_INTEL_COMMON_BLOCK_MEMINIT_H__ #define __SOC_INTEL_COMMON_BLOCK_MEMINIT_H__
+#include <fsp/util.h> #include <types.h>
/* @@ -130,13 +131,14 @@ /* * This change populates data regarding memory channels in `struct * mem_channel_data` using the following inputs from SoC code: + * memupd : FSP-M UPD configuration. * soc_mem_cfg : SoC-specific information about the memory technology used by * the mainboard. * spd_info : Information about the memory topology. * half_populated: Hint from mainboard if channels are half populated. * dimms_changed: True if the dimms is changed after caching the spd data. */ -void mem_populate_channel_data(const struct soc_mem_cfg *soc_mem_cfg, +void mem_populate_channel_data(FSPM_UPD *memupd, const struct soc_mem_cfg *soc_mem_cfg, const struct mem_spd *spd_info, bool half_populated, struct mem_channel_data *data, diff --git a/src/soc/intel/common/block/memory/meminit.c b/src/soc/intel/common/block/memory/meminit.c index 89cd4e3..272e6a1 100644 --- a/src/soc/intel/common/block/memory/meminit.c +++ b/src/soc/intel/common/block/memory/meminit.c @@ -95,8 +95,9 @@
#define CH_DIMM_OFFSET(ch, dimm) ((ch) * CONFIG_DIMMS_PER_CHANNEL + (dimm))
-static bool read_spd_dimm(const struct soc_mem_cfg *soc_mem_cfg, const struct mem_spd *info, - bool half_populated, struct mem_channel_data *channel_data, +static bool read_spd_dimm(FSPM_UPD *memupd, const struct soc_mem_cfg *soc_mem_cfg, + const struct mem_spd *info, bool half_populated, + struct mem_channel_data *channel_data, size_t *spd_len, bool *dimms_changed) { size_t ch, dimm; @@ -183,7 +184,7 @@ return pop_mask != 0; }
-void mem_populate_channel_data(const struct soc_mem_cfg *soc_mem_cfg, +void mem_populate_channel_data(FSPM_UPD *memupd, const struct soc_mem_cfg *soc_mem_cfg, const struct mem_spd *spd_info, bool half_populated, struct mem_channel_data *data, @@ -195,7 +196,7 @@ memset(data, 0, sizeof(*data));
read_spd_md(soc_mem_cfg, spd_info, half_populated, data, &spd_md_len); - have_dimms = read_spd_dimm(soc_mem_cfg, spd_info, half_populated, data, + have_dimms = read_spd_dimm(memupd, soc_mem_cfg, spd_info, half_populated, data, &spd_dimm_len, dimms_changed);
if (data->ch_population_flags == NO_CHANNEL_POPULATED) diff --git a/src/soc/intel/tigerlake/meminit.c b/src/soc/intel/tigerlake/meminit.c index d5ca9a9..10c57a5 100644 --- a/src/soc/intel/tigerlake/meminit.c +++ b/src/soc/intel/tigerlake/meminit.c @@ -157,8 +157,8 @@ if (mb_cfg->type >= ARRAY_SIZE(soc_mem_cfg)) die("Invalid memory type(%x)!\n", mb_cfg->type);
- mem_populate_channel_data(&soc_mem_cfg[mb_cfg->type], spd_info, half_populated, &data, - &dimms_changed); + mem_populate_channel_data(memupd, &soc_mem_cfg[mb_cfg->type], spd_info, half_populated, + &data, &dimms_changed); mem_init_spd_upds(mem_cfg, &data); mem_init_dq_upds(mem_cfg, &data, mb_cfg); mem_init_dqs_upds(mem_cfg, &data, mb_cfg);