diff mbox series

[v2] ARM: mx6: Add function to set serial#

Message ID 20210204214422.1701664-1-sean.anderson@seco.com
State Accepted
Commit 1ce6e10c61c7d74fce79749ef37066dcf5b52b41
Delegated to: Stefano Babic
Headers show
Series [v2] ARM: mx6: Add function to set serial# | expand

Commit Message

Sean Anderson Feb. 4, 2021, 9:44 p.m. UTC
The serial number OTP is similar to the imx7 version, except that the
register names are different. This also sets serial# directly, instead of
providing board_get_serial.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
---

Changes in v2:
- Populate serial# directly and call this from arch_misc_init

 arch/arm/mach-imx/mx6/soc.c | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

Comments

Tom Rini Feb. 4, 2021, 9:58 p.m. UTC | #1
On Thu, Feb 04, 2021 at 04:44:22PM -0500, Sean Anderson wrote:

> The serial number OTP is similar to the imx7 version, except that the
> register names are different. This also sets serial# directly, instead of
> providing board_get_serial.
> 
> Signed-off-by: Sean Anderson <sean.anderson@seco.com>

Reviewed-by: Tom Rini <trini@konsulko.com>
Heinrich Schuchardt Feb. 4, 2021, 10:03 p.m. UTC | #2
On 2/4/21 10:58 PM, Tom Rini wrote:
> On Thu, Feb 04, 2021 at 04:44:22PM -0500, Sean Anderson wrote:
>
>> The serial number OTP is similar to the imx7 version, except that the
>> register names are different. This also sets serial# directly, instead of
>> providing board_get_serial.
>>
>> Signed-off-by: Sean Anderson <sean.anderson@seco.com>
>
> Reviewed-by: Tom Rini <trini@konsulko.com>
>

The current patch is without effect.

We need to enable CONFIG_ARCH_MISC_INIT on i.MX6 by default, e.g.

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 95557d6ed6..ba189c404d 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -901,6 +901,7 @@ config ARCH_MX6
         select SYS_FSL_HAS_SEC
         select SYS_FSL_SEC_COMPAT_4
         select SYS_FSL_SEC_LE
+       select ARCH_MISC_INIT
         imply MXC_GPIO
         imply SYS_THUMB_BUILD

Best regards

Heinrich
Sean Anderson Feb. 4, 2021, 10:12 p.m. UTC | #3
On 2/4/21 5:03 PM, Heinrich Schuchardt wrote:
 > On 2/4/21 10:58 PM, Tom Rini wrote:
 >> On Thu, Feb 04, 2021 at 04:44:22PM -0500, Sean Anderson wrote:
 >>
 >>> The serial number OTP is similar to the imx7 version, except that the
 >>> register names are different. This also sets serial# directly,
 >>> instead of
 >>> providing board_get_serial.
 >>>
 >>> Signed-off-by: Sean Anderson <sean.anderson@seco.com>
 >>
 >> Reviewed-by: Tom Rini <trini@konsulko.com>
 >>
 >
 > The current patch is without effect.
 >
 > We need to enable CONFIG_ARCH_MISC_INIT on i.MX6 by default, e.g.
 >
 > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
 > index 95557d6ed6..ba189c404d 100644
 > --- a/arch/arm/Kconfig
 > +++ b/arch/arm/Kconfig
 > @@ -901,6 +901,7 @@ config ARCH_MX6
 >          select SYS_FSL_HAS_SEC
 >          select SYS_FSL_SEC_COMPAT_4
 >          select SYS_FSL_SEC_LE
 > +       select ARCH_MISC_INIT
 >          imply MXC_GPIO
 >          imply SYS_THUMB_BUILD
 >
 > Best regards
 >
 > Heinrich

Do any boards on i.MX6 currently set serial# themselves? arch_misc_init
is called before board_late_init, which is (AFACT) typically where
boards set serial#. Any boards which conditionally set serial# (e.g.
from an eeprom) will not set things up properly. I looked over things
quickly, and I didn't see anything. So it may be fine to enable this.

Though by this logic, shouldn't you have implied ARCH_MISC_INIT back in
90865614b4 ("ARM: mx6: make CAAM usable on the i.MX6 boards")?

--Sean
Tom Rini Feb. 4, 2021, 10:23 p.m. UTC | #4
On Thu, Feb 04, 2021 at 11:03:06PM +0100, Heinrich Schuchardt wrote:
> On 2/4/21 10:58 PM, Tom Rini wrote:
> > On Thu, Feb 04, 2021 at 04:44:22PM -0500, Sean Anderson wrote:
> > 
> > > The serial number OTP is similar to the imx7 version, except that the
> > > register names are different. This also sets serial# directly, instead of
> > > providing board_get_serial.
> > > 
> > > Signed-off-by: Sean Anderson <sean.anderson@seco.com>
> > 
> > Reviewed-by: Tom Rini <trini@konsulko.com>
> > 
> 
> The current patch is without effect.
> 
> We need to enable CONFIG_ARCH_MISC_INIT on i.MX6 by default, e.g.
> 
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 95557d6ed6..ba189c404d 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -901,6 +901,7 @@ config ARCH_MX6
>         select SYS_FSL_HAS_SEC
>         select SYS_FSL_SEC_COMPAT_4
>         select SYS_FSL_SEC_LE
> +       select ARCH_MISC_INIT
>         imply MXC_GPIO
>         imply SYS_THUMB_BUILD

