aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ata/libata-core.c10
-rw-r--r--include/linux/libata.h1
2 files changed, 6 insertions, 5 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index dddcb9fde35a..5f8f57a818fb 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -5199,15 +5199,14 @@ void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp)
5199 */ 5199 */
5200int sata_link_init_spd(struct ata_link *link) 5200int sata_link_init_spd(struct ata_link *link)
5201{ 5201{
5202 u32 scontrol;
5203 u8 spd; 5202 u8 spd;
5204 int rc; 5203 int rc;
5205 5204
5206 rc = sata_scr_read(link, SCR_CONTROL, &scontrol); 5205 rc = sata_scr_read(link, SCR_CONTROL, &link->saved_scontrol);
5207 if (rc) 5206 if (rc)
5208 return rc; 5207 return rc;
5209 5208
5210 spd = (scontrol >> 4) & 0xf; 5209 spd = (link->saved_scontrol >> 4) & 0xf;
5211 if (spd) 5210 if (spd)
5212 link->hw_sata_spd_limit &= (1 << spd) - 1; 5211 link->hw_sata_spd_limit &= (1 << spd) - 1;
5213 5212
@@ -5794,9 +5793,10 @@ static void ata_port_detach(struct ata_port *ap)
5794 ata_port_wait_eh(ap); 5793 ata_port_wait_eh(ap);
5795 5794
5796 /* EH is now guaranteed to see UNLOADING - EH context belongs 5795 /* EH is now guaranteed to see UNLOADING - EH context belongs
5797 * to us. Disable all existing devices. 5796 * to us. Restore SControl and disable all existing devices.
5798 */ 5797 */
5799 ata_port_for_each_link(link, ap) { 5798 __ata_port_for_each_link(link, ap) {
5799 sata_scr_write(link, SCR_CONTROL, link->saved_scontrol);
5800 ata_link_for_each_dev(dev, link) 5800 ata_link_for_each_dev(dev, link)
5801 ata_dev_disable(dev); 5801 ata_dev_disable(dev);
5802 } 5802 }
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 5340d4c83fd9..80233fdc159f 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -647,6 +647,7 @@ struct ata_link {
647 647
648 unsigned int flags; /* ATA_LFLAG_xxx */ 648 unsigned int flags; /* ATA_LFLAG_xxx */
649 649
650 u32 saved_scontrol; /* SControl on probe */
650 unsigned int hw_sata_spd_limit; 651 unsigned int hw_sata_spd_limit;
651 unsigned int sata_spd_limit; 652 unsigned int sata_spd_limit;
652 unsigned int sata_spd; /* current SATA PHY speed */ 653 unsigned int sata_spd; /* current SATA PHY speed */