1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 #include <libpayload.h> 4 #include <pci.h> 5 6 #define PCIE_CFGNUM_REG 0x140 7 #define PCIE_CFG_DEVFN(devfn) ((devfn) & GENMASK(7, 0)) 8 #define PCIE_CFG_BUS(bus) (((bus) << 8) & GENMASK(15, 8)) 9 #define PCIE_CFG_OFFSET_ADDR 0x1000 10 #define PCIE_CFG_HEADER(bus, devfn) \ 11 (PCIE_CFG_BUS(bus) | PCIE_CFG_DEVFN(devfn)) 12 pci_map_bus(pcidev_t dev)13uintptr_t pci_map_bus(pcidev_t dev) 14 { 15 u32 devfn = (PCI_SLOT(dev) << 3) | PCI_FUNC(dev); 16 u32 val = PCIE_CFG_HEADER(PCI_BUS(dev), devfn); 17 write32((void *)(lib_sysinfo.pcie_ctrl_base + PCIE_CFGNUM_REG), val); 18 19 return lib_sysinfo.pcie_ctrl_base + PCIE_CFG_OFFSET_ADDR; 20 } 21