|
@@ -3392,17 +3392,27 @@ int ata_down_xfermask_limit(struct ata_device *dev, unsigned int sel)
|
|
|
|
|
|
static int ata_dev_set_mode(struct ata_device *dev)
|
|
static int ata_dev_set_mode(struct ata_device *dev)
|
|
{
|
|
{
|
|
|
|
+ struct ata_port *ap = dev->link->ap;
|
|
struct ata_eh_context *ehc = &dev->link->eh_context;
|
|
struct ata_eh_context *ehc = &dev->link->eh_context;
|
|
|
|
+ const bool nosetxfer = dev->horkage & ATA_HORKAGE_NOSETXFER;
|
|
const char *dev_err_whine = "";
|
|
const char *dev_err_whine = "";
|
|
int ign_dev_err = 0;
|
|
int ign_dev_err = 0;
|
|
- unsigned int err_mask;
|
|
|
|
|
|
+ unsigned int err_mask = 0;
|
|
int rc;
|
|
int rc;
|
|
|
|
|
|
dev->flags &= ~ATA_DFLAG_PIO;
|
|
dev->flags &= ~ATA_DFLAG_PIO;
|
|
if (dev->xfer_shift == ATA_SHIFT_PIO)
|
|
if (dev->xfer_shift == ATA_SHIFT_PIO)
|
|
dev->flags |= ATA_DFLAG_PIO;
|
|
dev->flags |= ATA_DFLAG_PIO;
|
|
|
|
|
|
- err_mask = ata_dev_set_xfermode(dev);
|
|
|
|
|
|
+ if (nosetxfer && ap->flags & ATA_FLAG_SATA && ata_id_is_sata(dev->id))
|
|
|
|
+ dev_err_whine = " (SET_XFERMODE skipped)";
|
|
|
|
+ else {
|
|
|
|
+ if (nosetxfer)
|
|
|
|
+ ata_dev_printk(dev, KERN_WARNING,
|
|
|
|
+ "NOSETXFER but PATA detected - can't "
|
|
|
|
+ "skip SETXFER, might malfunction\n");
|
|
|
|
+ err_mask = ata_dev_set_xfermode(dev);
|
|
|
|
+ }
|
|
|
|
|
|
if (err_mask & ~AC_ERR_DEV)
|
|
if (err_mask & ~AC_ERR_DEV)
|
|
goto fail;
|
|
goto fail;
|
|
@@ -4297,6 +4307,12 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
|
/* Devices which aren't very happy with higher link speeds */
|
|
/* Devices which aren't very happy with higher link speeds */
|
|
{ "WD My Book", NULL, ATA_HORKAGE_1_5_GBPS, },
|
|
{ "WD My Book", NULL, ATA_HORKAGE_1_5_GBPS, },
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Devices which choke on SETXFER. Applies only if both the
|
|
|
|
+ * device and controller are SATA.
|
|
|
|
+ */
|
|
|
|
+ { "PIONEER DVD-RW DVRTD08", "1.00", ATA_HORKAGE_NOSETXFER },
|
|
|
|
+
|
|
/* End Marker */
|
|
/* End Marker */
|
|
{ }
|
|
{ }
|
|
};
|
|
};
|