aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ide/ide-io.c3
-rw-r--r--drivers/ide/pci/pdc202xx_new.c3
-rw-r--r--drivers/ide/pci/pdc202xx_old.c8
-rw-r--r--include/linux/ide.h3
4 files changed, 9 insertions, 8 deletions
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
index ec835e37e729..5c8b008676fb 100644
--- a/drivers/ide/ide-io.c
+++ b/drivers/ide/ide-io.c
@@ -484,7 +484,8 @@ static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct request *rq, u8
484 } 484 }
485 } 485 }
486 486
487 if ((stat & DRQ_STAT) && rq_data_dir(rq) == READ && hwif->err_stops_fifo == 0) 487 if ((stat & DRQ_STAT) && rq_data_dir(rq) == READ &&
488 (hwif->host_flags & IDE_HFLAG_ERROR_STOPS_FIFO) == 0)
488 try_to_flush_leftover_data(drive); 489 try_to_flush_leftover_data(drive);
489 490
490 if (rq->errors >= ERROR_MAX || blk_noretry_request(rq)) { 491 if (rq->errors >= ERROR_MAX || blk_noretry_request(rq)) {
diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c
index 20dc6bc1aee5..415a2282fcbb 100644
--- a/drivers/ide/pci/pdc202xx_new.c
+++ b/drivers/ide/pci/pdc202xx_new.c
@@ -471,8 +471,6 @@ static void __devinit init_hwif_pdc202new(ide_hwif_t *hwif)
471 hwif->quirkproc = &pdcnew_quirkproc; 471 hwif->quirkproc = &pdcnew_quirkproc;
472 hwif->resetproc = &pdcnew_reset; 472 hwif->resetproc = &pdcnew_reset;
473 473
474 hwif->err_stops_fifo = 1;
475
476 hwif->drives[0].autotune = hwif->drives[1].autotune = 1; 474 hwif->drives[0].autotune = hwif->drives[1].autotune = 1;
477 475
478 if (hwif->dma_base == 0) 476 if (hwif->dma_base == 0)
@@ -510,6 +508,7 @@ static struct pci_dev * __devinit pdc20270_get_dev2(struct pci_dev *dev)
510 .init_chipset = init_chipset_pdcnew, \ 508 .init_chipset = init_chipset_pdcnew, \
511 .init_hwif = init_hwif_pdc202new, \ 509 .init_hwif = init_hwif_pdc202new, \
512 .host_flags = IDE_HFLAG_POST_SET_MODE | \ 510 .host_flags = IDE_HFLAG_POST_SET_MODE | \
511 IDE_HFLAG_ERROR_STOPS_FIFO | \
513 IDE_HFLAG_OFF_BOARD, \ 512 IDE_HFLAG_OFF_BOARD, \
514 .pio_mask = ATA_PIO4, \ 513 .pio_mask = ATA_PIO4, \
515 .mwdma_mask = ATA_MWDMA2, \ 514 .mwdma_mask = ATA_MWDMA2, \
diff --git a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c
index 5b308d5c10ba..c34e5936a990 100644
--- a/drivers/ide/pci/pdc202xx_old.c
+++ b/drivers/ide/pci/pdc202xx_old.c
@@ -317,8 +317,6 @@ static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif)
317 if (hwif->pci_dev->device != PCI_DEVICE_ID_PROMISE_20246) 317 if (hwif->pci_dev->device != PCI_DEVICE_ID_PROMISE_20246)
318 hwif->resetproc = &pdc202xx_reset; 318 hwif->resetproc = &pdc202xx_reset;
319 319
320 hwif->err_stops_fifo = 1;
321
322 hwif->drives[0].autotune = hwif->drives[1].autotune = 1; 320 hwif->drives[0].autotune = hwif->drives[1].autotune = 1;
323 321
324 if (hwif->dma_base == 0) 322 if (hwif->dma_base == 0)
@@ -393,7 +391,8 @@ static void __devinit pdc202ata4_fixup_irq(struct pci_dev *dev,
393 .init_hwif = init_hwif_pdc202xx, \ 391 .init_hwif = init_hwif_pdc202xx, \
394 .init_dma = init_dma_pdc202xx, \ 392 .init_dma = init_dma_pdc202xx, \
395 .extra = 48, \ 393 .extra = 48, \
396 .host_flags = IDE_HFLAG_OFF_BOARD, \ 394 .host_flags = IDE_HFLAG_ERROR_STOPS_FIFO | \
395 IDE_HFLAG_OFF_BOARD, \
397 .pio_mask = ATA_PIO4, \ 396 .pio_mask = ATA_PIO4, \
398 .mwdma_mask = ATA_MWDMA2, \ 397 .mwdma_mask = ATA_MWDMA2, \
399 .udma_mask = udma, \ 398 .udma_mask = udma, \
@@ -406,7 +405,8 @@ static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = {
406 .init_hwif = init_hwif_pdc202xx, 405 .init_hwif = init_hwif_pdc202xx,
407 .init_dma = init_dma_pdc202xx, 406 .init_dma = init_dma_pdc202xx,
408 .extra = 16, 407 .extra = 16,
409 .host_flags = IDE_HFLAG_OFF_BOARD, 408 .host_flags = IDE_HFLAG_ERROR_STOPS_FIFO |
409 IDE_HFLAG_OFF_BOARD,
410 .pio_mask = ATA_PIO4, 410 .pio_mask = ATA_PIO4,
411 .mwdma_mask = ATA_MWDMA2, 411 .mwdma_mask = ATA_MWDMA2,
412 .udma_mask = ATA_UDMA2, 412 .udma_mask = ATA_UDMA2,
diff --git a/include/linux/ide.h b/include/linux/ide.h
index eced442392c8..b12510d21f25 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -799,7 +799,6 @@ typedef struct hwif_s {
799 unsigned auto_poll : 1; /* supports nop auto-poll */ 799 unsigned auto_poll : 1; /* supports nop auto-poll */
800 unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ 800 unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */
801 unsigned no_io_32bit : 1; /* 1 = can not do 32-bit IO ops */ 801 unsigned no_io_32bit : 1; /* 1 = can not do 32-bit IO ops */
802 unsigned err_stops_fifo : 1; /* 1=data FIFO is cleared by an error */
803 unsigned mmio : 1; /* host uses MMIO */ 802 unsigned mmio : 1; /* host uses MMIO */
804 803
805 struct device gendev; 804 struct device gendev;
@@ -1256,6 +1255,8 @@ enum {
1256 IDE_HFLAG_NO_LBA48 = (1 << 17), 1255 IDE_HFLAG_NO_LBA48 = (1 << 17),
1257 /* no LBA48 DMA */ 1256 /* no LBA48 DMA */
1258 IDE_HFLAG_NO_LBA48_DMA = (1 << 18), 1257 IDE_HFLAG_NO_LBA48_DMA = (1 << 18),
1258 /* data FIFO is cleared by an error */
1259 IDE_HFLAG_ERROR_STOPS_FIFO = (1 << 19),
1259}; 1260};
1260 1261
1261#ifdef CONFIG_BLK_DEV_OFFBOARD 1262#ifdef CONFIG_BLK_DEV_OFFBOARD