
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