ACPI / CPPC: do not require the _PSD method
authorAl Stone <ahs3@redhat.com>
Wed, 28 Aug 2019 00:21:20 +0000 (18:21 -0600)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 28 Aug 2019 09:20:33 +0000 (11:20 +0200)
commit4c4cdc4c63853fee48c02e25c8605fb65a6c9924
tree154a40bdaa74b4122e50ec031a45a38a973aa7a5
parenta55aa89aab90fae7c815b0551b07be37db359d76
ACPI / CPPC: do not require the _PSD method

According to the ACPI 6.3 specification, the _PSD method is optional
when using CPPC.  The underlying assumption is that each CPU can change
frequency independently from all other CPUs; _PSD is provided to tell
the OS that some processors can NOT do that.

However, the acpi_get_psd() function returns ENODEV if there is no _PSD
method present, or an ACPI error status if an error occurs when evaluating
_PSD, if present.  This makes _PSD mandatory when using CPPC, in violation
of the specification, and only on Linux.

This has forced some firmware writers to provide a dummy _PSD, even though
it is irrelevant, but only because Linux requires it; other OSPMs follow
the spec.  We really do not want to have OS specific ACPI tables, though.

So, correct acpi_get_psd() so that it does not return an error if there
is no _PSD method present, but does return a failure when the method can
not be executed properly.  This allows _PSD to be optional as it should
be.

Signed-off-by: Al Stone <ahs3@redhat.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/cppc_acpi.c