diff options
author | Jens Wiklander <jens.wiklander@linaro.org> | 2016-11-22 09:23:44 +0100 |
---|---|---|
committer | Jens Wiklander <jens.wiklander@linaro.org> | 2016-12-05 18:10:30 +0100 |
commit | 700b4a695512a8eae12dde9dff49e61dcf96b3b9 (patch) | |
tree | 1769f8fa82e2131ee92f42032a98dc0b302dd73c /core/arch/arm/mm/core_mmu_v7.c | |
parent | 5e9f2186c245ec9f7d17c31c1397f4182233b4dd (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.c | 9 |
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; |