[U-Boot] [PATCH] Fix block device accesses beyond 2TiB

Albert ARIBAUD
2013-06-22T10:07:56Z

On Mon, 17 Jun 2013 22:26:00 +0200, Marek Vasut <marex@denx.de> wrote:

> Hello Sascha,
>
> > With CONFIG_SYS_64BIT_LBA, lbaint_t gets defined as a 64-bit type,
> > which is required to represent block numbers for storage devices that
> > exceed 2TiB (the block size usually is 512B), e.g. recent hard drives.
> >
> > For some obscure reason, the current U-Boot code uses lbaint_t for the
> > number of blocks to read (a rather optimistic estimation of how RAM
> > sizes will evolve), but not for the starting address. Trying to access
> > blocks beyond the 2TiB boundary will simply wrap around and read a
> > block within the 0..2TiB range.
> >
> > We now use lbaint_t for block start addresses, too. This required
> > changes to all block drivers as the signature of block_read(),
> > block_write() and block_erase() in block_dev_desc_t changed.
> >
> > Signed-off-by: Sascha Silbe <t-uboot@infra-silbe.de>
> > ---
> > Functionality tested on CuBox Pro with a Western Digital WD30EFRX hard
> > disk (3TB). Build tested for all arm boards and sandbox.
> >
> > Testing on other boards and architectures would be appreciated.
> >
> > Fixes for typos, style errors etc. are explicitly out of scope for
> > this patch, even those checkpatch complains about because they appear
> > on or near lines touched by the patch. They are unrelated to the issue
> > at hand and can be fixed up later. Mixing in unrelated changes would
> > just make harder to revert any problematic change.
>
> Quick review looks OK.
>
> Best regards,
> Marek Vasut

Anyone could test Sascha's patch? Especially Fr?d?dic, can you test it
and see how this works with your enabling 64-bit LBA on LaCie kirkwood
products?

Amicalement,
--
Albert.