No, we don't need to enable it by default.  If boards want it, they can
enable it.
Heinrich Schuchardt Feb. 4, 2021, 10:31 p.m. UTC | #5
On 2/4/21 11:12 PM, Sean Anderson wrote:
>
>
> On 2/4/21 5:03 PM, Heinrich Schuchardt wrote:
>  > On 2/4/21 10:58 PM, Tom Rini wrote:
>  >> On Thu, Feb 04, 2021 at 04:44:22PM -0500, Sean Anderson wrote:
>  >>
>  >>> The serial number OTP is similar to the imx7 version, except that the
>  >>> register names are different. This also sets serial# directly,
>  >>> instead of
>  >>> providing board_get_serial.
>  >>>
>  >>> Signed-off-by: Sean Anderson <sean.anderson@seco.com>
>  >>
>  >> Reviewed-by: Tom Rini <trini@konsulko.com>
>  >>
>  >
>  > The current patch is without effect.
>  >
>  > We need to enable CONFIG_ARCH_MISC_INIT on i.MX6 by default, e.g.
>  >
>  > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
>  > index 95557d6ed6..ba189c404d 100644
>  > --- a/arch/arm/Kconfig
>  > +++ b/arch/arm/Kconfig
>  > @@ -901,6 +901,7 @@ config ARCH_MX6
>  >          select SYS_FSL_HAS_SEC
>  >          select SYS_FSL_SEC_COMPAT_4
>  >          select SYS_FSL_SEC_LE
>  > +       select ARCH_MISC_INIT
>  >          imply MXC_GPIO
>  >          imply SYS_THUMB_BUILD
>  >
>  > Best regards
>  >
>  > Heinrich
>
> Do any boards on i.MX6 currently set serial# themselves? arch_misc_init
> is called before board_late_init, which is (AFACT) typically where
> boards set serial#. Any boards which conditionally set serial# (e.g.
> from an eeprom) will not set things up properly. I looked over things
> quickly, and I didn't see anything. So it may be fine to enable this.
>
> Though by this logic, shouldn't you have implied ARCH_MISC_INIT back in
> 90865614b4 ("ARM: mx6: make CAAM usable on the i.MX6 boards")?

+1 to activate the flag.
I was already wondering why the random number generator on my Wandboard
was not working.

The three i.MX6 boards with misc_init_r() don's set serial#:

board/congatec/cgtqmx6eval/cgtqmx6eval.c:755:int misc_init_r(void)
board/toradex/apalis_imx6/apalis_imx6.c:786:int misc_init_r(void)
board/toradex/colibri_imx6/colibri_imx6.c:679:int misc_init_r(void)

git grep -n 'serial#' | grep mx6

finds nothing.

Best regards

Heinrich

>
> --Sean
Tom Rini Feb. 4, 2021, 10:55 p.m. UTC | #6
On Thu, Feb 04, 2021 at 11:31:22PM +0100, Heinrich Schuchardt wrote:
> On 2/4/21 11:12 PM, Sean Anderson wrote:
> > 
> > 
> > On 2/4/21 5:03 PM, Heinrich Schuchardt wrote:
> >  > On 2/4/21 10:58 PM, Tom Rini wrote:
> >  >> On Thu, Feb 04, 2021 at 04:44:22PM -0500, Sean Anderson wrote:
> >  >>
> >  >>> The serial number OTP is similar to the imx7 version, except that the
> >  >>> register names are different. This also sets serial# directly,
> >  >>> instead of
> >  >>> providing board_get_serial.
> >  >>>
> >  >>> Signed-off-by: Sean Anderson <sean.anderson@seco.com>
> >  >>
> >  >> Reviewed-by: Tom Rini <trini@konsulko.com>
> >  >>
> >  >
> >  > The current patch is without effect.
> >  >
> >  > We need to enable CONFIG_ARCH_MISC_INIT on i.MX6 by default, e.g.
> >  >
> >  > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> >  > index 95557d6ed6..ba189c404d 100644
> >  > --- a/arch/arm/Kconfig
> >  > +++ b/arch/arm/Kconfig
> >  > @@ -901,6 +901,7 @@ config ARCH_MX6
> >  >          select SYS_FSL_HAS_SEC
> >  >          select SYS_FSL_SEC_COMPAT_4
> >  >          select SYS_FSL_SEC_LE
> >  > +       select ARCH_MISC_INIT
> >  >          imply MXC_GPIO
> >  >          imply SYS_THUMB_BUILD
> >  >
> >  > Best regards
> >  >
> >  > Heinrich
> > 
> > Do any boards on i.MX6 currently set serial# themselves? arch_misc_init
> > is called before board_late_init, which is (AFACT) typically where
> > boards set serial#. Any boards which conditionally set serial# (e.g.
> > from an eeprom) will not set things up properly. I looked over things
> > quickly, and I didn't see anything. So it may be fine to enable this.
> > 
> > Though by this logic, shouldn't you have implied ARCH_MISC_INIT back in
> > 90865614b4 ("ARM: mx6: make CAAM usable on the i.MX6 boards")?
> 
> +1 to activate the flag.
> I was already wondering why the random number generator on my Wandboard
> was not working.
> 
> The three i.MX6 boards with misc_init_r() don's set serial#:
> 
> board/congatec/cgtqmx6eval/cgtqmx6eval.c:755:int misc_init_r(void)
> board/toradex/apalis_imx6/apalis_imx6.c:786:int misc_init_r(void)
> board/toradex/colibri_imx6/colibri_imx6.c:679:int misc_init_r(void)
> 
> git grep -n 'serial#' | grep mx6
> 
> finds nothing.

