diff --git a/sys/arm/include/pmap.h b/sys/arm/include/pmap.h --- a/sys/arm/include/pmap.h +++ b/sys/arm/include/pmap.h @@ -172,15 +172,9 @@ #define pmap_map_delete(pmap, sva, eva) pmap_remove(pmap, sva, eva) void *pmap_mapdev(vm_paddr_t, vm_size_t); +void *pmap_mapdev_attr(vm_paddr_t, vm_size_t, vm_memattr_t); void pmap_unmapdev(void *, vm_size_t); -static inline void * -pmap_mapdev_attr(vm_paddr_t addr __unused, vm_size_t size __unused, - int attr __unused) -{ - panic("%s is not implemented yet!\n", __func__); -} - struct pcb; void pmap_set_pcb_pagedir(pmap_t, struct pcb *); diff --git a/sys/kern/subr_devmap.c b/sys/kern/subr_devmap.c --- a/sys/kern/subr_devmap.c +++ b/sys/kern/subr_devmap.c @@ -249,44 +249,9 @@ void * pmap_mapdev(vm_paddr_t pa, vm_size_t size) { - vm_offset_t va, offset; -#ifdef __HAVE_STATIC_DEVMAP - void * rva; - - /* First look in the static mapping table. */ - if ((rva = devmap_ptov(pa, size)) != NULL) - return (rva); -#endif - - offset = pa & PAGE_MASK; - pa = trunc_page(pa); - size = round_page(size + offset); - -#if defined(__aarch64__) || defined(__riscv) - if (early_boot) { - akva_devmap_vaddr = trunc_page(akva_devmap_vaddr - size); - va = akva_devmap_vaddr; - KASSERT(va >= VM_MAX_KERNEL_ADDRESS - PMAP_MAPDEV_EARLY_SIZE, - ("%s: Too many early devmap mappings", __func__)); - } else -#endif -#ifdef __aarch64__ - if (size >= L2_SIZE && (pa & L2_OFFSET) == 0) - va = kva_alloc_aligned(size, L2_SIZE); - else if (size >= L3C_SIZE && (pa & L3C_OFFSET) == 0) - va = kva_alloc_aligned(size, L3C_SIZE); - else -#endif - va = kva_alloc(size); - if (!va) - panic("pmap_mapdev: Couldn't alloc kernel virtual memory"); - - pmap_kenter_device(va, size, pa); - - return ((void *)(va + offset)); + return (pmap_mapdev_attr(pa, size, VM_MEMATTR_DEVICE)); } -#if defined(__aarch64__) || defined(__riscv) void * pmap_mapdev_attr(vm_paddr_t pa, vm_size_t size, vm_memattr_t ma) { @@ -303,12 +268,14 @@ pa = trunc_page(pa); size = round_page(size + offset); +#ifdef PMAP_MAPDEV_EARLY_SIZE if (early_boot) { akva_devmap_vaddr = trunc_page(akva_devmap_vaddr - size); va = akva_devmap_vaddr; KASSERT(va >= (VM_MAX_KERNEL_ADDRESS - PMAP_MAPDEV_EARLY_SIZE), ("%s: Too many early devmap mappings", __func__)); } else +#endif #ifdef __aarch64__ if (size >= L2_SIZE && (pa & L2_OFFSET) == 0) va = kva_alloc_aligned(size, L2_SIZE); @@ -324,7 +291,6 @@ return ((void *)(va + offset)); } -#endif /* * Unmap device memory and free the kva space.