linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4] soc: imx: Add SoC device register for i.MX9
@ 2024-10-31  6:54 alice.guo
  2024-11-03  9:20 ` Shawn Guo
  2024-11-04  7:26 ` Shawn Guo
  0 siblings, 2 replies; 5+ messages in thread
From: alice.guo @ 2024-10-31  6:54 UTC (permalink / raw)
  To: alexander.stein, wahrenst, shawnguo, s.hauer, kernel, festevam
  Cc: imx, linux-arm-kernel, linux-kernel, alice.guo

From: "alice.guo" <alice.guo@nxp.com>

i.MX9 SoCs have SoC ID, SoC revision number and chip unique identifier
which are provided by the corresponding ARM trusted firmware API. This
patch intends to use SMC call to obtain these information and then
register i.MX9 SoC as a device.

Signed-off-by: alice.guo <alice.guo@nxp.com>
Tested-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Reviewed-by: Stefan Wahren <wahrenst@gmx.net>
---

Changes for v2:
 - refine error log print
Changes for v3:
 - return -EINVAL when arm_smccc_smc failed
 - fix the build warning caused by pr_err("%s: SMC failed: %d\n", __func__, res.a0);
 - drop the pr_err in imx9_soc_init
 - free the memory in the reverse order of allocation
 - use of_match_node instead of of_machine_is_compatible
Changes for v4:
 - fix the build warning: 'imx9_soc_match' defined but not used [-Wunused-const-variable=]
 - add Tested-by and Reviewed-by

 drivers/soc/imx/Makefile   |   2 +-
 drivers/soc/imx/soc-imx9.c | 106 +++++++++++++++++++++++++++++++++++++
 2 files changed, 107 insertions(+), 1 deletion(-)
 create mode 100644 drivers/soc/imx/soc-imx9.c

diff --git a/drivers/soc/imx/Makefile b/drivers/soc/imx/Makefile
index 3ad321ca608a..ca6a5fa1618f 100644
--- a/drivers/soc/imx/Makefile
+++ b/drivers/soc/imx/Makefile
@@ -3,4 +3,4 @@ ifeq ($(CONFIG_ARM),y)
 obj-$(CONFIG_ARCH_MXC) += soc-imx.o
 endif
 obj-$(CONFIG_SOC_IMX8M) += soc-imx8m.o
-obj-$(CONFIG_SOC_IMX9) += imx93-src.o
+obj-$(CONFIG_SOC_IMX9) += imx93-src.o soc-imx9.o
diff --git a/drivers/soc/imx/soc-imx9.c b/drivers/soc/imx/soc-imx9.c
new file mode 100644
index 000000000000..3d5df479d8c0
--- /dev/null
+++ b/drivers/soc/imx/soc-imx9.c
@@ -0,0 +1,106 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2024 NXP
+ */
+
+#include <linux/arm-smccc.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/slab.h>
+#include <linux/sys_soc.h>
+
+#define IMX_SIP_GET_SOC_INFO	0xc2000006
+#define SOC_ID(x)		(((x) & 0xFFFF) >> 8)
+#define SOC_REV_MAJOR(x)	((((x) >> 28) & 0xF) - 0x9)
+#define SOC_REV_MINOR(x)	(((x) >> 24) & 0xF)
+
+static int imx9_soc_device_register(void)
+{
+	struct soc_device_attribute *attr;
+	struct arm_smccc_res res;
+	struct soc_device *sdev;
+	u32 soc_id, rev_major, rev_minor;
+	u64 uid127_64, uid63_0;
+	int err;
+
+	attr = kzalloc(sizeof(*attr), GFP_KERNEL);
+	if (!attr)
+		return -ENOMEM;
+
+	err = of_property_read_string(of_root, "model", &attr->machine);
+	if (err) {
+		pr_err("%s: missing model property: %d\n", __func__, err);
+		goto attr;
+	}
+
+	attr->family = kasprintf(GFP_KERNEL, "Freescale i.MX");
+
+	/*
+	 * Retrieve the soc id, rev & uid info:
+	 * res.a1[31:16]: soc revision;
+	 * res.a1[15:0]: soc id;
+	 * res.a2: uid[127:64];
+	 * res.a3: uid[63:0];
+	 */
+	arm_smccc_smc(IMX_SIP_GET_SOC_INFO, 0, 0, 0, 0, 0, 0, 0, &res);
+	if (res.a0 != SMCCC_RET_SUCCESS) {
+		pr_err("%s: SMC failed: 0x%lx\n", __func__, res.a0);
+		err = -EINVAL;
+		goto family;
+	}
+
+	soc_id = SOC_ID(res.a1);
+	rev_major = SOC_REV_MAJOR(res.a1);
+	rev_minor = SOC_REV_MINOR(res.a1);
+
+	attr->soc_id = kasprintf(GFP_KERNEL, "i.MX%2x", soc_id);
+	attr->revision = kasprintf(GFP_KERNEL, "%d.%d", rev_major, rev_minor);
+
+	uid127_64 = res.a2;
+	uid63_0 = res.a3;
+	attr->serial_number = kasprintf(GFP_KERNEL, "%016llx%016llx", uid127_64, uid63_0);
+
+	sdev = soc_device_register(attr);
+	if (IS_ERR(sdev)) {
+		err = PTR_ERR(sdev);
+		pr_err("%s failed to register SoC as a device: %d\n", __func__, err);
+		goto serial_number;
+	}
+
+	return 0;
+
+serial_number:
+	kfree(attr->serial_number);
+	kfree(attr->revision);
+	kfree(attr->soc_id);
+family:
+	kfree(attr->family);
+attr:
+	kfree(attr);
+	return err;
+}
+
+static __maybe_unused const struct of_device_id imx9_soc_match[] = {
+	{ .compatible = "fsl,imx93", },
+	{ .compatible = "fsl,imx95", },
+	{ }
+};
+
+static int __init imx9_soc_init(void)
+{
+	int ret;
+
+	/* No match means it is not an i.MX 9 series SoC, do nothing. */
+	if (!of_match_node(imx9_soc_match, of_root))
+		return 0;
+
+	ret = imx9_soc_device_register();
+
+	return ret;
+}
+device_initcall(imx9_soc_init);
+
+MODULE_AUTHOR("NXP");
+MODULE_DESCRIPTION("NXP i.MX9 SoC");
+MODULE_LICENSE("GPL");
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v4] soc: imx: Add SoC device register for i.MX9
  2024-10-31  6:54 [PATCH v4] soc: imx: Add SoC device register for i.MX9 alice.guo
