2 * (C) Copyright 2000-2004
3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
5 * SPDX-License-Identifier: GPL-2.0+
11 /*-----------------------------------------------------------------------
12 * Process Hardware Information Block:
14 * If we boot on a system fresh from factory, check if the Hardware
15 * Information Block exists and save the information it contains.
17 * The KUP Hardware Information Block is defined as
19 * - located in first flash bank
20 * - starts at offset CONFIG_SYS_HWINFO_OFFSET
21 * - size CONFIG_SYS_HWINFO_SIZE
24 * - sequence of ASCII character lines
25 * - fields separated by <CR><LF>
26 * - last field terminated by NUL character (0x00)
28 * Fields in Hardware Information Block:
35 #define ETHADDR_TOKEN "ethaddr="
36 #define LCD_TOKEN "lcd="
38 void load_sernum_ethaddr (void)
42 unsigned char hwi_stack[CONFIG_SYS_HWINFO_SIZE];
45 hwi = (unsigned char *) (CONFIG_SYS_FLASH_BASE + CONFIG_SYS_HWINFO_OFFSET);
46 if (*((unsigned long *) hwi) != (unsigned long) CONFIG_SYS_HWINFO_MAGIC) {
47 printf ("HardwareInfo not found!\n");
50 memcpy (hwi_stack, hwi, CONFIG_SYS_HWINFO_SIZE);
55 var = strstr ((char *)hwi_stack, ETHADDR_TOKEN);
57 var += sizeof (ETHADDR_TOKEN) - 1;
58 p = strchr (var, '\r');
59 if ((unsigned char *)p < hwi + CONFIG_SYS_HWINFO_SIZE) {
61 setenv ("ethaddr", var);
68 var = strstr ((char *)hwi_stack, LCD_TOKEN);
70 var += sizeof (LCD_TOKEN) - 1;
71 p = strchr (var, '\r');
72 if ((unsigned char *)p < hwi + CONFIG_SYS_HWINFO_SIZE) {