[PATCH 3/5] common: machine_id: deprecate machine_id_set_hashable

Ahmad Fatoum a.fatoum at pengutronix.de
Mon Jun 28 03:12:09 PDT 2021



On 28.06.21 11:50, Bastian Krause wrote:
> 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.

There should've been a comma at the end of the first line.

Cheers,
Ahmad

> 
> 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 at pengutronix.de>
>> ---
>>  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 |



More information about the barebox mailing list