Don't set LBA bit in Device register for the following cases: * Power Management requests (WIN_FLUSH_CACHE[_EXT], WIN_STANDBYNOW1, WIN_IDLEIMMEDIATE commands) * special commands (WIN_SPECIFY, WIN_RESTORE, WIN_SETMULT) * /proc/ide/ SMART support (WIN_SMART with SMART_ENABLE, SMART_READ_VALUES and SMART_READ_THRESHOLDS subcommands) * write cache enabling/disabling in ide-disk (WIN_SETFEATURES with SETFEATURES_{EN,DIS}_WCACHE) * write cache flushing in ide-disk (WIN_FLUSH_CACHE[_EXT]) * acoustic management in ide-disk (WIN_SETFEATURES with SETFEATURES_{EN,DIS}_AAM) * door (un)locking in ide-disk (WIN_DOORLOCK, WIN_DOORUNLOCK) * /proc/ide/hd?/identify support (WIN_IDENTIFY)
diff -Nru a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c --- a/drivers/ide/ide-taskfile.c 2005-02-20 01:27:04 +01:00 +++ b/drivers/ide/ide-taskfile.c 2005-02-20 01:27:04 +01:00 @@ -127,7 +127,7 @@ hwif->OUTB(tf->lbam, IDE_LCYL_REG); hwif->OUTB(tf->lbah, IDE_HCYL_REG); - hwif->OUTB((tf->device & HIHI) | drive->select.all, IDE_SELECT_REG); + hwif->OUTB((tf->device & HIHI) | (drive->select.all & 0xBF), IDE_SELECT_REG); if (task->handler != NULL) { if (task->prehandler != NULL) { @@ -605,6 +605,9 @@ if (drive->addressing == 1) tf->flags |= ATA_TFLAG_LBA48; + if (drive->select.b.lba) + tf->device |= ATA_LBA; + switch(req_task->data_phase) { case TASKFILE_OUT_DMAQ: case TASKFILE_OUT_DMA: @@ -892,7 +895,7 @@ * select bit (master/slave) in the drive_head register. We must make * sure that the desired drive is selected. */ - hwif->OUTB(tf->device | drive->select.all, IDE_SELECT_REG); + hwif->OUTB(tf->device | (drive->select.all & 0xBF), IDE_SELECT_REG); switch(task->data_phase) { case TASKFILE_OUT_DMAQ: - To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html