Chrome platform driver development
 help / color / mirror / Atom feed
From: "Dustin L. Howett" <dustin@howett.net>
To: Tzung-Bi Shih <tzungbi@kernel.org>,
	Guenter Roeck <groeck@chromium.org>,
	chrome-platform@lists.linux.dev
Cc: "Dustin L. Howett" <dustin@howett.net>
Subject: [PATCH v2 3/4] platform/chrome: cros_ec_lpc: add a "quirks" system
Date: Sun, 26 Nov 2023 13:24:51 -0600	[thread overview]
Message-ID: <20231126192452.97824-4-dustin@howett.net> (raw)
In-Reply-To: <20231126192452.97824-1-dustin@howett.net>

Some devices ship a ChromeOS EC in a non-standard configuration. Quirks
allow cros_ec_lpc to account for these non-standard configurations.

It supports the following quirks:
- CROS_EC_LPC_QUIRK_REMAP_MEMORY: use a different port I/O base for
  MMIO to the EC's memory region
- CROS_EC_LPC_QUIRK_SHORT_HOSTCMD_RESERVATION: only attempt to reserve
  0xff (rather than 0x100) I/O ports for the host command region

Signed-off-by: Dustin L. Howett <dustin@howett.net>
---
 drivers/platform/chrome/cros_ec_lpc.c | 42 ++++++++++++++++++++++++++-
 1 file changed, 41 insertions(+), 1 deletion(-)

diff --git a/drivers/platform/chrome/cros_ec_lpc.c b/drivers/platform/chrome/cros_ec_lpc.c
index f1d1615d9b37..a65c9a8bca5e 100644
--- a/drivers/platform/chrome/cros_ec_lpc.c
+++ b/drivers/platform/chrome/cros_ec_lpc.c
@@ -34,6 +34,29 @@
 /* True if ACPI device is present */
 static bool cros_ec_lpc_acpi_device_found;
 
