]> git.hungrycats.org Git - linux/commitdiff
[PATCH] DMA mode setup fixes for piix.c/ata_piix.c
authorBartlomiej Zolnierkiewicz <b.zolnierkiewicz@elka.pw.edu.pl>
Thu, 3 Jun 2004 06:16:15 +0000 (23:16 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Thu, 3 Jun 2004 06:16:15 +0000 (23:16 -0700)
From: Go Taniguchi <go@turbolinux.co.jp> (Turbolinx Inc.)

Change reg48 and reg54 in 8bit access and remove unused reg44.

Jeff acked ata_piix.c part.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@elka.pw.edu.pl>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/ide/pci/piix.c
drivers/scsi/ata_piix.c

index 3d21a5b5e1843ccbc33186a7978d77bc27ec1d6e..7e73236316d1272dfe0403eaa9d57a3071e3fc6f 100644 (file)
@@ -49,9 +49,9 @@
  * pci_read_config_word(HWIF(drive)->pci_dev, 0x40, &reg40);
  * pci_read_config_word(HWIF(drive)->pci_dev, 0x42, &reg42);
  * pci_read_config_word(HWIF(drive)->pci_dev, 0x44, &reg44);
- * pci_read_config_word(HWIF(drive)->pci_dev, 0x48, &reg48);
+ * pci_read_config_byte(HWIF(drive)->pci_dev, 0x48, &reg48);
  * pci_read_config_word(HWIF(drive)->pci_dev, 0x4a, &reg4a);
- * pci_read_config_word(HWIF(drive)->pci_dev, 0x54, &reg54);
+ * pci_read_config_byte(HWIF(drive)->pci_dev, 0x54, &reg54);
  *
  * Documentation
  *     Publically available from Intel web site. Errata documentation
@@ -432,15 +432,14 @@ static int piix_tune_chipset (ide_drive_t *drive, u8 xferspeed)
        int w_flag              = 0x10 << drive->dn;
        int u_speed             = 0;
        int                     sitre;
-       u16                     reg4042, reg44, reg48, reg4a, reg54;
-       u8                      reg55;
+       u16                     reg4042, reg4a;
+       u8                      reg48, reg54, reg55;
 
        pci_read_config_word(dev, maslave, &reg4042);
        sitre = (reg4042 & 0x4000) ? 1 : 0;
-       pci_read_config_word(dev, 0x44, &reg44);
-       pci_read_config_word(dev, 0x48, &reg48);
+       pci_read_config_byte(dev, 0x48, &reg48);
        pci_read_config_word(dev, 0x4a, &reg4a);
-       pci_read_config_word(dev, 0x54, &reg54);
+       pci_read_config_byte(dev, 0x54, &reg54);
        pci_read_config_byte(dev, 0x55, &reg55);
 
        switch(speed) {
@@ -462,30 +461,26 @@ static int piix_tune_chipset (ide_drive_t *drive, u8 xferspeed)
 
        if (speed >= XFER_UDMA_0) {
                if (!(reg48 & u_flag))
-                       pci_write_config_word(dev, 0x48, reg48|u_flag);
+                       pci_write_config_byte(dev, 0x48, reg48 | u_flag);
                if (speed == XFER_UDMA_5) {
                        pci_write_config_byte(dev, 0x55, (u8) reg55|w_flag);
                } else {
                        pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag);
                }
-               if (!(reg4a & u_speed)) {
-                       pci_write_config_word(dev, 0x4a, reg4a & ~a_speed);
-                       pci_write_config_word(dev, 0x4a, reg4a|u_speed);
-               }
+               if ((reg4a & a_speed) != u_speed)
+                       pci_write_config_word(dev, 0x4a, (reg4a & ~a_speed) | u_speed);
                if (speed > XFER_UDMA_2) {
-                       if (!(reg54 & v_flag)) {
-                               pci_write_config_word(dev, 0x54, reg54|v_flag);
-                       }
-               } else {
-                       pci_write_config_word(dev, 0x54, reg54 & ~v_flag);
-               }
+                       if (!(reg54 & v_flag))
+                               pci_write_config_byte(dev, 0x54, reg54 | v_flag);
+               } else
+                       pci_write_config_byte(dev, 0x54, reg54 & ~v_flag);
        } else {
                if (reg48 & u_flag)
-                       pci_write_config_word(dev, 0x48, reg48 & ~u_flag);
+                       pci_write_config_byte(dev, 0x48, reg48 & ~u_flag);
                if (reg4a & a_speed)
                        pci_write_config_word(dev, 0x4a, reg4a & ~a_speed);
                if (reg54 & v_flag)
-                       pci_write_config_word(dev, 0x54, reg54 & ~v_flag);
+                       pci_write_config_byte(dev, 0x54, reg54 & ~v_flag);
                if (reg55 & w_flag)
                        pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag);
        }
index 3363c718bf89d9fd6f166641b8e22bb47abd9aeb..a6588b0f8c985ed2478dda7c08e29ed72f1ecaad 100644 (file)
@@ -424,16 +424,15 @@ static void piix_set_udmamode (struct ata_port *ap, struct ata_device *adev,
        int w_flag              = 0x10 << drive_dn;
        int u_speed             = 0;
        int                     sitre;
-       u16                     reg4042, reg44, reg48, reg4a, reg54;
-       u8                      reg55;
+       u16                     reg4042, reg4a;
+       u8                      reg48, reg54, reg55;
 
        pci_read_config_word(dev, maslave, &reg4042);
        DPRINTK("reg4042 = 0x%04x\n", reg4042);
        sitre = (reg4042 & 0x4000) ? 1 : 0;
-       pci_read_config_word(dev, 0x44, &reg44);
-       pci_read_config_word(dev, 0x48, &reg48);
+       pci_read_config_byte(dev, 0x48, &reg48);
        pci_read_config_word(dev, 0x4a, &reg4a);
-       pci_read_config_word(dev, 0x54, &reg54);
+       pci_read_config_byte(dev, 0x54, &reg54);
        pci_read_config_byte(dev, 0x55, &reg55);
 
        switch(speed) {
@@ -450,23 +449,19 @@ static void piix_set_udmamode (struct ata_port *ap, struct ata_device *adev,
        }
 
        if (!(reg48 & u_flag))
-               pci_write_config_word(dev, 0x48, reg48|u_flag);
+               pci_write_config_byte(dev, 0x48, reg48 | u_flag);
        if (speed == XFER_UDMA_5) {
                pci_write_config_byte(dev, 0x55, (u8) reg55|w_flag);
        } else {
                pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag);
        }
-       if (!(reg4a & u_speed)) {
-               pci_write_config_word(dev, 0x4a, reg4a & ~a_speed);
-               pci_write_config_word(dev, 0x4a, reg4a|u_speed);
-       }
+       if ((reg4a & a_speed) != u_speed)
+               pci_write_config_word(dev, 0x4a, (reg4a & ~a_speed) | u_speed);
        if (speed > XFER_UDMA_2) {
-               if (!(reg54 & v_flag)) {
-                       pci_write_config_word(dev, 0x54, reg54|v_flag);
-               }
-       } else {
-               pci_write_config_word(dev, 0x54, reg54 & ~v_flag);
-       }
+               if (!(reg54 & v_flag))
+                       pci_write_config_byte(dev, 0x54, reg54 | v_flag);
+       } else
+               pci_write_config_byte(dev, 0x54, reg54 & ~v_flag);
 }
 
 /* move to PCI layer, integrate w/ MSI stuff */