]> git.baikalelectronics.ru Git - uboot.git/commitdiff
xilinx: board: Update logic in xilinx_read_eeprom_legacy
authorMichal Simek <michal.simek@amd.com>
Tue, 24 Jan 2023 15:19:28 +0000 (16:19 +0100)
committerMichal Simek <michal.simek@amd.com>
Fri, 27 Jan 2023 07:48:32 +0000 (08:48 +0100)
When eeprom has random content printing random chars can stuck U-Boot.
That's why update legacy eeprom format decoding algorithm to copy only
maximum amount of chars allocated for fields.
And also print them directly from desc structure.

Previous algorithm was printing strings first directly from eeprom content
and then copy them to desc structure.

Signed-off-by: Michal Simek <michal.simek@amd.com>
Link: https://lore.kernel.org/r/42065fcbb1a10581f9f4f091d64b43c01fe595c6.1674573561.git.michal.simek@amd.com
board/xilinx/common/board.c

index ed393f737731b29de0f04d29f86ff51fc4078c60..fbc76eef20d12cf825564f840cb28a7e67f2a756 100644 (file)
@@ -141,21 +141,25 @@ static int xilinx_read_eeprom_legacy(struct udevice *dev, char *name,
 
        xilinx_eeprom_legacy_cleanup((char *)eeprom_content, size);
 
-       printf("Xilinx I2C Legacy format at %s:\n", name);
-       printf(" Board name:\t%s\n", eeprom_content->board_name);
-       printf(" Board rev:\t%s\n", eeprom_content->board_revision);
-       printf(" Board SN:\t%s\n", eeprom_content->board_sn);
+       /* Terminating \0 chars are the part of desc fields already */
+       strlcpy(desc->name, eeprom_content->board_name,
+               sizeof(eeprom_content->board_name) + 1);
+       strlcpy(desc->revision, eeprom_content->board_revision,
+               sizeof(eeprom_content->board_revision) + 1);
+       strlcpy(desc->serial, eeprom_content->board_sn,
+               sizeof(eeprom_content->board_sn) + 1);
 
        eth_valid = is_valid_ethaddr((const u8 *)eeprom_content->eth_mac);
        if (eth_valid)
-               printf(" Ethernet mac:\t%pM\n", eeprom_content->eth_mac);
+               memcpy(desc->mac_addr[0], eeprom_content->eth_mac, ETH_ALEN);
+
+       printf("Xilinx I2C Legacy format at %s:\n", name);
+       printf(" Board name:\t%s\n", desc->name);
+       printf(" Board rev:\t%s\n", desc->revision);
+       printf(" Board SN:\t%s\n", desc->serial);
 
-       /* Terminating \0 chars ensure end of string */
-       strcpy(desc->name, eeprom_content->board_name);
-       strcpy(desc->revision, eeprom_content->board_revision);
-       strcpy(desc->serial, eeprom_content->board_sn);
        if (eth_valid)
-               memcpy(desc->mac_addr[0], eeprom_content->eth_mac, ETH_ALEN);
+               printf(" Ethernet mac:\t%pM\n", desc->mac_addr);
 
        desc->header = EEPROM_HEADER_MAGIC;