From nobody Wed Jul 1 01:57:00 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6ABDEC433F5 for ; Wed, 5 Jan 2022 03:13:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237202AbiAEDNV (ORCPT ); Tue, 4 Jan 2022 22:13:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58912 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237196AbiAEDNU (ORCPT ); Tue, 4 Jan 2022 22:13:20 -0500 Received: from mail-qt1-x831.google.com (mail-qt1-x831.google.com [IPv6:2607:f8b0:4864:20::831]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 56F5AC061761 for ; Tue, 4 Jan 2022 19:13:20 -0800 (PST) Received: by mail-qt1-x831.google.com with SMTP id bp39so35945415qtb.6 for ; Tue, 04 Jan 2022 19:13:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=howett-net.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=F6zyq73HTm/un92FVOEIYcp2e6RteV0rl4PLFbEb9o0=; b=UiwTf0JrOyjTyS5MJgqHOYcgOJhrdUgIGkR47DtOpl9TR86oZ/U68sNEQ9VFGcTEsW IosEv5FC+6sa73lD2sr4LsdnVSQhSMpL//8p9tq5n2zy923F4JMgFp0ISXv4NnMxOTGU nEWS25LqjZO1EMuYSMIt+WWw7rtFXLK+1UoTd9vVVrcGopWsT03dQtCKalpkYLOSPYB8 8Q1yhnQwr6N0kAYLnWFo1e3q4V0fTCwFftCWHkFszp6zYYEnkeBsB20UWW9sTvXrmksw 2EETWuB7P1+/d+bpMIUqVZ3urgMEvGgGmkKkwLEOXAnF9YDMang2jZWhQSeo/5CrmF87 AnYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=F6zyq73HTm/un92FVOEIYcp2e6RteV0rl4PLFbEb9o0=; b=c2/9a265q+erPOEXKg0tj7sY8zFeT2ANrX3ofqzj+qgGDPLllT9o7l7cMtN5z4klo1 pgrBfc30sys6ipdg2LRpinj9/u7m7W/8MjPwpliCFXc/lb1LOD2FaJW1rxoMWYGDHYRM VHyLB4lJz/XVX4mzb5QOokidrBV/Bn9VZUqcbr2NQC/xlT35nBEO34a8oae+u8XjZ3dw i/bSJ/dYqp5tIyEy8rdDLMQcFfGFy0RmKFiQYpLtU0Hzc8kicLnnxYdbj4qs7J2E4nDD AGBN7V0b12tk8JYV2aCsltxo8ZfiLNMgjC9I96N/dhJBXPYbJOZu49DLc3bQ3VFI3H67 bRVQ== X-Gm-Message-State: AOAM531lWSxTodwX943rkhlqgtdl6r2+fKXT2gE7CFTw+LbD5cXEHJEu KXjXbwVE+JRov/+FMik+g+WU7S+aXQD+PA== X-Google-Smtp-Source: ABdhPJx7pUqJXRi0d4rIyCUa4H2v36BtZk6CoMKjZulCyNZTQWmxJb/SzG1uVwvS2G5OHSzWBPu+XA== X-Received: by 2002:ac8:47cb:: with SMTP id d11mr46588544qtr.446.1641352399281; Tue, 04 Jan 2022 19:13:19 -0800 (PST) Received: from rigel.delfino.n.howett.net ([2600:1700:df50:a7cf::725]) by smtp.googlemail.com with ESMTPSA id s6sm32629632qki.23.2022.01.04.19.13.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Jan 2022 19:13:18 -0800 (PST) From: "Dustin L. Howett" To: linux-kernel@vger.kernel.org Cc: Benson Leung , Guenter Roeck , "Dustin L. Howett" Subject: [PATCH 1/2] platform/chrome: cros-ec: detect the Framework Laptop Date: Tue, 4 Jan 2022 21:12:41 -0600 Message-Id: <20220105031242.287751-2-dustin@howett.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220105031242.287751-1-dustin@howett.net> References: <20220105031242.287751-1-dustin@howett.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The Framework Laptop identifies itself in DMI with manufacturer "Framework" and product "Laptop". Signed-off-by: Dustin L. Howett Reviewed-by: Tzung-Bi Shih --- drivers/platform/chrome/cros_ec_lpc.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/platform/chrome/cros_ec_lpc.c b/drivers/platform/chrom= e/cros_ec_lpc.c index d6306d2a096f..458eb59db2ff 100644 --- a/drivers/platform/chrome/cros_ec_lpc.c +++ b/drivers/platform/chrome/cros_ec_lpc.c @@ -500,6 +500,14 @@ static const struct dmi_system_id cros_ec_lpc_dmi_tabl= e[] __initconst =3D { DMI_MATCH(DMI_PRODUCT_NAME, "Glimmer"), }, }, + /* A small number of non-Chromebook/box machines also use the ChromeOS EC= */ + { + /* the Framework Laptop */ + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Framework"), + DMI_MATCH(DMI_PRODUCT_NAME, "Laptop"), + }, + }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(dmi, cros_ec_lpc_dmi_table); --=20 2.34.1 From nobody Wed Jul 1 01:57:00 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8693AC433EF for ; Wed, 5 Jan 2022 03:13:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237211AbiAEDNX (ORCPT ); Tue, 4 Jan 2022 22:13:23 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237196AbiAEDNV (ORCPT ); Tue, 4 Jan 2022 22:13:21 -0500 Received: from mail-qt1-x834.google.com (mail-qt1-x834.google.com [IPv6:2607:f8b0:4864:20::834]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 950C6C061761 for ; Tue, 4 Jan 2022 19:13:21 -0800 (PST) Received: by mail-qt1-x834.google.com with SMTP id a1so36182327qtx.11 for ; Tue, 04 Jan 2022 19:13:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=howett-net.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=x2aLfuFCUBuE8UDjNrDJd69eskK7afYXIDfF2xwCx/k=; b=scyKv0LYLY1sy4CUnszbnaBg87nSFiZ9zph8mHIm6HGa/VwVkfN3x7M2pOYss+F8NT WkJFVcFpL8OpQPye7vbkrmo4Oqqcuk0AoJ+6mv7bsaXXNkAQY0VqkKKYn+4ToKbAoPHX VBHqeF2jciTYqpdihj09Nasj+EQUHVJrgaOwT20Rk2FSOPNwclGzTjmfITMimxH0keG8 hSmuRKUd8F2zzEKxb7pjZz6ofrGklMW90iTnH9W3w2QqzqzSSjok0gqajiOIHBnn4nVR j3lCgrG9fo8azWrb417n25+G4V9jljZBOK0u7S2H3QU140yYZugE7eh9o0PeFRKZ3bOr BPgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=x2aLfuFCUBuE8UDjNrDJd69eskK7afYXIDfF2xwCx/k=; b=GdgnB/WUtxDIw25hUx0CRBMjGWcuQ7scqBv0+kDYvY55jMRDBBbXwvsBFl/m2SJXt0 NPrbQOYqWmByT3M/tYhgLW9MdpEIxGfDOguwB1PSGYsr9uWneetDnA9h0c8UJMiULuF/ vFuStq2DxmH8lIes6TQLCyH+y+zAZxcC2RLgcIfkilraYXeadD8F9DVG0oX+i+X9497L DN21O1gOmx2FMy67ltBZ07HLJK7qnrnvKcej04djYR+zBPkxpxNx85qqlT4mU4Ouc/x6 k7qzxNyiQhqnnojaDC1HFl5nFgllSvAC4tk+WHE0F+gLqQeT6zIsmusrCMKGhGMU6MoH 0UIw== X-Gm-Message-State: AOAM533z/pGhStIpaQ0J70WjZTt/9NzrKTHXq3Z/Zp99qYTVAn92LZ2X EGIiNG3nbNnSkbKM9CyeR0W8X36MisUcCg== X-Google-Smtp-Source: ABdhPJy5nRzomOipRnlclsRvwahR3C0E28eEcO24eqwBzOMQiQpw+pkqgmT27Gk/YiVjar56MXwZFQ== X-Received: by 2002:a05:622a:548:: with SMTP id m8mr30413350qtx.126.1641352400478; Tue, 04 Jan 2022 19:13:20 -0800 (PST) Received: from rigel.delfino.n.howett.net ([2600:1700:df50:a7cf::725]) by smtp.googlemail.com with ESMTPSA id s6sm32629632qki.23.2022.01.04.19.13.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Jan 2022 19:13:20 -0800 (PST) From: "Dustin L. Howett" To: linux-kernel@vger.kernel.org Cc: Benson Leung , Guenter Roeck , "Dustin L. Howett" Subject: [PATCH 2/2] platform/chrome: reserve only the I/O ports required for the MEC EC Date: Tue, 4 Jan 2022 21:12:42 -0600 Message-Id: <20220105031242.287751-3-dustin@howett.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220105031242.287751-1-dustin@howett.net> References: <20220105031242.287751-1-dustin@howett.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Some ChromeOS EC devices (such as the Framework Laptop) only map I/O ports 0x800-0x807. Making the larger reservation required by the non-MEC LPC (the 0xFF ports for the memory map, and the 0xFF ports for the parameter region) is non-viable on these devices. Since we probe the MEC EC first, we can get away with a smaller reservation that covers the MEC EC ports. If we fall back to classic LPC, we can grow the reservation to cover the memory map and the parameter region. Signed-off-by: Dustin L. Howett --- drivers/platform/chrome/cros_ec_lpc.c | 39 ++++++++++++------- .../linux/platform_data/cros_ec_commands.h | 4 ++ 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/drivers/platform/chrome/cros_ec_lpc.c b/drivers/platform/chrom= e/cros_ec_lpc.c index 458eb59db2ff..06fdfe365710 100644 --- a/drivers/platform/chrome/cros_ec_lpc.c +++ b/drivers/platform/chrome/cros_ec_lpc.c @@ -341,9 +341,14 @@ static int cros_ec_lpc_probe(struct platform_device *p= dev) u8 buf[2]; int irq, ret; =20 - if (!devm_request_region(dev, EC_LPC_ADDR_MEMMAP, EC_MEMMAP_SIZE, - dev_name(dev))) { - dev_err(dev, "couldn't reserve memmap region\n"); + /* + * The Framework Laptop (and possibly other non-ChromeOS devices) + * only exposes the eight I/O ports that are required for the Microchip E= C. + * Requesting a larger reservation will fail. + */ + if (!devm_request_region(dev, EC_HOST_CMD_REGION0, + EC_HOST_CMD_MEC_REGION_SIZE, dev_name(dev))) { + dev_err(dev, "couldn't reserve MEC region\n"); return -EBUSY; } =20 @@ -357,6 +362,12 @@ static int cros_ec_lpc_probe(struct platform_device *p= dev) cros_ec_lpc_ops.write =3D cros_ec_lpc_mec_write_bytes; cros_ec_lpc_ops.read(EC_LPC_ADDR_MEMMAP + EC_MEMMAP_ID, 2, buf); if (buf[0] !=3D 'E' || buf[1] !=3D 'C') { + if (!devm_request_region(dev, EC_LPC_ADDR_MEMMAP, EC_MEMMAP_SIZE, + dev_name(dev))) { + dev_err(dev, "couldn't reserve memmap region\n"); + return -EBUSY; + } + /* Re-assign read/write operations for the non MEC variant */ cros_ec_lpc_ops.read =3D cros_ec_lpc_read_bytes; cros_ec_lpc_ops.write =3D cros_ec_lpc_write_bytes; @@ -366,17 +377,19 @@ static int cros_ec_lpc_probe(struct platform_device *= pdev) dev_err(dev, "EC ID not detected\n"); return -ENODEV; } - } =20 - if (!devm_request_region(dev, EC_HOST_CMD_REGION0, - EC_HOST_CMD_REGION_SIZE, dev_name(dev))) { - dev_err(dev, "couldn't reserve region0\n"); - return -EBUSY; - } - if (!devm_request_region(dev, EC_HOST_CMD_REGION1, - EC_HOST_CMD_REGION_SIZE, dev_name(dev))) { - dev_err(dev, "couldn't reserve region1\n"); - return -EBUSY; + /* Reserve the remaining I/O ports required by the non-MEC protocol. */ + if (!devm_request_region(dev, EC_HOST_CMD_REGION0 + EC_HOST_CMD_MEC_REGI= ON_SIZE, + EC_HOST_CMD_REGION_SIZE - EC_HOST_CMD_MEC_REGION_SIZE, + dev_name(dev))) { + dev_err(dev, "couldn't reserve remainder of region0\n"); + return -EBUSY; + } + if (!devm_request_region(dev, EC_HOST_CMD_REGION1, + EC_HOST_CMD_REGION_SIZE, dev_name(dev))) { + dev_err(dev, "couldn't reserve region1\n"); + return -EBUSY; + } } =20 ec_dev =3D devm_kzalloc(dev, sizeof(*ec_dev), GFP_KERNEL); diff --git a/include/linux/platform_data/cros_ec_commands.h b/include/linux= /platform_data/cros_ec_commands.h index 271bd87bff0a..a85b1176e6c0 100644 --- a/include/linux/platform_data/cros_ec_commands.h +++ b/include/linux/platform_data/cros_ec_commands.h @@ -55,6 +55,10 @@ #define EC_HOST_CMD_REGION0 0x800 #define EC_HOST_CMD_REGION1 0x880 #define EC_HOST_CMD_REGION_SIZE 0x80 +/* + * Other machines report only the region spanned by the Microchip MEC EC. + */ +#define EC_HOST_CMD_MEC_REGION_SIZE 0x08 =20 /* EC command register bit functions */ #define EC_LPC_CMDR_DATA BIT(0) /* Data ready for host to read */ --=20 2.34.1