Message ID | 3676077.i6vcpp7Nrn@vostro.rjw.lan (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
On Thursday 31 January 2013 23:32:40 Rafael J. Wysocki wrote: > In general, for ACPI device power management to work, the initial > power states of devices must be known (otherwise, we wouldn't be able > to keep track of power resources, for example). Hence, if it is > impossible to determine the initial ACPI power states of some > devices, they can't be regarded as power-manageable using ACPI. > > For this reason, modify acpi_bus_get_power_flags() to clear the > power_manageable flag if acpi_bus_init_power() fails and add some > extra fallback code to acpi_bus_init_power() to cover broken > BIOSes that provide _PS0/_PS3 without _PSC for some devices. > > Verified to work on my HP nx6325 that has this problem. > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Tested-by: Peter Wu <lekensteyn@gmail.com> I applied it on top of branch linux-next of repo linux-pm. Fixes the issue I had with bbswitch in Linux 3.8. Can a backport patch be made available for 3.8? Regards, Peter -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Friday, February 01, 2013 07:23:52 PM Peter Wu wrote: > On Thursday 31 January 2013 23:32:40 Rafael J. Wysocki wrote: > > In general, for ACPI device power management to work, the initial > > power states of devices must be known (otherwise, we wouldn't be able > > to keep track of power resources, for example). Hence, if it is > > impossible to determine the initial ACPI power states of some > > devices, they can't be regarded as power-manageable using ACPI. > > > > For this reason, modify acpi_bus_get_power_flags() to clear the > > power_manageable flag if acpi_bus_init_power() fails and add some > > extra fallback code to acpi_bus_init_power() to cover broken > > BIOSes that provide _PS0/_PS3 without _PSC for some devices. > > > > Verified to work on my HP nx6325 that has this problem. > > > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > Tested-by: Peter Wu <lekensteyn@gmail.com> > > I applied it on top of branch linux-next of repo linux-pm. > > Fixes the issue I had with bbswitch in Linux 3.8. Can a backport patch be made > available for 3.8? Yes, after this commit enters the mainline. Please ping me some time around 3.9-rc1. Thanks, Rafael
On Friday 01 February 2013 22:44:55 Rafael J. Wysocki wrote: > On Friday, February 01, 2013 07:23:52 PM Peter Wu wrote: > > On Thursday 31 January 2013 23:32:40 Rafael J. Wysocki wrote: > > > In general, for ACPI device power management to work, the initial > > > power states of devices must be known (otherwise, we wouldn't be able > > > to keep track of power resources, for example). Hence, if it is > > > impossible to determine the initial ACPI power states of some > > > devices, they can't be regarded as power-manageable using ACPI. > > > > > > > > > > > > For this reason, modify acpi_bus_get_power_flags() to clear the > > > power_manageable flag if acpi_bus_init_power() fails and add some > > > extra fallback code to acpi_bus_init_power() to cover broken > > > BIOSes that provide _PS0/_PS3 without _PSC for some devices. > > > > > > > > > > > > Verified to work on my HP nx6325 that has this problem. > > > > > > > > > > > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > > > > > > > Tested-by: Peter Wu <lekensteyn@gmail.com> > > > > > > > > I applied it on top of branch linux-next of repo linux-pm. > > > > > > > > Fixes the issue I had with bbswitch in Linux 3.8. Can a backport patch be > > made available for 3.8? > > Yes, after this commit enters the mainline. Please ping me some time around > 3.9-rc1. Now that this patch has entered 3.9-rc1, can this be backported to the 3.8 series? commit b3785492268f9f3cdaa9722facb84b266dcf8bf6 Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Date: Fri Feb 1 23:43:02 2013 +0100 Regards, Peter -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Friday 01 February 2013 22:44:55 Rafael J. Wysocki wrote: > On Friday, February 01, 2013 07:23:52 PM Peter Wu wrote: > > On Thursday 31 January 2013 23:32:40 Rafael J. Wysocki wrote: > > > In general, for ACPI device power management to work, the initial > > > power states of devices must be known (otherwise, we wouldn't be able > > > to keep track of power resources, for example). Hence, if it is > > > impossible to determine the initial ACPI power states of some > > > devices, they can't be regarded as power-manageable using ACPI. > > > > > > > > > > > > For this reason, modify acpi_bus_get_power_flags() to clear the > > > power_manageable flag if acpi_bus_init_power() fails and add some > > > extra fallback code to acpi_bus_init_power() to cover broken > > > BIOSes that provide _PS0/_PS3 without _PSC for some devices. > > > > > > > > > > > > Verified to work on my HP nx6325 that has this problem. > > > > > > > > > > > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > > > > > > > Tested-by: Peter Wu <lekensteyn@gmail.com> > > > > > > > > I applied it on top of branch linux-next of repo linux-pm. > > > > > > > > Fixes the issue I had with bbswitch in Linux 3.8. Can a backport patch be > > made available for 3.8? > > Yes, after this commit enters the mainline. Please ping me some time around > 3.9-rc1. This patch does not apply on 3.8.2, any suggestions? Regards, Peter -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Index: linux-pm/drivers/acpi/device_pm.c =================================================================== --- linux-pm.orig/drivers/acpi/device_pm.c +++ linux-pm/drivers/acpi/device_pm.c @@ -330,6 +330,12 @@ int acpi_bus_init_power(struct acpi_devi result = acpi_dev_pm_explicit_set(device, state); if (result) return result; + } else if (state == ACPI_STATE_UNKNOWN) { + /* No power resources and missing _PSC? Try to force D0. */ + state = ACPI_STATE_D0; + result = acpi_dev_pm_explicit_set(device, state); + if (result) + return result; } device->power.state = state; return 0; Index: linux-pm/drivers/acpi/scan.c =================================================================== --- linux-pm.orig/drivers/acpi/scan.c +++ linux-pm/drivers/acpi/scan.c @@ -1175,7 +1175,10 @@ static void acpi_bus_get_power_flags(str device->power.flags.power_resources) device->power.states[ACPI_STATE_D3_COLD].flags.os_accessible = 1; - acpi_bus_init_power(device); + if (acpi_bus_init_power(device)) { + acpi_free_power_resources_lists(device); + device->flags.power_manageable = 0; + } } static void acpi_bus_get_flags(struct acpi_device *device)