Commit e543b10c authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

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
...@@ -30,22 +30,21 @@ following ASL code can be used:: ...@@ -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 ...@@ -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 ...@@ -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:: ...@@ -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:: ...@@ -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) ...@@ -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);
acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_ENTRY,
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, acpi_sleep_run_lps0_dsm(ACPI_LPS0_ENTRY,
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
} else if (acpi_s2idle_vendor_amd()) { /* modern standby entry */
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_OFF_AMD, acpi_sleep_run_lps0_dsm(ACPI_LPS0_MS_ENTRY,
lps0_dsm_func_mask, lps0_dsm_guid); lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
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) ...@@ -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);
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON,
lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft); /* LPS0 exit */
} 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_EXIT_AMD :
acpi_sleep_run_lps0_dsm(ACPI_LPS0_SCREEN_ON_AMD, ACPI_LPS0_EXIT,
lps0_dsm_func_mask, lps0_dsm_guid); lps0_dsm_func_mask, lps0_dsm_guid);
} else { if (lps0_dsm_func_mask_microsoft > 0)
acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT, acpi_sleep_run_lps0_dsm(ACPI_LPS0_EXIT,
lps0_dsm_func_mask, lps0_dsm_guid); 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, lps0_dsm_guid); lps0_dsm_func_mask_microsoft, lps0_dsm_guid_microsoft);
} if (lps0_dsm_func_mask > 0)
acpi_sleep_run_lps0_dsm(acpi_s2idle_vendor_amd() ?
ACPI_LPS0_SCREEN_ON_AMD :
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 = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment