[PATCH V2] soc: imx: support i.MX93 soc device

Peng Fan peng.fan at nxp.com
Sun May 14 23:33:13 PDT 2023


Shawn,

Just posted V3 to address your comments.

Thanks,
Peng.

> Subject: Re: [PATCH V2] soc: imx: support i.MX93 soc device
> 
> On Tue, May 09, 2023 at 05:19:42PM +0800, Peng Fan (OSS) wrote:
> > From: Peng Fan <peng.fan at nxp.com>
> >
> > Similar to i.MX8M, add i.MX93 soc device support
> 
> This commit log doesn't provide too much helpful information.  You may
> want to briefly introduce i.MX93 UID, which looks something new?
> 
> >
> > Signed-off-by: Peng Fan <peng.fan at nxp.com>
> > ---
> >
> > V2:
> >  The ocotp yaml has got R-b from DT maintainer:
> >
> >
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore
> > .kernel.org%2Fall%2F01be24b3-aaf2-e27b-d00e-
> f8649a497463%40linaro.org%
> >
> 2F&data=05%7C01%7Cpeng.fan%40nxp.com%7Ced8cd9c0eac146837e8c08d
> b54f1950
> >
> 5%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C638197168793784
> 144%7CUn
> >
> known%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI
> 6Ik1haW
> >
> wiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=2QBo%2ByyZflXjzQ%2FW
> 8jQBlald6Gt
> > w9kyUIu0pP2iIqhg%3D&reserved=0
> >
> >  Remove uid_length from V1 which is unused.
> >
> >  drivers/soc/imx/Makefile    |  2 +-
> >  drivers/soc/imx/soc-imx8m.c | 64
> > ++++++++++++++++++++++++++++++++++++-
> >  2 files changed, 64 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/soc/imx/Makefile b/drivers/soc/imx/Makefile index
> > a28c44a1f16a..83aff181ae51 100644
> > --- a/drivers/soc/imx/Makefile
> > +++ b/drivers/soc/imx/Makefile
> > @@ -7,5 +7,5 @@ obj-$(CONFIG_IMX_GPCV2_PM_DOMAINS) += gpcv2.o
> >  obj-$(CONFIG_SOC_IMX8M) += soc-imx8m.o
> >  obj-$(CONFIG_IMX8M_BLK_CTRL) += imx8m-blk-ctrl.o
> >  obj-$(CONFIG_IMX8M_BLK_CTRL) += imx8mp-blk-ctrl.o
> > -obj-$(CONFIG_SOC_IMX9) += imx93-src.o imx93-pd.o
> > +obj-$(CONFIG_SOC_IMX9) += soc-imx8m.o imx93-src.o imx93-pd.o
> >  obj-$(CONFIG_IMX9_BLK_CTRL) += imx93-blk-ctrl.o diff --git
> > a/drivers/soc/imx/soc-imx8m.c b/drivers/soc/imx/soc-imx8m.c index
> > 1dcd243df567..0e69b8b48183 100644
> > --- a/drivers/soc/imx/soc-imx8m.c
> > +++ b/drivers/soc/imx/soc-imx8m.c
> > @@ -25,8 +25,11 @@
> >
> >  #define IMX8MP_OCOTP_UID_OFFSET		0x10
> >
> > +#define IMX93_OCOTP_UID_OFFSET		0x80c0
> > +
> >  /* Same as ANADIG_DIGPROG_IMX7D */
> >  #define ANADIG_DIGPROG_IMX8MM	0x800
> > +#define ANADIG_DIGPROG_IMX93	0x800
> >
> >  struct imx8_soc_data {
> >  	char *name;
> > @@ -34,6 +37,7 @@ struct imx8_soc_data {  };
> >
> >  static u64 soc_uid;
> > +static u64 soc_uid_h;
> >
> >  #ifdef CONFIG_HAVE_ARM_SMCCC
> >  static u32 imx8mq_soc_revision_from_atf(void)
> > @@ -141,6 +145,53 @@ static u32 __init imx8mm_soc_revision(void)
> >  	return rev;
> >  }
> >
> > +static void __init imx93_soc_uid(void) {
> > +	void __iomem *ocotp_base;
> > +	struct device_node *np;
> > +
> > +	np = of_find_compatible_node(NULL, NULL, "fsl,imx93-ocotp");
> > +	if (!np)
> > +		return;
> > +
> > +	ocotp_base = of_iomap(np, 0);
> > +	WARN_ON(!ocotp_base);
> > +
> > +	soc_uid = readl_relaxed(ocotp_base + IMX93_OCOTP_UID_OFFSET +
> 0x8);
> > +	soc_uid <<= 32;
> > +	soc_uid |= readl_relaxed(ocotp_base + IMX93_OCOTP_UID_OFFSET
> + 0xC);
> > +
> > +	soc_uid_h = readl_relaxed(ocotp_base +
> IMX93_OCOTP_UID_OFFSET + 0x0);
> > +	soc_uid_h <<= 32;
> > +	soc_uid_h |= readl_relaxed(ocotp_base +
> IMX93_OCOTP_UID_OFFSET +
> > +0x4);
> > +
> > +	iounmap(ocotp_base);
> > +	of_node_put(np);
> > +}
> > +
> > +static u32 __init imx93_soc_revision(void) {
> > +	struct device_node *np;
> > +	void __iomem *anatop_base;
> > +	u32 rev;
> > +
> > +	np = of_find_compatible_node(NULL, NULL, "fsl,imx93-anatop");
> > +	if (!np)
> > +		return 0;
> > +
> > +	anatop_base = of_iomap(np, 0);
> > +	WARN_ON(!anatop_base);
> > +
> > +	rev = readl_relaxed(anatop_base + ANADIG_DIGPROG_IMX93);
> > +
> > +	iounmap(anatop_base);
> > +	of_node_put(np);
> > +
> > +	imx93_soc_uid();
> > +
> > +	return rev;
> > +}
> > +
> >  static const struct imx8_soc_data imx8mq_soc_data = {
> >  	.name = "i.MX8MQ",
> >  	.soc_revision = imx8mq_soc_revision, @@ -161,11 +212,17 @@
> static
> > const struct imx8_soc_data imx8mp_soc_data = {
> >  	.soc_revision = imx8mm_soc_revision,  };
> >
> > +static const struct imx8_soc_data imx93_soc_data = {
> > +	.name = "i.MX93",
> > +	.soc_revision = imx93_soc_revision,
> > +};
> > +
> >  static __maybe_unused const struct of_device_id imx8_soc_match[] = {
> >  	{ .compatible = "fsl,imx8mq", .data = &imx8mq_soc_data, },
> >  	{ .compatible = "fsl,imx8mm", .data = &imx8mm_soc_data, },
> >  	{ .compatible = "fsl,imx8mn", .data = &imx8mn_soc_data, },
> >  	{ .compatible = "fsl,imx8mp", .data = &imx8mp_soc_data, },
> > +	{ .compatible = "fsl,imx93", .data = &imx93_soc_data, },
> >  	{ }
> >  };
> >
> > @@ -212,7 +269,12 @@ static int __init imx8_soc_init(void)
> >  		goto free_soc;
> >  	}
> >
> > -	soc_dev_attr->serial_number = kasprintf(GFP_KERNEL, "%016llX",
> soc_uid);
> > +	if (soc_uid_h) {
> 
> Unnecessary parentheses.
> 
> Shawn
> 
> > +		soc_dev_attr->serial_number = kasprintf(GFP_KERNEL,
> "%016llX%016llX",
> > +							soc_uid_h, soc_uid);
> > +	} else {
> > +		soc_dev_attr->serial_number = kasprintf(GFP_KERNEL,
> "%016llX", soc_uid);
> > +	}
> >  	if (!soc_dev_attr->serial_number) {
> >  		ret = -ENOMEM;
> >  		goto free_rev;
> > --
> > 2.37.1
> >



More information about the linux-arm-kernel mailing list