From 5ea5336b6e7eb305dffb36d243746f5202738e69 Mon Sep 17 00:00:00 2001 From: Johnny Lin Date: Wed, 29 Jul 2020 15:58:17 +0800 Subject: mb/ocp/deltalake: Add VPD variable for FRB2 timer action Tested on OCP Delta Lake, the timer action can be set correctly. Change-Id: I1013169e12455e01214d089c9398c78143af4df8 Signed-off-by: Johnny Lin Reviewed-on: https://review.coreboot.org/c/coreboot/+/44019 Reviewed-by: Angel Pons Tested-by: build bot (Jenkins) --- src/mainboard/ocp/deltalake/ipmi.c | 14 +++++++++++--- src/mainboard/ocp/deltalake/vpd.h | 5 +++++ 2 files changed, 16 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/mainboard/ocp/deltalake/ipmi.c b/src/mainboard/ocp/deltalake/ipmi.c index 790038f380..415b26d5d8 100644 --- a/src/mainboard/ocp/deltalake/ipmi.c +++ b/src/mainboard/ocp/deltalake/ipmi.c @@ -101,7 +101,7 @@ enum cb_err ipmi_set_post_start(const int port) void init_frb2_wdt(void) { char val[VPD_LEN]; - u8 enable; + uint8_t enable, action; uint16_t countdown; if (vpd_get_bool(FRB2_TIMER, VPD_RW_THEN_RO, &enable)) { @@ -122,8 +122,16 @@ void init_frb2_wdt(void) FRB2_COUNTDOWN_DEFAULT * 100); countdown = FRB2_COUNTDOWN_DEFAULT; } - ipmi_init_and_start_bmc_wdt(CONFIG_BMC_KCS_BASE, countdown, - TIMEOUT_HARD_RESET); + + if (vpd_gets(FRB2_ACTION, val, VPD_LEN, VPD_RW_THEN_RO)) { + action = (uint8_t)atol(val); + printk(BIOS_DEBUG, "FRB2 timer action set to: %d\n", action); + } else { + printk(BIOS_DEBUG, "FRB2 timer action use default value: %d\n", + FRB2_ACTION_DEFAULT); + action = FRB2_ACTION_DEFAULT; + } + ipmi_init_and_start_bmc_wdt(CONFIG_BMC_KCS_BASE, countdown, action); } else { printk(BIOS_DEBUG, "Disable FRB2 timer\n"); ipmi_stop_bmc_wdt(CONFIG_BMC_KCS_BASE); diff --git a/src/mainboard/ocp/deltalake/vpd.h b/src/mainboard/ocp/deltalake/vpd.h index 5466ef7fee..39efd73ea9 100644 --- a/src/mainboard/ocp/deltalake/vpd.h +++ b/src/mainboard/ocp/deltalake/vpd.h @@ -15,6 +15,11 @@ /* Default countdown is 15 minutes when the VPD variable is not found */ #define FRB2_COUNTDOWN_DEFAULT 9000 +/* VPD variable for setting FRB2 timer action. + 0: No action, 1: hard reset, 2: power down, 3: power cycle */ +#define FRB2_ACTION "frb2_action" +#define FRB2_ACTION_DEFAULT 0 /* Default no action when the VPD variable is not found */ + /* Define the VPD keys for UPD variables that can be overwritten */ #define FSP_LOG "fsp_log_enable" /* 1 or 0: enable or disable FSP SOL log */ #define FSP_LOG_DEFAULT 1 /* Default value when the VPD variable is not found */ -- cgit v1.2.3