Re: [PATCH v4 7/8] soc: starfive: Add socinfo driver for JHB100 SoC

Changhuang Liang <[email protected]>
Newsgroups org.kernel.vger.linux-clk,org.infradead.lists.linux-riscv,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel
Message-ID <ZQ4PR01MB120276A1DA91FAC19C852F14F2DD2@ZQ4PR01MB1202.CHNPR01.prod.partner.outlook.cn>
Hi, Conor

Thanks for the review.

> On Sat, Aug 08, 2026 at 06:50:53PM -0700, Changhuang Liang wrote:
> > Add socinfo driver for JHB100 SoC. Currently available for
> > distinguishing between the two reversions, A0 and A1.
> >
> > Signed-off-by: Changhuang Liang <[email protected]>
> > ---
> >  MAINTAINERS                                   |  6 ++
> >  drivers/soc/Kconfig                           |  1 +
> >  drivers/soc/Makefile                          |  1 +
> >  drivers/soc/starfive/Kconfig                  |  6 ++
> >  drivers/soc/starfive/Makefile                 |  2 +
> >  drivers/soc/starfive/socinfo/Kconfig          | 11 +++
> >  drivers/soc/starfive/socinfo/Makefile         |  2 +
> >  drivers/soc/starfive/socinfo/jhb100-socinfo.c | 90
> > +++++++++++++++++++
> >  8 files changed, 119 insertions(+)
> >  create mode 100644 drivers/soc/starfive/Kconfig  create mode 100644
> > drivers/soc/starfive/Makefile  create mode 100644
> > drivers/soc/starfive/socinfo/Kconfig
> >  create mode 100644 drivers/soc/starfive/socinfo/Makefile
> >  create mode 100644 drivers/soc/starfive/socinfo/jhb100-socinfo.c
> >
> > diff --git a/MAINTAINERS b/MAINTAINERS index
> > cecb4f279160..90919c672d4d 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -26040,6 +26040,7 @@ M:	Conor Dooley <[email protected]>
> >  S:	Maintained
> >  T:	git https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux.git/
> >  F:	Documentation/devicetree/bindings/soc/starfive/
> > +F:	drivers/soc/starfive/
> >
> >  STARFIVE STARLINK PMU DRIVER
> >  M:	Ji Sheng Teoh <[email protected]>
> > @@ -26094,6 +26095,11 @@ S:	Maintained
> >  F:	drivers/reset/starfive/reset-starfive-jhb1*
> >  F:	include/dt-bindings/reset/starfive,jhb1*.h
> >
> > +STARFIVE JHB100 SOCINFO DRIVER
> > +M:	Changhuang Liang <[email protected]>
> > +S:	Maintained
> > +F:	drivers/soc/starfive/socinfo/jhb100-socinfo.c
> > +
> >  STARFIVE JHB100 SYSCON
> >  M:	Changhuang Liang <[email protected]>
> >  S:	Maintained
> > diff --git a/drivers/soc/Kconfig b/drivers/soc/Kconfig index
> > a2d65adffb80..b3b01fc38139 100644
> > --- a/drivers/soc/Kconfig
> > +++ b/drivers/soc/Kconfig
> > @@ -24,6 +24,7 @@ source "drivers/soc/renesas/Kconfig"
> >  source "drivers/soc/rockchip/Kconfig"
> >  source "drivers/soc/samsung/Kconfig"
> >  source "drivers/soc/sophgo/Kconfig"
> > +source "drivers/soc/starfive/Kconfig"
> >  source "drivers/soc/sunxi/Kconfig"
> >  source "drivers/soc/tegra/Kconfig"
> >  source "drivers/soc/ti/Kconfig"
> > diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile index
> > c9e689080ceb..009f85ff891a 100644
> > --- a/drivers/soc/Makefile
> > +++ b/drivers/soc/Makefile
> > @@ -30,6 +30,7 @@ obj-y				+= renesas/
> >  obj-y				+= rockchip/
> >  obj-$(CONFIG_SOC_SAMSUNG)	+= samsung/
> >  obj-y				+= sophgo/
> > +obj-y				+= starfive/
> >  obj-y				+= sunxi/
> >  obj-$(CONFIG_ARCH_TEGRA)	+= tegra/
> >  obj-y				+= ti/
> > diff --git a/drivers/soc/starfive/Kconfig
> > b/drivers/soc/starfive/Kconfig new file mode 100644 index
> > 000000000000..04b020083d3e
> > --- /dev/null
> > +++ b/drivers/soc/starfive/Kconfig
> > @@ -0,0 +1,6 @@
> > +# SPDX-License-Identifier: GPL-2.0-only menu "StarFive SoC (System On
> > +Chip) specific Drivers"
> > +
> > +source "drivers/soc/starfive/socinfo/Kconfig"
> > +
> > +endmenu
> > diff --git a/drivers/soc/starfive/Makefile
> > b/drivers/soc/starfive/Makefile new file mode 100644 index
> > 000000000000..ca1e609b8104
> > --- /dev/null
> > +++ b/drivers/soc/starfive/Makefile
> > @@ -0,0 +1,2 @@
> > +# SPDX-License-Identifier: GPL-2.0-only obj-y += socinfo/
> > diff --git a/drivers/soc/starfive/socinfo/Kconfig
> > b/drivers/soc/starfive/socinfo/Kconfig
> > new file mode 100644
> > index 000000000000..92bbab62895b
> > --- /dev/null
> > +++ b/drivers/soc/starfive/socinfo/Kconfig
> > @@ -0,0 +1,11 @@
> > +# SPDX-License-Identifier: GPL-2.0-only
> > +
> > +config STARFIVE_JHB100_SOCINFO
> > +	bool "StarFive JHB100 SoC Information"
> > +	depends on ARCH_STARFIVE || COMPILE_TEST
> > +	select SOC_BUS
> > +	default y
> > +	help
> > +	  Include support for the SoC bus socinfo for the StarFive JHB100 SoC
> > +	  platforms to provide information about the SoC family and variant
> > +	  to user space.
> > diff --git a/drivers/soc/starfive/socinfo/Makefile
> > b/drivers/soc/starfive/socinfo/Makefile
> > new file mode 100644
> > index 000000000000..26c2bdf1de3b
> > --- /dev/null
> > +++ b/drivers/soc/starfive/socinfo/Makefile
> > @@ -0,0 +1,2 @@
> > +# SPDX-License-Identifier: GPL-2.0-only
> > +obj-$(CONFIG_STARFIVE_JHB100_SOCINFO)	+= jhb100-socinfo.o
> > diff --git a/drivers/soc/starfive/socinfo/jhb100-socinfo.c
> > b/drivers/soc/starfive/socinfo/jhb100-socinfo.c
> > new file mode 100644
> > index 000000000000..638f81ef174c
> > --- /dev/null
> > +++ b/drivers/soc/starfive/socinfo/jhb100-socinfo.c
> > @@ -0,0 +1,90 @@
> > +// SPDX-License-Identifier: GPL-2.0-only
> > +/*
> > + * Copyright (C) 2025 StarFive Technology Co., Ltd.
> > + *
> > + * Author: Changhuang Liang <[email protected]>
> > + */
> > +
> > +#define pr_fmt(fmt) "jhb100-socinfo: " fmt
> > +
> > +#include <linux/bitfield.h>
> > +#include <linux/init.h>
> > +#include <linux/mfd/syscon.h>
> > +#include <linux/of.h>
> > +#include <linux/regmap.h>
> > +#include <linux/slab.h>
> > +#include <linux/string.h>
> > +#include <linux/sys_soc.h>
> > +
> > +#define JHB100_REV_ID			0x38
> > +#define JHB100_REV_ID_CHAR		GENMASK(3, 2)
> > +#define JHB100_REV_ID_NUM		GENMASK(1, 0)
> > +
> > +static int __init starfive_socinfo_init(void) {
> > +	struct soc_device_attribute *attrs;
> > +	struct soc_device *soc_dev;
> > +	const char *machine = NULL;
> > +	struct device_node *np;
> > +	struct regmap *regmap;
> > +	char rev_char;
> > +	u32 rev_id;
> > +	int ret;
> > +
> > +	np = of_find_compatible_node(NULL, NULL,
> > +"starfive,jhb100-sys0-syscon");
> 
> Remind me again why this is not just probed as an mfd cell from the syscon
> driver?
> 
> (Hint: please put this info in the commit message).

The discussion result with Krzysztof at that time is recorded here: 
https://lore.kernel.org/all/20260405-strong-watchful-marmot-fdfad6@quoll/

One register should not be treated as a separate device node.

> 
> Cheers
> Conor.
> 
> > +	if (!of_device_is_available(np)) {
> > +		of_node_put(np);
> > +		return -ENODEV;
> > +	}
> > +
> > +	regmap = syscon_node_to_regmap(np);
> > +	if (IS_ERR(regmap)) {
> > +		of_node_put(np);
> > +		return PTR_ERR(regmap);
> > +	}
> > +
> > +	ret = regmap_read(regmap, JHB100_REV_ID, &rev_id);
> > +	if (ret) {
> > +		of_node_put(np);
> > +		return ret;
> > +	}
> > +
> > +	of_node_put(np);
> > +
> > +	rev_char = (char)FIELD_GET(JHB100_REV_ID_CHAR, rev_id) + 'A';
> > +	rev_id = (u32)FIELD_GET(JHB100_REV_ID_NUM, rev_id);
> > +
> > +	attrs = kzalloc_obj(*attrs);
> > +	if (!attrs)
> > +		return -ENOMEM;
> > +
> > +	np = of_find_node_by_path("/");
> > +	of_property_read_string(np, "model", &machine);
> > +	if (machine)
> > +		attrs->machine = kstrdup(machine, GFP_KERNEL);
> > +	of_node_put(np);
> > +
> > +	attrs->revision = kasprintf(GFP_KERNEL, "%c%u", rev_char, rev_id);
> > +	if (!attrs->revision) {
> > +		kfree(attrs->machine);
> > +		kfree(attrs);
> > +		return -ENOMEM;
> > +	}
> > +
> > +	attrs->family = "JH";
> > +	attrs->soc_id = "JHB100";
> > +
> > +	soc_dev = soc_device_register(attrs);
> > +	if (IS_ERR(soc_dev)) {
> > +		kfree(attrs->revision);
> > +		kfree(attrs->machine);
> > +		kfree(attrs);
> > +		return PTR_ERR(soc_dev);
> > +	}
> > +
> > +	pr_info("StarFive %s SoC rev(%s)\n", attrs->soc_id,
> > +attrs->revision);
> > +
> > +	return 0;
> > +}
> > +
> > +subsys_initcall(starfive_socinfo_init);
> > --
> > 2.25.1
> >

Best Regards,
Changhuang
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.