summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrieder Schrempf <[email protected]>2025-11-04 13:54:27 +0100
committerFabio Estevam <[email protected]>2025-11-04 12:46:11 -0300
commit5b4d3c81719d0e2d6ddef022c8ec904caa5a01d8 (patch)
tree6d2644f2b5591e4648a6474288434ba47bc1334c
parentf00b09abbf18b9cc91311b0330f4f49fc1917019 (diff)
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 <[email protected]>
-rw-r--r--board/kontron/sl-mx6ul/Kconfig2
-rw-r--r--board/kontron/sl-mx6ul/sl-mx6ul.c32
-rw-r--r--configs/kontron-sl-mx6ul_defconfig1
3 files changed, 35 insertions, 0 deletions
diff --git a/board/kontron/sl-mx6ul/Kconfig b/board/kontron/sl-mx6ul/Kconfig
index 7a4ffbed289..a6d3fa49778 100644
--- a/board/kontron/sl-mx6ul/Kconfig
+++ b/board/kontron/sl-mx6ul/Kconfig
@@ -9,4 +9,6 @@ config SYS_VENDOR
config SYS_CONFIG_NAME
default "kontron-sl-mx6ul"
+source "board/kontron/common/Kconfig"
+
endif
diff --git a/board/kontron/sl-mx6ul/sl-mx6ul.c b/board/kontron/sl-mx6ul/sl-mx6ul.c
index 65f9b75c1a0..9dda8822ef9 100644
--- a/board/kontron/sl-mx6ul/sl-mx6ul.c
+++ b/board/kontron/sl-mx6ul/sl-mx6ul.c
@@ -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");
diff --git a/configs/kontron-sl-mx6ul_defconfig b/configs/kontron-sl-mx6ul_defconfig
index 9f7003bf54c..c6d450419cc 100644
--- a/configs/kontron-sl-mx6ul_defconfig
+++ b/configs/kontron-sl-mx6ul_defconfig
@@ -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