Commit 90dac02c authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik
Browse files

[PATCH] libata: use SATA speed down in ata_drive_probe_reset()



Make ata_drive_probe_reset() use SATA SPD configuration.  Hardreset
will be force if speed renegotiation is necessary.  Also, if a
hardreset fails, PHY speed is stepped down and hardreset is retried
until the lowest speed is reached.

Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 1c3fae4d
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -2578,7 +2578,7 @@ int ata_drive_probe_reset(struct ata_port *ap, ata_probeinit_fn_t probeinit,
	if (probeinit)
		probeinit(ap);

	if (softreset) {
	if (softreset && !ata_set_sata_spd_needed(ap)) {
		rc = ata_do_reset(ap, softreset, postreset, 0, classes);
		if (rc == 0 && classes[0] != ATA_DEV_UNKNOWN)
			goto done;
@@ -2587,9 +2587,17 @@ int ata_drive_probe_reset(struct ata_port *ap, ata_probeinit_fn_t probeinit,
	if (!hardreset)
		goto done;

	while (1) {
		rc = ata_do_reset(ap, hardreset, postreset, 0, classes);
	if (rc || classes[0] != ATA_DEV_UNKNOWN)
		if (rc == 0) {
			if (classes[0] != ATA_DEV_UNKNOWN)
				goto done;
			break;
		}

		if (ata_down_sata_spd_limit(ap))
			goto done;
	}

	if (softreset)
		rc = ata_do_reset(ap, softreset, postreset, 0, classes);