PCI: iproc: Add 500ms delay during device shutdown
authorOza Pawandeep <oza.oza@broadcom.com>
Mon, 28 Aug 2017 21:43:35 +0000 (16:43 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 5 Sep 2017 17:27:03 +0000 (12:27 -0500)
commitb91c26c6a539e26261cbe280b9f48311663ce655
treee27ec47aabff5110f85dd1e894c66c6a5ea964d1
parent39b7a4ff930143f17d05cd769ba2099f9249e898
PCI: iproc: Add 500ms delay during device shutdown

During soft reset (e.g., "reboot" from Linux) on some iProc-based SOCs, the
LCPLL clock and PERST both go off simultaneously.  This seems in accordance
with the PCIe Card Electromechanical spec, r2.0, sec 2.2.3, which says the
clock goes inactive after PERST# goes active, but doesn't specify how long
the clock should be valid after PERST#.

However, we have observed that with the iProc Stingray, some Intel NVMe
endpoints, e.g., the P3700 400GB series, are not detected correctly upon
the next boot sequence unless the clock remains valid for some time after
PERST# is asserted.

Delay 500ms after asserting PERST# before performing a reboot.  The 500ms
is experimentally determined.

Signed-off-by: Oza Pawandeep <oza.oza@broadcom.com>
[bhelgaas: changelog, add spec reference, fold in iproc_pcie_shutdown()
export from Arnd Bergmann <arnd@arndb.de>]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Ray Jui <ray.jui@broadcom.com>
Reviewed-by: Scott Branden <scott.branden@broadcom.com>
drivers/pci/host/pcie-iproc-platform.c
drivers/pci/host/pcie-iproc.c
drivers/pci/host/pcie-iproc.h