Alan Cox wrote: > In some situations we find that SATA devices are attached via PATA/SATA > bridges. When we find this we need to change a couple of bits of behaviour > > - Error changedown behaviour for SATA is different - no point > dropping to PIO > - 40/80 wire cable detection testing cannot be done. > > Thus we need to detect this case and update the cable type accordingly. > > Signed-off-by: Alan Cox <alan@xxxxxxxxxx> > > diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.22-rc1-mm1/drivers/ata/libata-core.c linux-2.6.22-rc1-mm1/drivers/ata/libata-core.c > --- linux.vanilla-2.6.22-rc1-mm1/drivers/ata/libata-core.c 2007-05-18 16:22:53.000000000 +0100 > +++ linux-2.6.22-rc1-mm1/drivers/ata/libata-core.c 2007-05-18 16:40:23.000000000 +0100 > @@ -2186,6 +2186,16 @@ > if (ap->ops->cable_detect) > ap->cbl = ap->ops->cable_detect(ap); > > + /* We may have SATA bridge glue hiding here irrespective of the > + reported cable types and sensed types */ > + for (i = 0; i < ATA_MAX_DEVICES; i++) { > + dev = &ap->device[i]; > + if (!ata_dev_enabled(dev)) > + continue; > + if (ata_id_is_sata(dev->id)) > + ap->cbl = ATA_CBL_SATA; > + } > + I'm not sure this is correct. The SATA bridge can be at the far side of PATA cable near to the drive. ie. PATA host <========= PATA cable ==========> P/SATA bridge : SATA drive In this case, most of the cable is PATA and cable detection matters. Another problem is that there are still codes which interpret ap->cbl == ATA_CBL_SATA as SATA host port. They need to be fixed first before using ap->cbl for the actual cable type. -- tejun - To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html