linux/drivers/pci
Francesco Dolcini a6809941c1 PCI: imx6: Fix PERST# start-up sequence
According to the PCIe standard the PERST# signal (reset-gpio in
fsl,imx* compatible dts) should be kept asserted for at least 100 usec
before the PCIe refclock is stable, should be kept asserted for at
least 100 msec after the power rails are stable and the host should wait
at least 100 msec after it is de-asserted before accessing the
configuration space of any attached device.

From PCIe CEM r2.0, sec 2.6.2

  T-PVPERL: Power stable to PERST# inactive - 100 msec
  T-PERST-CLK: REFCLK stable before PERST# inactive - 100 usec.

From PCIe r5.0, sec 6.6.1

  With a Downstream Port that does not support Link speeds greater than
  5.0 GT/s, software must wait a minimum of 100 ms before sending a
  Configuration Request to the device immediately below that Port.

Failure to do so could prevent PCIe devices to be working correctly,
and this was experienced with real devices.

Move reset assert to imx6_pcie_assert_core_reset(), this way we ensure
that PERST# is asserted before enabling any clock, move de-assert to the
end of imx6_pcie_deassert_core_reset() after the clock is enabled and
deemed stable and add a new delay of 100 msec just afterward.

Link: https://lore.kernel.org/all/20220211152550.286821-1-francesco.dolcini@toradex.com
Link: https://lore.kernel.org/r/20220404081509.94356-1-francesco.dolcini@toradex.com
Fixes: bb38919ec5 ("PCI: imx6: Add support for i.MX6 PCIe controller")
Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
Acked-by: Richard Zhu <hongxing.zhu@nxp.com>
2022-05-11 13:50:45 +01:00
..
controller PCI: imx6: Fix PERST# start-up sequence 2022-05-11 13:50:45 +01:00
endpoint PCI: endpoint: Fix misused goto label 2022-03-07 11:42:12 +00:00
hotplug pci-v5.18-changes 2022-03-25 13:02:05 -07:00
msi PCI/MSI: Remove bogus warning in pci_irq_get_affinity() 2022-02-04 09:54:20 +01:00
pcie pci-v5.18-changes 2022-03-25 13:02:05 -07:00
switch PCI/switchtec: Declare local state_names[] as static 2021-11-19 12:14:02 -06:00
access.c PCI: Reduce warnings on possible RW1C corruption 2022-03-04 15:59:52 -06:00
ats.c PCI: Allow PASID on fake PCIe devices without TLP prefixes 2021-08-26 14:21:42 -05:00
bus.c
ecam.c PCI: Dynamically map ECAM regions 2021-06-16 17:20:40 -05:00
host-bridge.c PCI: VMD: ACPI: Make ACPI companion lookup work for VMD bus 2021-09-02 17:59:58 +02:00
iov.c PCI/IOV: Fix wrong kernel-doc identifier 2022-03-07 12:06:10 -07:00
irq.c
Kconfig PCI/VGA: Move vgaarb to drivers/pci 2022-03-09 18:30:46 -06:00
Makefile PCI/VGA: Move vgaarb to drivers/pci 2022-03-09 18:30:46 -06:00
mmap.c
of.c PCI: Correct misspelled words 2022-01-07 20:43:23 -06:00
p2pdma.c PCI/P2PDMA: Add Intel 3rd Gen Intel Xeon Scalable Processors to whitelist 2022-02-25 11:03:30 -06:00
pci-acpi.c PCI/ACPI: Replace acpi_bus_get_device() with acpi_fetch_acpi_dev() 2022-02-04 17:10:44 -06:00
pci-bridge-emul.c Merge branch 'remotes/lorenzo/pci/mvebu' 2022-03-22 17:16:25 -05:00
pci-bridge-emul.h PCI: pci-bridge-emul: Add support for PCI Bridge Subsystem Vendor ID capability 2022-02-22 16:04:19 +00:00
pci-driver.c Changes in this cycle were: 2022-03-22 14:39:12 -07:00
pci-label.c PCI/sysfs: Use sysfs_emit() and sysfs_emit_at() in "show" functions 2021-06-03 22:14:47 -05:00
pci-mid.c PCI: PM: Do not use pci_platform_pm_ops for Intel MID PM 2021-09-27 17:13:21 +02:00
pci-pf-stub.c
pci-stub.c
pci-sysfs.c PCI: Remove unused assignments 2022-03-22 11:23:53 -05:00
pci.c pci-v5.17-changes 2022-01-16 08:08:11 +02:00
pci.h pci-v5.16-changes 2021-11-06 14:36:12 -07:00
probe.c pci-v5.17-changes 2022-01-16 08:08:11 +02:00
proc.c PCI: Remove unused assignments 2022-03-22 11:23:53 -05:00
quirks.c pci-v5.18-changes 2022-03-25 13:02:05 -07:00
remove.c PCI: Remove reset_fn field from pci_dev 2021-08-17 17:44:38 -05:00
rom.c PCI: Prefer 'unsigned int' over bare 'unsigned' 2021-10-27 13:41:22 -05:00
search.c PCI: Remove WARN_ON(in_interrupt()) 2021-02-10 16:46:29 -06:00
setup-bus.c Merge branch 'pci/misc' 2022-03-22 17:16:21 -05:00
setup-irq.c PCI: Tidy comments 2021-09-28 13:43:17 -05:00
setup-res.c PCI: Work around Intel I210 ROM BAR overlap defect 2022-01-11 09:33:10 -06:00
slot.c PCI/sysfs: Use default_groups in kobj_type for slot attrs 2021-12-29 13:42:04 -06:00
syscall.c PCI: Return int from pciconfig_read() syscall 2021-08-03 16:55:48 -05:00
vc.c
vgaarb.c PCI/VGA: Replace full MIT license text with SPDX identifier 2022-03-09 18:31:34 -06:00
vpd.c PCI/VPD: Use pci_read_vpd_any() in pci_vpd_size() 2021-10-25 19:12:23 -05:00
xen-pcifront.c xen/grant-table: remove readonly parameter from functions 2022-03-15 20:34:40 -05:00