x86: pcie: use device_map() for MMIO config access
Replaces custom runtime calls to map memory. Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
This commit is contained in:
parent
9f84637499
commit
c802cc8920
2 changed files with 11 additions and 21 deletions
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
|
||||
#include <kernel.h>
|
||||
#include <sys/device_mmio.h>
|
||||
#include <drivers/pcie/pcie.h>
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
|
@ -34,11 +35,19 @@ static void pcie_mm_init(void)
|
|||
int n = (m->sdt.len - sizeof(*m)) / sizeof(m->pci_segs[0]);
|
||||
|
||||
for (int i = 0; i < n && i < MAX_PCI_BUS_SEGMENTS; i++) {
|
||||
size_t size;
|
||||
uintptr_t phys_addr;
|
||||
|
||||
bus_segs[i].start_bus = m->pci_segs[i].start_bus;
|
||||
bus_segs[i].n_buses = 1 + m->pci_segs[i].end_bus
|
||||
- m->pci_segs[i].start_bus;
|
||||
bus_segs[i].mmio =
|
||||
(void *)(long)m->pci_segs[i].base_addr;
|
||||
|
||||
phys_addr = m->pci_segs[i].base_addr;
|
||||
/* 32 devices & 8 functions per bus, 4k per device */
|
||||
size = bus_segs[i].n_buses * (32 * 8 * 4096);
|
||||
|
||||
device_map((mm_reg_t *)&bus_segs[i].mmio, phys_addr,
|
||||
size, K_MEM_CACHE_NONE);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -71,21 +80,6 @@ static inline void pcie_mm_conf(pcie_bdf_t bdf, unsigned int reg,
|
|||
}
|
||||
}
|
||||
|
||||
void z_pcie_add_mmu_regions(void)
|
||||
{
|
||||
if (bus_segs[0].mmio == NULL) {
|
||||
pcie_mm_init();
|
||||
}
|
||||
|
||||
for (int i = 0; i < ARRAY_SIZE(bus_segs); i++) {
|
||||
/* 32 devices & 8 functions per bus, 4k per device */
|
||||
uintptr_t sz = bus_segs[i].n_buses * (32 * 8 * 4096);
|
||||
|
||||
z_x86_add_mmu_region((uintptr_t) bus_segs[i].mmio,
|
||||
sz, MMU_ENTRY_READ | MMU_ENTRY_WRITE);
|
||||
}
|
||||
}
|
||||
|
||||
/* Traditional Configuration Mechanism */
|
||||
|
||||
#define PCIE_X86_CAP 0xCF8U /* Configuration Address Port */
|
||||
|
|
|
@ -889,10 +889,6 @@ void z_x86_paging_init(void)
|
|||
|
||||
z_x86_soc_add_mmu_regions();
|
||||
|
||||
#ifdef CONFIG_PCIE_MMIO_CFG
|
||||
z_pcie_add_mmu_regions();
|
||||
#endif
|
||||
|
||||
pages_free = (page_pos - page_pool) / MMU_PAGE_SIZE;
|
||||
|
||||
if (pages_free != 0) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue