summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/commonlib/bsd/include/commonlib/bsd/cbmem_id.h2
-rw-r--r--src/drivers/intel/fsp2_0/memory_init.c30
-rw-r--r--src/drivers/intel/fsp2_0/save_mrc_data.c7
3 files changed, 28 insertions, 11 deletions
diff --git a/src/commonlib/bsd/include/commonlib/bsd/cbmem_id.h b/src/commonlib/bsd/include/commonlib/bsd/cbmem_id.h
index 5080812da4..8e6e6cdc2f 100644
--- a/src/commonlib/bsd/include/commonlib/bsd/cbmem_id.h
+++ b/src/commonlib/bsd/include/commonlib/bsd/cbmem_id.h
@@ -27,6 +27,7 @@
#define CBMEM_ID_FSP_RESERVED_MEMORY 0x46535052
#define CBMEM_ID_FSP_RUNTIME 0x52505346
#define CBMEM_ID_FSPM_VERSION 0x56505346
+#define CBMEM_ID_MRC_VERSION 0x5f43524d
#define CBMEM_ID_GDT 0x4c474454
#define CBMEM_ID_HOB_POINTER 0x484f4221
#define CBMEM_ID_IGD_OPREGION 0x4f444749
@@ -112,6 +113,7 @@
{ CBMEM_ID_FSP_RESERVED_MEMORY, "FSP MEMORY " }, \
{ CBMEM_ID_FSP_RUNTIME, "FSP RUNTIME" }, \
{ CBMEM_ID_FSPM_VERSION, "FSPM VERSION" }, \
+ { CBMEM_ID_MRC_VERSION, "MRC VERSION" }, \
{ CBMEM_ID_GDT, "GDT " }, \
{ CBMEM_ID_HOB_POINTER, "HOB " }, \
{ CBMEM_ID_IGD_OPREGION, "IGD OPREGION" }, \
diff --git a/src/drivers/intel/fsp2_0/memory_init.c b/src/drivers/intel/fsp2_0/memory_init.c
index fa24a7e018..28e4d721ce 100644
--- a/src/drivers/intel/fsp2_0/memory_init.c
+++ b/src/drivers/intel/fsp2_0/memory_init.c
@@ -30,10 +30,28 @@
static uint8_t temp_ram[CONFIG_FSP_TEMP_RAM_SIZE] __aligned(sizeof(uint64_t));
+/*
+ * Helper function to store the MRC cache version into CBMEM
+ *
+ * ramstage uses either the MRC version or FSP-M version (depending on the config)
+ * when updating the MRC cache
+ */
+static void do_cbmem_version_entry(uint32_t cbmem_id, uint32_t version)
+{
+ uint32_t *cbmem_version_entry = cbmem_add(cbmem_id, sizeof(version));
+ if (!cbmem_version_entry) {
+ printk(BIOS_ERR, "Failed to add %s version to cbmem.\n",
+ CONFIG(MRC_CACHE_USING_MRC_VERSION) ? "MRC" : "FSP-M");
+ return;
+ }
+ *cbmem_version_entry = version;
+}
+
static void do_fsp_post_memory_init(bool s3wake, uint32_t version)
{
struct range_entry fsp_mem;
- uint32_t *fsp_version_cbmem;
+ uint32_t cbmem_id = CONFIG(MRC_CACHE_USING_MRC_VERSION) ? CBMEM_ID_MRC_VERSION :
+ CBMEM_ID_FSPM_VERSION;
fsp_find_reserved_memory(&fsp_mem);
@@ -56,14 +74,8 @@ static void do_fsp_post_memory_init(bool s3wake, uint32_t version)
(uintptr_t)cbmem_find(CBMEM_ID_FSP_RESERVED_MEMORY))
die("Failed to accommodate FSP reserved memory request!\n");
- /* ramstage uses the FSP-M version when updating the MRC cache */
- if (CONFIG(CACHE_MRC_SETTINGS) && !s3wake) {
- fsp_version_cbmem = cbmem_add(CBMEM_ID_FSPM_VERSION,
- sizeof(version));
- if (!fsp_version_cbmem)
- printk(BIOS_ERR, "Failed to add FSP-M version to cbmem.\n");
- *fsp_version_cbmem = version;
- }
+ if (CONFIG(CACHE_MRC_SETTINGS) && !s3wake)
+ do_cbmem_version_entry(cbmem_id, version);
/* Create romstage handof information */
romstage_handoff_init(s3wake);
diff --git a/src/drivers/intel/fsp2_0/save_mrc_data.c b/src/drivers/intel/fsp2_0/save_mrc_data.c
index d1249424c9..19e8a52cff 100644
--- a/src/drivers/intel/fsp2_0/save_mrc_data.c
+++ b/src/drivers/intel/fsp2_0/save_mrc_data.c
@@ -11,14 +11,17 @@ static void save_mrc_data(void *unused)
{
size_t mrc_data_size;
const void *mrc_data;
+ uint32_t cbmem_id = CONFIG(MRC_CACHE_USING_MRC_VERSION) ? CBMEM_ID_MRC_VERSION :
+ CBMEM_ID_FSPM_VERSION;
uint32_t *version;
if (acpi_is_wakeup_s3())
return;
- version = cbmem_find(CBMEM_ID_FSPM_VERSION);
+ version = cbmem_find(cbmem_id);
if (!version) {
- printk(BIOS_ERR, "Failed to read FSP-M version from cbmem.\n");
+ printk(BIOS_ERR, "Failed to read %s version from cbmem.\n",
+ CONFIG(MRC_CACHE_USING_MRC_VERSION) ? "MRC" : "FSP-M");
return;
}