soc/intel/common: Check prerequisites for GLOBAL_RESET command
Check prerequisites before sending GLOBAL RESET command to CSE. TEST=Verified on hatch. Change-Id: Ia583e4033f15ec20e942202fa78e7884cf370ce4 Signed-off-by: Sridhar Siricilla <sridhar.siricilla@intel.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/38800 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
		
				
					committed by
					
						
						Patrick Georgi
					
				
			
			
				
	
			
			
			
						parent
						
							d16187ed2a
						
					
				
				
					commit
					59c7cb7d37
				
			@@ -608,6 +608,28 @@ uint32_t me_read_config32(int offset)
 | 
				
			|||||||
	return pci_read_config32(PCH_DEV_CSE, offset);
 | 
						return pci_read_config32(PCH_DEV_CSE, offset);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static bool cse_is_global_reset_allowed(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Allow sending GLOBAL_RESET command only if:
 | 
				
			||||||
 | 
						 *  - CSE's current working state is Normal and current operation mode is Normal.
 | 
				
			||||||
 | 
						 *  - (or) CSE's current working state is normal and current operation mode can
 | 
				
			||||||
 | 
						 *    be Soft Temp Disable or Security Override Mode if CSE's Firmware SKU is
 | 
				
			||||||
 | 
						 *    Custom.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						if (!cse_is_hfs1_cws_normal())
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (cse_is_hfs1_com_normal())
 | 
				
			||||||
 | 
							return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (cse_is_hfs3_fw_sku_custom()) {
 | 
				
			||||||
 | 
							if (cse_is_hfs1_com_soft_temp_disable() || cse_is_hfs1_com_secover_mei_msg())
 | 
				
			||||||
 | 
								return true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Sends GLOBAL_RESET_REQ cmd to CSE.The reset type can be GLOBAL_RESET/CSE_RESET_ONLY.
 | 
					 * Sends GLOBAL_RESET_REQ cmd to CSE.The reset type can be GLOBAL_RESET/CSE_RESET_ONLY.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -631,11 +653,17 @@ int cse_request_global_reset(enum rst_req_type rst_type)
 | 
				
			|||||||
	size_t reply_size;
 | 
						size_t reply_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printk(BIOS_DEBUG, "HECI: Global Reset(Type:%d) Command\n", rst_type);
 | 
						printk(BIOS_DEBUG, "HECI: Global Reset(Type:%d) Command\n", rst_type);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!(rst_type == GLOBAL_RESET || rst_type == CSE_RESET_ONLY)) {
 | 
						if (!(rst_type == GLOBAL_RESET || rst_type == CSE_RESET_ONLY)) {
 | 
				
			||||||
		printk(BIOS_ERR, "HECI: Unsupported reset type is requested\n");
 | 
							printk(BIOS_ERR, "HECI: Unsupported reset type is requested\n");
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!cse_is_global_reset_allowed()) {
 | 
				
			||||||
 | 
							printk(BIOS_ERR, "HECI: CSE does not meet required prerequisites\n");
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	heci_reset();
 | 
						heci_reset();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	reply_size = sizeof(reply);
 | 
						reply_size = sizeof(reply);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user