summaryrefslogtreecommitdiff
path: root/board/ti
diff options
context:
space:
mode:
authorNishanth Menon <nm@ti.com>2022-06-15 20:32:12 -0500
committerAnand Gadiyar <gadiyar@ti.com>2022-06-27 15:37:23 -0500
commit1fdced88f7304a96a629dc877b6e2c6631d0b976 (patch)
tree357be28b432531787cf0c9b262f86df349be8045 /board/ti
parent3722fd49d49337868d3756e52df5f4f5b9744146 (diff)
board: ti: common: Handle the legacy eeprom address width properly
Due to supply chain issues, we are starting to see a mixture of eeprom usage including the smaller 1 byte addressing eeproms such as 24c04 used for eeproms. These eeproms dont respond well to 2 byte addressing and fail the read operation. We do have a check to ensure that we are reading the alternate addressing size, however the previous failure prevents us from checking any more. Rectify the same by falling through and depend on header data comparison to ensure that we have valid data. Signed-off-by: Nishanth Menon <nm@ti.com>
Diffstat (limited to 'board/ti')
-rw-r--r--board/ti/common/board_detect.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/board/ti/common/board_detect.c b/board/ti/common/board_detect.c
index 242dfd38af..58e7e6a764 100644
--- a/board/ti/common/board_detect.c
+++ b/board/ti/common/board_detect.c
@@ -86,7 +86,7 @@ __weak void gpi2c_init(void)
static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
u32 header, u32 size, uint8_t *ep)
{
- u32 hdr_read;
+ u32 hdr_read = 0xdeadbeef;
int rc;
#if defined(CONFIG_DM_I2C)
@@ -107,9 +107,13 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
if (rc)
return rc;
- rc = dm_i2c_read(dev, 0, (uint8_t *)&hdr_read, 4);
- if (rc)
- return rc;
+ /*
+ * Skip checking result here since this could be a valid i2c read fail
+ * on some boards that use 1 byte addressing.
+ * We must allow for fall through to check the data if 1 byte
+ * addressing works
+ */
+ (void)dm_i2c_read(dev, 0, (uint8_t *)&hdr_read, 4);
/* Corrupted data??? */
if (hdr_read != header) {
@@ -144,9 +148,13 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
*/
byte = 2;
- rc = i2c_read(dev_addr, 0x0, byte, (uint8_t *)&hdr_read, 4);
- if (rc)
- return rc;
+ /*
+ * Skip checking result here since this could be a valid i2c read fail
+ * on some boards that use 1 byte addressing.
+ * We must allow for fall through to check the data if 1 byte
+ * addressing works
+ */
+ (void)i2c_read(dev_addr, 0x0, byte, (uint8_t *)&hdr_read, 4);
/* Corrupted data??? */
if (hdr_read != header) {