diff options
author | Greg Bellows <greg.bellows@linaro.org> | 2015-04-09 18:45:24 -0500 |
---|---|---|
committer | Greg Bellows <greg.bellows@linaro.org> | 2015-04-09 18:45:24 -0500 |
commit | e45088b969e64260664c13c01ab537820c10283f (patch) | |
tree | 20188feeaa1bdebe92bf19808f757770757746e7 | |
parent | 32d3c27e354b5cec2d5b01d4aac60f03065d79cb (diff) |
Extend mem_map_va to take pte attr inputs
Signed-off-by: Greg Bellows <greg.bellows@linaro.org>
-rw-r--r-- | arm/common/mem_util.c | 6 | ||||
-rw-r--r-- | arm/common/mem_util.h | 2 | ||||
-rw-r--r-- | arm/el1_common/el1_loader.c | 9 |
3 files changed, 8 insertions, 9 deletions
diff --git a/arm/common/mem_util.c b/arm/common/mem_util.c index bd80d39..239b4ad 100644 --- a/arm/common/mem_util.c +++ b/arm/common/mem_util.c @@ -48,11 +48,11 @@ void mem_map_pa(uintptr_t vaddr, uintptr_t paddr, vaddr, paddr, pte, *pte); } -void mem_map_va(uintptr_t addr) +void mem_map_va(uintptr_t addr, uintptr_t tblattr, uintptr_t pgattr) { uintptr_t pa = mem_allocate_pa(); - mem_map_pa(addr, pa, 0, PTE_USER_RW); + mem_map_pa(addr, pa, tblattr, pgattr); } int mem_unmap_va(uintptr_t addr) @@ -89,7 +89,7 @@ void *mem_heap_allocate(size_t len) size_t off; for (off = 0; off < len; off += 0x1000) { - mem_map_va(mem_heap_pool + off); + mem_map_va(mem_heap_pool + off, 0, PTE_USER_RW); } mem_heap_pool += off; diff --git a/arm/common/mem_util.h b/arm/common/mem_util.h index 3a5c5b8..c7beec8 100644 --- a/arm/common/mem_util.h +++ b/arm/common/mem_util.h @@ -3,7 +3,7 @@ extern uintptr_t mem_allocate_pa(); extern void mem_map_pa(uintptr_t, uintptr_t, uintptr_t, uintptr_t); -extern void mem_map_va(uintptr_t); +extern void mem_map_va(uintptr_t, uintptr_t, uintptr_t); extern int mem_unmap_va(uintptr_t addr); extern void *mem_heap_allocate(size_t len); extern void *mem_lookup_pa(void *va); diff --git a/arm/el1_common/el1_loader.c b/arm/el1_common/el1_loader.c index 074e7a4..466dc7c 100644 --- a/arm/el1_common/el1_loader.c +++ b/arm/el1_common/el1_loader.c @@ -33,8 +33,7 @@ bool el1_load_el0(uintptr_t elfbase, uintptr_t *entry) /* Finish mapping the remainder of the ELF pages in if any */ for (off = 0x1000; off < elf_len; off += 0x1000) { - mem_map_pa((uintptr_t)elfbase + off, (uintptr_t)elfbase + off, - 0, PTE_USER_RW); + mem_map_pa(elfbase + off, elfbase + off, 0, PTE_USER_RW); } Elf32_Shdr *shdr = (Elf32_Shdr *)(elfbase + ehdr->e_shoff); @@ -44,12 +43,12 @@ bool el1_load_el0(uintptr_t elfbase, uintptr_t *entry) for (i = 0; i < ehdr->e_shnum; i++) { char *secname = strsec + shdr[i].sh_name; if (!strcmp(secname, ".text") || !strcmp(secname, ".data")) { - uintptr_t sect = (uintptr_t)(elfbase + shdr[i].sh_offset); + uintptr_t sect = elfbase + shdr[i].sh_offset; uintptr_t base_va = shdr[i].sh_addr; DEBUG_MSG("\tloading %s section: 0x%x bytes @ 0x%lx\n", secname, shdr[i].sh_size, base_va); for (off = 0; off < shdr[i].sh_size; off += 0x1000) { - mem_map_va((uintptr_t)(base_va + off)); + mem_map_va(base_va + off, 0, PTE_USER_RW); memcpy((void *)(base_va + off), (void *)(sect + off), 0x1000); } } @@ -57,7 +56,7 @@ bool el1_load_el0(uintptr_t elfbase, uintptr_t *entry) /* Unmap the FLASH ELF image */ for (off = 0; off < elf_len; off += 0x1000) { - mem_map_va((uintptr_t)elfbase + off); + mem_unmap_va(elfbase + off); } *entry = ehdr->e_entry; |