diff options
-rw-r--r-- | src/acpi/acpi.c | 9 | ||||
-rw-r--r-- | src/acpi/acpi_pm.c | 19 | ||||
-rw-r--r-- | src/include/acpi/acpi.h | 2 |
3 files changed, 22 insertions, 8 deletions
diff --git a/src/acpi/acpi.c b/src/acpi/acpi.c index 5fb2422cdb..abc6e01b0a 100644 --- a/src/acpi/acpi.c +++ b/src/acpi/acpi.c @@ -1251,14 +1251,7 @@ void acpi_create_fadt(acpi_fadt_t *fadt, acpi_facs_t *facs, void *dsdt) /* should be 0 ACPI 3.0 */ fadt->reserved = 0; - if (CONFIG(SYSTEM_TYPE_CONVERTIBLE) || - CONFIG(SYSTEM_TYPE_LAPTOP)) - fadt->preferred_pm_profile = PM_MOBILE; - else if (CONFIG(SYSTEM_TYPE_DETACHABLE) || - CONFIG(SYSTEM_TYPE_TABLET)) - fadt->preferred_pm_profile = PM_TABLET; - else - fadt->preferred_pm_profile = PM_DESKTOP; + fadt->preferred_pm_profile = acpi_get_preferred_pm_profile(); arch_fill_fadt(fadt); diff --git a/src/acpi/acpi_pm.c b/src/acpi/acpi_pm.c index cecf878910..540b6d2bee 100644 --- a/src/acpi/acpi_pm.c +++ b/src/acpi/acpi_pm.c @@ -3,6 +3,7 @@ #include <acpi/acpi.h> #include <console/console.h> #include <romstage_handoff.h> +#include <smbios.h> /* This is filled with acpi_handoff_wakeup_s3() call early in ramstage. */ static int acpi_slp_type = -1; @@ -29,3 +30,21 @@ int acpi_handoff_wakeup_s3(void) void __weak mainboard_suspend_resume(void) { } + +/* Default mapping to ACPI FADT preferred_pm_profile field. */ +uint8_t acpi_get_preferred_pm_profile(void) +{ + switch (smbios_mainboard_enclosure_type()) { + case SMBIOS_ENCLOSURE_LAPTOP: + case SMBIOS_ENCLOSURE_CONVERTIBLE: + return PM_MOBILE; + case SMBIOS_ENCLOSURE_DETACHABLE: + case SMBIOS_ENCLOSURE_TABLET: + return PM_TABLET; + case SMBIOS_ENCLOSURE_DESKTOP: + return PM_DESKTOP; + case SMBIOS_ENCLOSURE_UNKNOWN: + default: + return PM_UNSPECIFIED; + } +} diff --git a/src/include/acpi/acpi.h b/src/include/acpi/acpi.h index 839d485990..f6eb772ac7 100644 --- a/src/include/acpi/acpi.h +++ b/src/include/acpi/acpi.h @@ -1045,6 +1045,8 @@ static inline int acpi_sleep_from_pm1(uint32_t pm1_cnt) } #endif +uint8_t acpi_get_preferred_pm_profile(void); + /* Returns ACPI_Sx values. */ int acpi_get_sleep_type(void); |