Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ea266ba1591d28889645a245e1df6f889c574640
Commit:     ea266ba1591d28889645a245e1df6f889c574640
Parent:     fed21641be7b31338dcf6753ef7f8a396242a410
Author:     Sergei Shtylyov <[EMAIL PROTECTED]>
AuthorDate: Sat Feb 17 02:40:22 2007 +0100
Committer:  Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
CommitDate: Sat Feb 17 02:40:22 2007 +0100

    sl82c105: DMA support fixes
    
    Fix a number of issues with the DMA support code:
    
    - driver claims support for all SW/MW DMA modes while supporting only 
MWDMA2;
    
    - ide_dma_check() method tries to enable DMA on the "known good" drives 
which
      don't support MWDMA2;
    
    - ide_dma_on() method upon failure to set drive to MWDMA2 re-tunes already
      tuned PIO mode and calls ide_dma_off() method instead of returning error;
    
    - ide_dma_off() method sets drive->current_speed while it doesn't actually
      change (only the PIO timings are re-loaded into the chip's registers);
    
    - init_hwif() method forcibly sets/resets both "drive DMA capable" bits 
while
      this is properly handled by ide_dma_{on,off}() methods being called 
later...
    
    Signed-off-by: Sergei Shtylyov <[EMAIL PROTECTED]>
    Signed-off-by: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
---
 drivers/ide/pci/sl82c105.c |   18 ++++--------------
 1 files changed, 4 insertions(+), 14 deletions(-)

diff --git a/drivers/ide/pci/sl82c105.c b/drivers/ide/pci/sl82c105.c
index 170a261..1cb8afe 100644
--- a/drivers/ide/pci/sl82c105.c
+++ b/drivers/ide/pci/sl82c105.c
@@ -164,7 +164,7 @@ static int sl82c105_check_drive (ide_drive_t *drive)
                                return hwif->ide_dma_on(drive);
                }
 
-               if (__ide_dma_good_drive(drive))
+               if (__ide_dma_good_drive(drive) && id->eide_dma_time < 150)
                        return hwif->ide_dma_on(drive);
        } while (0);
 
@@ -259,10 +259,8 @@ static int sl82c105_ide_dma_on (ide_drive_t *drive)
 {
        DBG(("sl82c105_ide_dma_on(drive:%s)\n", drive->name));
 
-       if (config_for_dma(drive)) {
-               config_for_pio(drive, 4, 0, 0);
-               return HWIF(drive)->ide_dma_off_quietly(drive);
-       }
+       if (config_for_dma(drive))
+               return 1;
        printk(KERN_INFO "%s: DMA enabled\n", drive->name);
        return __ide_dma_on(drive);
 }
@@ -278,7 +276,6 @@ static int sl82c105_ide_dma_off_quietly (ide_drive_t *drive)
        if (drive->pio_speed)
                speed = drive->pio_speed - XFER_PIO_0;
        config_for_pio(drive, speed, 0, 1);
-       drive->current_speed = drive->pio_speed;
 
        return rc;
 }
@@ -401,11 +398,9 @@ static unsigned int __devinit init_chipset_sl82c105(struct 
pci_dev *dev, const c
 /*
  * Initialise the chip
  */
-
 static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif)
 {
        unsigned int rev;
-       u8 dma_state;
 
        DBG(("init_hwif_sl82c105(hwif: ide%d)\n", hwif->index));
 
@@ -431,7 +426,6 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif)
        if (!hwif->dma_base)
                return;
 
-       dma_state = hwif->INB(hwif->dma_base + 2) & ~0x60;
        rev = sl82c105_bridge_revision(hwif->pci_dev);
        if (rev <= 5) {
                /*
@@ -441,11 +435,8 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif)
                printk("    %s: Winbond 553 bridge revision %d, BM-DMA 
disabled\n",
                       hwif->name, rev);
        } else {
-               dma_state |= 0x60;
-
                hwif->atapi_dma = 1;
-               hwif->mwdma_mask = 0x07;
-               hwif->swdma_mask = 0x07;
+               hwif->mwdma_mask = 0x04;
 
                hwif->ide_dma_check = &sl82c105_check_drive;
                hwif->ide_dma_on = &sl82c105_ide_dma_on;
@@ -462,7 +453,6 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif)
                if (hwif->mate)
                        hwif->serialized = hwif->mate->serialized = 1;
        }
-       hwif->OUTB(dma_state, hwif->dma_base + 2);
 }
 
 static ide_pci_device_t sl82c105_chipset __devinitdata = {
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to