soc/intel/apollolake: Implement global reset handling
Global reset enable bit is not cleared on reset. Therefore, clear the bit early. Lock down 0xcf9 so that payload/OS can't issue global reset. BUG=chrome-os-partner:54149 BRANCH=none TEST=none Change-Id: I3ddf6dd82429b725c818bcd96e163d2ca0acd308 Signed-off-by: Andrey Petrov <andrey.petrov@intel.com> Reviewed-on: https://review.coreboot.org/15199 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Tested-by: build bot (Jenkins)
This commit is contained in:
		
				
					committed by
					
						 Martin Roth
						Martin Roth
					
				
			
			
				
	
			
			
			
						parent
						
							33fd66b463
						
					
				
				
					commit
					3dbea29ee6
				
			| @@ -15,6 +15,7 @@ bootblock-y += car.c | |||||||
| bootblock-y += gpio.c | bootblock-y += gpio.c | ||||||
| bootblock-y += lpc_lib.c | bootblock-y += lpc_lib.c | ||||||
| bootblock-y += mmap_boot.c | bootblock-y += mmap_boot.c | ||||||
|  | bootblock-y += pmutil.c | ||||||
| bootblock-y += spi.c | bootblock-y += spi.c | ||||||
| bootblock-y += tsc_freq.c | bootblock-y += tsc_freq.c | ||||||
| bootblock-$(CONFIG_SOC_UART_DEBUG) += uart_early.c | bootblock-$(CONFIG_SOC_UART_DEBUG) += uart_early.c | ||||||
|   | |||||||
| @@ -25,6 +25,7 @@ | |||||||
| #include <soc/mmap_boot.h> | #include <soc/mmap_boot.h> | ||||||
| #include <soc/northbridge.h> | #include <soc/northbridge.h> | ||||||
| #include <soc/pci_devs.h> | #include <soc/pci_devs.h> | ||||||
|  | #include <soc/pm.h> | ||||||
| #include <soc/uart.h> | #include <soc/uart.h> | ||||||
| #include <spi-generic.h> | #include <spi-generic.h> | ||||||
| #include <timestamp.h> | #include <timestamp.h> | ||||||
| @@ -153,6 +154,9 @@ void bootblock_soc_early_init(void) | |||||||
| { | { | ||||||
| 	enable_pmcbar(); | 	enable_pmcbar(); | ||||||
|  |  | ||||||
|  | 	/* Clear global reset promotion bit */ | ||||||
|  | 	global_reset_enable(0); | ||||||
|  |  | ||||||
| 	/* Prepare UART for serial console. */ | 	/* Prepare UART for serial console. */ | ||||||
| 	if (IS_ENABLED(CONFIG_SOC_UART_DEBUG)) | 	if (IS_ENABLED(CONFIG_SOC_UART_DEBUG)) | ||||||
| 		soc_console_uart_init(); | 		soc_console_uart_init(); | ||||||
|   | |||||||
| @@ -32,6 +32,7 @@ | |||||||
| #include <soc/nvs.h> | #include <soc/nvs.h> | ||||||
| #include <soc/pci_devs.h> | #include <soc/pci_devs.h> | ||||||
| #include <spi-generic.h> | #include <spi-generic.h> | ||||||
|  | #include <soc/pm.h> | ||||||
|  |  | ||||||
| #include "chip.h" | #include "chip.h" | ||||||
|  |  | ||||||
| @@ -93,6 +94,11 @@ static void soc_final(void *data) | |||||||
| { | { | ||||||
| 	if (vbt) | 	if (vbt) | ||||||
| 		rdev_munmap(&vbt_rdev, vbt); | 		rdev_munmap(&vbt_rdev, vbt); | ||||||
|  |  | ||||||
|  | 	/* Disable global reset, just in case */ | ||||||
|  | 	global_reset_enable(0); | ||||||
|  | 	/* Make sure payload/OS can't trigger global reset */ | ||||||
|  | 	global_reset_lock(); | ||||||
| } | } | ||||||
|  |  | ||||||
| void platform_fsp_silicon_init_params_cb(struct FSPS_UPD *silupd) | void platform_fsp_silicon_init_params_cb(struct FSPS_UPD *silupd) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user