2 * Copyright (c) 2015 Toradex, Inc.
4 * SPDX-License-Identifier: GPL-2.0+
7 #include "configblock.h"
11 static char trdx_serial_str[9];
13 __weak int checkboard_fallback(void)
18 #ifdef CONFIG_REVISION_TAG
19 #ifdef CONFIG_TRDX_CFG_BLOCK
20 u32 get_board_rev(void)
23 if (!trdx_hw_tag.ver_major)
26 return ((trdx_hw_tag.ver_major & 0xff) << 8) |
27 ((trdx_hw_tag.ver_minor & 0xf) << 4) |
28 ((trdx_hw_tag.ver_assembly & 0xf) + 0xa);
31 u32 get_board_rev(void)
35 #endif /* CONFIG_TRDX_CFG_BLOCK */
36 #endif /* CONFIG_REVISION_TAG */
38 #ifdef CONFIG_SERIAL_TAG
39 #ifdef CONFIG_TRDX_CFG_BLOCK
40 void get_board_serial(struct tag_serialnr *serialnr)
43 unsigned int serial = trdx_serial;
52 * Convert to Linux serial number format (hexadecimal coded
57 array[i--] = serial % 10;
63 for (i = 1; i < 8; i++) {
68 serialnr->low = serial;
72 u32 get_board_rev(void)
76 #endif /* CONFIG_TRDX_CFG_BLOCK */
77 #endif /* CONFIG_SERIAL_TAG */
81 #ifdef CONFIG_TRDX_CFG_BLOCK
82 unsigned char ethaddr[6];
84 if (read_trdx_cfg_block()) {
85 printf("Missing Toradex config block\n");
86 checkboard_fallback();
90 /* board serial-number */
91 sprintf(trdx_serial_str, "%08u", trdx_serial);
92 setenv("serial#", trdx_serial_str);
95 * Check if environment contains a valid MAC address,
96 * set the one from config block if not
98 if (!eth_getenv_enetaddr("ethaddr", ethaddr))
99 eth_setenv_enetaddr("ethaddr", (u8 *)&trdx_eth_addr);
101 #ifdef CONFIG_TRDX_CFG_BLOCK_2ND_ETHADDR
102 if (!eth_getenv_enetaddr("eth1addr", ethaddr)) {
104 * Secondary MAC address is allocated from block
105 * 0x100000 higher then the first MAC address
107 memcpy(ethaddr, &trdx_eth_addr, 6);
109 eth_setenv_enetaddr("eth1addr", ethaddr);
113 printf("Model: Toradex %s V%d.%d%c, Serial# %08u\n",
114 toradex_modules[trdx_hw_tag.prodid],
115 trdx_hw_tag.ver_major,
116 trdx_hw_tag.ver_minor,
117 (char)trdx_hw_tag.ver_assembly + 'A',
120 checkboard_fallback();
125 #ifdef CONFIG_USBDOWNLOAD_GADGET
126 int g_dnl_bind_fixup(struct usb_device_descriptor *dev, const char *name)
128 unsigned short usb_pid = 0xffff;
130 #ifdef CONFIG_TRDX_CONFIGBLOCK
131 usb_pid = 0x4000 + trdx_hw_tag.prodid;
133 put_unaligned(usb_pid, &dev->idProduct);
137 #endif /* CONFIG_USBDOWNLOAD_GADGET */