
13 Jun
2013
13 Jun
'13
3:36 p.m.
Le 13/06/2013 15:21, Albert ARIBAUD a écrit :
I guess CONFIG_LBA48 is also broken in common/cmd_ide.c :
ulong ide_write(int device, ulong blknr, lbaint_t blkcnt, const void *buffer) { ulong n = 0; unsigned char c;
#ifdef CONFIG_LBA48 unsigned char lba48 = 0;
if (blknr & 0x0000fffff0000000ULL) { <= issue /* more than 28 bits used, use 48bit mode */ lba48 = 1; }
#endif
How is this broken exactly, and what is the fix?
If you have a device with 0x100000000 blocks and a target architecture with sizeof(ulong)=32, then it will fail to switch to lba48. The right thing to do is to use lbaint_t instead of ulong blknr.