@ 2024-11-03  9:20 ` Shawn Guo
  2024-11-04  7:39   ` Shawn Guo
  2024-11-04  7:26 ` Shawn Guo
  1 sibling, 1 reply; 5+ messages in thread
From: Shawn Guo @ 2024-11-03  9:20 UTC (permalink / raw)
  To: alice.guo
  Cc: alexander.stein, wahrenst, shawnguo, s.hauer, kernel, festevam,
	imx, linux-arm-kernel, linux-kernel, alice.guo

On Thu, Oct 31, 2024 at 02:54:38PM +0800, alice.guo@oss.nxp.com wrote:
> From: "alice.guo" <alice.guo@nxp.com>
> 
> i.MX9 SoCs have SoC ID, SoC revision number and chip unique identifier
> which are provided by the corresponding ARM trusted firmware API. This
> patch intends to use SMC call to obtain these information and then
> register i.MX9 SoC as a device.
> 
> Signed-off-by: alice.guo <alice.guo@nxp.com>
> Tested-by: Alexander Stein <alexander.stein@ew.tq-group.com>
> Reviewed-by: Stefan Wahren <wahrenst@gmx.net>

Applied, thanks!



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v4] soc: imx: Add SoC device register for i.MX9
  2024-10-31  6:54 [PATCH v4] soc: imx: Add SoC device register for i.MX9 alice.guo
  2024-11-03  9:20 ` Shawn Guo
@ 2024-11-04  7:26 ` Shawn Guo
  2024-11-04  7:38   ` 回复: [EXT] " Alice Guo (OSS)
  1 sibling, 1 reply; 5+ messages in thread
From: Shawn Guo @ 2024-11-04  7:26 UTC (permalink / raw)
  To: alice.guo
  Cc: alexander.stein, wahrenst, shawnguo, s.hauer, kernel, festevam,
	imx, linux-arm-kernel, linux-kernel, alice.guo

On Thu, Oct 31, 2024 at 02:54:38PM +0800, alice.guo@oss.nxp.com wrote:
> From: "alice.guo" <alice.guo@nxp.com>
> 
> i.MX9 SoCs have SoC ID, SoC revision number and chip unique identifier
> which are provided by the corresponding ARM trusted firmware API. This
> patch intends to use SMC call to obtain these information and then
> register i.MX9 SoC as a device.
> 
> Signed-off-by: alice.guo <alice.guo@nxp.com>

