soc/intel/common: Add LPCAMM memory topology support

Add MEM_TOPO_LP5_CAMM topology type to support Low Profile Compression
Attached Memory Module (LPCAMM) configurations. LPCAMM is a removable
memory module format that provides similar functionality to DIMMs but
in a different physical form factor. Update the SPD reading logic to
handle both traditional DIMM modules and LPCAMM modules, as both are
removable memory types that require SPD detection and initialization.
This change enables platforms to properly detect and initialize LPCAMM
memory configurations alongside existing DIMM and memory-down support.

BUG=none
TEST=Build test on Intel platforms

Change-Id: I6db2fd76300dd4c96212427d9283b078ca621ed9
Signed-off-by: Bora Guvendik <bora.guvendik@intel.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/90140
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Jérémy Compostella <jeremy.compostella@intel.com>
This commit is contained in:
Bora Guvendik 2025-11-20 16:14:14 -08:00 committed by Matt DeVillier
commit 67777b7671
2 changed files with 4 additions and 2 deletions

View file

@ -24,6 +24,7 @@
enum mem_topology {
MEM_TOPO_MEMORY_DOWN = BIT(0), // memory is soldered onto board
MEM_TOPO_DIMM_MODULE = BIT(1), // memory is composed of DIMM modules
MEM_TOPO_LP5_CAMM = BIT(2), // memory is composed of LPCAMM modules
MEM_TOPO_MIXED = MEM_TOPO_MEMORY_DOWN | MEM_TOPO_DIMM_MODULE,
};

View file

@ -117,7 +117,7 @@ static bool read_spd_dimm(FSPM_UPD *memupd, const struct soc_mem_cfg *soc_mem_cf
*/
uint32_t pop_mask = 0;
if (!(info->topo & MEM_TOPO_DIMM_MODULE))
if (!(info->topo & (MEM_TOPO_DIMM_MODULE | MEM_TOPO_LP5_CAMM)))
return false;
for (ch = 0; ch < num_phys_ch; ch++) {
@ -212,7 +212,8 @@ void mem_populate_channel_data(FSPM_UPD *memupd, const struct soc_mem_cfg *soc_m
if (spd_info->topo == MEM_TOPO_MEMORY_DOWN) {
data->spd_len = spd_md_len;
} else if (spd_info->topo == MEM_TOPO_DIMM_MODULE) {
} else if (spd_info->topo == MEM_TOPO_DIMM_MODULE ||
spd_info->topo == MEM_TOPO_LP5_CAMM) {
data->spd_len = spd_dimm_len;
} else {
/*