Message ID | 1431610288-26737-3-git-send-email-linux@dominikbrodowski.net (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Rafael Wysocki |
Headers | show |
On Thu, May 14, 2015 at 03:31:26PM +0200, Dominik Brodowski wrote:
> By using a module parameter named acpi.supported_rev=<value>, the BIOS
That should be acpi.rev=<value>. Feel free to edit the commit message
accordingly. Thanks!
Best,
Dominik
On Thursday, May 14, 2015 03:31:26 PM Dominik Brodowski wrote: > By using a module parameter named acpi.supported_rev=<value>, the BIOS > may be told a different supported ACPI revision compared to the default > (which currently is 5, but will be modified to 2 when the revert of > b1ef29725865 is reverted). > > Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net> > --- > Documentation/kernel-parameters.txt | 14 ++++++++++++++ > drivers/acpi/osl.c | 16 ++++++++++++++++ > 2 files changed, 30 insertions(+) > > diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt > index 61ab162..75f1f8e 100644 > --- a/Documentation/kernel-parameters.txt > +++ b/Documentation/kernel-parameters.txt > @@ -335,6 +335,20 @@ bytes respectively. Such letter suffixes can also be entirely omitted. > to assume that this machine's pmtimer latches its value > and always returns good values. > > + acpi.rev= [HW,ACPI] > + Tell ACPI BIOS the supported ACPI REV > + Format: <int> in range 0..5 > + Up to and including Linux v4.1, the BIOS was told which > + ACPI revision the ACPICA subsystem in Linux actually > + supports (which was 5 at the time); from v4.2 on, this > + value will be set statically to 2 to match the behavior > + of other ACPI implementations. As some BIOS may operate > + differently depending on which value _REV is set to, this > + parameter offers the capability to specify what to export > + to the BIOS. Note that such changes in the behavior of > + the BIOS may only be visible after cold booting the > + system with this parameter _twice_. > + > acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode > Format: { level | edge | high | low } > > diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c > index db14a66..caa52f7 100644 > --- a/drivers/acpi/osl.c > +++ b/drivers/acpi/osl.c > @@ -538,6 +538,11 @@ acpi_os_get_physical_address(void *virt, acpi_physical_address * phys) > > static char acpi_os_name[ACPI_MAX_OVERRIDE_LEN]; > > +/* acpi_supported_rev is 0 in case of no override; overrides are limited to > + * values between 1 to 5. To simplify casting, use an unsigned long */ > +static unsigned long acpi_supported_rev; > +module_param_named(rev, acpi_supported_rev, ulong, 0); > + > acpi_status > acpi_os_predefined_override(const struct acpi_predefined_names *init_val, > char **new_val) > @@ -552,6 +557,17 @@ acpi_os_predefined_override(const struct acpi_predefined_names *init_val, > *new_val = acpi_os_name; > } > > + if (!memcmp(init_val->name, "_REV", 4) && (acpi_supported_rev > 0)) { > + if (acpi_supported_rev <= 5) { So the only value that would really make sense here is 5. 1 should never ever be used with Linux, 2 is the default, 3 is equivalent to 5 for all practical purposes and 4 has never been used in practice, so it is meaningless. I'd be better to rename the command line switch to acpi.rev_override and simply do "acpi_supported_rev = 5" for it as well as in acpi_set_supported_rev() in [3/4]. > + printk(KERN_INFO PREFIX > + "Overriding _REV definition to %lu\n", > + acpi_supported_rev); > + *new_val = (char *) acpi_supported_rev; > + } else > + printk(KERN_INFO PREFIX > + "_REV override must be between 1 to 5"); > + } > + > return AE_OK; > } 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/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 61ab162..75f1f8e 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -335,6 +335,20 @@ bytes respectively. Such letter suffixes can also be entirely omitted. to assume that this machine's pmtimer latches its value and always returns good values. + acpi.rev= [HW,ACPI] + Tell ACPI BIOS the supported ACPI REV + Format: <int> in range 0..5 + Up to and including Linux v4.1, the BIOS was told which + ACPI revision the ACPICA subsystem in Linux actually + supports (which was 5 at the time); from v4.2 on, this + value will be set statically to 2 to match the behavior + of other ACPI implementations. As some BIOS may operate + differently depending on which value _REV is set to, this + parameter offers the capability to specify what to export + to the BIOS. Note that such changes in the behavior of + the BIOS may only be visible after cold booting the + system with this parameter _twice_. + acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode Format: { level | edge | high | low } diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index db14a66..caa52f7 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@ -538,6 +538,11 @@ acpi_os_get_physical_address(void *virt, acpi_physical_address * phys) static char acpi_os_name[ACPI_MAX_OVERRIDE_LEN]; +/* acpi_supported_rev is 0 in case of no override; overrides are limited to + * values between 1 to 5. To simplify casting, use an unsigned long */ +static unsigned long acpi_supported_rev; +module_param_named(rev, acpi_supported_rev, ulong, 0); + acpi_status acpi_os_predefined_override(const struct acpi_predefined_names *init_val, char **new_val) @@ -552,6 +557,17 @@ acpi_os_predefined_override(const struct acpi_predefined_names *init_val, *new_val = acpi_os_name; } + if (!memcmp(init_val->name, "_REV", 4) && (acpi_supported_rev > 0)) { + if (acpi_supported_rev <= 5) { + printk(KERN_INFO PREFIX + "Overriding _REV definition to %lu\n", + acpi_supported_rev); + *new_val = (char *) acpi_supported_rev; + } else + printk(KERN_INFO PREFIX + "_REV override must be between 1 to 5"); + } + return AE_OK; }
By using a module parameter named acpi.supported_rev=<value>, the BIOS may be told a different supported ACPI revision compared to the default (which currently is 5, but will be modified to 2 when the revert of b1ef29725865 is reverted). Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net> --- Documentation/kernel-parameters.txt | 14 ++++++++++++++ drivers/acpi/osl.c | 16 ++++++++++++++++ 2 files changed, 30 insertions(+)