coreboot-kgpe-d16/src/include/spd_cache.h
Matt DeVillier 8ead1dc875 src/lib: Add Kconfig option for SPD cache in FMAP
Currently, the option to cache DIMM SPD data in an FMAP region
is closely coupled to a single board (google/hatch) and requires
a custom FMAP to utilize.

Loosen this coupling by introducing a Kconfig option which adds
a correctly sized and aligned RW_SPD_CACHE region to the default FMAP.
Add a Kconfig option for the region name, replacing the existing hard-
coded instance in spd_cache.h. Change the inclusion of spd_cache.c to
use this new Kconfig, rather than the board-specific one currently used.
Lastly, have google/hatch select the new Kconfig when appropriate to
ensure no change in current functionality.

Test: build/boot WYVERN google/hatch variant with default FMAP, verify
FMAP contains RW_SPD_CACHE, verify SPD cache used via cbmem log.

Also tested on an out-of-tree Purism board.

Change-Id: Iee0e7acb01e238d7ed354e3dbab1207903e3a4fc
Signed-off-by: Matt DeVillier <matt.devillier@puri.sm>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/48520
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
2020-12-14 08:23:41 +00:00

24 lines
853 B
C

/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef __SPD_CACHE_H
#define __SPD_CACHE_H
#include <spd_bin.h>
#include <stddef.h>
#include <stdint.h>
#define SPD_CACHE_FMAP_NAME (CONFIG_SPD_CACHE_FMAP_NAME)
#define SC_SPD_NUMS (CONFIG_DIMM_MAX)
#define SC_SPD_OFFSET(n) (CONFIG_DIMM_SPD_SIZE * n)
#define SC_CRC_OFFSET (CONFIG_DIMM_MAX * CONFIG_DIMM_SPD_SIZE)
#define SC_SPD_TOTAL_LEN (CONFIG_DIMM_MAX * CONFIG_DIMM_SPD_SIZE)
#define SC_SPD_LEN (CONFIG_DIMM_SPD_SIZE)
#define SC_CRC_LEN (sizeof(uint16_t))
enum cb_err update_spd_cache(struct spd_block *blk);
enum cb_err load_spd_cache(uint8_t **spd_cache, size_t *spd_cache_sz);
bool spd_cache_is_valid(uint8_t *spd_cache, size_t spd_cache_sz);
bool check_if_dimm_changed(u8 *spd_cache, struct spd_block *blk);
enum cb_err spd_fill_from_cache(uint8_t *spd_cache, struct spd_block *blk);
#endif