summaryrefslogtreecommitdiff
path: root/src/soc/intel/common/block
diff options
context:
space:
mode:
authorMichał Żygowski <michal.zygowski@3mdeb.com>2023-08-31 10:40:39 +0200
committerFelix Held <felix-coreboot@felixheld.de>2023-09-20 14:05:44 +0000
commit1728e1bc15d124f6d080d867a40d2428327c831e (patch)
tree9b41fae1501850245572100cd8513eb746ae47d0 /src/soc/intel/common/block
parentc484e831e47e7669d7c926f4ecbc05351eeec547 (diff)
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>
Diffstat (limited to 'src/soc/intel/common/block')
-rw-r--r--src/soc/intel/common/block/include/intelblocks/oc_wdt.h14
-rw-r--r--src/soc/intel/common/block/oc_wdt/oc_wdt.c30
2 files changed, 24 insertions, 20 deletions
diff --git a/src/soc/intel/common/block/include/intelblocks/oc_wdt.h b/src/soc/intel/common/block/include/intelblocks/oc_wdt.h
index 8a03a18732..bc0f0b1a27 100644
--- a/src/soc/intel/common/block/include/intelblocks/oc_wdt.h
+++ b/src/soc/intel/common/block/include/intelblocks/oc_wdt.h
@@ -5,22 +5,12 @@
#include <stdbool.h>
-/*
- * Starts and reloads the OC watchdog with given timeout.
- *
- * timeout - Time in seconds before OC watchdog times out. Supported range = 70 - 1024
- */
-void oc_wdt_start(unsigned int timeout);
+/* Starts and reloads the OC watchdog if enabled in Kconfig */
+void setup_oc_wdt(void);
/* Reloads the OC watchdog (if enabled) preserving the current settings. */
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 */
unsigned int oc_wdt_get_current_timeout(void);
diff --git a/src/soc/intel/common/block/oc_wdt/oc_wdt.c b/src/soc/intel/common/block/oc_wdt/oc_wdt.c
index 012621bb90..d0f054a074 100644
--- a/src/soc/intel/common/block/oc_wdt/oc_wdt.c
+++ b/src/soc/intel/common/block/oc_wdt/oc_wdt.c
@@ -22,7 +22,7 @@
*
* 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;
@@ -48,6 +48,12 @@ void oc_wdt_start(unsigned int timeout)
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. */
void oc_wdt_reload(void)
{
@@ -65,7 +71,7 @@ void oc_wdt_reload(void)
}
/* Disables the OC WDT. */
-void oc_wdt_disable(void)
+static void oc_wdt_disable(void)
{
uint32_t oc_wdt_ctrl;
@@ -76,14 +82,22 @@ void oc_wdt_disable(void)
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 */
unsigned int oc_wdt_get_current_timeout(void)
{
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();
+ }
+}