diff mbox series

[RESEND] board: ti: common: board_detect: Fix EEPROM offset read for 1-byte

Message ID 20231020070128.28320-1-p-mantena@ti.com
State Changes Requested
Delegated to: Tom Rini
Headers show
Series [RESEND] board: ti: common: board_detect: Fix EEPROM offset read for 1-byte | expand

Commit Message

Prasanth Babu Mantena Oct. 20, 2023, 7:01 a.m. UTC
EEPROM detection logic in ti_i2c_eeprom_get() involves reading the total
size followed by reading 1-byte size with an offset 1. This commit fixes
the header matching issue in commit 9f393a2d7af8 ("board: ti: common:
board_detect: Fix EEPROM read quirk for 2-byte").

In the previous commit, the value with one offset is being read into
offset_test, but the pointer used to match was still ep. After reading
with an offset 1, the second byte of the header is compared with the 1-byte
data read from EEPROM. This is taken care by comparing proper first byte
value from the header.

Signed-off-by: Prasanth Babu Mantena <p-mantena@ti.com>
Fixes: 9f393a2d7af8 (board: ti: common: board_detect: Fix EEPROM read quirk for 2-byte)
---
Resending due to incorrect patch tag last time.

 board/ti/common/board_detect.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Kumar, Udit Oct. 20, 2023, 3:22 p.m. UTC | #1
Thanks Prasanth

On 10/20/2023 12:31 PM, Prasanth Babu Mantena wrote:
> EEPROM detection logic in ti_i2c_eeprom_get() involves reading the total
> size followed by reading 1-byte size with an offset 1. This commit fixes
> the header matching issue in commit 9f393a2d7af8 ("board: ti: common:
> board_detect: Fix EEPROM read quirk for 2-byte").
You can fixes below as well. I think you can avoid this in commit message
>
> In the previous commit, the value with one offset is being read into
> offset_test, but the pointer used to match was still ep. After reading
> with an offset 1, the second byte of the header is compared with the 1-byte
> data read from EEPROM. This is taken care by comparing proper first byte
> value from the header.
Nice catch
>
> Signed-off-by: Prasanth Babu Mantena <p-mantena@ti.com>
> Fixes: 9f393a2d7af8 (board: ti: common: board_detect: Fix EEPROM read quirk for 2-byte)
Please consider Fixes line, first than Signed-off-by


Please copy Nishanth in patch as well .

> ---
> Resending due to incorrect patch tag last time.
>
>   board/ti/common/board_detect.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/board/ti/common/board_detect.c b/board/ti/common/board_detect.c
> index 9a53884c98..17fe8f8069 100644
> --- a/board/ti/common/board_detect.c
> +++ b/board/ti/common/board_detect.c
> @@ -128,7 +128,7 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
>   
>   	rc = dm_i2c_read(dev, 0x1, &offset_test, sizeof(offset_test));
>   
> -	if (*((u32 *)ep) != (header & 0xFF))
> +	if (offset_test != ((header >> 8) & 0xFF))
>   		one_byte_addressing = false;
>   
>   	/* Corrupted data??? */
Neha Malcom Francis Oct. 20, 2023, 3:29 p.m. UTC | #2
Hi Prasanth

On 20-Oct-23 12:31 PM, Prasanth Babu Mantena wrote:
> EEPROM detection logic in ti_i2c_eeprom_get() involves reading the total
> size followed by reading 1-byte size with an offset 1. This commit fixes
> the header matching issue in commit 9f393a2d7af8 ("board: ti: common:
> board_detect: Fix EEPROM read quirk for 2-byte").
> 
> In the previous commit, the value with one offset is being read into
> offset_test, but the pointer used to match was still ep. After reading
> with an offset 1, the second byte of the header is compared with the 1-byte
> data read from EEPROM. This is taken care by comparing proper first byte
> value from the header.
> 
> Signed-off-by: Prasanth Babu Mantena <p-mantena@ti.com>
> Fixes: 9f393a2d7af8 (board: ti: common: board_detect: Fix EEPROM read quirk for 2-byte)
> ---
> Resending due to incorrect patch tag last time.
> 
>   board/ti/common/board_detect.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/board/ti/common/board_detect.c b/board/ti/common/board_detect.c
> index 9a53884c98..17fe8f8069 100644
> --- a/board/ti/common/board_detect.c
> +++ b/board/ti/common/board_detect.c
> @@ -128,7 +128,7 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
>   
>   	rc = dm_i2c_read(dev, 0x1, &offset_test, sizeof(offset_test));
>   
> -	if (*((u32 *)ep) != (header & 0xFF))
> +	if (offset_test != ((header >> 8) & 0xFF))
>   		one_byte_addressing = false;
>   
>   	/* Corrupted data??? */

Thanks for catching this!

Reviewed-by: Neha Malcom Francis <n-francis@ti.com>
Nishanth Menon Oct. 20, 2023, 6:05 p.m. UTC | #3
On 20:52-20231020, Kumar, Udit wrote:
> Thanks Prasanth
> 
> On 10/20/2023 12:31 PM, Prasanth Babu Mantena wrote:
> > EEPROM detection logic in ti_i2c_eeprom_get() involves reading the total
> > size followed by reading 1-byte size with an offset 1. This commit fixes
> > the header matching issue in commit 9f393a2d7af8 ("board: ti: common:
> > board_detect: Fix EEPROM read quirk for 2-byte").
> You can fixes below as well. I think you can avoid this in commit message
> > 
> > In the previous commit, the value with one offset is being read into
> > offset_test, but the pointer used to match was still ep. After reading
> > with an offset 1, the second byte of the header is compared with the 1-byte
> > data read from EEPROM. This is taken care by comparing proper first byte
> > value from the header.
> Nice catch

Yes indeed.. here is a possible improvement of  commit message:

EEPROM detection logic in ti_i2c_eeprom_get() involves reading the
total size and the 1-byte size with an offset 1.

The value with one offset is read into "offset_test," but the pointer
used to match was still "ep". This results in comparing results
against the previously read data while the intent is to ensure the
detection of the bad 2-byte addressing eeproms that get stuck after
responding initially to 1- byte accesses. This behavior was detected
on BeagleBone-AI64.

> > 
> > Signed-off-by: Prasanth Babu Mantena <p-mantena@ti.com>
> > Fixes: 9f393a2d7af8 (board: ti: common: board_detect: Fix EEPROM read quirk for 2-byte)
> Please consider Fixes line, first than Signed-off-by

Yup, fixes and SoB (checkpatch typically warns)
> 
> 
> Please copy Nishanth in patch as well .
> 
> > ---
> > Resending due to incorrect patch tag last time.
> > 
> >   board/ti/common/board_detect.c | 2 +-
> >   1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/board/ti/common/board_detect.c b/board/ti/common/board_detect.c
> > index 9a53884c98..17fe8f8069 100644
> > --- a/board/ti/common/board_detect.c
> > +++ b/board/ti/common/board_detect.c
> > @@ -128,7 +128,7 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
> >   	rc = dm_i2c_read(dev, 0x1, &offset_test, sizeof(offset_test));
> > -	if (*((u32 *)ep) != (header & 0xFF))
> > +	if (offset_test != ((header >> 8) & 0xFF))
> >   		one_byte_addressing = false;
> >   	/* Corrupted data??? */


You missed the else CONFIG_IS_ENABLED(DM_I2C)  case with the same
bug?

Also please CC Matwey V. Kornilov <matwey.kornilov@gmail.com> ,  Jason
Kridner <jkridner@beagleboard.org> and Robert Nelson <robertcnelson@gmail.com>

So that we don't have regressions on their boards.

https://lore.kernel.org/all/CAJs94Ebdd4foOjhGFu9Bop0v=B1US9neDLxfhgcY23ukgLzFOQ@mail.gmail.com/
Prasanth Babu Mantena Oct. 26, 2023, 9:10 a.m. UTC | #4
On 13:05-20231020, Nishanth Menon wrote:
> On 20:52-20231020, Kumar, Udit wrote:
> > Thanks Prasanth
> > 
> > On 10/20/2023 12:31 PM, Prasanth Babu Mantena wrote:
> > > EEPROM detection logic in ti_i2c_eeprom_get() involves reading the total
> > > size followed by reading 1-byte size with an offset 1. This commit fixes
> > > the header matching issue in commit 9f393a2d7af8 ("board: ti: common:
> > > board_detect: Fix EEPROM read quirk for 2-byte").
> > You can fixes below as well. I think you can avoid this in commit message
> > > 
> > > In the previous commit, the value with one offset is being read into
> > > offset_test, but the pointer used to match was still ep. After reading
> > > with an offset 1, the second byte of the header is compared with the 1-byte
> > > data read from EEPROM. This is taken care by comparing proper first byte
> > > value from the header.
> > Nice catch
> 
> Yes indeed.. here is a possible improvement of  commit message:
> 
> EEPROM detection logic in ti_i2c_eeprom_get() involves reading the
> total size and the 1-byte size with an offset 1.
> 
> The value with one offset is read into "offset_test," but the pointer
> used to match was still "ep". This results in comparing results
> against the previously read data while the intent is to ensure the
> detection of the bad 2-byte addressing eeproms that get stuck after
> responding initially to 1- byte accesses. This behavior was detected
> on BeagleBone-AI64.
> 
> > > 
> > > Signed-off-by: Prasanth Babu Mantena <p-mantena@ti.com>
> > > Fixes: 9f393a2d7af8 (board: ti: common: board_detect: Fix EEPROM read quirk for 2-byte)
> > Please consider Fixes line, first than Signed-off-by
> 
> Yup, fixes and SoB (checkpatch typically warns)
> > 
> > 
> > Please copy Nishanth in patch as well .
> > 
> > > ---
> > > Resending due to incorrect patch tag last time.
> > > 
> > >   board/ti/common/board_detect.c | 2 +-
> > >   1 file changed, 1 insertion(+), 1 deletion(-)
> > > 
> > > diff --git a/board/ti/common/board_detect.c b/board/ti/common/board_detect.c
> > > index 9a53884c98..17fe8f8069 100644
> > > --- a/board/ti/common/board_detect.c
> > > +++ b/board/ti/common/board_detect.c
> > > @@ -128,7 +128,7 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
> > >   	rc = dm_i2c_read(dev, 0x1, &offset_test, sizeof(offset_test));
> > > -	if (*((u32 *)ep) != (header & 0xFF))
> > > +	if (offset_test != ((header >> 8) & 0xFF))
> > >   		one_byte_addressing = false;
> > >   	/* Corrupted data??? */
> 
> 
> You missed the else CONFIG_IS_ENABLED(DM_I2C)  case with the same
> bug?
> 
> Also please CC Matwey V. Kornilov <matwey.kornilov@gmail.com> ,  Jason
> Kridner <jkridner@beagleboard.org> and Robert Nelson <robertcnelson@gmail.com>
> 
> So that we don't have regressions on their boards.
> 
> https://lore.kernel.org/all/CAJs94Ebdd4foOjhGFu9Bop0v=B1US9neDLxfhgcY23ukgLzFOQ@mail.gmail.com/

Thanks for the comments Nishanth.
Will send a v2 addressing them.

Regards,
Prasanth

> 
> -- 
> Regards,
> Nishanth Menon
> Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3  1A34 DDB5 849D 1736 249D
Prasanth Babu Mantena Oct. 26, 2023, 12:27 p.m. UTC | #5
On 20:52-20231020, Kumar, Udit wrote:
> Thanks Prasanth
> 
> On 10/20/2023 12:31 PM, Prasanth Babu Mantena wrote:
> > EEPROM detection logic in ti_i2c_eeprom_get() involves reading the total
> > size followed by reading 1-byte size with an offset 1. This commit fixes
> > the header matching issue in commit 9f393a2d7af8 ("board: ti: common:
> > board_detect: Fix EEPROM read quirk for 2-byte").
> You can fixes below as well. I think you can avoid this in commit message
> > 
> > In the previous commit, the value with one offset is being read into
> > offset_test, but the pointer used to match was still ep. After reading
> > with an offset 1, the second byte of the header is compared with the 1-byte
> > data read from EEPROM. This is taken care by comparing proper first byte
> > value from the header.
> Nice catch
> > 
> > Signed-off-by: Prasanth Babu Mantena <p-mantena@ti.com>
> > Fixes: 9f393a2d7af8 (board: ti: common: board_detect: Fix EEPROM read quirk for 2-byte)
> Please consider Fixes line, first than Signed-off-by
> 
> 
> Please copy Nishanth in patch as well .
> 
Thanks for the review comments Udit.
Will send a v2 addressing them.

Regards,
Prasanth

> > ---
> > Resending due to incorrect patch tag last time.
> > 
> >   board/ti/common/board_detect.c | 2 +-
> >   1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/board/ti/common/board_detect.c b/board/ti/common/board_detect.c
> > index 9a53884c98..17fe8f8069 100644
> > --- a/board/ti/common/board_detect.c
> > +++ b/board/ti/common/board_detect.c
> > @@ -128,7 +128,7 @@ static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
> >   	rc = dm_i2c_read(dev, 0x1, &offset_test, sizeof(offset_test));
> > -	if (*((u32 *)ep) != (header & 0xFF))
> > +	if (offset_test != ((header >> 8) & 0xFF))
> >   		one_byte_addressing = false;
> >   	/* Corrupted data??? */
diff mbox series

Patch

diff --git a/board/ti/common/board_detect.c b/board/ti/common/board_detect.c
index 9a53884c98..17fe8f8069 100644
--- a/board/ti/common/board_detect.c
+++ b/board/ti/common/board_detect.c
@@ -128,7 +128,7 @@  static int __maybe_unused ti_i2c_eeprom_get(int bus_addr, int dev_addr,
 
 	rc = dm_i2c_read(dev, 0x1, &offset_test, sizeof(offset_test));
 
-	if (*((u32 *)ep) != (header & 0xFF))
+	if (offset_test != ((header >> 8) & 0xFF))
 		one_byte_addressing = false;
 
 	/* Corrupted data??? */