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:
Andrew Boie 2020-07-07 13:42:01 -07:00 committed by Carles Cufí
commit c802cc8920
2 changed files with 11 additions and 21 deletions

View file

@ -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 */

View file

@ -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) {