mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-24 09:13:20 -05:00
Merge branches 'acpi-pm' and 'acpi-docs'
* acpi-pm: ACPI: PM: s2idle: Run both AMD and Microsoft methods if both are supported * acpi-docs: Documentation: ACPI: Align the SSDT overlays file with the code
This commit is contained in:
commit
e543b10cd9
2 changed files with 64 additions and 52 deletions
|
@ -30,22 +30,21 @@ following ASL code can be used::
|
||||||
{
|
{
|
||||||
Device (STAC)
|
Device (STAC)
|
||||||
{
|
{
|
||||||
Name (_ADR, Zero)
|
|
||||||
Name (_HID, "BMA222E")
|
Name (_HID, "BMA222E")
|
||||||
|
Name (RBUF, ResourceTemplate ()
|
||||||
|
{
|
||||||
|
I2cSerialBus (0x0018, ControllerInitiated, 0x00061A80,
|
||||||
|
AddressingMode7Bit, "\\_SB.I2C6", 0x00,
|
||||||
|
ResourceConsumer, ,)
|
||||||
|
GpioInt (Edge, ActiveHigh, Exclusive, PullDown, 0x0000,
|
||||||
|
"\\_SB.GPO2", 0x00, ResourceConsumer, , )
|
||||||
|
{ // Pin list
|
||||||
|
0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
Method (_CRS, 0, Serialized)
|
Method (_CRS, 0, Serialized)
|
||||||
{
|
{
|
||||||
Name (RBUF, ResourceTemplate ()
|
|
||||||
{
|
|
||||||
I2cSerialBus (0x0018, ControllerInitiated, 0x00061A80,
|
|
||||||
AddressingMode7Bit, "\\_SB.I2C6", 0x00,
|
|
||||||
ResourceConsumer, ,)
|
|
||||||
GpioInt (Edge, ActiveHigh, Exclusive, PullDown, 0x0000,
|
|
||||||
"\\_SB.GPO2", 0x00, ResourceConsumer, , )
|
|
||||||
{ // Pin list
|
|
||||||
0
|
|
||||||
}
|
|
||||||
})
|
|
||||||
Return (RBUF)
|
Return (RBUF)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -75,7 +74,7 @@ This option allows loading of user defined SSDTs from initrd and it is useful
|
||||||
when the system does not support EFI or when there is not enough EFI storage.
|
when the system does not support EFI or when there is not enough EFI storage.
|
||||||
|
|
||||||
It works in a similar way with initrd based ACPI tables override/upgrade: SSDT
|
It works in a similar way with initrd based ACPI tables override/upgrade: SSDT
|
||||||
aml code must be placed in the first, uncompressed, initrd under the
|
AML code must be placed in the first, uncompressed, initrd under the
|
||||||
"kernel/firmware/acpi" path. Multiple files can be used and this will translate
|
"kernel/firmware/acpi" path. Multiple files can be used and this will translate
|
||||||
in loading multiple tables. Only SSDT and OEM tables are allowed. See
|
in loading multiple tables. Only SSDT and OEM tables are allowed. See
|
||||||
initrd_table_override.txt for more details.
|
initrd_table_override.txt for more details.
|
||||||
|
@ -103,12 +102,14 @@ This is the preferred method, when EFI is supported on the platform, because it
|
||||||
allows a persistent, OS independent way of storing the user defined SSDTs. There
|
allows a persistent, OS independent way of storing the user defined SSDTs. There
|
||||||
is also work underway to implement EFI support for loading user defined SSDTs
|
is also work underway to implement EFI support for loading user defined SSDTs
|
||||||
and using this method will make it easier to convert to the EFI loading
|
and using this method will make it easier to convert to the EFI loading
|
||||||
mechanism when that will arrive.
|
mechanism when that will arrive. To enable it, the
|
||||||
|
CONFIG_EFI_CUSTOM_SSDT_OVERLAYS shoyld be chosen to y.
|
||||||
|
|
||||||
In order to load SSDTs from an EFI variable the efivar_ssdt kernel command line
|
In order to load SSDTs from an EFI variable the ``"efivar_ssdt=..."`` kernel
|
||||||
parameter can be used. The argument for the option is the variable name to
|
command line parameter can be used (the name has a limitation of 16 characters).
|
||||||
use. If there are multiple variables with the same name but with different
|
The argument for the option is the variable name to use. If there are multiple
|
||||||
vendor GUIDs, all of them will be loaded.
|
variables with the same name but with different vendor GUIDs, all of them will
|
||||||
|
be loaded.
|
||||||
|
|
||||||
In order to store the AML code in an EFI variable the efivarfs filesystem can be
|
In order to store the AML code in an EFI variable the efivarfs filesystem can be
|
||||||
used. It is enabled and mounted by default in /sys/firmware/efi/efivars in all
|
used. It is enabled and mounted by default in /sys/firmware/efi/efivars in all
|
||||||
|
@ -127,7 +128,7 @@ variable with the content from a given file::
|
||||||
|
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
|
|
||||||
while ! [ -z "$1" ]; do
|
while [ -n "$1" ]; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
"-f") filename="$2"; shift;;
|
"-f") filename="$2"; shift;;
|
||||||
"-g") guid="$2"; shift;;
|
"-g") guid="$2"; shift;;
|
||||||
|
@ -167,14 +168,14 @@ variable with the content from a given file::
|
||||||
Loading ACPI SSDTs from configfs
|
Loading ACPI SSDTs from configfs
|
||||||
================================
|
================================
|
||||||
|
|
||||||
This option allows loading of user defined SSDTs from userspace via the configfs
|
This option allows loading of user defined SSDTs from user space via the configfs
|
||||||
interface. The CONFIG_ACPI_CONFIGFS option must be select and configfs must be
|
interface. The CONFIG_ACPI_CONFIGFS option must be select and configfs must be
|
||||||
mounted. In the following examples, we assume that configfs has been mounted in
|
mounted. In the following examples, we assume that configfs has been mounted in
|
||||||
/config.
|
/sys/kernel/config.
|
||||||
|
|
||||||
New tables can be loading by creating new directories in /config/acpi/table/ and
|
New tables can be loading by creating new directories in /sys/kernel/config/acpi/table
|
||||||
writing the SSDT aml code in the aml attribute::
|
and writing the SSDT AML code in the aml attribute::
|
||||||
|
|
||||||
cd /config/acpi/table
|
cd /sys/kernel/config/acpi/table
|
||||||
mkdir my_ssdt
|
mkdir my_ssdt
|
||||||
cat ~/ssdt.aml > my_ssdt/aml
|
cat ~/ssdt.aml > my_ssdt/aml
|
||||||
|
|
|
@ -449,25 +449,30 @@ int acpi_s2idle_prepare_late(void)
|
||||||
if (pm_debug_messages_on)
|
if (pm_debug_messages_on)
|
||||||
lpi_check_constraints();
|
lpi_check_constraints();
|
||||||
|
|
||||||
if (lps0_dsm_func_mask_microsoft > 0) {
|
/* Screen off */
|
||||||
|
if (lps0_dsm_func_mask > 0)
|
||||||
|
acpi_sleep_run_lps0_dsm(acpi_s2idle_vendor_amd() ?
|
||||||
|
ACPI_LPS0_SCREEN_OFF_AMD :
|
||||||
|
ACPI_LPS0_SCREEN_OFF,
|
||||||
|
lps0_dsm_func_mask, lps0_dsm_guid);
|
||||||
|
|
||||||
|
if (lps0_dsm_func_mask_microsoft > 0)
|
||||||
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF,
|
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF,
|
||||||
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
|
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
|
||||||
|
|
||||||
|
/* LPS0 entry */
|
||||||
|
if (lps0_dsm_func_mask > 0)
|
||||||
|
acpi_sleep_run_lps0_dsm(acpi_s2idle_vendor_amd() ?
|
||||||
|
ACPI_LPS0_ENTRY_AMD :
|
||||||
|
ACPI_LPS0_ENTRY,
|
||||||
|
lps0_dsm_func_mask, lps0_dsm_guid);
|
||||||
|
if (lps0_dsm_func_mask_microsoft > 0) {
|
||||||
|
acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY,
|
||||||
|
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
|
||||||
|
/* modern standby entry */
|
||||||
acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_ENTRY,
|
acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_ENTRY,
|
||||||
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
|
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
|
||||||
acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY,
|
|
||||||
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
|
|
||||||
} else if (acpi_s2idle_vendor_amd()) {
|
|
||||||
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF_AMD,
|
|
||||||
lps0_dsm_func_mask, lps0_dsm_guid);
|
|
||||||
acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY_AMD,
|
|
||||||
lps0_dsm_func_mask, lps0_dsm_guid);
|
|
||||||
} else {
|
|
||||||
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF,
|
|
||||||
lps0_dsm_func_mask, lps0_dsm_guid);
|
|
||||||
acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY,
|
|
||||||
lps0_dsm_func_mask, lps0_dsm_guid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -476,24 +481,30 @@ void acpi_s2idle_restore_early(void)
|
||||||
if (!lps0_device_handle || sleep_no_lps0)
|
if (!lps0_device_handle || sleep_no_lps0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (lps0_dsm_func_mask_microsoft > 0) {
|
/* Modern standby exit */
|
||||||
acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT,
|
if (lps0_dsm_func_mask_microsoft > 0)
|
||||||
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
|
|
||||||
acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_EXIT,
|
acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_EXIT,
|
||||||
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
|
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
|
||||||
|
|
||||||
|
/* LPS0 exit */
|
||||||
|
if (lps0_dsm_func_mask > 0)
|
||||||
|
acpi_sleep_run_lps0_dsm(acpi_s2idle_vendor_amd() ?
|
||||||
|
ACPI_LPS0_EXIT_AMD :
|
||||||
|
ACPI_LPS0_EXIT,
|
||||||
|
lps0_dsm_func_mask, lps0_dsm_guid);
|
||||||
|
if (lps0_dsm_func_mask_microsoft > 0)
|
||||||
|
acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT,
|
||||||
|
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
|
||||||
|
|
||||||
|
/* Screen on */
|
||||||
|
if (lps0_dsm_func_mask_microsoft > 0)
|
||||||
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON,
|
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON,
|
||||||
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
|
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
|
||||||
} else if (acpi_s2idle_vendor_amd()) {
|
if (lps0_dsm_func_mask > 0)
|
||||||
acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT_AMD,
|
acpi_sleep_run_lps0_dsm(acpi_s2idle_vendor_amd() ?
|
||||||
lps0_dsm_func_mask, lps0_dsm_guid);
|
ACPI_LPS0_SCREEN_ON_AMD :
|
||||||
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON_AMD,
|
ACPI_LPS0_SCREEN_ON,
|
||||||
lps0_dsm_func_mask, lps0_dsm_guid);
|
lps0_dsm_func_mask, lps0_dsm_guid);
|
||||||
} else {
|
|
||||||
acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT,
|
|
||||||
lps0_dsm_func_mask, lps0_dsm_guid);
|
|
||||||
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON,
|
|
||||||
lps0_dsm_func_mask, lps0_dsm_guid);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct platform_s2idle_ops acpi_s2idle_ops_lps0 = {
|
static const struct platform_s2idle_ops acpi_s2idle_ops_lps0 = {
|
||||||
|
|
Loading…
Add table
Reference in a new issue