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.
_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot