diff options
Diffstat (limited to 'services/spd/trusty/trusty.c')
-rw-r--r-- | services/spd/trusty/trusty.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/services/spd/trusty/trusty.c b/services/spd/trusty/trusty.c index ce942dd2..b059a435 100644 --- a/services/spd/trusty/trusty.c +++ b/services/spd/trusty/trusty.c @@ -7,6 +7,7 @@ #include <assert.h> #include <stdbool.h> #include <string.h> +#include <xlat_tables_v2.h> #include <arch_helpers.h> #include <bl31/bl31.h> @@ -412,6 +413,14 @@ static int32_t trusty_setup(void) return -1; } + /* memmap first page of trusty's code memory before peeking */ + ret = mmap_add_dynamic_region(ep_info->pc, /* PA */ + ep_info->pc, /* VA */ + PAGE_SIZE, /* size */ + MT_SECURE | MT_RW_DATA); /* attrs */ + assert(ret == 0); + + /* peek into trusty's code to see if we have a 32-bit or 64-bit image */ instr = *(uint32_t *)ep_info->pc; if (instr >> 24 == 0xeaU) { @@ -424,6 +433,9 @@ static int32_t trusty_setup(void) return -1; } + /* unmap trusty's memory page */ + (void)mmap_remove_dynamic_region(ep_info->pc, PAGE_SIZE); + SET_PARAM_HEAD(ep_info, PARAM_EP, VERSION_1, SECURE | EP_ST_ENABLE); if (!aarch32) ep_info->spsr = SPSR_64(MODE_EL1, MODE_SP_ELX, |