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 <subratabanik@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/86223
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Reviewed-by: Dinesh Gehlot <digehlot@google.com>
Reviewed-by: Karthik Ramasubramanian <kramasub@google.com>
This commit is contained in:
Subrata Banik 2025-01-30 09:20:53 +00:00 committed by Matt DeVillier
commit d25a73d9a7
2 changed files with 15 additions and 0 deletions

View file

@ -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

View file

@ -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;
}