linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / ide / setup-pci.c
index 462ed30..7ebf992 100644 (file)
@@ -580,6 +580,7 @@ void ide_pci_setup_ports(struct pci_dev *dev, ide_pci_device_t *d, int pciirq, a
        int port;
        int at_least_one_hwif_enabled = 0;
        ide_hwif_t *hwif, *mate = NULL;
+       static int secondpdc = 0;
        u8 tmp;
 
        index->all = 0xf0f0;
@@ -591,9 +592,21 @@ void ide_pci_setup_ports(struct pci_dev *dev, ide_pci_device_t *d, int pciirq, a
        for (port = 0; port <= 1; ++port) {
                ide_pci_enablebit_t *e = &(d->enablebits[port]);
        
+               /* 
+                * If this is a Promise FakeRaid controller,
+                * the 2nd controller will be marked as 
+                * disabled while it is actually there and enabled
+                * by the bios for raid purposes. 
+                * Skip the normal "is it enabled" test for those.
+                */
+               if ((d->flags & IDEPCI_FLAG_FORCE_PDC) &&
+                   (secondpdc++==1) && (port==1))
+                       goto controller_ok;
+                       
                if (e->reg && (pci_read_config_byte(dev, e->reg, &tmp) ||
                    (tmp & e->mask) != e->val))
                        continue;       /* port not enabled */
+controller_ok:
 
                if (d->channels <= port)
                        break;