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

Marek Vasut
2013-06-17T20:26:00Z

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