soc/amd/common/pi: Ensure AGESA S3 resume called before SMM lock
AGESA S3 restore needs to occur before SMM finalization/locking, but it's a crapshoot as to which runs first since both use the same BS_OS_RESUME/BS_ON_ENTRY boot state callback, and there's no way to prioritize/force ordering. To work around this, move the AGESA S3 resume call to the preceding boot state (BS_OS_RESUME_CHECK) to ensure it runs first, and guard it to ensure it only runs on the S3 resume path. BUG=none TEST=build/boot google/liara, verify S3 resume successful. Change-Id: I765db140c6708a0b129f79fb7d3dc8a4ab3095bd Signed-off-by: Matt DeVillier <matt.devillier@amd.corp-partner.google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/76592 Reviewed-by: Fred Reitberger <reitbergerfred@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Marshall Dawson <marshalldawson3rd@gmail.com>
This commit is contained in:
		
				
					committed by
					
						 Felix Held
						Felix Held
					
				
			
			
				
	
			
			
			
						parent
						
							cecb7a75b8
						
					
				
				
					commit
					0a96a1ca06
				
			| @@ -1,12 +1,14 @@ | |||||||
| /* SPDX-License-Identifier: GPL-2.0-only */ | /* SPDX-License-Identifier: GPL-2.0-only */ | ||||||
|  |  | ||||||
|  | #include <acpi/acpi.h> | ||||||
| #include <bootstate.h> | #include <bootstate.h> | ||||||
| #include <amdblocks/agesawrapper_call.h> | #include <amdblocks/agesawrapper_call.h> | ||||||
|  |  | ||||||
| static void agesawrapper_s3finalrestore(void *unused) | static void agesawrapper_s3finalrestore(void *unused) | ||||||
| { | { | ||||||
| 	do_agesawrapper(AMD_S3FINAL_RESTORE, "amds3finalrestore"); | 	/* Needed since running on BS_OS_RESUME_CHECK to ensure execution before SMM lock */ | ||||||
|  | 	if (acpi_is_wakeup_s3()) | ||||||
|  | 		do_agesawrapper(AMD_S3FINAL_RESTORE, "amds3finalrestore"); | ||||||
| } | } | ||||||
|  |  | ||||||
| BOOT_STATE_INIT_ENTRY(BS_OS_RESUME, BS_ON_ENTRY, | BOOT_STATE_INIT_ENTRY(BS_OS_RESUME_CHECK, BS_ON_EXIT, agesawrapper_s3finalrestore, NULL); | ||||||
| 			agesawrapper_s3finalrestore, NULL); |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user