diff options
author | Jacob Pan <jacob.jun.pan@linux.intel.com> | 2014-04-16 07:27:11 +0200 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2014-04-24 16:26:26 +0200 |
commit | 0cf4a7d6cf23715276fcd0f1cd1cabc6a9b46942 (patch) | |
tree | 5fe2093fe6dca045f7c068fb5f39548b6b419b4f /drivers/ata/libahci.c | |
parent | libata/ahci: accommodate tag ordered controllers (diff) | |
download | linux-0cf4a7d6cf23715276fcd0f1cd1cabc6a9b46942.tar.xz linux-0cf4a7d6cf23715276fcd0f1cd1cabc6a9b46942.zip |
ahci: disable DEVSLP for Intel Valleyview
On Intel Valleyview SoC, SATA device sleep is not reliable. When
DEVSLP is attempted on certain SSDs, port_devslp write would fail
and result in malfunction of AHCI controller. AHCI controller may
be not shown in PCI enumeration after reset. Complete power source
removal may be required to recover from this failure. So we blacklist
this device and override host device reported capabilities such that
device LPM will only attempt slumber but not DEVSLP.
Signed-off-by: Jacob Pan <jacob.jun.pan@linux.intel.com>
Acked-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'drivers/ata/libahci.c')
-rw-r--r-- | drivers/ata/libahci.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index 6bd4f660b4e1..b9861453fc81 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -452,6 +452,13 @@ void ahci_save_initial_config(struct device *dev, cap &= ~HOST_CAP_SNTF; } + if ((cap2 & HOST_CAP2_SDS) && (hpriv->flags & AHCI_HFLAG_NO_DEVSLP)) { + dev_info(dev, + "controller can't do DEVSLP, turning off\n"); + cap2 &= ~HOST_CAP2_SDS; + cap2 &= ~HOST_CAP2_SADM; + } + if (!(cap & HOST_CAP_FBS) && (hpriv->flags & AHCI_HFLAG_YES_FBS)) { dev_info(dev, "controller can do FBS, turning on CAP_FBS\n"); cap |= HOST_CAP_FBS; |