Hi Guillaume, Thank you for the patch.
On Fri, Oct 24, 2025 at 16:17, "Guillaume La Roque (TI.com)" <[email protected]> wrote: > Add two new generic functions for AM6x family boards to simplify > board-specific implementations: > > - do_board_detect_am6(): Generic board detection function that reads > the on-board EEPROM. It first attempts to read at the configured > address, and if that fails, tries the alternate address > (CONFIG_EEPROM_CHIP_ADDRESS + 1). This provides a common > implementation that can be used across different AM6x boards. > > - setup_serial_am6(): Sets up the serial number environment variable > from the EEPROM data. The serial number is converted from > hexadecimal string format to a 16-character hexadecimal > representation and stored in the "serial#" environment variable. > > Both functions are protected by CONFIG_IS_ENABLED(TI_I2C_BOARD_DETECT) > and are designed to be used by AM62x, AM64x, AM65x, and other AM6x > family boards. > > Signed-off-by: Guillaume La Roque (TI.com) <[email protected]> Reviewed-by: Mattijs Korpershoek <[email protected]> > --- > board/ti/common/board_detect.c | 43 > ++++++++++++++++++++++++++++++++++++++++++ > board/ti/common/board_detect.h | 22 +++++++++++++++++++++ > 2 files changed, 65 insertions(+) > > diff --git a/board/ti/common/board_detect.c b/board/ti/common/board_detect.c > index a43cc075b92..d49e26fa453 100644 > --- a/board/ti/common/board_detect.c > +++ b/board/ti/common/board_detect.c > @@ -824,3 +824,46 @@ bool __maybe_unused board_ti_was_eeprom_read(void) > else > return false; > } > + > +#if CONFIG_IS_ENABLED(TI_I2C_BOARD_DETECT) > +int do_board_detect_am6(void) > +{ > + int ret; > + > + ret = ti_i2c_eeprom_am6_get_base(CONFIG_EEPROM_BUS_ADDRESS, > + CONFIG_EEPROM_CHIP_ADDRESS); > + if (ret) { > + printf("EEPROM not available at 0x%02x, trying to read at > 0x%02x\n", > + CONFIG_EEPROM_CHIP_ADDRESS, > + CONFIG_EEPROM_CHIP_ADDRESS + 1); > + ret = ti_i2c_eeprom_am6_get_base(CONFIG_EEPROM_BUS_ADDRESS, > + CONFIG_EEPROM_CHIP_ADDRESS + > + 1); > + if (ret) > + pr_err("Reading on-board EEPROM at 0x%02x failed %d\n", > + CONFIG_EEPROM_CHIP_ADDRESS + 1, ret); > + } > + > + return ret; > +} > + > +void setup_serial_am6(void) > +{ > + struct ti_am6_eeprom *ep = TI_AM6_EEPROM_DATA; > + unsigned long board_serial; > + char *endp; > + char serial_string[17] = { 0 }; > + > + if (env_get("serial#")) > + return; > + > + board_serial = simple_strtoul(ep->serial, &endp, 16); > + if (*endp != '\0') { > + pr_err("Error: Can't set serial# to %s\n", ep->serial); > + return; > + } > + > + snprintf(serial_string, sizeof(serial_string), "%016lx", board_serial); > + env_set("serial#", serial_string); > +} > +#endif > diff --git a/board/ti/common/board_detect.h b/board/ti/common/board_detect.h > index b057f3b2269..26ada2a449c 100644 > --- a/board/ti/common/board_detect.h > +++ b/board/ti/common/board_detect.h > @@ -313,6 +313,28 @@ int __maybe_unused ti_i2c_eeprom_am6_get(int bus_addr, > int dev_addr, > */ > int __maybe_unused ti_i2c_eeprom_am6_get_base(int bus_addr, int dev_addr); > > +/** > + * do_board_detect_am6() - Detect AM6x board and read EEPROM data > + * > + * This is a generic board detection function for AM6x family boards. > + * It attempts to read the on-board EEPROM at the configured address, > + * and if that fails, tries the alternate address > (CONFIG_EEPROM_CHIP_ADDRESS + 1). > + * > + * Return: 0 on success or corresponding error on failure. > + */ > +int do_board_detect_am6(void); > + > +/** > + * setup_serial_am6() - Setup serial number environment variable for AM6x > boards > + * > + * This function reads the serial number from the AM6x EEPROM data and > + * sets the "serial#" environment variable. The serial number is converted > + * from hexadecimal string format to a 16-character hexadecimal > representation. > + * > + * EEPROM should be already read before calling this function. > + */ > +void setup_serial_am6(void); > + > #ifdef CONFIG_TI_I2C_BOARD_DETECT > /** > * board_ti_is() - Board detection logic for TI EVMs > > -- > 2.34.1

