
On 11/21/24 6:21 PM, Christoph Niedermaier wrote:
The env variable "SN" is used to store the serial number on DH electronics SoMs. New SoMs will use the variable "dh_som_serial_number". To ensure compatibility, these env variables are synchronized. This is achieved using callback functions. To avoid recursive calls, these are locked against each other.
What kind of recursive calls?
It would be good to expand the commit message and elaborate on the recursive calls problem .
diff --git a/board/dhelectronics/common/dh_common.c b/board/dhelectronics/common/dh_common.c index a7b0472a09..2e3e5c483b 100644 --- a/board/dhelectronics/common/dh_common.c +++ b/board/dhelectronics/common/dh_common.c @@ -45,6 +45,32 @@ struct eeprom_id_page { #define DH_EEPROM_ID_PAGE_V1_0_DATA_LEN (sizeof(struct eeprom_id_page) - \ offsetof(struct eeprom_id_page, mac0))
+static bool in_dh_som_serial_number; +static bool in_SN;
+static int on_dh_som_serial_number(const char *name, const char *value, enum env_op op,
int flags)
+{
- in_dh_som_serial_number = true;
- if (!in_SN)
env_set("SN", value);
- in_dh_som_serial_number = false;
- return 0;
+}
+U_BOOT_ENV_CALLBACK(dh_som_serial_number, on_dh_som_serial_number);
+static int on_SN(const char *name, const char *value, enum env_op op, int flags) +{
- in_SN = true;
- if (!in_dh_som_serial_number)
env_set("dh_som_serial_number", value);
- in_SN = false;
- return 0;
+}
+U_BOOT_ENV_CALLBACK(SN, on_SN);
- bool dh_mac_is_in_env(const char *env) { unsigned char enetaddr[6];
diff --git a/configs/imx8mp_dhsom.config b/configs/imx8mp_dhsom.config index 416143178c..87bf3bf65e 100644 --- a/configs/imx8mp_dhsom.config +++ b/configs/imx8mp_dhsom.config @@ -59,6 +59,7 @@ CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS=20 CONFIG_SYS_EEPROM_SIZE=16384 CONFIG_SYS_I2C_EEPROM_ADDR_LEN=2
+CONFIG_ENV_CALLBACK_LIST_STATIC="dh_som_serial_number:dh_som_serial_number,SN:SN,"
dh_common.c is also used on imx6 and stm32 boards, so this has to go into configs/dhsom.config fragment I think ?