diff options
author | Bryan O'Donoghue <bryan.odonoghue@linaro.org> | 2018-03-26 15:27:34 +0100 |
---|---|---|
committer | Stefano Babic <sbabic@denx.de> | 2018-04-15 11:44:13 +0200 |
commit | 852cc548b3fdf6d5b46e2a96f876d14608ccdcf4 (patch) | |
tree | a21ec8af3f241ebcda1c1db7277e8bcca7f0bbae /board/warp7/warp7.c | |
parent | 1ab1ffded4f1363080324d96a12fd76c90175be2 (diff) | |
download | u-boot-852cc548b3fdf6d5b46e2a96f876d14608ccdcf4.tar.gz u-boot-852cc548b3fdf6d5b46e2a96f876d14608ccdcf4.tar.bz2 u-boot-852cc548b3fdf6d5b46e2a96f876d14608ccdcf4.zip |
warp7: Set u-boot serial# based on OTP value
u-boot has a standard "serial#" environment variable that is suitable
for storing the iSerial number we will supply via the USB device
descriptor. serial# is automatically picked up by the disk subsystem in
u-boot - thus providing a handy unique identifier in /dev/disk/by-id as
detailed below.
Storing the hardware serial identifier in serial# means we can change the
serial# if we want before USB enumeration - thus making iSerial automatic
via OTP but overridable if necessary.
This patch reads the defined OTP fuse and sets environment variable
"serial#" to the value read.
With this patch in place the USB mass storage device will appear in
/dev/disk/by-id with a unique name based on the OTP value. For example
/dev/disk/by-id/usb-Linux_UMS_disk_0_WaRP7-0xf42400d3000001d4-0:0
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Cc: Fabio Estevam <fabio.estevam@nxp.com>
Cc: Rui Miguel Silva <rui.silva@linaro.org>
Cc: Ryan Harkin <ryan.harkin@linaro.org>
Reviewed-by: Fabio Estevam <fabio.estevam@nxp.com>
Diffstat (limited to 'board/warp7/warp7.c')
-rw-r--r-- | board/warp7/warp7.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/board/warp7/warp7.c b/board/warp7/warp7.c index d422d63df5..327f656c44 100644 --- a/board/warp7/warp7.c +++ b/board/warp7/warp7.c @@ -23,6 +23,8 @@ #include <power/pmic.h> #include <power/pfuze3000_pmic.h> #include "../freescale/common/pfuze.h" +#include <asm/setup.h> +#include <asm/bootm.h> DECLARE_GLOBAL_DATA_PTR; @@ -186,6 +188,10 @@ int board_usb_phy_mode(int port) int board_late_init(void) { struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR; +#ifdef CONFIG_SERIAL_TAG + struct tag_serialnr serialnr; + char serial_string[0x20]; +#endif imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads)); @@ -197,5 +203,13 @@ int board_late_init(void) */ clrsetbits_le16(&wdog->wcr, 0, 0x10); +#ifdef CONFIG_SERIAL_TAG + /* Set serial# standard environment variable based on OTP settings */ + get_board_serial(&serialnr); + snprintf(serial_string, sizeof(serial_string), "WaRP7-0x%08x%08x", + serialnr.low, serialnr.high); + env_set("serial#", serial_string); +#endif + return 0; } |