imx: kontron-sl-mx6ul: Add support for reading HW UIDs

The factory provides a CPU UID in the OTPs and the SoM module
and the carrier board might provide additional UIDs in the GP
registers of the OTPs. Load these values in the following order
and create a serial number string:

* Board UID (GP2)
* SoM UID (GP1)
* CPU UID (UNIQUE_ID)

The string is stored in the "serial#" env variable and
exported to Linux. Further this prints the used UID to the
console which looks like this

  ID:    0042152331 (Board)

or:

  ID:    0030124840 (SoM)

or:

  ID:    4696668CD9516886 (CPU)

Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
This commit is contained in:
Frieder Schrempf
2025-11-04 13:54:27 +01:00
committed by Fabio Estevam
parent f00b09abbf
commit 5b4d3c8171
3 changed files with 35 additions and 0 deletions

View File

@@ -9,4 +9,6 @@ config SYS_VENDOR
config SYS_CONFIG_NAME
default "kontron-sl-mx6ul"
source "board/kontron/common/Kconfig"
endif

View File

@@ -14,8 +14,37 @@
#include "sl-mx6ul-common.h"
#include "../common/hw-uid.h"
DECLARE_GLOBAL_DATA_PTR;
#if IS_ENABLED(CONFIG_KONTRON_HW_UID)
struct uid_otp_loc uid_otp_locations[] = {
{
.addr = (u32 *)(OCOTP_BASE_ADDR + 0x670),
.len = 1,
.format = UID_OTP_FORMAT_DEC,
.desc = "BOARD"
},
{
.addr = (u32 *)(OCOTP_BASE_ADDR + 0x660),
.len = 1,
.format = UID_OTP_FORMAT_DEC,
.desc = "SOM"
},
#if IS_ENABLED(CONFIG_KONTRON_HW_UID_USE_SOC_FALLBACK)
{
.addr = (u32 *)(OCOTP_BASE_ADDR + 0x410),
.len = 2,
.format = UID_OTP_FORMAT_HEX,
.desc = "SOC"
}
#endif
};
#endif /* CONFIG_KONTRON_HW_UID */
int dram_init(void)
{
gd->ram_size = imx_ddr_size();
@@ -91,6 +120,9 @@ int board_init(void)
int board_late_init(void)
{
if (IS_ENABLED(CONFIG_KONTRON_HW_UID))
get_serial_number(uid_otp_locations, ARRAY_SIZE(uid_otp_locations));
if (is_boot_from_usb()) {
env_set("bootdelay", "0");
env_set("bootcmd", "fastboot 0");

View File

@@ -13,6 +13,7 @@ CONFIG_ENV_SECT_SIZE=0x4000
CONFIG_MX6UL=y
CONFIG_TARGET_KONTRON_MX6UL=y
CONFIG_DM_GPIO=y
CONFIG_KONTRON_HW_UID=y
CONFIG_DEFAULT_DEVICE_TREE="nxp/imx/imx6ul-kontron-bl"
CONFIG_SPL_MMC=y
CONFIG_SPL_SERIAL=y