Add support for pmap_sync_icache on arm64.

Reviewed by:	emaste, imp (both earlier version)
Obtained from:	ABT Systems Ltd
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D3438
This commit is contained in:
Andrew Turner 2015-08-24 12:01:39 +00:00
parent db36b645a0
commit 67905e0aec

View File

@ -3050,10 +3050,32 @@ pmap_activate(struct thread *td)
}
void
pmap_sync_icache(pmap_t pm, vm_offset_t va, vm_size_t sz)
pmap_sync_icache(pmap_t pmap, vm_offset_t va, vm_size_t sz)
{
panic("ARM64TODO: pmap_sync_icache");
if (va >= VM_MIN_KERNEL_ADDRESS) {
cpu_icache_sync_range(va, sz);
} else {
u_int len, offset;
vm_paddr_t pa;
/* Find the length of data in this page to flush */
offset = va & PAGE_MASK;
len = imin(PAGE_SIZE - offset, sz);
while (sz != 0) {
/* Extract the physical address & find it in the DMAP */
pa = pmap_extract(pmap, va);
if (pa != 0)
cpu_icache_sync_range(PHYS_TO_DMAP(pa), len);
/* Move to the next page */
sz -= len;
va += len;
/* Set the length for the next iteration */
len = imin(PAGE_SIZE, sz);
}
}
}
/*