| /* SPDX-License-Identifier: GPL-2.0-only */ |
| |
| #include <console/console.h> |
| #include <drivers/ipmi/ipmi_kcs.h> |
| #include <drivers/ipmi/ipmi_ops.h> |
| #include <drivers/ipmi/ocp/ipmi_ocp.h> |
| #include <drivers/vpd/vpd.h> |
| #include <string.h> |
| |
| #include "ipmi.h" |
| #include "vpd.h" |
| |
| void init_frb2_wdt(void) |
| { |
| char val[VPD_LEN]; |
| /* Enable FRB2 timer by default. */ |
| u8 enable = 1; |
| uint16_t countdown; |
| |
| if (vpd_get_bool(FRB2_TIMER, VPD_RW_THEN_RO, &enable)) { |
| if (!enable) { |
| printk(BIOS_DEBUG, "Disable FRB2 timer\n"); |
| ipmi_stop_bmc_wdt(CONFIG_BMC_KCS_BASE); |
| return; |
| } |
| } |
| if (enable) { |
| if (vpd_gets(FRB2_COUNTDOWN, val, VPD_LEN, VPD_RW_THEN_RO)) { |
| countdown = (uint16_t)atol(val); |
| printk(BIOS_DEBUG, "FRB2 timer countdown set to: %d ms\n", |
| countdown * 100); |
| } else { |
| printk(BIOS_DEBUG, "FRB2 timer use default value: %d ms\n", |
| DEFAULT_COUNTDOWN * 100); |
| countdown = DEFAULT_COUNTDOWN; |
| } |
| ipmi_init_and_start_bmc_wdt(CONFIG_BMC_KCS_BASE, countdown, |
| TIMEOUT_HARD_RESET); |
| } |
| } |