diff options
author | Mary Ruthven <mruthven@chromium.org> | 2022-01-14 09:30:20 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2022-01-15 00:08:45 +0000 |
commit | b4ab5c7e02e39a69bf10f40318198b5d5462bd4a (patch) | |
tree | 8301e34717c86cef276839e628d99950fb1ee25c /board/cr50/board.c | |
parent | d746307808af0151293ce63c08f03237519866cc (diff) | |
download | chrome-ec-b4ab5c7e02e39a69bf10f40318198b5d5462bd4a.tar.gz |
brdprop: log invalid and ambiguous events
Log brdprop errors in flog, so the team can track brdprop errors from
the AP without grepping through cr50 logs.
BUG=b:214550629
TEST=flash on red board. Verify invalid strap events are logged.
enable closed-loop-reset on the red board. Verify "ambiguous" strap
logs are ignored.
Change-Id: Ibea73fb19119fa81ed3652c5d68e430cdbae9fa5
Signed-off-by: Mary Ruthven <mruthven@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3386405
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
Commit-Queue: Vadim Bendebury <vbendeb@chromium.org>
Diffstat (limited to 'board/cr50/board.c')
-rw-r--r-- | board/cr50/board.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/board/cr50/board.c b/board/cr50/board.c index 3cf0156c26..cfe2d9a4d7 100644 --- a/board/cr50/board.c +++ b/board/cr50/board.c @@ -828,6 +828,46 @@ static void maybe_trigger_ite_sync(void) generate_ite_sync(); } +/* + * Save the logged events, the system reset flags, and the config for the + * event in flog. + */ +static struct brdprop_payload bp_flog; + +/* Each event can be logged once per boot. */ +static void flog_brdprop_event(enum brdprop_ev event, uint8_t config) +{ + if (event >= BRDPROP_COUNT) { + CPRINTS("%s: invalid event %d", __func__, event); + return; + } + bp_flog.events |= (1 << event); + bp_flog.configs[event] = config; +} + +/* + * The flog isn't initialized when board properties are calculated. Save the + * information in flog once it's ready. + */ +static void process_brdprop_flog(void) +{ + if (!bp_flog.events) + return; + /* + * Boards with closed loop reset are going to have ambiguous straps + * after reboot. Don't log those errors. Only log invalid strap errors + * on those boards. + * Filter these here, because cr50 doesn't know the board properties + * when it's initially logging the errors. + */ + if (board_uses_closed_loop_reset() && + bp_flog.events == (1 << BRDPROP_AMBIGUOUS)) + return; + + bp_flog.reset_flags = system_get_reset_flags(); + flash_log_add_event(FE_LOG_BRDPROP, sizeof(bp_flog), &bp_flog); +} + static void process_board_cfg(void) { uint32_t tpm_board_cfg = board_cfg_reg_read(); @@ -874,6 +914,9 @@ static void board_init(void) */ if (system_get_reset_flags() & EC_RESET_FLAG_HIBERNATE) system_decrement_retry_counter(); + + process_brdprop_flog(); + configure_board_specific_gpios(); init_pmu(); reset_wake_logic(); @@ -1519,6 +1562,7 @@ static int get_strap_config(uint8_t *config) * unused config pins the AP is interfering with. */ if (use_i2c && use_spi) { + flog_brdprop_event(BRDPROP_AMBIGUOUS, *config); spi_prop = (GREG32(PMU, LONG_LIFE_SCRATCH1) & BOARD_PERIPH_CONFIG_SPI); i2c_prop = (GREG32(PMU, LONG_LIFE_SCRATCH1) & @@ -1544,6 +1588,7 @@ static uint32_t get_properties(void) uint32_t properties; if (get_strap_config(&config) != EC_SUCCESS) { + flog_brdprop_event(BRDPROP_INVALID, config); #ifdef H1_RED_BOARD CPRINTS("Unconditionally enabling SPI and platform reset"); return (BOARD_PERIPH_CONFIG_SPI | BOARD_USE_PLT_RESET); @@ -1586,6 +1631,7 @@ static uint32_t get_properties(void) /* All I2C boards use same default properties. */ properties = BOARD_PROPERTIES_DEFAULT; } + flog_brdprop_event(BRDPROP_NO_ENTRY, config); CPRINTS("strap_cfg 0x%x has no table entry, prop = 0x%x", config, properties); return properties; |