• Honghui Zhang's avatar
    PCI: mediatek: Fix mtk_pcie_find_port() endpoint/port matching logic · 074d6f32
    Honghui Zhang authored
    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: default avatarHonghui Zhang <honghui.zhang@mediatek.com>
    [lorenzo.pieralisi@arm.com: rewrote the commit log]
    Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Acked-by: default avatarRyder Lee <ryder.lee@mediatek.com>
    074d6f32
pcie-mediatek.c 31.4 KB