diff options
author | Duncan Laurie <dlaurie@chromium.org> | 2017-06-25 20:24:05 -0700 |
---|---|---|
committer | Duncan Laurie <dlaurie@chromium.org> | 2017-06-27 02:15:50 +0000 |
commit | d4b6ac19b0a6619ebe645875282643cc50cf7a3e (patch) | |
tree | c77ef7ca7f356003721d7c3ea5ae73cf32454051 /src/soc/intel/skylake | |
parent | f3ed7c1a34811f5f2bb270ad6c72179e991d5ad1 (diff) |
soc/intel/skylake: storage: Add 2ms delay before exiting D3
For the skylake/kabylake generation of PCH there is an ACPI workaround
for emmc/sd power state that involves disabling and re-enabling dynamic
clock gating after enabling power to the controller, before setting the
power state to D0.
Under certain conditions we have observed that the controller is not
powered and ready by the time the kernel attempts to read the PME
control and status register and so the system will hang while attempting
to read PCI config register 0x84.
To ensure that the controller is ready add a 2ms delay after re-enabling
dynamic clock gating and before setting the power state to D0.
This issue has been observed on eMMC, but the same workaround exists for
the SD card interface so the same delay is added there.
BUG=b:35587084
BRANCH=eve
TEST=manual stress testing of D0<>D3 transition across many devices
shows no hard hang after 2 days.
Change-Id: If0f0323cf5437c54c907c332937b5de9dda2d8f6
Signed-off-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-on: https://review.coreboot.org/20363
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Subrata Banik <subrata.banik@intel.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Furquan Shaikh <furquan@google.com>
Diffstat (limited to 'src/soc/intel/skylake')
-rw-r--r-- | src/soc/intel/skylake/acpi/scs.asl | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/soc/intel/skylake/acpi/scs.asl b/src/soc/intel/skylake/acpi/scs.asl index 1f89689fb7..c2f50cce9b 100644 --- a/src/soc/intel/skylake/acpi/scs.asl +++ b/src/soc/intel/skylake/acpi/scs.asl @@ -85,6 +85,7 @@ Device (EMMC) /* Set bits 31, 6, 2, 0 */ ^^PCRO (PID_SCS, 0x600, 0x80000045) + Sleep (2) /* Set Power State to D0 */ Store (Zero, Local0) @@ -139,6 +140,7 @@ Device (SDXC) /* Set bits 31, 6, 2, 0 */ ^^PCRO (PID_SCS, 0x600, 0x00000185) + Sleep (2) /* Set Power State to D0 */ Store (Zero, Local0) |