Message ID | 1449649050.2175.59.camel@kxue-X58A-UD3R (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Rafael Wysocki |
Headers | show |
On Wednesday, December 09, 2015 04:17:30 PM Ken Xue wrote: > D3cold is only regarded as valid if the "_PR3" object is > present for the given device after the commit 20dacb71ad28 > ("ACPI/PM: Rework device power management to follow ACPI 6"). > > But some old BIOS only defined "_PS3" for the D3COLD device, > such as ZPODD device. And old kernel also believes the device with > "_PS3" is a D3COLD device. > > So, add some logics for supporting D3 COLD device with old BIOS > which is compatible with earlier ACPI spec and kernel behavior. > > Reference: > http://marc.info/?l=linux-acpi&m=144946938709759&w=2 > > Signed-off-by: Ken Xue <Ken.Xue@amd.com> > Reported-and-tested-by: Gang Long <Gang.Long@amd.com> > --- > include/acpi/acpi_bus.h | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h > index ad0a5ff..9894b75 100644 > --- a/include/acpi/acpi_bus.h > +++ b/include/acpi/acpi_bus.h > @@ -631,7 +631,9 @@ static inline bool acpi_device_can_wakeup(struct acpi_device *adev) > > static inline bool acpi_device_can_poweroff(struct acpi_device *adev) > { > - return adev->power.states[ACPI_STATE_D3_COLD].flags.valid; > + return adev->power.states[ACPI_STATE_D3_COLD].flags.valid || > + ((acpi_gbl_FADT.header.revision < 6) && > + adev->power.states[ACPI_STATE_D3_HOT].flags.explicit_set); > } > > #else /* CONFIG_ACPI */ This is fine by me, but _PS3 is allowed to remove power from the device even by ACPI 6. Queued up for 4.5, thanks! Rafael -- 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
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index ad0a5ff..9894b75 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h @@ -631,7 +631,9 @@ static inline bool acpi_device_can_wakeup(struct acpi_device *adev) static inline bool acpi_device_can_poweroff(struct acpi_device *adev) { - return adev->power.states[ACPI_STATE_D3_COLD].flags.valid; + return adev->power.states[ACPI_STATE_D3_COLD].flags.valid || + ((acpi_gbl_FADT.header.revision < 6) && + adev->power.states[ACPI_STATE_D3_HOT].flags.explicit_set); } #else /* CONFIG_ACPI */
D3cold is only regarded as valid if the "_PR3" object is present for the given device after the commit 20dacb71ad28 ("ACPI/PM: Rework device power management to follow ACPI 6"). But some old BIOS only defined "_PS3" for the D3COLD device, such as ZPODD device. And old kernel also believes the device with "_PS3" is a D3COLD device. So, add some logics for supporting D3 COLD device with old BIOS which is compatible with earlier ACPI spec and kernel behavior. Reference: http://marc.info/?l=linux-acpi&m=144946938709759&w=2 Signed-off-by: Ken Xue <Ken.Xue@amd.com> Reported-and-tested-by: Gang Long <Gang.Long@amd.com> --- include/acpi/acpi_bus.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)