aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ata/sata_promise.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c
index 753402ec5716..3a7d9b5332af 100644
--- a/drivers/ata/sata_promise.c
+++ b/drivers/ata/sata_promise.c
@@ -45,7 +45,7 @@
45#include "sata_promise.h" 45#include "sata_promise.h"
46 46
47#define DRV_NAME "sata_promise" 47#define DRV_NAME "sata_promise"
48#define DRV_VERSION "2.06" 48#define DRV_VERSION "2.07"
49 49
50 50
51enum { 51enum {
@@ -926,6 +926,7 @@ static int pdc_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
926 struct ata_host *host; 926 struct ata_host *host;
927 void __iomem *base; 927 void __iomem *base;
928 int n_ports, i, rc; 928 int n_ports, i, rc;
929 int is_sataii_tx4;
929 930
930 if (!printed_version++) 931 if (!printed_version++)
931 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 932 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
@@ -964,10 +965,23 @@ static int pdc_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
964 } 965 }
965 host->iomap = pcim_iomap_table(pdev); 966 host->iomap = pcim_iomap_table(pdev);
966 967
967 for (i = 0; i < host->n_ports; i++) 968 is_sataii_tx4 = 0;
969 if ((pi->flags & (PDC_FLAG_GEN_II|PDC_FLAG_4_PORTS)) == (PDC_FLAG_GEN_II|PDC_FLAG_4_PORTS)) {
970 is_sataii_tx4 = 1;
971 dev_printk(KERN_INFO, &pdev->dev, "applying SATAII TX4 port numbering workaround\n");
972 }
973 for (i = 0; i < host->n_ports; i++) {
974 static const unsigned char sataii_tx4_port_remap[4] = { 3, 1, 0, 2};
975 int ata_nr;
976
977 ata_nr = i;
978 if (is_sataii_tx4)
979 ata_nr = sataii_tx4_port_remap[i];
980
968 pdc_ata_setup_port(host->ports[i], 981 pdc_ata_setup_port(host->ports[i],
969 base + 0x200 + i * 0x80, 982 base + 0x200 + ata_nr * 0x80,
970 base + 0x400 + i * 0x100); 983 base + 0x400 + ata_nr * 0x100);
984 }
971 985
972 /* initialize adapter */ 986 /* initialize adapter */
973 pdc_host_init(host); 987 pdc_host_init(host);