summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/spd_cache.c4
-rw-r--r--tests/lib/spd_cache-test.c15
2 files changed, 14 insertions, 5 deletions
diff --git a/src/lib/spd_cache.c b/src/lib/spd_cache.c
index 44830a8537..dff6ede860 100644
--- a/src/lib/spd_cache.c
+++ b/src/lib/spd_cache.c
@@ -155,6 +155,10 @@ bool check_if_dimm_changed(u8 *spd_cache, struct spd_block *blk)
bool dimm_changed = false;
/* Check if the dimm is the same with last system boot. */
for (i = 0; i < SC_SPD_NUMS && !dimm_changed; i++) {
+ if (blk->addr_map[i] == 0) {
+ printk(BIOS_NOTICE, "SPD_CACHE: DIMM%d does not exist\n", i);
+ continue;
+ }
/* Return true if any error happened here. */
if (get_spd_sn(blk->addr_map[i], &sn) == CB_ERR)
return true;
diff --git a/tests/lib/spd_cache-test.c b/tests/lib/spd_cache-test.c
index e1c1777bc6..48f06e3883 100644
--- a/tests/lib/spd_cache-test.c
+++ b/tests/lib/spd_cache-test.c
@@ -146,7 +146,8 @@ __attribute__((unused)) static void test_check_if_dimm_changed_not_changed(void
{
uint8_t *spd_cache;
size_t spd_cache_sz;
- struct spd_block blk = {.addr_map = {0}, .spd_array = {0}, .len = 0};
+ struct spd_block blk = {.addr_map = {0x50, 0x51, 0x52, 0x53},
+ .spd_array = {0}, .len = 0};
assert_int_equal(CB_SUCCESS, load_spd_cache(&spd_cache, &spd_cache_sz));
fill_spd_cache_ddr4(spd_cache, spd_cache_sz);
@@ -162,7 +163,8 @@ __attribute__((unused)) static void test_check_if_dimm_changed_sn_error(void **s
{
uint8_t *spd_cache;
size_t spd_cache_sz;
- struct spd_block blk = {.addr_map = {0}, .spd_array = {0}, .len = 0};
+ struct spd_block blk = {.addr_map = {0x50, 0x51, 0x52, 0x53},
+ .spd_array = {0}, .len = 0};
assert_int_equal(CB_SUCCESS, load_spd_cache(&spd_cache, &spd_cache_sz));
fill_spd_cache_ddr4(spd_cache, spd_cache_sz);
@@ -177,7 +179,8 @@ __attribute__((unused)) static void test_check_if_dimm_changed_sodimm_lost(void
{
uint8_t *spd_cache;
size_t spd_cache_sz;
- struct spd_block blk = {.addr_map = {0}, .spd_array = {0}, .len = 0};
+ struct spd_block blk = {.addr_map = {0x50, 0x51, 0x52, 0x53},
+ .spd_array = {0}, .len = 0};
assert_int_equal(CB_SUCCESS, load_spd_cache(&spd_cache, &spd_cache_sz));
fill_spd_cache_ddr4(spd_cache, spd_cache_sz);
@@ -194,7 +197,8 @@ __attribute__((unused)) static void test_check_if_dimm_changed_new_sodimm(void *
{
uint8_t *spd_cache;
size_t spd_cache_sz;
- struct spd_block blk = {.addr_map = {0}, .spd_array = {0}, .len = 0};
+ struct spd_block blk = {.addr_map = {0x50, 0x51, 0x52, 0x53},
+ .spd_array = {0}, .len = 0};
assert_int_equal(CB_SUCCESS, load_spd_cache(&spd_cache, &spd_cache_sz));
fill_spd_cache_ddr4(spd_cache, spd_cache_sz);
@@ -212,7 +216,8 @@ __attribute__((unused)) static void test_check_if_dimm_changed_sn_changed(void *
{
uint8_t *spd_cache;
size_t spd_cache_sz;
- struct spd_block blk = {.addr_map = {0}, .spd_array = {0}, .len = 0};
+ struct spd_block blk = {.addr_map = {0x50, 0x51, 0x52, 0x53},
+ .spd_array = {0}, .len = 0};
assert_int_equal(CB_SUCCESS, load_spd_cache(&spd_cache, &spd_cache_sz));
fill_spd_cache_ddr4(spd_cache, spd_cache_sz);