linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Joel Stanley <joel@jms.id.au>
To: "Jonathan Neuschäfer" <j.neuschaefer@gmx.net>
Cc: openbmc@lists.ozlabs.org,
	Hitomi Hasegawa <hasegawa-hitomi@fujitsu.com>,
	Paul Menzel <pmenzel@molgen.mpg.de>,
	Brian Norris <briannorris@chromium.org>,
	Arnd Bergmann <arnd@arndb.de>, Sven Peter <sven@svenpeter.dev>,
	linux-kernel@vger.kernel.org, Hector Martin <marcan@marcan.st>,
	Nicolas Ferre <nicolas.ferre@microchip.com>,
	Lubomir Rintel <lkundrak@v3.sk>,
	Conor Dooley <conor.dooley@microchip.com>,
	Robert Jarzmik <robert.jarzmik@free.fr>
Subject: Re: [PATCH v5 RESEND] soc: nuvoton: Add SoC info driver for WPCM450
Date: Wed, 2 Nov 2022 23:08:50 +0000	[thread overview]
Message-ID: <CACPK8Xfa=SPaYogqfUpCG61J7U-Z8pE2Oycicd_D=4vJsZcaSw@mail.gmail.com> (raw)
In-Reply-To: <20221031223926.241641-1-j.neuschaefer@gmx.net>

On Mon, 31 Oct 2022 at 22:40, Jonathan Neuschäfer <j.neuschaefer@gmx.net> wrote:
>
> 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 <j.neuschaefer@gmx.net>
> Reviewed-by: Joel Stanley <joel@jms.id.au>
> Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
> ---
> 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
>
> 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

Sorry for not noticing this earlier. This is a bit confusing. If we
have a menu option, the soc driver should appear under it. Or we could
do without the menu all together, as there's only one driver so far.

We also should select REGMAP, as you're using it, and hide the option
behind ARCH_WPCM450 || COMPILE_TEST.

How about this:

if ARCH_WPCM450 || COMPILE_TEST

config WPCM450_SOCINFO
        tristate "Nuvoton WPCM450 SoC driver"
        default y if ARCH_WPCM450
        select SOC_BUS
        select REGMAP
        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.

endif




> +       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 <linux/mfd/syscon.h>
> +#include <linux/of.h>
> +#include <linux/regmap.h>
> +#include <linux/slab.h>
> +#include <linux/sys_soc.h>
> +
> +#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");
> --
> 2.35.1
>

  reply	other threads:[~2022-11-02 23:09 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-31 22:39 [PATCH v5 RESEND] soc: nuvoton: Add SoC info driver for WPCM450 Jonathan Neuschäfer
2022-11-02 23:08 ` Joel Stanley [this message]
2022-11-03  7:11   ` Tomer Maimon
2022-11-03 15:45     ` Jonathan Neuschäfer

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='CACPK8Xfa=SPaYogqfUpCG61J7U-Z8pE2Oycicd_D=4vJsZcaSw@mail.gmail.com' \
    --to=joel@jms.id.au \
    --cc=arnd@arndb.de \
    --cc=briannorris@chromium.org \
    --cc=conor.dooley@microchip.com \
    --cc=hasegawa-hitomi@fujitsu.com \
    --cc=j.neuschaefer@gmx.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkundrak@v3.sk \
    --cc=marcan@marcan.st \
    --cc=nicolas.ferre@microchip.com \
    --cc=openbmc@lists.ozlabs.org \
    --cc=pmenzel@molgen.mpg.de \
    --cc=robert.jarzmik@free.fr \
    --cc=sven@svenpeter.dev \
    /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;
as well as URLs for NNTP newsgroup(s).