platform/chrome: cros_ec_lpc: add quirks for the Framework Laptop (AMD)
authorDustin L. Howett <dustin@howett.net>
Wed, 3 Apr 2024 00:47:13 +0000 (19:47 -0500)
committerTzung-Bi Shih <tzungbi@kernel.org>
Wed, 24 Apr 2024 08:46:00 +0000 (16:46 +0800)
The original Framework Laptop 13 platform (Intel 11th, 12th, and 13th
Generation at this time) uses a Microchip embedded controller in a
standard configuration.

The newer devices in this product line--Framework Laptop 13 and 16 (AMD
Ryzen)--use a NPCX embedded controller. However, they deviate from the
configuration of ChromeOS platforms built with the NPCX EC.

* The MMIO region for EC memory begins at port 0xE00 rather than the
  expected 0x900.

cros_ec_lpc's quirks system is used to address this issue.

Signed-off-by: Dustin L. Howett <dustin@howett.net>
Reviewed-by: Thomas Weißschuh <linux@weissschuh.net>
Tested-by: Thomas Weißschuh <linux@weissschuh.net>
Tested-by: Mario Limonciello <superm1@gmail.com>
Link: https://lore.kernel.org/r/20240403004713.130365-5-dustin@howett.net
Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
drivers/platform/chrome/cros_ec_lpc.c

index 0ec326351c611d1ad70f18aa53dab0b187991923..ddfbfec44f4ccfc184c504b9568f5f85e6ee5eb8 100644 (file)
@@ -527,6 +527,11 @@ static const struct acpi_device_id cros_ec_lpc_acpi_device_ids[] = {
 };
 MODULE_DEVICE_TABLE(acpi, cros_ec_lpc_acpi_device_ids);
 
+static const struct lpc_driver_data framework_laptop_amd_lpc_driver_data __initconst = {
+       .quirks = CROS_EC_LPC_QUIRK_REMAP_MEMORY,
+       .quirk_mmio_memory_base = 0xE00,
+};
+
 static const struct dmi_system_id cros_ec_lpc_dmi_table[] __initconst = {
        {
                /*
@@ -581,7 +586,16 @@ static const struct dmi_system_id cros_ec_lpc_dmi_table[] __initconst = {
        },
        /* A small number of non-Chromebook/box machines also use the ChromeOS EC */
        {
-               /* the Framework Laptop */
+               /* the Framework Laptop 13 (AMD Ryzen) and 16 (AMD Ryzen) */
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Framework"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "AMD Ryzen"),
+                       DMI_MATCH(DMI_PRODUCT_FAMILY, "Laptop"),
+               },
+               .driver_data = (void *)&framework_laptop_amd_lpc_driver_data,
+       },
+       {
+               /* the Framework Laptop (Intel 11th, 12th, 13th Generation) */
                .matches = {
                        DMI_MATCH(DMI_SYS_VENDOR, "Framework"),
                        DMI_MATCH(DMI_PRODUCT_NAME, "Laptop"),