123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- From patchwork Tue Jan 9 14:42:21 2018
- Content-Type: text/plain; charset="utf-8"
- MIME-Version: 1.0
- Content-Transfer-Encoding: 7bit
- Subject: PCI: dwc: fix enumeration end when reaching root subordinate
- From: Koen Vandeputte <[email protected]>
- X-Patchwork-Id: 10152443
- Message-Id: <[email protected]>
- To: [email protected]
- Cc: [email protected], [email protected],
- [email protected], [email protected], [email protected],
- Koen Vandeputte <[email protected]>,
- Mika Westerberg <[email protected]>
- Date: Tue, 9 Jan 2018 15:42:21 +0100
- The subordinate value indicates the highest bus number which can be
- reached downstream though a certain device.
- Commit a20c7f36bd3d ("PCI: Do not allocate more buses than available in
- parent")
- ensures that downstream devices cannot assign busnumbers higher than the
- upstream device subordinate number, which was indeed illogical.
- By default, dw_pcie_setup_rc() inits the Root Complex subordinate to a
- value of 0x01.
- Due to this combined with above commit, enumeration stops digging deeper
- downstream as soon as bus num 0x01 has been assigned, which is always
- the case for a bridge device.
- This results in all devices behind a bridge bus to remain undetected, as
- these would be connected to bus 0x02 or higher.
- Fix this by initializing the RC to a subordinate value of 0xff, meaning
- that all busses [0x00-0xff] are reachable through this RC.
- Fixes: a20c7f36bd3d ("PCI: Do not allocate more buses than available in
- parent")
- Signed-off-by: Koen Vandeputte <[email protected]>
- Tested-by: Niklas Cassel <[email protected]>
- Cc: Mika Westerberg <[email protected]>
- ---
- Will send separate patches to stable as this file got moved/renamed
- drivers/pci/dwc/pcie-designware-host.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
- --- a/drivers/pci/dwc/pcie-designware-host.c
- +++ b/drivers/pci/dwc/pcie-designware-host.c
- @@ -607,7 +607,7 @@ void dw_pcie_setup_rc(struct pcie_port *
- /* setup bus numbers */
- val = dw_pcie_readl_dbi(pci, PCI_PRIMARY_BUS);
- val &= 0xff000000;
- - val |= 0x00010100;
- + val |= 0x00ff0100;
- dw_pcie_writel_dbi(pci, PCI_PRIMARY_BUS, val);
-
- /* setup command register */
|