aboutsummaryrefslogtreecommitdiff
path: root/core/arch/arm/mm/core_mmu_v7.c
diff options
context:
space:
mode:
authorJens Wiklander <jens.wiklander@linaro.org>2016-11-22 09:23:44 +0100
committerJens Wiklander <jens.wiklander@linaro.org>2016-12-05 18:10:30 +0100
commit700b4a695512a8eae12dde9dff49e61dcf96b3b9 (patch)
tree1769f8fa82e2131ee92f42032a98dc0b302dd73c /core/arch/arm/mm/core_mmu_v7.c
parent5e9f2186c245ec9f7d17c31c1397f4182233b4dd (diff)
core: bugfix core_mmu_get_entry_primitive()
Fixes both implementations of core_mmu_get_entry_primitive() to correctly report TEE_MATTR_TABLE. Reviewed-by: Etienne Carriere <etienne.carriere@linaro.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
Diffstat (limited to 'core/arch/arm/mm/core_mmu_v7.c')
-rw-r--r--core/arch/arm/mm/core_mmu_v7.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/core/arch/arm/mm/core_mmu_v7.c b/core/arch/arm/mm/core_mmu_v7.c
index d2a3d856..24566737 100644
--- a/core/arch/arm/mm/core_mmu_v7.c
+++ b/core/arch/arm/mm/core_mmu_v7.c
@@ -243,10 +243,16 @@ static uint32_t mattr_to_texcb(uint32_t attr)
static uint32_t desc_to_mattr(unsigned level, uint32_t desc)
{
- uint32_t a = TEE_MATTR_VALID_BLOCK;
+ uint32_t a;
switch (get_desc_type(level, desc)) {
+ case DESC_TYPE_PAGE_TABLE:
+ a = TEE_MATTR_TABLE;
+ if (!(desc & SECTION_PT_NOTSECURE))
+ a |= TEE_MATTR_SECURE;
+ break;
case DESC_TYPE_SECTION:
+ a = TEE_MATTR_VALID_BLOCK;
if (desc & SECTION_ACCESS_FLAG)
a |= TEE_MATTR_PRX | TEE_MATTR_URX;
@@ -269,6 +275,7 @@ static uint32_t desc_to_mattr(unsigned level, uint32_t desc)
break;
case DESC_TYPE_SMALL_PAGE:
+ a = TEE_MATTR_VALID_BLOCK;
if (desc & SMALL_PAGE_ACCESS_FLAG)
a |= TEE_MATTR_PRX | TEE_MATTR_URX;