Commit 1bcc6897 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull ACPI fixes from Rafael Wysocki:
 "These add an ACPI IRQ override quirk for ASUS ExpertBook B1402CVA and
  fix an ACPI processor idle issue leading to triple-faults in Xen HVM
  guests and an ACPI backlight driver issue that causes GPUs to
  misbehave while their children power is being fixed up.

  Specifics:

   - Avoid powering up GPUs while attempting to fix up power for their
     children (Hans de Goede)

   - Use raw_safe_halt() instead of safe_halt() in acpi_idle_play_dead()
     so as to avoid triple-falts during CPU online in Xen HVM guests due
     to the setting of the hardirqs_enabled flag in safe_halt() (David
     Woodhouse)

   - Add an ACPI IRQ override quirk for ASUS ExpertBook B1402CVA (Hans
     de Goede)"

* tag 'acpi-6.7-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  ACPI: resource: Skip IRQ override on ASUS ExpertBook B1402CVA
  ACPI: video: Use acpi_device_fix_up_power_children()
  ACPI: PM: Add acpi_device_fix_up_power_children() function
  ACPI: processor_idle: use raw_safe_halt() in acpi_idle_play_dead()
parents b345fd55 e3747062
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2031,7 +2031,7 @@ static int acpi_video_bus_add(struct acpi_device *device)
	 * HP ZBook Fury 16 G10 requires ACPI video's child devices have _PS0
	 * evaluated to have functional panel brightness control.
	 */
	acpi_device_fix_up_power_extended(device);
	acpi_device_fix_up_power_children(device);

	pr_info("%s [%s] (multi-head: %s  rom: %s  post: %s)\n",
	       ACPI_VIDEO_DEVICE_NAME, acpi_device_bid(device),
+13 −0
Original line number Diff line number Diff line
@@ -397,6 +397,19 @@ void acpi_device_fix_up_power_extended(struct acpi_device *adev)
}
EXPORT_SYMBOL_GPL(acpi_device_fix_up_power_extended);

/**
 * acpi_device_fix_up_power_children - Force a device's children into D0.
 * @adev: Parent device object whose children's power state is to be fixed up.
 *
 * Call acpi_device_fix_up_power() for @adev's children so long as they
 * are reported as present and enabled.
 */
void acpi_device_fix_up_power_children(struct acpi_device *adev)
{
	acpi_dev_for_each_child(adev, fix_up_power_if_applicable, NULL);
}
EXPORT_SYMBOL_GPL(acpi_device_fix_up_power_children);

int acpi_device_update_power(struct acpi_device *device, int *state_p)
{
	int state;
+1 −1
Original line number Diff line number Diff line
@@ -592,7 +592,7 @@ static int acpi_idle_play_dead(struct cpuidle_device *dev, int index)
	while (1) {

		if (cx->entry_method == ACPI_CSTATE_HALT)
			safe_halt();
			raw_safe_halt();
		else if (cx->entry_method == ACPI_CSTATE_SYSTEMIO) {
			io_idle(cx->address);
		} else
+7 −0
Original line number Diff line number Diff line
@@ -447,6 +447,13 @@ static const struct dmi_system_id irq1_level_low_skip_override[] = {
			DMI_MATCH(DMI_BOARD_NAME, "B1402CBA"),
		},
	},
	{
		/* Asus ExpertBook B1402CVA */
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
			DMI_MATCH(DMI_BOARD_NAME, "B1402CVA"),
		},
	},
	{
		/* Asus ExpertBook B1502CBA */
		.matches = {
+1 −0
Original line number Diff line number Diff line
@@ -542,6 +542,7 @@ int acpi_device_set_power(struct acpi_device *device, int state);
int acpi_bus_init_power(struct acpi_device *device);
int acpi_device_fix_up_power(struct acpi_device *device);
void acpi_device_fix_up_power_extended(struct acpi_device *adev);
void acpi_device_fix_up_power_children(struct acpi_device *adev);
int acpi_bus_update_power(acpi_handle handle, int *state_p);
int acpi_device_update_power(struct acpi_device *device, int *state_p);
bool acpi_bus_power_manageable(acpi_handle handle);