+/*
+ * Indicates that the driver should only reserve 0xFF I/O ports
+ * (rather than 0x100) for the host command mapped memory region.
+ */
+#define CROS_EC_LPC_QUIRK_SHORT_HOSTCMD_RESERVATION BIT(0)
+/*
+ * Indicates that lpc_driver_data.quirk_mmio_memory_base should
+ * be used as the base port for EC mapped memory.
+ */
+#define CROS_EC_LPC_QUIRK_REMAP_MEMORY              BIT(1)
+
+/**
+ * struct lpc_driver_data - driver data attached to a DMI device ID to indicate
+ *                          hardware quirks.
+ * @quirks: a bitfield composed of quirks from CROS_EC_LPC_QUIRK_*
+ * @quirk_mmio_memory_base: The first I/O port addressing EC mapped memory (used
+ *                          when quirks (...REMAP_MEMORY) is set.
+ */
+struct lpc_driver_data {
+	u32 quirks;
+	u16 quirk_mmio_memory_base;
+};
+
 /**
  * struct cros_ec_lpc - LPC device-specific data
  * @mmio_memory_base: The first I/O port addressing EC mapped memory.
@@ -363,8 +386,11 @@ static int cros_ec_lpc_probe(struct platform_device *pdev)
 	acpi_status status;
 	struct cros_ec_device *ec_dev;
 	struct cros_ec_lpc *ec_lpc;
+	struct lpc_driver_data *driver_data;
+	int region1_size = EC_HOST_CMD_REGION_SIZE;
 	u8 buf[2] = {};
 	int irq, ret;
+	u32 quirks = 0;
 
 	ec_lpc = devm_kzalloc(dev, sizeof(*ec_lpc), GFP_KERNEL);
 	if (!ec_lpc)
@@ -372,6 +398,20 @@ static int cros_ec_lpc_probe(struct platform_device *pdev)
 
 	ec_lpc->mmio_memory_base = EC_LPC_ADDR_MEMMAP;
 
+	driver_data = platform_get_drvdata(pdev);
+	if (driver_data) {
+		quirks = driver_data->quirks;
+
+		if (quirks)
+			dev_info(dev, "loaded with quirks %8.08x\n", quirks);
+
+		if (quirks & CROS_EC_LPC_QUIRK_REMAP_MEMORY)
+			ec_lpc->mmio_memory_base = driver_data->quirk_mmio_memory_base;
+
+		if (quirks & CROS_EC_LPC_QUIRK_SHORT_HOSTCMD_RESERVATION)
+			region1_size -= 1;
+	}
+
 	/*
 	 * The Framework Laptop (and possibly other non-ChromeOS devices)
 	 * only exposes the eight I/O ports that are required for the Microchip EC.
@@ -420,7 +460,7 @@ static int cros_ec_lpc_probe(struct platform_device *pdev)
 			return -EBUSY;
 		}
 		if (!devm_request_region(dev, EC_HOST_CMD_REGION1,
-					 EC_HOST_CMD_REGION_SIZE, dev_name(dev))) {
+					 region1_size, dev_name(dev))) {
 			dev_err(dev, "couldn't reserve region1\n");
 			return -EBUSY;
 		}
-- 
2.42.0


  parent reply	other threads:[~2023-11-26 19:25 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-05 16:06 [PATCH v1 0/4] cros_ec: add support for newer versions of the Framework Laptop Dustin L. Howett
2023-10-05 16:06 ` [PATCH v1 1/4] cros_ec_lpc: introduce cros_ec_lpc, a priv struct for the lpc device Dustin L. Howett
2023-10-11  5:29   ` Tzung-Bi Shih
2023-10-05 16:07 ` [PATCH v1 2/4] cros_ec_lpc: pass driver_data from DMI down to the device Dustin L. Howett
2023-10-11  5:29   ` Tzung-Bi Shih
2023-10-05 16:07 ` [PATCH v1 3/4] cros_ec_lpc: add a quirks system, and propagate quirks from DMI Dustin L. Howett
2023-10-11  5:30   ` Tzung-Bi Shih
2023-11-16 23:17   ` Thomas Weißschuh
2023-10-05 16:07 ` [PATCH v1 4/4] cros_ec_lpc: add quirks for the Framework Laptop Dustin L. Howett
2023-10-05 18:45   ` Mario Limonciello
2023-10-11  5:30   ` Tzung-Bi Shih
2023-10-11  5:29 ` [PATCH v1 0/4] cros_ec: add support for newer versions of " Tzung-Bi Shih
2023-11-26 19:22   ` Dustin Howett
2023-11-27  3:30     ` Tzung-Bi Shih
2023-11-26 19:24 ` [PATCH v2 0/4] platform/chrome: cros_ec_lpc: add support for AMD Framework Laptops Dustin L. Howett
2023-11-26 19:24   ` [PATCH v2 1/4] platform/chrome: cros_ec_lpc: introduce a priv struct for the lpc device Dustin L. Howett
2023-11-26 19:24   ` [PATCH v2 2/4] platform/chrome: cros_ec_lpc: pass driver_data from DMI to the device Dustin L. Howett
2023-11-26 19:24   ` Dustin L. Howett [this message]
2023-11-27  3:30     ` [PATCH v2 3/4] platform/chrome: cros_ec_lpc: add a "quirks" system Tzung-Bi Shih
2023-11-26 19:24   ` [PATCH v2 4/4] platform/chrome: cros_ec_lpc: add quirks for the Framework Laptop (AMD) Dustin L. Howett
2023-12-23 11:33   ` [PATCH v2 0/4] platform/chrome: cros_ec_lpc: add support for AMD Framework Laptops Thomas Weißschuh
2024-04-03  0:47   ` [PATCH v3 " Dustin L. Howett
2024-04-03  0:47     ` [PATCH v3 1/4] platform/chrome: cros_ec_lpc: introduce a priv struct for the lpc device Dustin L. Howett
2024-04-03  0:47     ` [PATCH v3 2/4] platform/chrome: cros_ec_lpc: pass driver_data from DMI to the device Dustin L. Howett
2024-04-03  0:47     ` [PATCH v3 3/4] platform/chrome: cros_ec_lpc: add a "quirks" system Dustin L. Howett
2024-04-03  0:47     ` [PATCH v3 4/4] platform/chrome: cros_ec_lpc: add quirks for the Framework Laptop (AMD) Dustin L. Howett
2024-04-04 18:53     ` [PATCH v3 0/4] platform/chrome: cros_ec_lpc: add support for AMD Framework Laptops Thomas Weißschuh
2024-04-04 18:59       ` Dustin Howett
2024-04-04 19:57         ` Thomas Weißschuh
2024-04-05  1:02           ` Dustin Howett
2024-04-06 18:48     ` Mario Limonciello
2024-04-06 19:23       ` Mario Limonciello
2024-04-08  9:30     ` patchwork-bot+chrome-platform
2024-04-08  9:30     ` patchwork-bot+chrome-platform

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231126192452.97824-4-dustin@howett.net \
    --to=dustin@howett.net \
    --cc=chrome-platform@lists.linux.dev \
    --cc=groeck@chromium.org \
    --cc=tzungbi@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox