aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2010-11-18 11:58:17 +0000
committerAlexander Motin <mav@FreeBSD.org>2010-11-18 11:58:17 +0000
commit5c2a4ae217c19fee6cfe6334e2fbe9c0885c7daf (patch)
tree3ae2c520160c32a4e660d31859b0412986f96e6c /sys/dev
parent1f6aa21d474c6b312d62f6355ce5a6da6a0d0b65 (diff)
downloadsrc-5c2a4ae217c19fee6cfe6334e2fbe9c0885c7daf.tar.gz
src-5c2a4ae217c19fee6cfe6334e2fbe9c0885c7daf.zip
Even if we are skipping SATA hard reset - set power management bits in
SControl register. This should make things consistent and help to avoid unexpected PHY events that I've noticed in some cases on VIA controllers.
Notes
Notes: svn path=/head/; revision=215453
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ata/ata-sata.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/dev/ata/ata-sata.c b/sys/dev/ata/ata-sata.c
index d3df7ce4e4d5..e95fc8fcf208 100644
--- a/sys/dev/ata/ata-sata.c
+++ b/sys/dev/ata/ata-sata.c
@@ -153,8 +153,12 @@ ata_sata_phy_reset(device_t dev, int port, int quick)
if (quick) {
if (ata_sata_scr_read(ch, port, ATA_SCONTROL, &val))
return (0);
- if ((val & ATA_SC_DET_MASK) == ATA_SC_DET_IDLE)
+ if ((val & ATA_SC_DET_MASK) == ATA_SC_DET_IDLE) {
+ ata_sata_scr_write(ch, port, ATA_SCONTROL,
+ ATA_SC_DET_IDLE | ((ch->pm_level > 0) ? 0 :
+ ATA_SC_IPM_DIS_PARTIAL | ATA_SC_IPM_DIS_SLUMBER));
return ata_sata_connect(ch, port, quick);
+ }
}
if (bootverbose) {