mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	ACPI: PM: s2idle: Enable Low-Power S0 Idle MSFT UUID for non-AMD systems
Systems based on Intel platforms that use the MSFT UUID for Low-Power S0 Idle (LPS0) have started to ship, so allow the kernel to use the MSFT UUID in the non-AMD case too, but in that case make it avoid evaluating the same _DSM function for two different UUIDs and prioritize the MSFT one. While at it, combine two MSFT _DSM function mask checks in acpi_s2idle_restore_early() so as to make it reflect the acpi_s2idle_prepare_late() flow more closely and adjust the Modern Standby entry and exit comments slightly. Non-AMD systems that do not support MSFT UUID for Low-power S0 Idle are not expected to be affected by this change in any way. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
This commit is contained in:
		
							parent
							
								
									841c351693
								
							
						
					
					
						commit
						073237281a
					
				
					 1 changed files with 27 additions and 10 deletions
				
			
		|  | @ -488,7 +488,21 @@ static int lps0_device_attach(struct acpi_device *adev, | |||
| 		rev_id = 1; | ||||
| 		lps0_dsm_func_mask = validate_dsm(adev->handle, | ||||
| 					ACPI_LPS0_DSM_UUID, rev_id, &lps0_dsm_guid); | ||||
| 		lps0_dsm_func_mask_microsoft = -EINVAL; | ||||
| 		if (lps0_dsm_func_mask > 0 && lps0_dsm_func_mask_microsoft > 0) { | ||||
| 			unsigned int func_mask; | ||||
| 
 | ||||
| 			/*
 | ||||
| 			 * Avoid evaluating the same _DSM function for two | ||||
| 			 * different UUIDs and prioritize the MSFT one. | ||||
| 			 */ | ||||
| 			func_mask = lps0_dsm_func_mask & lps0_dsm_func_mask_microsoft; | ||||
| 			if (func_mask) { | ||||
| 				acpi_handle_info(adev->handle, | ||||
| 						 "Duplicate LPS0 _DSM functions (mask: 0x%x)\n", | ||||
| 						 func_mask); | ||||
| 				lps0_dsm_func_mask &= ~func_mask; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if (lps0_dsm_func_mask < 0 && lps0_dsm_func_mask_microsoft < 0) | ||||
|  | @ -549,19 +563,22 @@ int acpi_s2idle_prepare_late(void) | |||
| 				lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); | ||||
| 
 | ||||
| 	/* LPS0 entry */ | ||||
| 	if (lps0_dsm_func_mask > 0) | ||||
| 		acpi_sleep_run_lps0_dsm(acpi_s2idle_vendor_amd() ? | ||||
| 					ACPI_LPS0_ENTRY_AMD : | ||||
| 					ACPI_LPS0_ENTRY, | ||||
| 	if (lps0_dsm_func_mask > 0 && acpi_s2idle_vendor_amd()) | ||||
| 		acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY_AMD, | ||||
| 					lps0_dsm_func_mask, lps0_dsm_guid); | ||||
| 
 | ||||
| 	if (lps0_dsm_func_mask_microsoft > 0) { | ||||
| 		/* modern standby entry */ | ||||
| 		/* Modern Standby entry */ | ||||
| 		acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_ENTRY, | ||||
| 				lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); | ||||
| 		acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY, | ||||
| 				lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); | ||||
| 	} | ||||
| 
 | ||||
| 	if (lps0_dsm_func_mask > 0 && !acpi_s2idle_vendor_amd()) | ||||
| 		acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY, | ||||
| 					lps0_dsm_func_mask, lps0_dsm_guid); | ||||
| 
 | ||||
| 	list_for_each_entry(handler, &lps0_s2idle_devops_head, list_node) { | ||||
| 		if (handler->prepare) | ||||
| 			handler->prepare(); | ||||
|  | @ -600,14 +617,14 @@ void acpi_s2idle_restore_early(void) | |||
| 					ACPI_LPS0_EXIT_AMD : | ||||
| 					ACPI_LPS0_EXIT, | ||||
| 					lps0_dsm_func_mask, lps0_dsm_guid); | ||||
| 	if (lps0_dsm_func_mask_microsoft > 0) | ||||
| 
 | ||||
| 	if (lps0_dsm_func_mask_microsoft > 0) { | ||||
| 		acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT, | ||||
| 				lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); | ||||
| 
 | ||||
| 	/* Modern standby exit */ | ||||
| 	if (lps0_dsm_func_mask_microsoft > 0) | ||||
| 		/* Modern Standby exit */ | ||||
| 		acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_EXIT, | ||||
| 				lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); | ||||
| 	} | ||||
| 
 | ||||
| 	/* Screen on */ | ||||
| 	if (lps0_dsm_func_mask_microsoft > 0) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Rafael J. Wysocki
						Rafael J. Wysocki