From d25a73d9a7ce25ec9b7a7652385c6b11033a3e8f Mon Sep 17 00:00:00 2001 From: Subrata Banik Date: Thu, 30 Jan 2025 09:20:53 +0000 Subject: [PATCH] util/cbfstool/eventlog: Add low battery event type This commit adds a new event type, `ELOG_TYPE_LOW_BATTERY_INDICATOR`, to the event log. This event is logged when the system boots due to a low battery condition. It includes the reason for the shutdown, currently only supporting "Power Off". BUG=b:339673254 TEST=Able to capture the eventlog for low battery boot event. ``` > elogtool list 9 | 2025-02-03 09:44:19+0530 | Low Battery Boot | Power Off ``` Change-Id: I5cc5e5f540657c7dfd174a4928e697a272da813a Signed-off-by: Subrata Banik Reviewed-on: https://review.coreboot.org/c/coreboot/+/86223 Tested-by: build bot (Jenkins) Reviewed-by: Julius Werner Reviewed-by: Dinesh Gehlot Reviewed-by: Karthik Ramasubramanian --- src/commonlib/bsd/include/commonlib/bsd/elog.h | 3 +++ util/cbfstool/eventlog.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/commonlib/bsd/include/commonlib/bsd/elog.h b/src/commonlib/bsd/include/commonlib/bsd/elog.h index f7dc4a1ac0..01f97f6957 100644 --- a/src/commonlib/bsd/include/commonlib/bsd/elog.h +++ b/src/commonlib/bsd/include/commonlib/bsd/elog.h @@ -389,6 +389,9 @@ struct elog_event_extended_event { #define ELOG_FW_POST_RAM_CSE_SYNC 0x1 #define ELOG_FW_CSE_SYNC_AT_PAYLOAD 0x2 +#define ELOG_TYPE_LOW_BATTERY_INDICATOR 0xbe +#define ELOG_FW_ISSUE_SHUTDOWN 0x0 + /* Only the 7-LSB are used for size */ #define ELOG_MAX_EVENT_SIZE 0x7F diff --git a/util/cbfstool/eventlog.c b/util/cbfstool/eventlog.c index 4746670513..2312b75f8b 100644 --- a/util/cbfstool/eventlog.c +++ b/util/cbfstool/eventlog.c @@ -170,6 +170,7 @@ static void eventlog_print_type(const struct event_header *event) {ELOG_TYPE_PSR_DATA_LOST, "PSR data lost"}, {ELOG_TYPE_FW_SPLASH_SCREEN, "Firmware Splash Screen"}, {ELOG_TYPE_FW_CSE_SYNC, "Firmware CSE sync"}, + {ELOG_TYPE_LOW_BATTERY_INDICATOR, "Low Battery boot"}, {ELOG_TYPE_EOL, "End of log"}, }; @@ -491,6 +492,11 @@ static int eventlog_print_data(const struct event_header *event) {0, NULL}, }; + static const struct valstr low_battery_status[] = { + {ELOG_FW_ISSUE_SHUTDOWN, "Power Off"}, + {0, NULL}, + }; + size_t elog_type_to_min_size[] = { [ELOG_TYPE_LOG_CLEAR] = sizeof(uint16_t), [ELOG_TYPE_BOOT] = sizeof(uint32_t), @@ -513,6 +519,7 @@ static int eventlog_print_data(const struct event_header *event) [ELOG_TYPE_PSR_DATA_BACKUP] = sizeof(uint8_t), [ELOG_TYPE_FW_SPLASH_SCREEN] = sizeof(uint8_t), [ELOG_TYPE_FW_CSE_SYNC] = sizeof(uint8_t), + [ELOG_TYPE_LOW_BATTERY_INDICATOR] = sizeof(uint8_t), [0xff] = 0, }; @@ -684,6 +691,11 @@ static int eventlog_print_data(const struct event_header *event) eventlog_printf("%s", val2str(*cse_event, cse_sync_path_types)); break; } + case ELOG_TYPE_LOW_BATTERY_INDICATOR: { + const uint8_t *low_battery_event = event_get_data(event); + eventlog_printf("%s", val2str(*low_battery_event, low_battery_status)); + break; + } default: break; }