soc/intel/alderlake: Fix DDR5 channel mapping
DDR5 memory modules have two separate 32-bit channels (40-bit on ECC memory modules), and the SPD info refers to one channel: the primary bus width is 32 (or 40) bits and the "DIMM size" is halved. On Alder Lake, there are 2 memory controllers with 4 32-bit channels each for DDR5. FSP has 16 positions to store SPD data, some of which are only used with LPDDR4/LPDDR5. To try to make things less confusing, FSP abstracts the DDR5 channels so that the configuration works like on DDR4. This is done by copying each DIMM's SPD data to the other half-channel. Thus, fix the wrapper parameters for DDR5 accordingly. Tested on AlderLake-P DDR5 RVP (board ID 0x12), both DIMM slots now function properly. Without this patch, only the top slot would work. Change-Id: I5f01cd77388b89ba34d91c2dc5fb843fe9db9826 Signed-off-by: Angel Pons <th3fanbus@gmail.com> Tested-by: Lean Sheng Tan <sheng.tan@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/66608 Reviewed-by: Lean Sheng Tan <sheng.tan@9elements.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
This commit is contained in:
parent
a8cf2f2d73
commit
0e7cf3d81d
|
@ -62,18 +62,16 @@ static const struct soc_mem_cfg soc_mem_cfg[] = {
|
||||||
.num_phys_channels = DDR5_CHANNELS,
|
.num_phys_channels = DDR5_CHANNELS,
|
||||||
.phys_to_mrc_map = {
|
.phys_to_mrc_map = {
|
||||||
[0] = 0,
|
[0] = 0,
|
||||||
[1] = 1,
|
[1] = 4,
|
||||||
[2] = 4,
|
|
||||||
[3] = 5,
|
|
||||||
},
|
},
|
||||||
.md_phy_masks = {
|
.md_phy_masks = {
|
||||||
/*
|
/*
|
||||||
* Physical channels 0 and 1 are populated in case of
|
* Only channel 0 is populated in case of half-populated
|
||||||
* half-populated configurations.
|
* configuration.
|
||||||
*/
|
*/
|
||||||
.half_channel = BIT(0) | BIT(1),
|
.half_channel = BIT(0),
|
||||||
/* In mixed topologies, channels 2 and 3 are always memory-down. */
|
/* In mixed topologies, channel 1 is always memory-down. */
|
||||||
.mixed_topo = BIT(2) | BIT(3),
|
.mixed_topo = BIT(1),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
[MEM_TYPE_LP4X] = {
|
[MEM_TYPE_LP4X] = {
|
||||||
|
|
Loading…
Reference in New Issue