stm32mp1: board: add environment variable for board id and board rev
authorPatrick Delaunay <patrick.delaunay@st.com>
Tue, 30 Jul 2019 17:16:37 +0000 (19:16 +0200)
committerPatrice Chotard <patrice.chotard@st.com>
Tue, 27 Aug 2019 09:19:23 +0000 (11:19 +0200)
Add variable to identify board with HW id (read from OTP)
and revision.

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
board/st/stm32mp1/stm32mp1.c

index 279c7b77979987006010f518541fbdc242b9d86e..fdc4af3b64b19ce4d08953098e6d8da415b74d53 100644 (file)
@@ -539,6 +539,10 @@ int board_late_init(void)
 #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
        const void *fdt_compat;
        int fdt_compat_len;
+       int ret;
+       u32 otp;
+       struct udevice *dev;
+       char buf[10];
 
        fdt_compat = fdt_getprop(gd->fdt_blob, 0, "compatible",
                                 &fdt_compat_len);
@@ -548,6 +552,21 @@ int board_late_init(void)
                else
                        env_set("board_name", fdt_compat + 3);
        }
+       ret = uclass_get_device_by_driver(UCLASS_MISC,
+                                         DM_GET_DRIVER(stm32mp_bsec),
+                                         &dev);
+
+       if (!ret)
+               ret = misc_read(dev, STM32_BSEC_SHADOW(BSEC_OTP_BOARD),
+                               &otp, sizeof(otp));
+       if (!ret && otp) {
+               snprintf(buf, sizeof(buf), "0x%04x", otp >> 16);
+               env_set("board_id", buf);
+
+               snprintf(buf, sizeof(buf), "0x%04x",
+                        ((otp >> 8) & 0xF) - 1 + 0xA);
+               env_set("board_rev", buf);
+       }
 #endif
 
        /* for DK1/DK2 boards */