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