No.  We have things in Kconfig so that boards can enable what they want
without having to go and change the config.h file.  We only use
select/imply for things that it's between required (if you don't have
this, your platform does not function at all) and strongly encouraged
(it should be hard to opt out of distro defaults for example because
this is what makes almost any distribution turn-key to use on a given
platform).  Everything else should be something easily turned on/off in
the defconfig.  Is "serial#" and in turn the serial-number property in
the device tree handy?  Sure is.  Has i.MX6 been going fine without it
for it's long lifespan?  Yup.  Is there an argument that it should be
easier to opt-out of on all the other platforms?  Probably so, yes (I
think there's some cases where Linux userspace expects it for some
stuff, I want to say allwinner?  Maybe Pi?).
Stefano Babic March 1, 2021, 11:55 a.m. UTC | #7
> The serial number OTP is similar to the imx7 version, except that the
> register names are different. This also sets serial# directly, instead of
> providing board_get_serial.
> Signed-off-by: Sean Anderson <sean.anderson@seco.com>
> Reviewed-by: Tom Rini <trini@konsulko.com>
Applied to u-boot-imx, master, thanks !

Best regards,
Stefano Babic
diff mbox series

Patch

diff --git a/arch/arm/mach-imx/mx6/soc.c b/arch/arm/mach-imx/mx6/soc.c
index bf6dddfdc9..aacfc854a2 100644
--- a/arch/arm/mach-imx/mx6/soc.c
+++ b/arch/arm/mach-imx/mx6/soc.c
@@ -7,6 +7,7 @@ 
  */
 
 #include <common.h>
+#include <env.h>
 #include <init.h>
 #include <linux/delay.h>
 #include <linux/errno.h>
@@ -696,11 +697,47 @@  void imx_setup_hdmi(void)
 #endif
 
 #ifdef CONFIG_ARCH_MISC_INIT
+/*
+ * UNIQUE_ID describes a unique ID based on silicon wafer
+ * and die X/Y position
+ *
+ * UNIQUE_ID offset 0x410
+ * 31:0 fuse 0
+ * FSL-wide unique, encoded LOT ID STD II/SJC CHALLENGE/ Unique ID
+ *
+ * UNIQUE_ID offset 0x420
+ * 31:24 fuse 1
+ * The X-coordinate of the die location on the wafer/SJC CHALLENGE/ Unique ID
+ * 23:16 fuse 1
+ * The Y-coordinate of the die location on the wafer/SJC CHALLENGE/ Unique ID
+ * 15:11 fuse 1
+ * The wafer number of the wafer on which the device was fabricated/SJC
+ * CHALLENGE/ Unique ID
+ * 10:0 fuse 1
+ * FSL-wide unique, encoded LOT ID STD II/SJC CHALLENGE/ Unique ID
+ */
+static void setup_serial_number(void)
+{
+	char serial_string[17];
+	struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR;
+	struct fuse_bank *bank = &ocotp->bank[0];
+	struct fuse_bank0_regs *fuse =
+		(struct fuse_bank0_regs *)bank->fuse_regs;
+
+	if (env_get("serial#"))
+		return;
+
+	snprintf(serial_string, sizeof(serial_string), "%08x%08x",
+		 fuse->uid_low, fuse->uid_high);
+	env_set("serial#", serial_string);
+}
+
 int arch_misc_init(void)
 {
 #ifdef CONFIG_FSL_CAAM
 	sec_init();
 #endif
+	setup_serial_number();
 	return 0;
 }
 #endif