pci: pcie_dw_rockchip: Disable unused BARs of the root complex
authorJon Lin <jon.lin@rock-chips.com>
Sat, 22 Jul 2023 13:30:20 +0000 (13:30 +0000)
committerKever Yang <kever.yang@rock-chips.com>
Fri, 28 Jul 2023 10:45:03 +0000 (18:45 +0800)
The Root Complex BARs default to claim the full 1 GiB memory region on
RK3568, leaving no space for any attached device.

Fix this by disable the unused BAR 0 and BAR 1 of the RC.

Signed-off-by: Jon Lin <jon.lin@rock-chips.com>
[jonas@kwiboo.se: Move to rk_pcie_configure and use PCI_BASE_ADDRESS_0/1 const]
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
drivers/pci/pcie_dw_rockchip.c

index 82a8b9c..1a35fae 100644 (file)
@@ -61,6 +61,8 @@ struct rk_pcie {
 #define PCIE_CLIENT_DBG_TRANSITION_DATA        0xffff0000
 #define PCIE_CLIENT_DBF_EN             0xffff0003
 
+#define PCIE_TYPE0_HDR_DBI2_OFFSET     0x100000
+
 static int rk_pcie_read(void __iomem *addr, int size, u32 *val)
 {
        if ((uintptr_t)addr & (size - 1)) {
@@ -158,6 +160,12 @@ static void rk_pcie_configure(struct rk_pcie *pci, u32 cap_speed)
 {
        dw_pcie_dbi_write_enable(&pci->dw, true);
 
+       /* Disable BAR 0 and BAR 1 */
+       writel(0, pci->dw.dbi_base + PCIE_TYPE0_HDR_DBI2_OFFSET +
+              PCI_BASE_ADDRESS_0);
+       writel(0, pci->dw.dbi_base + PCIE_TYPE0_HDR_DBI2_OFFSET +
+              PCI_BASE_ADDRESS_1);
+
        clrsetbits_le32(pci->dw.dbi_base + PCIE_LINK_CAPABILITY,
                        TARGET_LINK_SPEED_MASK, cap_speed);