diff options
author | Nishanth Menon <nm@ti.com> | 2022-06-15 20:32:12 -0500 |
---|---|---|
committer | Anand Gadiyar <gadiyar@ti.com> | 2022-06-27 15:37:23 -0500 |
commit | 1fdced88f7304a96a629dc877b6e2c6631d0b976 (patch) | |
tree | 357be28b432531787cf0c9b262f86df349be8045 /board | |
parent | 3722fd49d49337868d3756e52df5f4f5b9744146 (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')
-rw-r--r-- | board/ti/common/board_detect.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/board/ti/common/board_detect.c b/board/ti/common/board_detect.c index 242dfd38af1..58e7e6a7641 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) { |