From patchwork Wed Jan 17 19:03:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TsOtY29sYXMgRi4gUi4gQS4gUHJhZG8=?= X-Patchwork-Id: 188926 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:30f:b0:101:a8e8:374 with SMTP id ia15csp122468dyb; Wed, 17 Jan 2024 11:09:01 -0800 (PST) X-Google-Smtp-Source: AGHT+IG223BNVGJtN/H24AAt9DTByz3mKO5yydrrp43pz999kjsUbKT4vInhj5q6wClw5KY/+Bnu X-Received: by 2002:a05:6a21:670d:b0:19a:f6f1:c63d with SMTP id wh13-20020a056a21670d00b0019af6f1c63dmr5351675pzb.11.1705518541734; Wed, 17 Jan 2024 11:09:01 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1705518541; cv=pass; d=google.com; s=arc-20160816; b=AmrRz7qaZIxolVgqF1/odjyQtOw1pHKlQHV62UOTSke3Jun3HpnRtbjSTLdWVhQzgL nnboHUZ1tDOU9oVnjqrOJ9N9gKWGJCAQQZSkM2G+9hP4bAYMH9uxM/XTrd4XCdE6xJTx 5wmHUPrp1HdaCuXdU5gELefl9iAjK1n+lm1Uwow5ymRlFUEZ0c+1Tongc1yh1ln1dC2C Ll0BY6lKFQ5bAajAUUUq/+V+NTqKfIgLc80yE32v598t7KYZI9RR0IJMTEBDIq4o4gAX zJimESnNGTl8qW2cMRXjta3IKcXNJry6u4X9qzzbcL8WOy0XutHQEejFCWyAQLe4wbRZ lJHQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :subject:date:from:dkim-signature; bh=IUbXT15LVy+/itppPYnHQi5lWw5bksnVOWwGUP/q1yQ=; fh=/gd7Rc/EAAvVxbBCprHskp118QGvW0rBWlLNTh318QE=; b=IqPwrSRNLBaKilgbKIoRGzIMS60ZA5iigBmfnawSbGy7cFjq3Qqa2DqYQb8iJ23h/W 0MrvMlEousuoXjvpTKpgOEqp7bAdcG+Bj4XCGCsssKprYa0K59VKnVqkLXaB+UMoovem +EdWx4m12ShqckybX74MZa+kpEqdrQJiREBFRzcfaZoSDLi6waB8dqY5lB++0JKVkJxI C9OQ9kXVCoCbs1Kem2xsSomrYPIasvvcVcCY9vdIlqNZF0Iue1EBbRy5zsACN6fPaeZq eFOWDutdDikkYCJVVFMY+M+BxBxzD4iyvCq/zmTcE2QcIhsjediQaCZvpFh/jAws/6mm /3sQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=weY0IrWF; arc=pass (i=1 spf=pass spfdomain=collabora.com dkim=pass dkdomain=collabora.com dmarc=pass fromdomain=collabora.com); spf=pass (google.com: domain of linux-kernel+bounces-29349-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-29349-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id jo22-20020a056a00909600b006d977044e1bsi2279108pfb.194.2024.01.17.11.09.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jan 2024 11:09:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-29349-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=weY0IrWF; arc=pass (i=1 spf=pass spfdomain=collabora.com dkim=pass dkdomain=collabora.com dmarc=pass fromdomain=collabora.com); spf=pass (google.com: domain of linux-kernel+bounces-29349-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-29349-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 4C4EA28B2D1 for ; Wed, 17 Jan 2024 19:06:58 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id A18F624B4A; Wed, 17 Jan 2024 19:06:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="weY0IrWF" Received: from madrid.collaboradmins.com (madrid.collaboradmins.com [46.235.227.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 08ACA2374F; Wed, 17 Jan 2024 19:06:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=46.235.227.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705518367; cv=none; b=Y8FDV9yyP/0sRH1BRA4Fok1Oi9SiYCA0r5zY7lNhdNCvkN/nHW7gPWHv7n6ewc1SRNAvVbH9CpnKtkeSlpa+tsJ3LHGFRGPC0ANCZxiJ1/0ST1eSPF0l5qKC3mbE4hfLxUDFkvBSZ6kvRGuDSzE1fYnkbJ1MY8Sw03FL8lCkyU0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705518367; c=relaxed/simple; bh=8uW78FpceoDVMKHRzTpjOfMZqXDYMEkFZx5jYlY1Ks4=; h=DKIM-Signature:Received:From:Date:Subject:MIME-Version: Content-Type:Content-Transfer-Encoding:Message-Id:References: In-Reply-To:To:Cc:X-Mailer; b=S9+UbWIcV+GJStt0RUzS0PLDTLtXGdBELjg3TQl5aBRbDNsGcle8Bs8qsMBAgekGEc61hnppSfAVUlua8b1vHPq67vyF9jbOxqKM5F0GHPLRDgD5iHTI3KSIw7pXUaBU2u9T4y6wxHRPA/noB8Y6CDOaci5FAOIreWDMBh/5U+E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=weY0IrWF; arc=none smtp.client-ip=46.235.227.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1705518364; bh=8uW78FpceoDVMKHRzTpjOfMZqXDYMEkFZx5jYlY1Ks4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=weY0IrWFly7FK94biWblsIMljyLeyE7f97DsZfo+eEoCHWV23WEyYtjfC9ds76q1K OKfZUVJYnDBiML2LtL1DfbOHura1s7t3c9u0TmPs/rUqmkbwmS9iBCYGX8pOJDNxdv 2Umw5J6tZFu4gIfU574PqqpKQ+wB0bdVQ94PLshs0D6y/Y1KpSro4ziPEo2Rwq5xY3 oEwm001TVgICvSURaDo33Ca1jdCQOa7IW7T15tqbHdfc0LT/RfXbYN1CQnEGScuIZQ m9igRryqDl+a7qasYe2cOfDrFa6PtofhEW6nF3SGrQitCSaM/A4D2bodY2YEViQcHe eCMOIkeYD/UAg== Received: from [192.168.0.47] (zone.collabora.co.uk [167.235.23.81]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: nfraprado) by madrid.collaboradmins.com (Postfix) with ESMTPSA id 14526378000E; Wed, 17 Jan 2024 19:05:58 +0000 (UTC) From: =?utf-8?b?TsOtY29sYXMgRi4gUi4gQS4gUHJhZG8=?= Date: Wed, 17 Jan 2024 16:03:24 -0300 Subject: [PATCH v3 3/4] firmware: coreboot: Replace tag with id table in driver struct Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240117-coreboot-mod-defconfig-v3-3-049565a27bba@collabora.com> References: <20240117-coreboot-mod-defconfig-v3-0-049565a27bba@collabora.com> In-Reply-To: <20240117-coreboot-mod-defconfig-v3-0-049565a27bba@collabora.com> To: Tzung-Bi Shih Cc: Arnd Bergmann , Brian Norris , Julius Werner , Masahiro Yamada , Nathan Chancellor , Nicolas Schier , Catalin Marinas , Will Deacon , AngeloGioacchino Del Regno , Andy Shevchenko , kernel@collabora.com, chrome-platform@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kbuild@vger.kernel.org, linux-arm-kernel@lists.infradead.org, =?utf-8?b?TsOtY29sYXMgRi4gUi4gQS4gUHJhZG8=?= X-Mailer: b4 0.12.4 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1788365810141208749 X-GMAIL-MSGID: 1788365810141208749 Switch the plain 'tag' field in struct coreboot_driver for the newly created coreboot_device_id struct, which also contains a tag field and has the benefit of allowing modalias generation, and update all coreboot drivers accordingly. While at it, also add the id table for each driver to the module device table to allow automatically loading the module. Signed-off-by: NĂ­colas F. R. A. Prado Reviewed-by: AngeloGioacchino Del Regno --- drivers/firmware/google/cbmem.c | 8 +++++++- drivers/firmware/google/coreboot_table.c | 11 ++++++++++- drivers/firmware/google/coreboot_table.h | 3 ++- drivers/firmware/google/framebuffer-coreboot.c | 8 +++++++- drivers/firmware/google/memconsole-coreboot.c | 8 +++++++- drivers/firmware/google/vpd.c | 8 +++++++- 6 files changed, 40 insertions(+), 6 deletions(-) diff --git a/drivers/firmware/google/cbmem.c b/drivers/firmware/google/cbmem.c index 88e587ba1e0d..c2bffdc352a3 100644 --- a/drivers/firmware/google/cbmem.c +++ b/drivers/firmware/google/cbmem.c @@ -114,6 +114,12 @@ static int cbmem_entry_probe(struct coreboot_device *dev) return 0; } +static const struct coreboot_device_id cbmem_ids[] = { + { .tag = LB_TAG_CBMEM_ENTRY }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(coreboot, cbmem_ids); + static struct coreboot_driver cbmem_entry_driver = { .probe = cbmem_entry_probe, .drv = { @@ -121,7 +127,7 @@ static struct coreboot_driver cbmem_entry_driver = { .owner = THIS_MODULE, .dev_groups = dev_groups, }, - .tag = LB_TAG_CBMEM_ENTRY, + .id_table = cbmem_ids, }; module_coreboot_driver(cbmem_entry_driver); diff --git a/drivers/firmware/google/coreboot_table.c b/drivers/firmware/google/coreboot_table.c index c1b9a9e8e8ed..33971cf33112 100644 --- a/drivers/firmware/google/coreboot_table.c +++ b/drivers/firmware/google/coreboot_table.c @@ -28,8 +28,17 @@ static int coreboot_bus_match(struct device *dev, struct device_driver *drv) { struct coreboot_device *device = CB_DEV(dev); struct coreboot_driver *driver = CB_DRV(drv); + const struct coreboot_device_id *id; - return device->entry.tag == driver->tag; + if (!driver->id_table) + return 0; + + for (id = driver->id_table; id->tag; id++) { + if (device->entry.tag == id->tag) + return 1; + } + + return 0; } static int coreboot_bus_probe(struct device *dev) diff --git a/drivers/firmware/google/coreboot_table.h b/drivers/firmware/google/coreboot_table.h index d814dca33a08..86427989c57f 100644 --- a/drivers/firmware/google/coreboot_table.h +++ b/drivers/firmware/google/coreboot_table.h @@ -13,6 +13,7 @@ #define __COREBOOT_TABLE_H #include +#include /* Coreboot table header structure */ struct coreboot_table_header { @@ -93,7 +94,7 @@ struct coreboot_driver { int (*probe)(struct coreboot_device *); void (*remove)(struct coreboot_device *); struct device_driver drv; - u32 tag; + const struct coreboot_device_id *id_table; }; /* Register a driver that uses the data from a coreboot table. */ diff --git a/drivers/firmware/google/framebuffer-coreboot.c b/drivers/firmware/google/framebuffer-coreboot.c index 5c84bbebfef8..07c458bf64ec 100644 --- a/drivers/firmware/google/framebuffer-coreboot.c +++ b/drivers/firmware/google/framebuffer-coreboot.c @@ -80,13 +80,19 @@ static void framebuffer_remove(struct coreboot_device *dev) platform_device_unregister(pdev); } +static const struct coreboot_device_id framebuffer_ids[] = { + { .tag = CB_TAG_FRAMEBUFFER }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(coreboot, framebuffer_ids); + static struct coreboot_driver framebuffer_driver = { .probe = framebuffer_probe, .remove = framebuffer_remove, .drv = { .name = "framebuffer", }, - .tag = CB_TAG_FRAMEBUFFER, + .id_table = framebuffer_ids, }; module_coreboot_driver(framebuffer_driver); diff --git a/drivers/firmware/google/memconsole-coreboot.c b/drivers/firmware/google/memconsole-coreboot.c index 74b5286518ee..24c97a70aa80 100644 --- a/drivers/firmware/google/memconsole-coreboot.c +++ b/drivers/firmware/google/memconsole-coreboot.c @@ -96,13 +96,19 @@ static void memconsole_remove(struct coreboot_device *dev) memconsole_exit(); } +static const struct coreboot_device_id memconsole_ids[] = { + { .tag = CB_TAG_CBMEM_CONSOLE }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(coreboot, memconsole_ids); + static struct coreboot_driver memconsole_driver = { .probe = memconsole_probe, .remove = memconsole_remove, .drv = { .name = "memconsole", }, - .tag = CB_TAG_CBMEM_CONSOLE, + .id_table = memconsole_ids, }; module_coreboot_driver(memconsole_driver); diff --git a/drivers/firmware/google/vpd.c b/drivers/firmware/google/vpd.c index ee6e08c0592b..8e4216714b29 100644 --- a/drivers/firmware/google/vpd.c +++ b/drivers/firmware/google/vpd.c @@ -306,13 +306,19 @@ static void vpd_remove(struct coreboot_device *dev) kobject_put(vpd_kobj); } +static const struct coreboot_device_id vpd_ids[] = { + { .tag = CB_TAG_VPD }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(coreboot, vpd_ids); + static struct coreboot_driver vpd_driver = { .probe = vpd_probe, .remove = vpd_remove, .drv = { .name = "vpd", }, - .tag = CB_TAG_VPD, + .id_table = vpd_ids, }; module_coreboot_driver(vpd_driver);