From 2f98fbf772dc5a01d06bce8ca65511c86eb4c4f5 Mon Sep 17 00:00:00 2001 From: Travis Geiselbrecht Date: Thu, 9 May 2024 22:15:27 -0700 Subject: [PATCH] [pci][fdt] do not attempt to configure PCI with 64bit bars on a 32bit system Especially in the case where the 32bit system doesn't have an MMU, avoid using any high addresses for BARs. --- dev/bus/pci/bus_mgr/resource.cpp | 1 + lib/fdtwalk/helpers.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/dev/bus/pci/bus_mgr/resource.cpp b/dev/bus/pci/bus_mgr/resource.cpp index 22470fbbc..e862fd4b2 100644 --- a/dev/bus/pci/bus_mgr/resource.cpp +++ b/dev/bus/pci/bus_mgr/resource.cpp @@ -71,6 +71,7 @@ status_t resource_allocator::allocate_mmio(bool can_be_64bit, bool prefetchable, return NO_ERROR; } + // after trying once to allocate in a 64bit range, drop to 32bit and try again if (can_be_64bit) { can_be_64bit = false; continue; diff --git a/lib/fdtwalk/helpers.cpp b/lib/fdtwalk/helpers.cpp index fae5c6c69..9254103c9 100644 --- a/lib/fdtwalk/helpers.cpp +++ b/lib/fdtwalk/helpers.cpp @@ -249,8 +249,10 @@ status_t fdtwalk_setup_pci(const void *fdt) { if (pcie_info[i].mmio_len > 0) { pci_bus_mgr_add_resource(PCI_RESOURCE_MMIO_RANGE, pcie_info[i].mmio_base, pcie_info[i].mmio_len); } - if (pcie_info[i].mmio64_len > 0) { - pci_bus_mgr_add_resource(PCI_RESOURCE_MMIO64_RANGE, pcie_info[i].mmio64_base, pcie_info[i].mmio64_len); + if (sizeof(void *) >= 8) { + if (pcie_info[i].mmio64_len > 0) { + pci_bus_mgr_add_resource(PCI_RESOURCE_MMIO64_RANGE, pcie_info[i].mmio64_base, pcie_info[i].mmio64_len); + } } } }