Re: [PATCH v2 1/2] common: misc: add soc_uid_hex to globalvar

Sascha Hauer
2026-04-22T09:16:58Z

On Wed, Apr 22, 2026 at 10:52:34AM +0200, Fabian Pflug wrote:
> On Wed, 2026-04-22 at 10:25 +0200, Sascha Hauer wrote:
> > On Wed, Apr 22, 2026 at 10:14:11AM +0200, Fabian Pflug wrote:
> > > On Wed, 2026-04-22 at 09:56 +0200, Sascha Hauer wrote:
> > > > On Wed, Apr 15, 2026 at 01:10:21PM +0200, Fabian Pflug wrote:
> > > > > uidstr and uidbuf could be the same, but don't have to be. This results
> > > > > in uncertainty on what exactly is the current UID used for
> > > > > machine_set_hashable and to compare against with TLV.
> > > > >
> > > > > Add an additional global var, that encodes SoC-UID registers in a
> > > > > manner uniform across SoCs/manufacturers.
> > > > >
> > > > > This can now be used to feed as data for bound-soc-uid into
> > > > > `bareboxtlv-generator.py` or as the value for
> > > > > `CONFIG_HABV4_CSF_UNLOCK_UID`
> > > > >
> > > > > Signed-off-by: Fabian Pflug <f.pflug@pengutronix.de>
> > > > > ---
> > > > >  common/misc.c | 9 +++++++--
> > > > >  1 file changed, 7 insertions(+), 2 deletions(-)
> > > > >
> > > > > diff --git a/common/misc.c b/common/misc.c
> > > > > index ecf9574f7a..be896706d6 100644
> > > > > --- a/common/misc.c
> > > > > +++ b/common/misc.c
> > > > > @@ -268,6 +268,7 @@ const uuid_t *barebox_get_product_uuid(void)
> > > > >  BAREBOX_MAGICVAR(global.product.uuid, "SMBIOS-reported product UUID");
> > > > >
> > > > >  static char *soc_uid_str;
> > > > > +static char *soc_uid_bin_str;
> > > > >  static void *soc_uid;
> > > > >  static size_t soc_uid_len;
> > > > >
> > > > > @@ -295,18 +296,22 @@ void barebox_set_soc_uid(const char *uidstr, const void *uidbuf, size_t len)
> > > > >   soc_uid = xmemdup(uidbuf, len);
> > > > >   soc_uid_len = len;
> > > > >
> > > > > + soc_uid_bin_str = xzalloc(len * 2 + 1);
> > > > > + bin2hex(soc_uid_bin_str, uidbuf, len);
> > > > > +
> > > > >   if (uidstr) {
> > > > >   soc_uid_str = xstrdup(uidstr);
> > > > >   } else {
> > > > > - soc_uid_str = xzalloc(len * 2 + 1);
> > > > > - bin2hex(soc_uid_str, uidbuf, len);
> > > > > + soc_uid_str = soc_uid_bin_str;
> > > > >   }
> > > > >
> > > > >   machine_id_set_hashable(uidbuf, len);
> > > > >
> > > > >   globalvar_add_simple_string("soc_uid", &soc_uid_str);
> > > > > + globalvar_add_simple_string("soc_uid_hex", &soc_uid_bin_str);
> > > >
> > > > barebox_set_soc_uid() takes two arguments, the raw SoC UID data and a
> > > > SoC specific string representation of that data. It's unfortunate that
> > > > you need two different interpretations of the raw data on i.MX, one to
> > > > match the Linux /sys/ format and one to put into the CSF file.
> > > >
> > > > Anyway, just adding a second string representation not only for i.MX,
> > > > but also for all other SoCs is rather confusing. For the i.MX field
> > > > return case we could also add a hab command option or a i.MX specific
> > > > globalvar which is exactly described as "SoC UID in the format the CSF
> > > > needs"
> > >
> > > Please don't get confused. This is an additional benefit for the CSF in i.MX. The main focus here is to have a
> > > string
> > > representation, that can be used in TLV generation, with the script in
> > > https://github.com/barebox/barebox/blob/master/scripts/bareboxtlv-generator/bareboxtlv-generator.py
> > >
> > > The value
> > > 0x0024, bound-soc-uid, "Reject TLV if supplied binary data does not match UID SoC register"
> > > https://github.com/barebox/barebox/blob/v2026.04.0/common/tlv/barebox.c#L200
> > >
> > > Needs this representation for all vendors, not just i.MX.
> > > And since the values for soc_bin and uidstr can differ greatly, it is very soc specific on what value to use in the
> > > https://github.com/barebox/barebox/blob/master/scripts/bareboxtlv-generator/data-example.yaml
> > >
> > > This patch tries to fix it, by giving a value, that can just be copied to TLC data.yaml
> >
> > Ok, I can much better buy TLV support as an argument.
> >
> > Please add a
> >
> > BAREBOX_MAGICVAR(global.soc_uid_hex,
> >           "byte array representation of the raw SoC UID");
>
> There already is
>
> BAREBOX_MAGICVAR(global.soc_uid_hex, "SoC Unique ID (in hex)");
>
> And since it is a single value and not a byte array, I think byte array is the wrong representation.
> Using a byte-array for TLV does not work with the TLV tooling. This expects a single value.

You are right, byte array is not the correct term here. What I wanted to
make clear is that it is the raw buffer content with the first byte in
the buffer being the first two digits of the string, just to make the
difference between these two clearer:

global.soc_uid=0011223344556677 "SoC Unique ID"
global.soc_uid_hex=7766554433221100 "SoC Unique ID (in hex)"

Both are obviously hex values, which one means what?

Sascha

--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |