From b640cad5eaf09e7b4a48da2e9969c74f8fc462e5 Mon Sep 17 00:00:00 2001 From: Jose Marinho Date: Thu, 15 Jul 2021 21:04:27 +0100 Subject: Parametrize MMIO regions map for imx8mm and qemu. 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. --- core/arch/arm/mm/mobj.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'core/arch/arm/mm/mobj.c') 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)); -- cgit v1.2.3