Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4761c06cb39011c9cc3fef9e6bbfb4c50ceb307d
Commit:     4761c06cb39011c9cc3fef9e6bbfb4c50ceb307d
Parent:     5d6aca8defe77dfd0f0169cc015b900129078648
Author:     Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
AuthorDate: Tue Jul 31 22:02:41 2007 +0200
Committer:  Jeff Garzik <[EMAIL PROTECTED]>
CommitDate: Wed Aug 1 10:00:56 2007 -0400

    pata_sis: fix MWDMA for <= UDMA66 chipsets and UDMA for UDMA33 chipsets
    
    * Fix MWDMA timings setup in sis_old_set_dmamode() and sis_66_set_dmamode().
    
      The old timings were overclocked (even worse behavior than sis5513 IDE 
driver
      which depends on BIOS to program correct timings), the new timings are 
taken
      from the datasheet (they match timings from ATA spec).
    
    * Fix UDMA timings setup in sis_old_set_dmamode().
    
      Misplaced pci_write_config_word() call resulted in UDMA timings never
      being set.
    
    * Fix comments for sis_133_early_set_dmamode() and sis_133_set_dmamode():
      - only the former function handles early SiS 961 bridges
      - both functions lack MWDMA timings setup
    
    * Fix typos in sis_100_set_piomode() and sis_133_set_piomode() comments.
    
    * Bump driver version.
    
    Cc: Alan Cox <[EMAIL PROTECTED]>
    Signed-off-by: Bartlomiej Zolnierkiewicz <[EMAIL PROTECTED]>
    Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]>
---
 drivers/ata/pata_sis.c |   20 +++++++++-----------
 1 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/ata/pata_sis.c b/drivers/ata/pata_sis.c
index 9a829a7..66bd0e8 100644
--- a/drivers/ata/pata_sis.c
+++ b/drivers/ata/pata_sis.c
@@ -2,6 +2,7 @@
  *    pata_sis.c - SiS ATA driver
  *
  *     (C) 2005 Red Hat <[EMAIL PROTECTED]>
+ *     (C) 2007 Bartlomiej Zolnierkiewicz
  *
  *    Based upon linux/drivers/ide/pci/sis5513.c
  * Copyright (C) 1999-2000     Andre Hedrick <[EMAIL PROTECTED]>
@@ -35,7 +36,7 @@
 #include "sis.h"
 
 #define DRV_NAME       "pata_sis"
-#define DRV_VERSION    "0.5.1"
+#define DRV_VERSION    "0.5.2"
 
 struct sis_chipset {
        u16 device;                             /* PCI host ID */
@@ -237,7 +238,7 @@ static void sis_old_set_piomode (struct ata_port *ap, 
struct ata_device *adev)
 }
 
 /**
- *     sis_100_set_pioode - Initialize host controller PATA PIO timings
+ *     sis_100_set_piomode - Initialize host controller PATA PIO timings
  *     @ap: Port whose timings we are configuring
  *     @adev: Device we are configuring for.
  *
@@ -262,7 +263,7 @@ static void sis_100_set_piomode (struct ata_port *ap, 
struct ata_device *adev)
 }
 
 /**
- *     sis_133_set_pioode - Initialize host controller PATA PIO timings
+ *     sis_133_set_piomode - Initialize host controller PATA PIO timings
  *     @ap: Port whose timings we are configuring
  *     @adev: Device we are configuring for.
  *
@@ -334,7 +335,7 @@ static void sis_old_set_dmamode (struct ata_port *ap, 
struct ata_device *adev)
        int drive_pci = sis_old_port_base(adev);
        u16 timing;
 
-       const u16 mwdma_bits[] = { 0x707, 0x202, 0x202 };
+       const u16 mwdma_bits[] = { 0x008, 0x302, 0x301 };
        const u16 udma_bits[]  = { 0xE000, 0xC000, 0xA000 };
 
        pci_read_config_word(pdev, drive_pci, &timing);
@@ -342,15 +343,15 @@ static void sis_old_set_dmamode (struct ata_port *ap, 
struct ata_device *adev)
        if (adev->dma_mode < XFER_UDMA_0) {
                /* bits 3-0 hold recovery timing bits 8-10 active timing and
                   the higer bits are dependant on the device */
-               timing &= ~ 0x870F;
+               timing &= ~0x870F;
                timing |= mwdma_bits[speed];
-               pci_write_config_word(pdev, drive_pci, timing);
        } else {
                /* Bit 15 is UDMA on/off, bit 13-14 are cycle time */
                speed = adev->dma_mode - XFER_UDMA_0;
                timing &= ~0x6000;
                timing |= udma_bits[speed];
        }
+       pci_write_config_word(pdev, drive_pci, timing);
 }
 
 /**
@@ -373,7 +374,7 @@ static void sis_66_set_dmamode (struct ata_port *ap, struct 
ata_device *adev)
        int drive_pci = sis_old_port_base(adev);
        u16 timing;
 
-       const u16 mwdma_bits[] = { 0x707, 0x202, 0x202 };
+       const u16 mwdma_bits[] = { 0x008, 0x302, 0x301 };
        const u16 udma_bits[]  = { 0xF000, 0xD000, 0xB000, 0xA000, 0x9000};
 
        pci_read_config_word(pdev, drive_pci, &timing);
@@ -432,8 +433,7 @@ static void sis_100_set_dmamode (struct ata_port *ap, 
struct ata_device *adev)
  *     @adev: Device to program
  *
  *     Set UDMA/MWDMA mode for device, in host controller PCI config space.
- *     Handles early SiS 961 bridges. Supports MWDMA as well unlike
- *     the old ide/pci driver.
+ *     Handles early SiS 961 bridges.
  *
  *     LOCKING:
  *     None (inherited from caller).
@@ -467,8 +467,6 @@ static void sis_133_early_set_dmamode (struct ata_port *ap, 
struct ata_device *a
  *     @adev: Device to program
  *
  *     Set UDMA/MWDMA mode for device, in host controller PCI config space.
- *     Handles early SiS 961 bridges. Supports MWDMA as well unlike
- *     the old ide/pci driver.
  *
  *     LOCKING:
  *     None (inherited from caller).
-
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