From 700dec3672591b65cb01e113fa84442b39dcc9c0 Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Thu, 31 Jul 2008 16:09:34 +0900 Subject: [PATCH] --- yaml --- r: 109023 b: refs/heads/master c: d127ea7b8643a93d14d1f3c542974407f14d3663 h: refs/heads/master i: 109021: d323f8c535706cee5a5b6568c55eb8ff752d2324 109019: e5c950d20b2481fb558af7a660d31d1abd679efb 109015: 2d79cfd22fcccbae4055fc32f5a2975813d5e471 109007: 23956391d5952a350f4edc480196d38db484b294 108991: 8ab4eb47f00b20b0aba0d495f37314ed2c174315 v: v3 --- [refs] | 2 +- trunk/drivers/ata/libata-core.c | 10 +++++----- trunk/include/linux/libata.h | 1 + 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index f2edbc7727f6..3432b6df794e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: da0e21d3fa2340114fe24821718a1b57123e4664 +refs/heads/master: d127ea7b8643a93d14d1f3c542974407f14d3663 diff --git a/trunk/drivers/ata/libata-core.c b/trunk/drivers/ata/libata-core.c index dddcb9fde35a..5f8f57a818fb 100644 --- a/trunk/drivers/ata/libata-core.c +++ b/trunk/drivers/ata/libata-core.c @@ -5199,15 +5199,14 @@ void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp) */ int sata_link_init_spd(struct ata_link *link) { - u32 scontrol; u8 spd; int rc; - rc = sata_scr_read(link, SCR_CONTROL, &scontrol); + rc = sata_scr_read(link, SCR_CONTROL, &link->saved_scontrol); if (rc) return rc; - spd = (scontrol >> 4) & 0xf; + spd = (link->saved_scontrol >> 4) & 0xf; if (spd) link->hw_sata_spd_limit &= (1 << spd) - 1; @@ -5794,9 +5793,10 @@ static void ata_port_detach(struct ata_port *ap) ata_port_wait_eh(ap); /* EH is now guaranteed to see UNLOADING - EH context belongs - * to us. Disable all existing devices. + * to us. Restore SControl and disable all existing devices. */ - ata_port_for_each_link(link, ap) { + __ata_port_for_each_link(link, ap) { + sata_scr_write(link, SCR_CONTROL, link->saved_scontrol); ata_link_for_each_dev(dev, link) ata_dev_disable(dev); } diff --git a/trunk/include/linux/libata.h b/trunk/include/linux/libata.h index 5340d4c83fd9..80233fdc159f 100644 --- a/trunk/include/linux/libata.h +++ b/trunk/include/linux/libata.h @@ -647,6 +647,7 @@ struct ata_link { unsigned int flags; /* ATA_LFLAG_xxx */ + u32 saved_scontrol; /* SControl on probe */ unsigned int hw_sata_spd_limit; unsigned int sata_spd_limit; unsigned int sata_spd; /* current SATA PHY speed */