aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPascal Brand <pascal.brand@st.com>2015-01-30 13:49:36 +0100
committerPascal Brand <pascal.brand@st.com>2015-01-30 14:53:48 +0100
commitc643dd49f5ae7b98f8d0a32beb3372d3740a1295 (patch)
tree469e83fbfa6006c6d3441ef297bba5977e650486
parent089f125c5a68454264949e74bd08b993930d9b19 (diff)
[plat-stm] cache_maintenance_l2() performed on given area
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Signed-off-by: Pascal Brand <pascal.brand@st.com>
-rw-r--r--core/arch/arm32/plat-stm/cache_maintenance.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/core/arch/arm32/plat-stm/cache_maintenance.c b/core/arch/arm32/plat-stm/cache_maintenance.c
index 4ab7a3d..e71b93f 100644
--- a/core/arch/arm32/plat-stm/cache_maintenance.c
+++ b/core/arch/arm32/plat-stm/cache_maintenance.c
@@ -29,8 +29,7 @@
#include <mm/core_mmu.h>
#include <kernel/tz_ssvce_pl310.h>
-unsigned int cache_maintenance_l2(int op __unused,
- paddr_t pa __unused, size_t len __unused)
+unsigned int cache_maintenance_l2(int op, paddr_t pa, size_t len)
{
unsigned int ret = TEE_SUCCESS;
@@ -41,19 +40,22 @@ unsigned int cache_maintenance_l2(int op __unused,
arm_cl2_invbyway();
break;
case L2CACHE_AREA_INVALIDATE:
- arm_cl2_invbyway();
+ if (len)
+ arm_cl2_invbypa(pa, pa + len - 1);
break;
case L2CACHE_CLEAN:
arm_cl2_cleanbyway();
break;
case L2CACHE_AREA_CLEAN:
- arm_cl2_cleanbyway();
+ if (len)
+ arm_cl2_cleanbypa(pa, pa + len - 1);
break;
case L2CACHE_CLEAN_INV:
arm_cl2_cleaninvbyway();
break;
case L2CACHE_AREA_CLEAN_INV:
- arm_cl2_cleaninvbyway();
+ if (len)
+ arm_cl2_cleaninvbypa(pa, pa + len - 1);
break;
default:
ret = TEE_ERROR_NOT_IMPLEMENTED;