Commit df89f1ba authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6:
  cs5536: define dma_sff_read_status() method
  ide: fix barriers support
  ide: Remove void casts
  hpt366: use ATA_DMA_* constants
  hpt366: fix HPT370 DMA timeouts
parents 62f2730a 15da90b5
...@@ -236,6 +236,7 @@ static const struct ide_dma_ops cs5536_dma_ops = { ...@@ -236,6 +236,7 @@ static const struct ide_dma_ops cs5536_dma_ops = {
.dma_test_irq = ide_dma_test_irq, .dma_test_irq = ide_dma_test_irq,
.dma_lost_irq = ide_dma_lost_irq, .dma_lost_irq = ide_dma_lost_irq,
.dma_timer_expiry = ide_dma_sff_timer_expiry, .dma_timer_expiry = ide_dma_sff_timer_expiry,
.dma_sff_read_status = ide_dma_sff_read_status,
}; };
static const struct ide_port_info cs5536_info = { static const struct ide_port_info cs5536_info = {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* Portions Copyright (C) 2001 Sun Microsystems, Inc. * Portions Copyright (C) 2001 Sun Microsystems, Inc.
* Portions Copyright (C) 2003 Red Hat Inc * Portions Copyright (C) 2003 Red Hat Inc
* Portions Copyright (C) 2007 Bartlomiej Zolnierkiewicz * Portions Copyright (C) 2007 Bartlomiej Zolnierkiewicz
* Portions Copyright (C) 2005-2008 MontaVista Software, Inc. * Portions Copyright (C) 2005-2009 MontaVista Software, Inc.
* *
* Thanks to HighPoint Technologies for their assistance, and hardware. * Thanks to HighPoint Technologies for their assistance, and hardware.
* Special Thanks to Jon Burchmore in SanDiego for the deep pockets, his * Special Thanks to Jon Burchmore in SanDiego for the deep pockets, his
...@@ -114,6 +114,8 @@ ...@@ -114,6 +114,8 @@
* the register setting lists into the table indexed by the clock selected * the register setting lists into the table indexed by the clock selected
* - set the correct hwif->ultra_mask for each individual chip * - set the correct hwif->ultra_mask for each individual chip
* - add Ultra and MW DMA mode filtering for the HPT37[24] based SATA cards * - add Ultra and MW DMA mode filtering for the HPT37[24] based SATA cards
* - stop resetting HPT370's state machine before each DMA transfer as that has
* caused more harm than good
* Sergei Shtylyov, <sshtylyov@ru.mvista.com> or <source@mvista.com> * Sergei Shtylyov, <sshtylyov@ru.mvista.com> or <source@mvista.com>
*/ */
...@@ -133,7 +135,7 @@ ...@@ -133,7 +135,7 @@
#define DRV_NAME "hpt366" #define DRV_NAME "hpt366"
/* various tuning parameters */ /* various tuning parameters */
#define HPT_RESET_STATE_ENGINE #undef HPT_RESET_STATE_ENGINE
#undef HPT_DELAY_INTERRUPT #undef HPT_DELAY_INTERRUPT
static const char *quirk_drives[] = { static const char *quirk_drives[] = {
...@@ -808,7 +810,7 @@ static void hpt370_irq_timeout(ide_drive_t *drive) ...@@ -808,7 +810,7 @@ static void hpt370_irq_timeout(ide_drive_t *drive)
/* get DMA command mode */ /* get DMA command mode */
dma_cmd = inb(hwif->dma_base + ATA_DMA_CMD); dma_cmd = inb(hwif->dma_base + ATA_DMA_CMD);
/* stop DMA */ /* stop DMA */
outb(dma_cmd & ~0x1, hwif->dma_base + ATA_DMA_CMD); outb(dma_cmd & ~ATA_DMA_START, hwif->dma_base + ATA_DMA_CMD);
hpt370_clear_engine(drive); hpt370_clear_engine(drive);
} }
...@@ -825,11 +827,11 @@ static int hpt370_dma_end(ide_drive_t *drive) ...@@ -825,11 +827,11 @@ static int hpt370_dma_end(ide_drive_t *drive)
ide_hwif_t *hwif = drive->hwif; ide_hwif_t *hwif = drive->hwif;
u8 dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS); u8 dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS);
if (dma_stat & 0x01) { if (dma_stat & ATA_DMA_ACTIVE) {
/* wait a little */ /* wait a little */
udelay(20); udelay(20);
dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS); dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS);
if (dma_stat & 0x01) if (dma_stat & ATA_DMA_ACTIVE)
hpt370_irq_timeout(drive); hpt370_irq_timeout(drive);
} }
return ide_dma_end(drive); return ide_dma_end(drive);
...@@ -851,7 +853,7 @@ static int hpt374_dma_test_irq(ide_drive_t *drive) ...@@ -851,7 +853,7 @@ static int hpt374_dma_test_irq(ide_drive_t *drive)
dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS); dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS);
/* return 1 if INTR asserted */ /* return 1 if INTR asserted */
if (dma_stat & 4) if (dma_stat & ATA_DMA_INTR)
return 1; return 1;
return 0; return 0;
......
...@@ -102,11 +102,14 @@ void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err) ...@@ -102,11 +102,14 @@ void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err)
drive->dev_flags |= IDE_DFLAG_PARKED; drive->dev_flags |= IDE_DFLAG_PARKED;
} }
if (rq && rq->cmd_type == REQ_TYPE_ATA_TASKFILE) if (rq && rq->cmd_type == REQ_TYPE_ATA_TASKFILE) {
memcpy(rq->special, cmd, sizeof(*cmd)); struct ide_cmd *orig_cmd = rq->special;
if (cmd->tf_flags & IDE_TFLAG_DYN) if (cmd->tf_flags & IDE_TFLAG_DYN)
kfree(cmd); kfree(orig_cmd);
else
memcpy(orig_cmd, cmd, sizeof(*cmd));
}
} }
/* obsolete, blk_rq_bytes() should be used instead */ /* obsolete, blk_rq_bytes() should be used instead */
......
...@@ -1682,7 +1682,7 @@ static int __devinit pmac_ide_init_dma(ide_hwif_t *hwif, ...@@ -1682,7 +1682,7 @@ static int __devinit pmac_ide_init_dma(ide_hwif_t *hwif,
* The +2 is +1 for the stop command and +1 to allow for * The +2 is +1 for the stop command and +1 to allow for
* aligning the start address to a multiple of 16 bytes. * aligning the start address to a multiple of 16 bytes.
*/ */
pmif->dma_table_cpu = (struct dbdma_cmd*)pci_alloc_consistent( pmif->dma_table_cpu = pci_alloc_consistent(
dev, dev,
(MAX_DCMDS + 2) * sizeof(struct dbdma_cmd), (MAX_DCMDS + 2) * sizeof(struct dbdma_cmd),
&hwif->dmatable_dma); &hwif->dmatable_dma);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment