diff options
Diffstat (limited to 'common/cmd_ide.c')
| -rw-r--r-- | common/cmd_ide.c | 14 | 
1 files changed, 12 insertions, 2 deletions
| diff --git a/common/cmd_ide.c b/common/cmd_ide.c index f9cd422f2..ead7e10d6 100644 --- a/common/cmd_ide.c +++ b/common/cmd_ide.c @@ -1264,7 +1264,7 @@ ulong ide_read (int device, lbaint_t blknr, ulong blkcnt, void *buffer)  #ifdef CONFIG_LBA48  	unsigned char lba48 = 0; -	if (blknr & 0x0000fffff0000000) { +	if (blknr & 0x0000fffff0000000ULL) {  		/* more than 28 bits used, use 48bit mode */  		lba48 = 1;  	} @@ -1318,8 +1318,13 @@ ulong ide_read (int device, lbaint_t blknr, ulong blkcnt, void *buffer)  			/* write high bits */  			ide_outb (device, ATA_SECT_CNT, 0);  			ide_outb (device, ATA_LBA_LOW,	(blknr >> 24) & 0xFF); +#ifdef CFG_64BIT_LBA  			ide_outb (device, ATA_LBA_MID,	(blknr >> 32) & 0xFF);  			ide_outb (device, ATA_LBA_HIGH, (blknr >> 40) & 0xFF); +#else +			ide_outb (device, ATA_LBA_MID,	0); +			ide_outb (device, ATA_LBA_HIGH, 0); +#endif  		}  #endif  		ide_outb (device, ATA_SECT_CNT, 1); @@ -1383,7 +1388,7 @@ ulong ide_write (int device, lbaint_t blknr, ulong blkcnt, void *buffer)  #ifdef CONFIG_LBA48  	unsigned char lba48 = 0; -	if (blknr & 0x0000fffff0000000) { +	if (blknr & 0x0000fffff0000000ULL) {  		/* more than 28 bits used, use 48bit mode */  		lba48 = 1;  	} @@ -1408,8 +1413,13 @@ ulong ide_write (int device, lbaint_t blknr, ulong blkcnt, void *buffer)  			/* write high bits */  			ide_outb (device, ATA_SECT_CNT, 0);  			ide_outb (device, ATA_LBA_LOW,	(blknr >> 24) & 0xFF); +#ifdef CFG_64BIT_LBA  			ide_outb (device, ATA_LBA_MID,	(blknr >> 32) & 0xFF);  			ide_outb (device, ATA_LBA_HIGH, (blknr >> 40) & 0xFF); +#else +			ide_outb (device, ATA_LBA_MID,	0); +			ide_outb (device, ATA_LBA_HIGH, 0); +#endif  		}  #endif  		ide_outb (device, ATA_SECT_CNT, 1); |