|
@@ -1850,8 +1850,11 @@ int ata_bus_probe(struct ata_port *ap)
|
|
|
for (i = 0; i < ATA_MAX_DEVICES; i++)
|
|
|
ap->device[i].pio_mode = XFER_PIO_0;
|
|
|
|
|
|
- /* read IDENTIFY page and configure devices */
|
|
|
- for (i = 0; i < ATA_MAX_DEVICES; i++) {
|
|
|
+ /* read IDENTIFY page and configure devices. We have to do the identify
|
|
|
+ specific sequence bass-ackwards so that PDIAG- is released by
|
|
|
+ the slave device */
|
|
|
+
|
|
|
+ for (i = ATA_MAX_DEVICES - 1; i >= 0; i--) {
|
|
|
dev = &ap->device[i];
|
|
|
|
|
|
if (tries[i])
|
|
@@ -1864,6 +1867,15 @@ int ata_bus_probe(struct ata_port *ap)
|
|
|
dev->id);
|
|
|
if (rc)
|
|
|
goto fail;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* After the identify sequence we can now set up the devices. We do
|
|
|
+ this in the normal order so that the user doesn't get confused */
|
|
|
+
|
|
|
+ for(i = 0; i < ATA_MAX_DEVICES; i++) {
|
|
|
+ dev = &ap->device[i];
|
|
|
+ if (!ata_dev_enabled(dev))
|
|
|
+ continue;
|
|
|
|
|
|
ap->eh_context.i.flags |= ATA_EHI_PRINTINFO;
|
|
|
rc = ata_dev_configure(dev);
|