[PATCH v2] misc: i2c_eeprom: consider pagesize when writing to eeprom

Lothar Waßmann LW at KARO-electronics.de
Wed Oct 25 15:25:26 CEST 2023


Hi,

On Wed, 25 Oct 2023 07:59:05 +0000 Michel Alex wrote:
> Calculate the maximum length of the buffer when writing
> across the page boundary. If the buffer length (len)
> exceeds the page boundary (pagesize), split it. Use this
> length instead of comparing the length with the pagesize,
> because if the write start address (offset) is not at the
> beginning of a page and the page_offset + len is greater
> than the page boundary (pagesize), the write operation
> would overflow the current page and the behaviour can be
> undefined (e.g. at24).
> 
> Signed-off-by: Alex Michel <alex.michel at wiedemann-group.com>
> ---
> Changes for v2:
> - fixed deviations from checkpatch.pl
> - improved commit message
> ---
>  drivers/misc/i2c_eeprom.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/misc/i2c_eeprom.c b/drivers/misc/i2c_eeprom.c
> index bdd7e018cc..0eecbd07ba 100644
> --- a/drivers/misc/i2c_eeprom.c
> +++ b/drivers/misc/i2c_eeprom.c
> @@ -60,6 +60,17 @@ static int i2c_eeprom_std_read(struct udevice *dev, int offset, uint8_t *buf,
>         return dm_i2c_read(dev, offset, buf, size);
>  }
> 
> +static int i2c_eeprom_len(unsigned int offset, unsigned int len, unsigned int pagesize)
> +{
> +       int page_offset = ((offset) & (pagesize - 1));
          int page_offset = offset & (pagesize - 1);
2 many ()


Lothar Waßmann
-- 
___________________________________________________________

Ka-Ro electronics GmbH | Pascalstraße 22 | D - 52076 Aachen
Phone: +49 2408 1402-0 | Fax: +49 2408 1402-10
Geschäftsführer: Matthias Kaussen
Handelsregistereintrag: Amtsgericht Aachen, HRB 4996

www.karo-electronics.de | info at karo-electronics.de
___________________________________________________________


More information about the U-Boot mailing list