[RFC v2 2/3] mvebu: clearfog: convert tlv parsing to use new library

Josua Mayer josua at solid-run.com
Tue May 16 13:41:52 CEST 2023


Update the existing code reading tlv data from eeprom to use the new tlv
library functions rather than relying on tlv_eeprom command internals.

Signed-off-by: Josua Mayer <josua at solid-run.com>
---
 board/solidrun/common/tlv_data.c | 46 ++++++++++++--------------------
 configs/clearfog_defconfig       |  4 ++-
 2 files changed, 20 insertions(+), 30 deletions(-)

diff --git a/board/solidrun/common/tlv_data.c b/board/solidrun/common/tlv_data.c
index 11d6e4a1380..31b4b473c75 100644
--- a/board/solidrun/common/tlv_data.c
+++ b/board/solidrun/common/tlv_data.c
@@ -5,6 +5,7 @@
 
 #include <common.h>
 #include <compiler.h>
+#include <linux/err.h>
 #include <tlv_eeprom.h>
 #include "tlv_data.h"
 
@@ -50,44 +51,31 @@ static void parse_tlv_vendor_ext(struct tlvinfo_tlv *tlv_entry,
 	td->ram_size = val[5];
 }
 
-static void parse_tlv_data(u8 *eeprom, struct tlvinfo_header *hdr,
-			   struct tlvinfo_tlv *entry, struct tlv_data *td)
+static void parse_tlv_data(u8 *eeprom, struct tlvinfo_priv *tlv,
+						   struct tlv_data *td)
 {
-	unsigned int tlv_offset, tlv_len;
-
-	tlv_offset = sizeof(struct tlvinfo_header);
-	tlv_len = sizeof(struct tlvinfo_header) + be16_to_cpu(hdr->totallen);
-	while (tlv_offset < tlv_len) {
-		entry = (struct tlvinfo_tlv *)&eeprom[tlv_offset];
-
-		switch (entry->type) {
-		case TLV_CODE_PRODUCT_NAME:
-			store_product_name(entry, td);
-			break;
-		case TLV_CODE_VENDOR_EXT:
-			parse_tlv_vendor_ext(entry, td);
-			break;
-		default:
-			break;
-		}
-
-		tlv_offset += sizeof(struct tlvinfo_tlv) + entry->length;
-	}
+	struct tlvinfo_tlv *entry;
+
+	entry = tlv_entry_next_by_code(tlv, NULL, TLV_CODE_PRODUCT_NAME);
+	if (!IS_ERR(entry))
+		store_product_name(entry, td);
+
+	entry = tlv_entry_next_by_code(tlv, NULL, TLV_CODE_VENDOR_EXT);
+	if (!IS_ERR(entry))
+		parse_tlv_vendor_ext(entry, td);
 }
 
 void read_tlv_data(struct tlv_data *td)
 {
 	u8 eeprom_data[TLV_TOTAL_LEN_MAX];
-	struct tlvinfo_header *tlv_hdr;
-	struct tlvinfo_tlv *tlv_entry;
-	int ret, i;
+	struct tlvinfo_priv *priv;
+	int i;
 
 	for (i = 0; i < 2; i++) {
-		ret = read_tlvinfo_tlv_eeprom(eeprom_data, &tlv_hdr,
-					      &tlv_entry, i);
-		if (ret < 0)
+		priv = tlv_eeprom_read(tlv_eeprom_get_by_index(i), 0, eeprom_data, ARRAY_SIZE(eeprom_data));
+		if (IS_ERR(priv))
 			continue;
-		parse_tlv_data(eeprom_data, tlv_hdr, tlv_entry, td);
+		parse_tlv_data(eeprom_data, priv, td);
 	}
 }
 
diff --git a/configs/clearfog_defconfig b/configs/clearfog_defconfig
index b3ed1ec7bbe..fa86b23ef40 100644
--- a/configs/clearfog_defconfig
+++ b/configs/clearfog_defconfig
@@ -35,7 +35,7 @@ CONFIG_SPL_SYS_MALLOC_SIMPLE=y
 # CONFIG_SPL_SHARES_INIT_SP_ADDR is not set
 CONFIG_SPL_I2C=y
 CONFIG_SYS_MAXARGS=32
-CONFIG_CMD_TLV_EEPROM=y
+# CONFIG_CMD_TLV_EEPROM is not set
 CONFIG_SPL_CMD_TLV_EEPROM=y
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
@@ -81,3 +81,5 @@ CONFIG_USB=y
 CONFIG_USB_XHCI_HCD=y
 CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x1
 CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET=0x0
+CONFIG_EEPROM_TLV_LIB=y
+CONFIG_SPL_EEPROM_TLV_LIB=y
-- 
2.35.3



More information about the U-Boot mailing list