A side note: could you git configure your user.name properly to make
the author/SoB appear like:

  Alice Guo <alice.guo@nxp.com>

Thanks,
Shawn



^ permalink raw reply	[flat|nested] 5+ messages in thread

* 回复: [EXT] Re: [PATCH v4] soc: imx: Add SoC device register for i.MX9
  2024-11-04  7:26 ` Shawn Guo
@ 2024-11-04  7:38   ` Alice Guo (OSS)
  0 siblings, 0 replies; 5+ messages in thread
From: Alice Guo (OSS) @ 2024-11-04  7:38 UTC (permalink / raw)
  To: Shawn Guo, Alice Guo (OSS)
  Cc: alexander.stein@ew.tq-group.com, wahrenst@gmx.net,
	shawnguo@kernel.org, s.hauer@pengutronix.de,
	kernel@pengutronix.de, festevam@gmail.com, imx@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, Alice Guo


> -----邮件原件-----
> 发件人: Shawn Guo <shawnguo2@yeah.net>
> 发送时间: 2024年11月4日 15:27
> 收件人: Alice Guo (OSS) <alice.guo@oss.nxp.com>
> 抄送: alexander.stein@ew.tq-group.com; wahrenst@gmx.net;
> shawnguo@kernel.org; s.hauer@pengutronix.de; kernel@pengutronix.de;
> festevam@gmail.com; imx@lists.linux.dev;
> linux-arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org; Alice Guo
> <alice.guo@nxp.com>
> 主题: [EXT] Re: [PATCH v4] soc: imx: Add SoC device register for i.MX9
> 
> Caution: This is an external email. Please take care when clicking links or
> opening attachments. When in doubt, report the message using the 'Report this
> email' button
> 
> 
> On Thu, Oct 31, 2024 at 02:54:38PM +0800, alice.guo@oss.nxp.com wrote:
> > From: "alice.guo" <alice.guo@nxp.com>
> >
> > i.MX9 SoCs have SoC ID, SoC revision number and chip unique identifier
> > which are provided by the corresponding ARM trusted firmware API. This
> > patch intends to use SMC call to obtain these information and then
> > register i.MX9 SoC as a device.
> >
> > Signed-off-by: alice.guo <alice.guo@nxp.com>
> 
> A side note: could you git configure your user.name properly to make the
> author/SoB appear like:
> 
>   Alice Guo <alice.guo@nxp.com>

May I ask if I need to send v5 to update my Signed-off-by?

Best Regards,
Alice Guo

> Thanks,
> Shawn


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v4] soc: imx: Add SoC device register for i.MX9
  2024-11-03  9:20 ` Shawn Guo
@ 2024-11-04  7:39   ` Shawn Guo
  0 siblings, 0 replies; 5+ messages in thread
From: Shawn Guo @ 2024-11-04  7:39 UTC (permalink / raw)
  To: alice.guo
  Cc: alexander.stein, wahrenst, shawnguo, s.hauer, kernel, festevam,
	imx, linux-arm-kernel, linux-kernel, alice.guo

On Sun, Nov 03, 2024 at 05:20:22PM +0800, Shawn Guo wrote:
> On Thu, Oct 31, 2024 at 02:54:38PM +0800, alice.guo@oss.nxp.com wrote:
> > From: "alice.guo" <alice.guo@nxp.com>
> > 
> > i.MX9 SoCs have SoC ID, SoC revision number and chip unique identifier
> > which are provided by the corresponding ARM trusted firmware API. This
> > patch intends to use SMC call to obtain these information and then
> > register i.MX9 SoC as a device.
> > 
> > Signed-off-by: alice.guo <alice.guo@nxp.com>
> > Tested-by: Alexander Stein <alexander.stein@ew.tq-group.com>
> > Reviewed-by: Stefan Wahren <wahrenst@gmx.net>
> 
> Applied, thanks!

I have to drop it for now, as I just recall that we should probe SoC
driver as platform driver.  Could you rework it a bit like what Marek
has done for soc-imx8m driver?

https://patchwork.kernel.org/project/imx/patch/20240929184930.73049-1-marex@denx.de/

Shawn



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-11-04  7:42 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-31  6:54 [PATCH v4] soc: imx: Add SoC device register for i.MX9 alice.guo
2024-11-03  9:20 ` Shawn Guo
2024-11-04  7:39   ` Shawn Guo
2024-11-04  7:26 ` Shawn Guo
2024-11-04  7:38   ` 回复: [EXT] " Alice Guo (OSS)

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).