723943821b
OBS-URL: https://build.opensuse.org/request/show/858525 OBS-URL: https://build.opensuse.org/package/show/hardware:boot/u-boot?expand=0&rev=118
54 lines
2.2 KiB
Diff
54 lines
2.2 KiB
Diff
From 79de6d0785678f2f7c14566ee4e526ef180634a5 Mon Sep 17 00:00:00 2001
|
|
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
Date: Tue, 17 Nov 2020 17:50:33 +0100
|
|
Subject: [PATCH] pci: pcie-brcmstb: Fix inbound window configurations
|
|
|
|
So far we've assumed a fixed configuration for inbound windows as we had
|
|
a single user for this controller. But the controller's DMA constraints
|
|
were improved starting with BCM2711's B1 revision of the SoC, notably
|
|
available in CM4 and Pi400. They allow for wider inbound windows. We can
|
|
now cover the whole address space, whereas before we where limited to
|
|
the lower 3GB.
|
|
|
|
This information is passed to us through DT's 'dma-ranges' property and
|
|
it's specially important for us to honor it since some interactions with
|
|
the board's co-processor assume we're doing so (specifically the XHCI
|
|
firmware load operation, which is handled by the co-processor after
|
|
u-boot has correctly configured the PCIe controller).
|
|
|
|
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
|
|
---
|
|
drivers/pci/pcie_brcmstb.c | 12 +++++-------
|
|
1 file changed, 5 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/drivers/pci/pcie_brcmstb.c b/drivers/pci/pcie_brcmstb.c
|
|
index dade79e9c8..f6e8ad0d0a 100644
|
|
--- a/drivers/pci/pcie_brcmstb.c
|
|
+++ b/drivers/pci/pcie_brcmstb.c
|
|
@@ -432,6 +432,7 @@ static int brcm_pcie_probe(struct udevice *dev)
|
|
struct pci_controller *hose = dev_get_uclass_priv(ctlr);
|
|
struct brcm_pcie *pcie = dev_get_priv(dev);
|
|
void __iomem *base = pcie->base;
|
|
+ struct pci_region region;
|
|
bool ssc_good = false;
|
|
int num_out_wins = 0;
|
|
u64 rc_bar2_offset, rc_bar2_size;
|
|
@@ -468,13 +469,10 @@ static int brcm_pcie_probe(struct udevice *dev)
|
|
MISC_CTRL_SCB_ACCESS_EN_MASK |
|
|
MISC_CTRL_CFG_READ_UR_MODE_MASK |
|
|
MISC_CTRL_MAX_BURST_SIZE_128);
|
|
- /*
|
|
- * TODO: When support for other SoCs than BCM2711 is added we may
|
|
- * need to use the base address and size(s) provided in the dma-ranges
|
|
- * property.
|
|
- */
|
|
- rc_bar2_offset = 0;
|
|
- rc_bar2_size = 0xc0000000;
|
|
+
|
|
+ pci_get_dma_regions(dev, ®ion, 0);
|
|
+ rc_bar2_offset = region.bus_start - region.phys_start;
|
|
+ rc_bar2_size = 1ULL << fls64(region.size - 1);
|
|
|
|
tmp = lower_32_bits(rc_bar2_offset);
|
|
u32p_replace_bits(&tmp, brcm_pcie_encode_ibar_size(rc_bar2_size),
|