diff options
-rw-r--r-- | src/include/elog.h | 10 | ||||
-rw-r--r-- | src/soc/intel/common/mrc_cache.c | 19 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/include/elog.h b/src/include/elog.h index bdbafc2b19..7fdcda71a7 100644 --- a/src/include/elog.h +++ b/src/include/elog.h @@ -149,6 +149,16 @@ struct elog_event_data_me_extended { #define ELOG_TYPE_WAKE 0xa8 #define ELOG_TYPE_FW_WAKE 0xa9 +/* Memory Cache Update */ +#define ELOG_TYPE_MEM_CACHE_UPDATE 0xaa +#define ELOG_MEM_CACHE_UPDATE_SLOT_NORMAL 0 +#define ELOG_MEM_CACHE_UPDATE_STATUS_SUCCESS 0 +#define ELOG_MEM_CACHE_UPDATE_STATUS_FAIL 1 +struct elog_event_mem_cache_update { + u8 slot; + u8 status; +} __attribute__ ((packed)); + #if CONFIG_ELOG /* Eventlog backing storage must be initialized before calling elog_init(). */ extern int elog_init(void); diff --git a/src/soc/intel/common/mrc_cache.c b/src/soc/intel/common/mrc_cache.c index c123da9dc7..bef3ba204c 100644 --- a/src/soc/intel/common/mrc_cache.c +++ b/src/soc/intel/common/mrc_cache.c @@ -17,6 +17,7 @@ #include <bootstate.h> #include <console/console.h> #include <cbmem.h> +#include <elog.h> #include <fmap.h> #include <ip_checksum.h> #include <vboot/vboot_common.h> @@ -281,6 +282,18 @@ static int protect_mrc_cache(const struct mrc_data_region *region) return 0; } +static void log_event_cache_update(uint8_t slot, uint8_t status) +{ + const int type = ELOG_TYPE_MEM_CACHE_UPDATE; + struct elog_event_mem_cache_update event = { + .slot = slot, + .status = status, + }; + + if (elog_add_event_raw(type, &event, sizeof(event)) < 0) + printk(BIOS_ERR, "Failed to log mem cache update event.\n"); +} + static void update_mrc_cache(void *unused) { const struct mrc_saved_data *current_boot; @@ -336,7 +349,13 @@ static void update_mrc_cache(void *unused) current_boot->size + sizeof(*current_boot))) { printk(BIOS_DEBUG, "Failure writing MRC cache to %p.\n", next_slot); + log_event_cache_update(ELOG_MEM_CACHE_UPDATE_SLOT_NORMAL, + ELOG_MEM_CACHE_UPDATE_STATUS_FAIL); + } else { + log_event_cache_update(ELOG_MEM_CACHE_UPDATE_SLOT_NORMAL, + ELOG_MEM_CACHE_UPDATE_STATUS_SUCCESS); } + protect_mrc_cache(®ion); } |