ACPI: Define acpi_get_preferred_pm_profile()

Change-Id: I2e7f22ccccc6c0df8e7e9f354c50893a53a41714
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/42140
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
diff --git a/src/acpi/acpi.c b/src/acpi/acpi.c
index 5fb2422..abc6e01 100644
--- a/src/acpi/acpi.c
+++ b/src/acpi/acpi.c
@@ -1251,14 +1251,7 @@
 	/* 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 cecf878..540b6d2 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 @@
 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 839d485..f6eb772 100644
--- a/src/include/acpi/acpi.h
+++ b/src/include/acpi/acpi.h
@@ -1045,6 +1045,8 @@
 }
 #endif
 
+uint8_t acpi_get_preferred_pm_profile(void);
+
 /* Returns ACPI_Sx values. */
 int acpi_get_sleep_type(void);