linux/drivers/pci/controller
Honghui Zhang 074d6f3268 PCI: mediatek: Fix mtk_pcie_find_port() endpoint/port matching logic
The Mediatek's host controller has two slots, each with its own control
registers. The host driver needs to identify what slot is connected to
what port in order to access the device's configuration space.

Current code retrieving slot connected to a given endpoint device.

Assuming each slot is connected to one endpoint device as below:

                host bridge
  bus 0 --> __________|_______
           |                  |
           |                  |
         slot 0             slot 1
  bus 1 -->|        bus 2 --> |
           |                  |
         EP 0               EP 1

During PCI enumeration, system software will scan all the PCI devices on
every bus starting from devfn 0. Using PCI_SLOT(devfn) for matching an
endpoint to its slot is erroneous in that the devfn does not contain the
hierarchical bus numbering in it. In order to match an endpoint with its
slot (and related port), the PCI tree must be walked up to the root bus
(where the root ports are situated) and then the PCI_SLOT(devfn)
matching logic can be correctly applied for matching.

This patch fixes the mtk_pcie_find_port() slot matching logic by adding
appropriate PCI tree walking code to retrieve the slot/port a given
endpoint is connected to.

Signed-off-by: Honghui Zhang <honghui.zhang@mediatek.com>
[lorenzo.pieralisi@arm.com: rewrote the commit log]
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Ryder Lee <ryder.lee@mediatek.com>
2018-10-15 14:47:54 +01:00
..
dwc Merge branch 'remotes/lorenzo/pci/dwc' 2018-08-15 14:59:11 -05:00
Kconfig Merge branch 'remotes/lorenzo/pci/mobiveil' 2018-08-15 14:59:14 -05:00
Makefile PCI: mobiveil: Add Kconfig/Makefile entries 2018-07-30 14:30:16 +01:00
pci-aardvark.c Merge branch 'remotes/lorenzo/pci/aardvark' 2018-08-15 14:59:09 -05:00
pci-ftpci100.c PCI: faraday: Fix I/O space page leak 2018-07-18 17:01:14 -05:00
pci-host-common.c
pci-host-generic.c
pci-hyperv.c pci-v4.19-changes 2018-08-16 09:21:54 -07:00
pci-mvebu.c PCI: mvebu: Drop bogus comment above mvebu_pcie_map_registers() 2018-08-08 15:58:18 +01:00
pci-rcar-gen2.c
pci-tegra.c
pci-thunder-ecam.c
pci-thunder-pem.c
pci-v3-semi.c PCI: v3-semi: Fix I/O space page leak 2018-07-18 17:02:13 -05:00
pci-versatile.c PCI: versatile: Fix I/O space page leak 2018-07-18 17:00:11 -05:00
pci-xgene-msi.c
pci-xgene.c PCI: xgene: Fix I/O space page leak 2018-07-18 16:59:40 -05:00
pcie-altera-msi.c
pcie-altera.c
pcie-cadence-ep.c Merge branch 'remotes/lorenzo/pci/dwc' 2018-08-15 14:59:11 -05:00
pcie-cadence-host.c PCI: cadence: Add shutdown callback to host driver 2018-07-12 12:46:41 +01:00
pcie-cadence.c PCI: cadence: Add Power Management ops for host and EP 2018-07-12 12:44:14 +01:00
pcie-cadence.h PCI: cadence: Add Power Management ops for host and EP 2018-07-12 12:44:14 +01:00
pcie-iproc-bcma.c
pcie-iproc-msi.c
pcie-iproc-platform.c
pcie-iproc.c PCI: iproc: Reduce inbound/outbound mapping print level 2018-07-13 11:59:21 +01:00
pcie-iproc.h PCI: iproc: Reject unconfigured physical functions from PAXC 2018-07-13 11:56:55 +01:00
pcie-mediatek.c PCI: mediatek: Fix mtk_pcie_find_port() endpoint/port matching logic 2018-10-15 14:47:54 +01:00
pcie-mobiveil.c PCI: mobiveil: Add missing ../pci.h include 2018-07-30 14:30:12 +01:00
pcie-rcar.c PCI: rcar: Clean up PHY init on failure 2018-06-29 13:48:54 -05:00
pcie-rockchip-ep.c PCI: Update xxx_pcie_ep_raise_irq() and pci_epc_raise_irq() signatures 2018-07-19 11:34:42 +01:00
pcie-rockchip-host.c
pcie-rockchip.c
pcie-rockchip.h
pcie-tango.c
pcie-xilinx-nwl.c PCI: xilinx-nwl: Add missing of_node_put() 2018-06-29 13:50:10 -05:00
pcie-xilinx.c PCI: xilinx: Add missing of_node_put() 2018-06-29 13:49:54 -05:00
vmd.c PCI: vmd: White list for fast interrupt handlers 2018-06-28 17:25:33 +01:00