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:
		
				
					committed by
					
						 Felix Held
						Felix Held
					
				
			
			
				
	
			
			
			
						parent
						
							c484e831e4
						
					
				
				
					commit
					1728e1bc15
				
			| @@ -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); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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(); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user