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);