On 6/28/21 8:40 AM, Ahmad Fatoum wrote: > The Kconfig symbol already warns users that barebox updates > that add new instances of machine_id_set_hashable may cause the machine > ID to change making the future less useful. Recent changes allow the > board DT to identify a specific nvmem cell to use for supplying a machine > ID, making the old way of drivers providing machine IDs and possibly > overriding each other no longer necessary or recommended. I cannot parse the first sentence of the commit message. Regards, Bastian > > Make this explicit by allowing the old code to be disabled. As we only > have a single user now and won't accept any new ones, we can remove the > warning about it possibly changing after update. > > Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> > --- > common/Kconfig | 18 +++++++++++------- > common/machine_id.c | 11 ++++++++--- > drivers/nvmem/Kconfig | 1 + > drivers/nvmem/ocotp.c | 7 ++++++- > include/machine_id.h | 16 ---------------- > 5 files changed, 26 insertions(+), 27 deletions(-) > delete mode 100644 include/machine_id.h > > diff --git a/common/Kconfig b/common/Kconfig > index a4a109f04f08..a2aa0b2568de 100644 > --- a/common/Kconfig > +++ b/common/Kconfig > @@ -1069,13 +1069,11 @@ config MACHINE_ID > select NVMEM > help > Compute a persistent machine-specific id and store it to $global.machine_id. > - The id is a hash of device-specific information added either via > - machine_id_set_hashable() or by hashing the nvmem cell referenced by the > - /chosen/barebox,machine-id device tree property. > - > - With machine_id_set_hashable(), the last call prior to the late initcall > - set_machine_id() willl be used to generate the machine id. This means > - updating barebox may change the machine id! > + The id is a hash of device-specific information. This information > + comes from the nvmem cell device tree node path described by the > + /chosen/barebox,machine-id-path property. As a special case, the i.MX6 OCOTP > + driver supplies the SoC UID as hashable for when /chosen/barebox,machine-id-path > + is not specified. > > global.bootm.provide_machine_id may be used to automatically set > the linux.bootargs.machine_id global variable with a value of > @@ -1084,6 +1082,12 @@ config MACHINE_ID > Note: if no hashable information is available no machine id will be passed > to the kernel. > > +config MACHINE_ID_LEGACY > + bool > + help > + Selected by i.MX OCOTP driver, so it can set the SoC UID as hashable. > + New platforms should use /chosen/barebox,machine-id-path instead. > + > config SYSTEMD_OF_WATCHDOG > bool "inform devicetree-enabled kernel of used watchdog" > depends on WATCHDOG && OFTREE && FLEXIBLE_BOOTARGS > diff --git a/common/machine_id.c b/common/machine_id.c > index fd2f0888a6cd..8303c0b7aa87 100644 > --- a/common/machine_id.c > +++ b/common/machine_id.c > @@ -9,23 +9,24 @@ > #include <globalvar.h> > #include <magicvar.h> > #include <crypto/sha.h> > -#include <machine_id.h> > #include <linux/err.h> > #include <linux/nvmem-consumer.h> > #include <of.h> > > #define MACHINE_ID_LENGTH 32 > > +#ifdef CONFIG_MACHINE_ID_LEGACY > static void *__machine_id_hashable; > static size_t __machine_id_hashable_length; > > - > +/* Shouldn't be called from new code */ > +void machine_id_set_hashable(const void *hashable, size_t len); > void machine_id_set_hashable(const void *hashable, size_t len) > { > - > __machine_id_hashable = xmemdup(hashable, len); > __machine_id_hashable_length = len; > } > +#endif > > static const void *machine_id_get_hashable(size_t *len) > { > @@ -52,8 +53,12 @@ static const void *machine_id_get_hashable(size_t *len) > return ret; > > no_cell: > +#ifdef CONFIG_MACHINE_ID_LEGACY > *len = __machine_id_hashable_length; > return __machine_id_hashable; > +#else > + return NULL; > +#endif > } > > static int machine_id_set_globalvar(void) > diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig > index 3781f7a839fc..08a5765573a8 100644 > --- a/drivers/nvmem/Kconfig > +++ b/drivers/nvmem/Kconfig > @@ -25,6 +25,7 @@ config NVMEM_SNVS_LPGPR > config IMX_OCOTP > tristate "i.MX6 On Chip OTP controller" > depends on ARCH_IMX6 || ARCH_VF610 || ARCH_IMX8M || ARCH_IMX7 > + select MACHINE_ID_LEGACY > depends on OFDEVICE > help > This adds support for the i.MX6 On-Chip OTP controller. Currently the > diff --git a/drivers/nvmem/ocotp.c b/drivers/nvmem/ocotp.c > index b2fad3c68770..0b10e52a86ba 100644 > --- a/drivers/nvmem/ocotp.c > +++ b/drivers/nvmem/ocotp.c > @@ -29,7 +29,6 @@ > #include <regmap.h> > #include <linux/clk.h> > #include <mach/ocotp.h> > -#include <machine_id.h> > #include <mach/ocotp-fusemap.h> > #include <linux/nvmem-provider.h> > > @@ -689,6 +688,7 @@ static int imx_ocotp_read(void *ctx, unsigned offset, void *val, size_t bytes) > > static void imx_ocotp_set_unique_machine_id(void) > { > + extern void machine_id_set_hashable(const void *hashable, size_t len); > uint32_t unique_id_parts[UNIQUE_ID_NUM]; > int i; > > @@ -785,6 +785,11 @@ static int imx_ocotp_probe(struct device_d *dev) > ethaddr->value, ethaddr); > } > > + /* Special case: new machine id providers should provide a nvmem cell > + * and reference its path via /chosen/barebox,machine-id-path. > + * For i.MX, we support the legacy way of the driver supplying the > + * hash instead > + */ > if (IS_ENABLED(CONFIG_MACHINE_ID)) > imx_ocotp_set_unique_machine_id(); > > diff --git a/include/machine_id.h b/include/machine_id.h > deleted file mode 100644 > index 31d5e0bb2851..000000000000 > --- a/include/machine_id.h > +++ /dev/null > @@ -1,16 +0,0 @@ > -#ifndef __MACHINE_ID_H__ > -#define __MACHINE_ID_H__ > - > -#if IS_ENABLED(CONFIG_MACHINE_ID) > - > -void machine_id_set_hashable(const void *hashable, size_t len); > - > -#else > - > -static inline void machine_id_set_hashable(const void *hashable, size_t len) > -{ > -} > - > -#endif /* CONFIG_MACHINE_ID */ > - > -#endif /* __MACHINE_ID_H__ */ > -- 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 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox