summaryrefslogtreecommitdiff
path: root/core/arch/arm/mm/mobj.c
diff options
context:
space:
mode:
authorJose Marinho <jose.marinho@arm.com>2021-07-15 21:04:27 +0100
committerJose Marinho <jose.marinho@arm.com>2021-08-09 10:43:10 +0100
commitb640cad5eaf09e7b4a48da2e9969c74f8fc462e5 (patch)
tree67472accf5f86447e3533e7dcd8f938aac1e2e6b /core/arch/arm/mm/mobj.c
parenta599513522d9736e8ac61f42973aa5f5e8bd393c (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.c19
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));