IDE fixes
Hi,
Linus, please pull from 'for-linus' branch of:
master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6.git for-linus
to receive the following updates:
drivers/ide/cs5536.c | 1 + drivers/ide/hpt366.c | 14 ++++++++------ drivers/ide/ide-io.c | 11 +++++++---- drivers/ide/pmac.c | 2 +- 4 files changed, 17 insertions(+), 11 deletions(-)
Bartlomiej Zolnierkiewicz (1):
ide: fix barriers support
Jack Stone (1):
ide: Remove void casts
Sergei Shtylyov (3):
hpt366: fix HPT370 DMA timeouts
hpt366: use ATA_DMA_* constants
cs5536: define dma_sff_read_status() method
drivers/ide/cs5536.c +1 -0
@@ -236,6 +236,7 @@ static const struct ide_dma_ops cs5536_dma_ops = { .dma_test_irq = ide_dma_test_irq, .dma_lost_irq = ide_dma_lost_irq, .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 = {
drivers/ide/hpt366.c +8 -6
@@ -3,7 +3,7 @@* Portions Copyright (C) 2001 Sun Microsystems, Inc. * Portions Copyright (C) 2003 Red Hat Inc * 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. * Special Thanks to Jon Burchmore in SanDiego for the deep pockets, his
@@ -114,6 +114,8 @@* the register setting lists into the table indexed by the clock selected * - set the correct hwif->ultra_mask for each individual chip * - 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, <[email protected]> or <[email protected]> */
@@ -133,7 +135,7 @@#define DRV_NAME "hpt366"/* various tuning parameters */ -#define HPT_RESET_STATE_ENGINE +#undef HPT_RESET_STATE_ENGINE#undef HPT_DELAY_INTERRUPTstatic const char *quirk_drives[] = {
@@ -808,7 +810,7 @@ static void hpt370_irq_timeout(ide_drive_t *drive)/* get DMA command mode */ dma_cmd =inb (hwif->dma_base +ATA_DMA_CMD );/* 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); }
@@ -825,11 +827,11 @@ static int hpt370_dma_end(ide_drive_t *drive)ide_hwif_t *hwif = drive->hwif;u8 dma_stat =inb (hwif->dma_base +ATA_DMA_STATUS ); -if (dma_stat &0x01 ) { +if (dma_stat &ATA_DMA_ACTIVE ) {/* wait a little */ udelay (20 ); dma_stat =inb (hwif->dma_base +ATA_DMA_STATUS ); -if (dma_stat &0x01 ) +if (dma_stat &ATA_DMA_ACTIVE )hpt370_irq_timeout (drive); }return ide_dma_end (drive);
@@ -851,7 +853,7 @@ static int hpt374_dma_test_irq(ide_drive_t *drive) dma_stat =inb (hwif->dma_base +ATA_DMA_STATUS );/* return 1 if INTR asserted */ -if (dma_stat &4 ) +if (dma_stat &ATA_DMA_INTR )return 1 ;return 0 ;
drivers/ide/ide-io.c +7 -4
@@ -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 ; } -if (rq && rq->cmd_type ==REQ_TYPE_ATA_TASKFILE ) -memcpy (rq->special, cmd,sizeof (*cmd)); +if (rq && rq->cmd_type ==REQ_TYPE_ATA_TASKFILE ) { +struct ide_cmd *orig_cmd = rq->special; -if (cmd->tf_flags &IDE_TFLAG_DYN ) -kfree (cmd); +if (cmd->tf_flags &IDE_TFLAG_DYN ) +kfree (orig_cmd); +else +memcpy (orig_cmd, cmd,sizeof (*cmd)); + } }/* obsolete, blk_rq_bytes() should be used instead */
drivers/ide/pmac.c +1 -1
@@ -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 * 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, (MAX_DCMDS +2 ) *sizeof (struct dbdma_cmd ), &hwif->dmatable_dma);