12 #include <fmap_config.h>
19 #define DEFAULT_MRC_CACHE "RW_MRC_CACHE"
20 #define DEFAULT_MRC_CACHE_SIZE FMAP_SECTION_RW_MRC_CACHE_SIZE
22 #if !CONFIG_PSP_APOB_DRAM_ADDRESS
23 #error Incorrect APOB configuration setting(s)
26 #define APOB_SIGNATURE 0x424F5041
59 void *apob_src_ram = (
void *)(
uintptr_t)CONFIG_PSP_APOB_DRAM_ADDRESS;
104 if (!
CONFIG(COOP_MULTITASKING))
125 if (
rdev_readat(read_rdev, &apob_header, 0,
sizeof(apob_header)) < 0) {
144 bool update_needed =
false;
152 if (apob_src_ram ==
NULL)
165 if (apob_rom ==
NULL) {
166 update_needed =
true;
167 }
else if (
memcmp(apob_src_ram, apob_rom, apob_src_ram->
size)) {
169 update_needed =
true;
173 if (!update_needed) {
179 apob_src_ram, apob_src_ram->
size,
static struct apob_thread_context global_apob_thread
static enum cb_err apob_thread_entry(void *arg)
static void * get_apob_from_nv_rdev(struct region_device *read_rdev)
static bool apob_header_valid(const struct apob_base_header *apob_header_ptr, const char *where)
#define DEFAULT_MRC_CACHE_SIZE
BOOT_STATE_INIT_ENTRY(BS_POST_DEVICE, BS_ON_EXIT, soc_update_apob_cache, NULL)
static int get_nv_rdev(struct region_device *r)
void * soc_fill_apob_cache(void)
static void soc_update_apob_cache(void *unused)
void start_apob_cache_read(void)
static void * get_apob_nv_address(void)
#define DEFAULT_MRC_CACHE
static void * get_apob_dram_address(void)
static int acpi_is_wakeup_s3(void)
#define assert(statement)
cb_err
coreboot error codes
@ CB_ERR
Generic error code.
@ CB_SUCCESS
Call completed successfully.
#define printk(level,...)
static struct region_device rdev
int fmap_locate_area_as_rdev(const char *name, struct region_device *area)
int fmap_locate_area_as_rdev_rw(const char *name, struct region_device *area)
void timestamp_add_now(enum timestamp_id id)
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
#define BIOS_SPEW
BIOS_SPEW - Excessively verbose output.
#define BIOS_WARNING
BIOS_WARNING - Bad configuration.
ssize_t rdev_eraseat(const struct region_device *rd, size_t offset, size_t size)
static size_t region_device_sz(const struct region_device *rdev)
ssize_t rdev_writeat(const struct region_device *rd, const void *b, size_t offset, size_t size)
static void * rdev_mmap_full(const struct region_device *rd)
ssize_t rdev_readat(const struct region_device *rd, void *b, size_t offset, size_t size)
static size_t region_device_offset(const struct region_device *rdev)
int memcmp(const void *s1, const void *s2, size_t n)
uint8_t buffer[DEFAULT_MRC_CACHE_SIZE]
struct thread_handle handle
struct region_device apob_rdev
int thread_run(struct thread_handle *handle, enum cb_err(*func)(void *), void *arg)
enum cb_err thread_join(struct thread_handle *handle)
@ TS_AMD_APOB_ERASE_START
@ TS_AMD_APOB_WRITE_START