From patchwork Mon Oct 31 22:39:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?J=2E_Neusch=C3=A4fer?= X-Patchwork-Id: 1697555 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=112.213.38.117; helo=lists.ozlabs.org; envelope-from=openbmc-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=s31663417 header.b=cHEJakU6; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4N1Sm20mRMz23lV for ; Tue, 1 Nov 2022 09:40:33 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4N1Sm075Q9z3c9s for ; Tue, 1 Nov 2022 09:40:32 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=s31663417 header.b=cHEJakU6; dkim-atps=neutral X-Original-To: openbmc@lists.ozlabs.org Delivered-To: openbmc@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmx.net (client-ip=212.227.17.21; helo=mout.gmx.net; envelope-from=j.neuschaefer@gmx.net; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=s31663417 header.b=cHEJakU6; dkim-atps=neutral Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4N1SlZ46Jcz30NS for ; Tue, 1 Nov 2022 09:40:08 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=s31663417; t=1667255972; bh=iaIFSLNn0yklCqLnafJqQ+I6bFLTwxIwEcdTu4zodc8=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date; b=cHEJakU6fkM5wIsPEmw3aDN7OSZVbdkfWaMzkn94/Z6Qpgxqdr+SiSqw1GH/3QEUN 2zk7KFS5WN3u2PJ0ER7hEq8nbRy4DOs0pKY1LOBL9sdeX85Cny4ajcFLiZ17Zd52lC N8C/BqFHunjXlIYn2sM4A8o0+Fod49xsYEsxH0ZZnyDTNOa87kmUiCU8zPeecVMyqs OsOYI60WaHD7GeX2xFM37IUoaD4UmLb4nzYWHw6Cdi9fnQ9MdbI/ERKjBgLBCLn8I1 cmnuBZP650THyVNhSgxiNe3UAohjCepKdq4Wf7eobWTnpT5Z6E3aISyg5ZHo0Jok6e 8gUtPZDQbMlVQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from probook ([78.35.189.154]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MXp9Y-1oWuGO2FcS-00Y6YV; Mon, 31 Oct 2022 23:39:32 +0100 From: =?utf-8?q?Jonathan_Neusch=C3=A4fer?= To: openbmc@lists.ozlabs.org Subject: [PATCH v5 RESEND] soc: nuvoton: Add SoC info driver for WPCM450 Date: Mon, 31 Oct 2022 23:39:22 +0100 Message-Id: <20221031223926.241641-1-j.neuschaefer@gmx.net> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 X-Provags-ID: V03:K1:ah+jqvgbx5xPMC9n7Czjp7kSIE65GdnQvjQ2bQ+HTbvy8OpTXm6 iQvrZmyqpo7Sjz911FGrlbUurY5EXg39VsIC3xMLwMDo3PjU4k7JJMXV8xupx6j99k5O1K9 BvgM+ZNvgIbkFOm1aPFtHrQ6IKUvIzLPZ4oWFueE8lDOEBR2jgZDutQ17zC2rT1pUenALzT B1xVaVh/EuGU38qBALnMA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:XLF7s+/qqLs=;wNs07tZ2By4ZRVFnOMr+HEVEVZB fR87zVEth83LVIVPWPQLjtFd3nRfhcrJIHTQukzHt7+sSkcblZZ+Hku1BTQAJ2b5/gS8Mql12 jcDWq4tQyXDFhXKo+DwjBVYFxRbzvY1+Rg0IwZRQSw2pkWr1cuChjVlKd2bvfTHtDJPHUtdtP 9Qgf5tBSh+9xB2NR1DNlfhMJA0rQNKU2BSAdKeEtjK4851/5sgheFHrsxMgdf86EKIjOe7Do5 hWpROpn6AgsxX0H4knKoutbmD3LlW51Xafob+bv4o0LBDHmnSiiGle4INWZW1acwTfXm/gFyp g334ISJ3/ZZlvi/+4lTTwYs9yu+MaPnY+RXFcOghJCBtNgsxSuOjFCDh147v1WsKoQwOqhyuK uCe26xlu7xQ3AM2MaItMQ4eBk6wkrVnwuFREdu58fJQs5cQ2de+bogOs4M0ymuMuzcL4a1xCt 5GjvEAwJJnEHvFi8eVY63HvidOLFrWw33az+b63ScTym9OZVKa9+8xe1mz21tXXC4CUGegGCu tFPoRN3m0Gn3Rr2ZUw4uz3CXU8rNlBrkbyi+9KQtZ7qLee1wd/aD6jZMQDQsQjSI4SJamauc9 fPGzcZLFTTysMTHU4ptY1HIFxwlWk8kgJ9iaOX4Mz/nk24mgcabUu+i9xiYeBQKOA9DwNKjtJ otvjT4cTOWA7a6Vu7CkoFGlpA99hBPEX9bIJAIbD7lNo/mga9R8x2kEWqTWvZSLeywtflSnUN 7gss2h4Pf9zNuamRaybBZ24EPqI86ogF+9VqcYvWfJCcp+XwyZmQiusfj/83bX8+1k54vCpim aj9qDS1qN0z6yb1eecpnPfvIHH3kzmv7uCoy5H4tMMmmzc8T+NlL42UInm31Yy9cqNmZlWm1t KNGXypQSbN9WIeu5nv2onpi41pLYedKrVRliO73fwgNi67ihyNroiO//aCImF1w55x/aGwsfP A/WrcjcFt9APZAMV9dc0+v1dyCA= X-BeenThere: openbmc@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development list for OpenBMC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Hitomi Hasegawa , Paul Menzel , Brian Norris , Arnd Bergmann , Sven Peter , linux-kernel@vger.kernel.org, Hector Martin , =?utf-8?q?J?= =?utf-8?q?onathan_Neusch=C3=A4fer?= , Nicolas Ferre , Lubomir Rintel , Conor Dooley , Joel Stanley , Robert Jarzmik Errors-To: openbmc-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "openbmc" Add a SoC information driver for Nuvoton WPCM450 SoCs. It provides information such as the SoC revision. Usage example: # grep . /sys/devices/soc0/* /sys/devices/soc0/family:Nuvoton NPCM /sys/devices/soc0/revision:A3 /sys/devices/soc0/soc_id:WPCM450 Signed-off-by: Jonathan Neuschäfer Reviewed-by: Joel Stanley Reviewed-by: Paul Menzel --- v5: - Change Kconfig option from bool to tristate v4: - rebase on 5.19-rc1 v3: - Declare revisions array as static - Change get_revision parameter to `unsigned int` - Add Paul's R-b tag - Add usage example - Sort includes v2: - https://lore.kernel.org/lkml/20220409173319.2491196-1-j.neuschaefer@gmx.net/ - Add R-b tag - rebase on 5.18-rc1 v1: - https://lore.kernel.org/lkml/20220129143316.2321460-1-j.neuschaefer@gmx.net/ --- drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 1 + drivers/soc/nuvoton/Kconfig | 11 +++ drivers/soc/nuvoton/Makefile | 2 + drivers/soc/nuvoton/wpcm450-soc.c | 109 ++++++++++++++++++++++++++++++ 5 files changed, 124 insertions(+) create mode 100644 drivers/soc/nuvoton/Kconfig create mode 100644 drivers/soc/nuvoton/Makefile create mode 100644 drivers/soc/nuvoton/wpcm450-soc.c -- 2.35.1 diff --git a/drivers/soc/Kconfig b/drivers/soc/Kconfig index 86ccf5970bc1b..cca3dfa5c6aea 100644 --- a/drivers/soc/Kconfig +++ b/drivers/soc/Kconfig @@ -14,6 +14,7 @@ source "drivers/soc/ixp4xx/Kconfig" source "drivers/soc/litex/Kconfig" source "drivers/soc/mediatek/Kconfig" source "drivers/soc/microchip/Kconfig" +source "drivers/soc/nuvoton/Kconfig" source "drivers/soc/pxa/Kconfig" source "drivers/soc/qcom/Kconfig" source "drivers/soc/renesas/Kconfig" diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile index 919716e0e7001..b9eb3c75e551a 100644 --- a/drivers/soc/Makefile +++ b/drivers/soc/Makefile @@ -19,6 +19,7 @@ obj-$(CONFIG_SOC_XWAY) += lantiq/ obj-$(CONFIG_LITEX_SOC_CONTROLLER) += litex/ obj-y += mediatek/ obj-y += microchip/ +obj-y += nuvoton/ obj-y += pxa/ obj-y += amlogic/ obj-y += qcom/ diff --git a/drivers/soc/nuvoton/Kconfig b/drivers/soc/nuvoton/Kconfig new file mode 100644 index 0000000000000..df46182088ec2 --- /dev/null +++ b/drivers/soc/nuvoton/Kconfig @@ -0,0 +1,11 @@ +# SPDX-License-Identifier: GPL-2.0 +menuconfig WPCM450_SOC + tristate "Nuvoton WPCM450 SoC driver" + default y if ARCH_WPCM450 + select SOC_BUS + help + Say Y here to compile the SoC information driver for Nuvoton + WPCM450 SoCs. + + This driver provides information such as the SoC model and + revision. diff --git a/drivers/soc/nuvoton/Makefile b/drivers/soc/nuvoton/Makefile new file mode 100644 index 0000000000000..e30317b4e8290 --- /dev/null +++ b/drivers/soc/nuvoton/Makefile @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0-only +obj-$(CONFIG_WPCM450_SOC) += wpcm450-soc.o diff --git a/drivers/soc/nuvoton/wpcm450-soc.c b/drivers/soc/nuvoton/wpcm450-soc.c new file mode 100644 index 0000000000000..c5e0d11c383b1 --- /dev/null +++ b/drivers/soc/nuvoton/wpcm450-soc.c @@ -0,0 +1,109 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Nuvoton WPCM450 SoC Identification + * + * Copyright (C) 2022 Jonathan Neuschäfer + */ + +#include +#include +#include +#include +#include + +#define GCR_PDID 0 +#define PDID_CHIP(x) ((x) & 0x00ffffff) +#define CHIP_WPCM450 0x926450 +#define PDID_REV(x) ((x) >> 24) + +struct revision { + u8 number; + const char *name; +}; + +static const struct revision revisions[] __initconst = { + { 0x00, "Z1" }, + { 0x03, "Z2" }, + { 0x04, "Z21" }, + { 0x08, "A1" }, + { 0x09, "A2" }, + { 0x0a, "A3" }, + {} +}; + +static const char * __init get_revision(unsigned int rev) +{ + int i; + + for (i = 0; revisions[i].name; i++) + if (revisions[i].number == rev) + return revisions[i].name; + return NULL; +} + +static struct soc_device_attribute *wpcm450_attr; +static struct soc_device *wpcm450_soc; + +static int __init wpcm450_soc_init(void) +{ + struct soc_device_attribute *attr; + struct soc_device *soc; + const char *revision; + struct regmap *gcr; + u32 pdid; + int ret; + + if (!of_machine_is_compatible("nuvoton,wpcm450")) + return 0; + + gcr = syscon_regmap_lookup_by_compatible("nuvoton,wpcm450-gcr"); + if (IS_ERR(gcr)) + return PTR_ERR(gcr); + ret = regmap_read(gcr, GCR_PDID, &pdid); + if (ret) + return ret; + + if (PDID_CHIP(pdid) != CHIP_WPCM450) { + pr_warn("Unknown chip ID in GCR.PDID: 0x%06x\n", PDID_CHIP(pdid)); + return -ENODEV; + } + + revision = get_revision(PDID_REV(pdid)); + if (!revision) { + pr_warn("Unknown chip revision in GCR.PDID: 0x%02x\n", PDID_REV(pdid)); + return -ENODEV; + } + + attr = kzalloc(sizeof(*attr), GFP_KERNEL); + if (!attr) + return -ENOMEM; + + attr->family = "Nuvoton NPCM"; + attr->soc_id = "WPCM450"; + attr->revision = revision; + soc = soc_device_register(attr); + if (IS_ERR(soc)) { + kfree(attr); + pr_warn("Could not register SoC device\n"); + return PTR_ERR(soc); + } + + wpcm450_soc = soc; + wpcm450_attr = attr; + return 0; +} +module_init(wpcm450_soc_init); + +static void __exit wpcm450_soc_exit(void) +{ + if (wpcm450_soc) { + soc_device_unregister(wpcm450_soc); + wpcm450_soc = NULL; + kfree(wpcm450_attr); + } +} +module_exit(wpcm450_soc_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Jonathan Neuschäfer"); +MODULE_DESCRIPTION("Nuvoton WPCM450 SoC Identification driver");