aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Bellows <greg.bellows@linaro.org>2015-04-09 18:45:24 -0500
committerGreg Bellows <greg.bellows@linaro.org>2015-04-09 18:45:24 -0500
commite45088b969e64260664c13c01ab537820c10283f (patch)
tree20188feeaa1bdebe92bf19808f757770757746e7
parent32d3c27e354b5cec2d5b01d4aac60f03065d79cb (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.c6
-rw-r--r--arm/common/mem_util.h2
-rw-r--r--arm/el1_common/el1_loader.c9
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;