libata: mask off DET when restoring SControl for detach
PATCH 1/1 libata: mask off DET when restoring SControl for detach
libata restores SControl on detach; however, trying to restore non-zero DET can cause undeterministic behavior including PMP device going offline till power cycling. Mask off DET when restoring SControl.
Signed-off-by Tejun Heo <[email protected]>
--- drivers/ata/libata-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/ata/libata-core.c +1 -1
@@ -5936,7 +5936,7 @@ static void ata_port_detach(struct ata_p* to us. Restore SControl and disable all existing devices. */ __ata_port_for_each_link (link, ap) { -sata_scr_write (link,SCR_CONTROL , link->saved_scontrol); +sata_scr_write (link,SCR_CONTROL , link->saved_scontrol &0xff0 );ata_link_for_each_dev (dev, link)ata_dev_disable (dev); }
Jeff Garzik
AppliedQuoted 15 lines · Tejun Heo
libata restores SControl on detach; however, trying to restore non-zero DET can cause undeterministic behavior including PMP device going offline till power cycling. Mask off DET when restoring SControl.
Signed-off-by Tejun Heo <[email protected]>--- drivers/ata/libata-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)Index:
work/drivers/ata/libata-core.c
===================================================================
drivers/ata/libata-core.c static void ata_port_detach(struct ata_p · line 5941
Quoted 7 lines
drivers/ata/libata-core.c +1
-1@@ -5936,7 +5936,7 @@ static void ata_port_detach(struct ata_p* to us. Restore SControl and disable all existing devices. */ __ata_port_for_each_link (link, ap) { -sata_scr_write (link,SCR_CONTROL , link->saved_scontrol); +sata_scr_write (link,SCR_CONTROL , link->saved_scontrol &0xff0 );ata_link_for_each_dev (dev, link)ata_dev_disable (dev);
applied