diff options
-rw-r--r-- | drivers/ata/libata-sff.c | 12 | ||||
-rw-r--r-- | drivers/ata/sata_uli.c | 3 | ||||
-rw-r--r-- | include/linux/libata.h | 1 |
3 files changed, 11 insertions, 5 deletions
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index 623cec914c9b..114fa81deb83 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c | |||
@@ -870,7 +870,8 @@ ata_pci_init_native_mode(struct pci_dev *pdev, struct ata_port_info **port, int | |||
870 | pci_resource_start(pdev, 1) | ATA_PCI_CTL_OFS; | 870 | pci_resource_start(pdev, 1) | ATA_PCI_CTL_OFS; |
871 | bmdma = pci_resource_start(pdev, 4); | 871 | bmdma = pci_resource_start(pdev, 4); |
872 | if (bmdma) { | 872 | if (bmdma) { |
873 | if (inb(bmdma + 2) & 0x80) | 873 | if ((!(port[p]->flags & ATA_FLAG_IGN_SIMPLEX)) && |
874 | (inb(bmdma + 2) & 0x80)) | ||
874 | probe_ent->_host_flags |= ATA_HOST_SIMPLEX; | 875 | probe_ent->_host_flags |= ATA_HOST_SIMPLEX; |
875 | probe_ent->port[p].bmdma_addr = bmdma; | 876 | probe_ent->port[p].bmdma_addr = bmdma; |
876 | } | 877 | } |
@@ -886,7 +887,8 @@ ata_pci_init_native_mode(struct pci_dev *pdev, struct ata_port_info **port, int | |||
886 | bmdma = pci_resource_start(pdev, 4); | 887 | bmdma = pci_resource_start(pdev, 4); |
887 | if (bmdma) { | 888 | if (bmdma) { |
888 | bmdma += 8; | 889 | bmdma += 8; |
889 | if(inb(bmdma + 2) & 0x80) | 890 | if ((!(port[p]->flags & ATA_FLAG_IGN_SIMPLEX)) && |
891 | (inb(bmdma + 2) & 0x80)) | ||
890 | probe_ent->_host_flags |= ATA_HOST_SIMPLEX; | 892 | probe_ent->_host_flags |= ATA_HOST_SIMPLEX; |
891 | probe_ent->port[p].bmdma_addr = bmdma; | 893 | probe_ent->port[p].bmdma_addr = bmdma; |
892 | } | 894 | } |
@@ -920,7 +922,8 @@ static struct ata_probe_ent *ata_pci_init_legacy_port(struct pci_dev *pdev, | |||
920 | probe_ent->port[0].ctl_addr = ATA_PRIMARY_CTL; | 922 | probe_ent->port[0].ctl_addr = ATA_PRIMARY_CTL; |
921 | if (bmdma) { | 923 | if (bmdma) { |
922 | probe_ent->port[0].bmdma_addr = bmdma; | 924 | probe_ent->port[0].bmdma_addr = bmdma; |
923 | if (inb(bmdma + 2) & 0x80) | 925 | if ((!(port[0]->flags & ATA_FLAG_IGN_SIMPLEX)) && |
926 | (inb(bmdma + 2) & 0x80)) | ||
924 | probe_ent->_host_flags |= ATA_HOST_SIMPLEX; | 927 | probe_ent->_host_flags |= ATA_HOST_SIMPLEX; |
925 | } | 928 | } |
926 | ata_std_ports(&probe_ent->port[0]); | 929 | ata_std_ports(&probe_ent->port[0]); |
@@ -937,7 +940,8 @@ static struct ata_probe_ent *ata_pci_init_legacy_port(struct pci_dev *pdev, | |||
937 | probe_ent->port[1].ctl_addr = ATA_SECONDARY_CTL; | 940 | probe_ent->port[1].ctl_addr = ATA_SECONDARY_CTL; |
938 | if (bmdma) { | 941 | if (bmdma) { |
939 | probe_ent->port[1].bmdma_addr = bmdma + 8; | 942 | probe_ent->port[1].bmdma_addr = bmdma + 8; |
940 | if (inb(bmdma + 10) & 0x80) | 943 | if ((!(port[1]->flags & ATA_FLAG_IGN_SIMPLEX)) && |
944 | (inb(bmdma + 10) & 0x80)) | ||
941 | probe_ent->_host_flags |= ATA_HOST_SIMPLEX; | 945 | probe_ent->_host_flags |= ATA_HOST_SIMPLEX; |
942 | } | 946 | } |
943 | ata_std_ports(&probe_ent->port[1]); | 947 | ata_std_ports(&probe_ent->port[1]); |
diff --git a/drivers/ata/sata_uli.c b/drivers/ata/sata_uli.c index 5c603ca3a50a..a43aec62d505 100644 --- a/drivers/ata/sata_uli.c +++ b/drivers/ata/sata_uli.c | |||
@@ -128,7 +128,8 @@ static const struct ata_port_operations uli_ops = { | |||
128 | 128 | ||
129 | static struct ata_port_info uli_port_info = { | 129 | static struct ata_port_info uli_port_info = { |
130 | .sht = &uli_sht, | 130 | .sht = &uli_sht, |
131 | .flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY, | 131 | .flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | |
132 | ATA_FLAG_IGN_SIMPLEX, | ||
132 | .pio_mask = 0x1f, /* pio0-4 */ | 133 | .pio_mask = 0x1f, /* pio0-4 */ |
133 | .udma_mask = 0x7f, /* udma0-6 */ | 134 | .udma_mask = 0x7f, /* udma0-6 */ |
134 | .port_ops = &uli_ops, | 135 | .port_ops = &uli_ops, |
diff --git a/include/linux/libata.h b/include/linux/libata.h index df76fc467816..22aa69e20905 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -177,6 +177,7 @@ enum { | |||
177 | * Register FIS clearing BSY */ | 177 | * Register FIS clearing BSY */ |
178 | ATA_FLAG_DEBUGMSG = (1 << 13), | 178 | ATA_FLAG_DEBUGMSG = (1 << 13), |
179 | ATA_FLAG_SETXFER_POLLING= (1 << 14), /* use polling for SETXFER */ | 179 | ATA_FLAG_SETXFER_POLLING= (1 << 14), /* use polling for SETXFER */ |
180 | ATA_FLAG_IGN_SIMPLEX = (1 << 15), /* ignore SIMPLEX */ | ||
180 | 181 | ||
181 | /* The following flag belongs to ap->pflags but is kept in | 182 | /* The following flag belongs to ap->pflags but is kept in |
182 | * ap->flags because it's referenced in many LLDs and will be | 183 | * ap->flags because it's referenced in many LLDs and will be |