PCI: dwc: ep: Ensure proper iteration over outbound map windows
[ Upstream commit f3e1dccba0a0833fc9a05fb838ebeb6ea4ca0e1a ] Most systems' PCIe outbound map windows have non-zero physical addresses, but the possibility of encountering zero increased after following commit ("PCI: dwc: Use parent_bus_offset"). 'ep->outbound_addr[n]', representing 'parent_bus_address', might be 0 on some hardware, which trims high address bits through bus fabric before sending to the PCIe controller. Replace the iteration logic with 'for_each_set_bit()' to ensure only allocated map windows are iterated when determining the ATU index from a given address. Link: https://lore.kernel.org/r/20250315201548.858189-12-helgaas@kernel.org Signed-off-by: Frank Li <Frank.Li@nxp.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
a74286d17e
commit
e4510552c2
@@ -281,7 +281,7 @@ static int dw_pcie_find_index(struct dw_pcie_ep *ep, phys_addr_t addr,
|
|||||||
u32 index;
|
u32 index;
|
||||||
struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
|
struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
|
||||||
|
|
||||||
for (index = 0; index < pci->num_ob_windows; index++) {
|
for_each_set_bit(index, ep->ob_window_map, pci->num_ob_windows) {
|
||||||
if (ep->outbound_addr[index] != addr)
|
if (ep->outbound_addr[index] != addr)
|
||||||
continue;
|
continue;
|
||||||
*atu_index = index;
|
*atu_index = index;
|
||||||
|
Reference in New Issue
Block a user