intelblocks/oc_wdt: Consolidate the API

Reduce the OC WDT integration code footprint by consolidating
multiple API calls into a single function to be called by SoC.

Change-Id: Iba031cd8e0b72cabc4d0d8a216273d763231c889
Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/77574
Reviewed-by: Krystian Hebel <krystian.hebel@3mdeb.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Michał Żygowski 2023-08-31 10:40:39 +02:00 committed by Felix Held
parent c484e831e4
commit 1728e1bc15
2 changed files with 24 additions and 20 deletions

View File

@ -5,22 +5,12 @@
#include <stdbool.h> #include <stdbool.h>
/* /* Starts and reloads the OC watchdog if enabled in Kconfig */
* Starts and reloads the OC watchdog with given timeout. void setup_oc_wdt(void);
*
* timeout - Time in seconds before OC watchdog times out. Supported range = 70 - 1024
*/
void oc_wdt_start(unsigned int timeout);
/* Reloads the OC watchdog (if enabled) preserving the current settings. */ /* Reloads the OC watchdog (if enabled) preserving the current settings. */
void oc_wdt_reload(void); void oc_wdt_reload(void);
/* Disables the OC WDT */
void oc_wdt_disable(void);
/* Checks if OC WDT is enabled and returns true if so, otherwise false */
bool is_oc_wdt_enabled(void);
/* Returns currently programmed OC watchdog timeout in seconds */ /* Returns currently programmed OC watchdog timeout in seconds */
unsigned int oc_wdt_get_current_timeout(void); unsigned int oc_wdt_get_current_timeout(void);

View File

@ -22,7 +22,7 @@
* *
* timeout - Time in seconds before OC watchdog times out. Supported range = 70 - 1024 * timeout - Time in seconds before OC watchdog times out. Supported range = 70 - 1024
*/ */
void oc_wdt_start(unsigned int timeout) static void oc_wdt_start(unsigned int timeout)
{ {
uint32_t oc_wdt_ctrl; uint32_t oc_wdt_ctrl;
@ -48,6 +48,12 @@ void oc_wdt_start(unsigned int timeout)
outl(oc_wdt_ctrl, PCH_OC_WDT_CTL); outl(oc_wdt_ctrl, PCH_OC_WDT_CTL);
} }
/* Checks if OC WDT is enabled and returns true if so, otherwise false. */
static bool is_oc_wdt_enabled(void)
{
return (inl(PCH_OC_WDT_CTL) & PCH_OC_WDT_CTL_EN) ? true : false;
}
/* Reloads the OC watchdog (if enabled) preserving the current settings. */ /* Reloads the OC watchdog (if enabled) preserving the current settings. */
void oc_wdt_reload(void) void oc_wdt_reload(void)
{ {
@ -65,7 +71,7 @@ void oc_wdt_reload(void)
} }
/* Disables the OC WDT. */ /* Disables the OC WDT. */
void oc_wdt_disable(void) static void oc_wdt_disable(void)
{ {
uint32_t oc_wdt_ctrl; uint32_t oc_wdt_ctrl;
@ -76,14 +82,22 @@ void oc_wdt_disable(void)
outl(oc_wdt_ctrl, PCH_OC_WDT_CTL); outl(oc_wdt_ctrl, PCH_OC_WDT_CTL);
} }
/* Checks if OC WDT is enabled and returns true if so, otherwise false. */
bool is_oc_wdt_enabled(void)
{
return (inl(PCH_OC_WDT_CTL) & PCH_OC_WDT_CTL_EN) ? true : false;
}
/* Returns currently programmed OC watchdog timeout in seconds */ /* Returns currently programmed OC watchdog timeout in seconds */
unsigned int oc_wdt_get_current_timeout(void) unsigned int oc_wdt_get_current_timeout(void)
{ {
return (inl(PCH_OC_WDT_CTL) & PCH_OC_WDT_CTL_TOV_MASK) + 1; return (inl(PCH_OC_WDT_CTL) & PCH_OC_WDT_CTL_TOV_MASK) + 1;
} }
/* Starts and reloads the OC watchdog if enabled in Kconfig */
void setup_oc_wdt(void)
{
if (CONFIG(SOC_INTEL_COMMON_OC_WDT_ENABLE)) {
oc_wdt_start(CONFIG_SOC_INTEL_COMMON_OC_WDT_TIMEOUT_SECONDS);
if (is_oc_wdt_enabled())
printk(BIOS_DEBUG, "OC Watchdog enabled\n");
else
printk(BIOS_ERR, "Failed to enable OC watchdog\n");
} else {
oc_wdt_disable();
}
}