Re: [PATCH] ACPI: scan: Turn off unused power resources during initialization

Paul Menzel
2021-03-17T21:27:16Z

Dear Rafael,

Am 17.03.21 um 17:49 schrieb Rafael J. Wysocki:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>
> It is reported that on certain platforms unused ACPI power resources
> that have not been explicitly turned off prevent the platform from
> reaching the lowest power state in suspend-to-idle which leads to
> excessive power draw.
>
> For this reason, turn all of the unused ACPI power resources off
> at the end of the initial namespace scan for devices in analogy with
> resume from suspend-to-RAM.
>
> Reported-by: David Box <david.e.box@linux.intel.com>

Thank you for the patch. Could you please add more details to the commit
message, saying what device this was on, and if there were some
error/warning messages pointing to the problem?

Kind regards,

Paul

> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> drivers/acpi/internal.h | 1 +
> drivers/acpi/scan.c | 2 ++
> drivers/acpi/sleep.h | 1 -
> 3 files changed, 3 insertions(+), 1 deletion(-)
>
> Index: linux-pm/drivers/acpi/internal.h
> ===================================================================
> --- linux-pm.orig/drivers/acpi/internal.h
> +++ linux-pm/drivers/acpi/internal.h
> @@ -139,6 +139,7 @@ int acpi_device_sleep_wake(struct acpi_d
> int acpi_power_get_inferred_state(struct acpi_device *device, int *state);
> int acpi_power_on_resources(struct acpi_device *device, int state);
> int acpi_power_transition(struct acpi_device *device, int state);
> +void acpi_turn_off_unused_power_resources(void);
>
> /* --------------------------------------------------------------------------
> Device Power Management
> Index: linux-pm/drivers/acpi/scan.c
> ===================================================================
> --- linux-pm.orig/drivers/acpi/scan.c
> +++ linux-pm/drivers/acpi/scan.c
> @@ -2360,6 +2360,8 @@ int __init acpi_scan_init(void)
> }
> }
>
> + acpi_turn_off_unused_power_resources();
> +
> acpi_scan_initialized = true;
>
> out:
> Index: linux-pm/drivers/acpi/sleep.h
> ===================================================================
> --- linux-pm.orig/drivers/acpi/sleep.h
> +++ linux-pm/drivers/acpi/sleep.h
> @@ -8,7 +8,6 @@ extern struct list_head acpi_wakeup_devi
> extern struct mutex acpi_device_lock;
>
> extern void acpi_resume_power_resources(void);
> -extern void acpi_turn_off_unused_power_resources(void);
>
> static inline acpi_status acpi_set_waking_vector(u32 wakeup_address)
> {