diff options
author | Jose Marinho <jose.marinho@arm.com> | 2021-07-15 21:04:27 +0100 |
---|---|---|
committer | Jose Marinho <jose.marinho@arm.com> | 2021-08-09 10:43:10 +0100 |
commit | b640cad5eaf09e7b4a48da2e9969c74f8fc462e5 (patch) | |
tree | 67472accf5f86447e3533e7dcd8f938aac1e2e6b /core/arch/arm/mm/mobj.c | |
parent | a599513522d9736e8ac61f42973aa5f5e8bd393c (diff) |
Parametrize MMIO regions map for imx8mm and qemu.fwu_BET0
This is a workaround MMIO region mapping. There needs to be a more
definite solution for OPTEE/StMM to map MMIO regions in S1 and to
communicate the VA address ranges to StMM.
Diffstat (limited to 'core/arch/arm/mm/mobj.c')
-rw-r--r-- | core/arch/arm/mm/mobj.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/core/arch/arm/mm/mobj.c b/core/arch/arm/mm/mobj.c index 7a129cf5..7d8e19d8 100644 --- a/core/arch/arm/mm/mobj.c +++ b/core/arch/arm/mm/mobj.c @@ -147,13 +147,21 @@ struct mobj *mobj_phys_alloc(paddr_t pa, size_t size, uint32_t cattr, area_type = MEM_AREA_TEE_RAM_RW_DATA; break; case CORE_MEM_TA_RAM: - area_type = MEM_AREA_TA_RAM; + if (cattr==TEE_MATTR_CACHE_NONCACHE) + area_type = MEM_AREA_IO_NSEC; + else + area_type = MEM_AREA_TA_RAM; + break; case CORE_MEM_NSEC_SHM: area_type = MEM_AREA_NSEC_SHM; break; case CORE_MEM_SDP_MEM: - area_type = MEM_AREA_SDP_MEM; + if (cattr==TEE_MATTR_CACHE_NONCACHE) + area_type = MEM_AREA_IO_NSEC; + else + area_type = MEM_AREA_SDP_MEM; + break; default: DMSG("can't allocate with specified attribute"); @@ -161,8 +169,11 @@ struct mobj *mobj_phys_alloc(paddr_t pa, size_t size, uint32_t cattr, } /* Only SDP memory may not have a virtual address */ - va = phys_to_virt(pa, area_type); - if (!va && battr != CORE_MEM_SDP_MEM) + if (area_type == MEM_AREA_IO_SEC || area_type == MEM_AREA_IO_NSEC) + va = phys_to_virt_io(pa); + else + va = phys_to_virt(pa, area_type); + if (!va && battr != CORE_MEM_SDP_MEM) return NULL; moph = calloc(1, sizeof(*moph)); |