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>
This commit is contained in:
committed by
Stefano Babic
parent
1ab1ffded4
commit
852cc548b3
@@ -23,6 +23,8 @@
|
|||||||
#include <power/pmic.h>
|
#include <power/pmic.h>
|
||||||
#include <power/pfuze3000_pmic.h>
|
#include <power/pfuze3000_pmic.h>
|
||||||
#include "../freescale/common/pfuze.h"
|
#include "../freescale/common/pfuze.h"
|
||||||
|
#include <asm/setup.h>
|
||||||
|
#include <asm/bootm.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
@@ -186,6 +188,10 @@ int board_usb_phy_mode(int port)
|
|||||||
int board_late_init(void)
|
int board_late_init(void)
|
||||||
{
|
{
|
||||||
struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR;
|
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));
|
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);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,9 @@
|
|||||||
#define CONFIG_SYS_FSL_ESDHC_HAS_DDR_MODE
|
#define CONFIG_SYS_FSL_ESDHC_HAS_DDR_MODE
|
||||||
#define CONFIG_SYS_MMC_IMG_LOAD_PART 1
|
#define CONFIG_SYS_MMC_IMG_LOAD_PART 1
|
||||||
|
|
||||||
|
/* Switch on SERIAL_TAG */
|
||||||
|
#define CONFIG_SERIAL_TAG
|
||||||
|
|
||||||
#define CONFIG_DFU_ENV_SETTINGS \
|
#define CONFIG_DFU_ENV_SETTINGS \
|
||||||
"dfu_alt_info=boot raw 0x2 0x400 mmcpart 1\0" \
|
"dfu_alt_info=boot raw 0x2 0x400 mmcpart 1\0" \
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user