aboutsummaryrefslogtreecommitdiff
path: root/src/mainboard/google/octopus/romstage.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainboard/google/octopus/romstage.c')
-rw-r--r--src/mainboard/google/octopus/romstage.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/mainboard/google/octopus/romstage.c b/src/mainboard/google/octopus/romstage.c
index 1810c53c27..9e5734bb67 100644
--- a/src/mainboard/google/octopus/romstage.c
+++ b/src/mainboard/google/octopus/romstage.c
@@ -15,6 +15,8 @@
#include <string.h>
#include <baseboard/variants.h>
#include <boardid.h>
+#include <console/console.h>
+#include <ec/google/chromeec/ec.h>
#include <soc/meminit.h>
#include <soc/romstage.h>
@@ -24,7 +26,34 @@ void mainboard_memory_init_params(FSPM_UPD *memupd)
variant_lpddr4_config(), variant_memory_sku());
}
-void mainboard_save_dimm_info(void)
+static void save_dimm_info_by_sku_config(void)
{
save_lpddr4_dimm_info(variant_lpddr4_config(), variant_memory_sku());
}
+
+void mainboard_save_dimm_info(void)
+{
+ char part_num_store[32];
+ const char *part_num = NULL;
+
+ if (!IS_ENABLED(CONFIG_DRAM_PART_NUM_IN_CBI)) {
+ save_dimm_info_by_sku_config();
+ return;
+ }
+
+ if (!IS_ENABLED(CONFIG_DRAM_PART_NUM_ALWAYS_IN_CBI)) {
+ /* Fall back on part numbers encoded in lp4cfg array. */
+ if (board_id() < CONFIG_DRAM_PART_IN_CBI_BOARD_ID_MIN) {
+ save_dimm_info_by_sku_config();
+ return;
+ }
+ }
+
+ if (google_chromeec_cbi_get_dram_part_num(&part_num_store[0],
+ ARRAY_SIZE(part_num_store)) < 0)
+ printk(BIOS_ERR, "ERROR: Couldn't obtain DRAM part number from CBI\n");
+ else
+ part_num = &part_num_store[0];
+
+ save_lpddr4_dimm_info_part_num(part_num);
+}