From 05bc4f8564c547eacb9cc840a03b916b3c1c6001 Mon Sep 17 00:00:00 2001 From: David Hendricks Date: Fri, 16 Aug 2013 12:17:50 -0700 Subject: [PATCH] armv7: add wrapper for DCCSW (data cache clean by set/way) This adds a wrapper for data cache clean (without invalidate) by set/way. Signed-off-by: David Hendricks BUG=none BRANCH=none TEST=tested in follow-up patches Change-Id: I09ee1563890350a6c1d04f1b96ac5d0c042e2af2 Reviewed-on: https://gerrit.chromium.org/gerrit/66118 Commit-Queue: David Hendricks Tested-by: David Hendricks Reviewed-by: Ronald G. Minnich --- src/arch/armv7/cache.c | 6 ++++++ src/arch/armv7/include/arch/cache.h | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/src/arch/armv7/cache.c b/src/arch/armv7/cache.c index 4046451e34..a1db171f99 100644 --- a/src/arch/armv7/cache.c +++ b/src/arch/armv7/cache.c @@ -76,6 +76,7 @@ void icache_invalidate_all(void) } enum dcache_op { + OP_DCCSW, OP_DCCISW, OP_DCISW, OP_DCCIMVAC, @@ -179,6 +180,11 @@ void dcache_clean_invalidate_all(void) dcache_foreach(OP_DCCISW); } +void dcache_clean_all(void) +{ + dcache_foreach(OP_DCCSW); +} + void dcache_invalidate_all(void) { dcache_foreach(OP_DCISW); diff --git a/src/arch/armv7/include/arch/cache.h b/src/arch/armv7/include/arch/cache.h index 8a14ff9388..943bc66753 100644 --- a/src/arch/armv7/include/arch/cache.h +++ b/src/arch/armv7/include/arch/cache.h @@ -170,6 +170,12 @@ static inline void dccmvac(unsigned long mva) asm volatile ("mcr p15, 0, %0, c7, c10, 1" : : "r" (mva) : "memory"); } +/* data cache clean by set/way */ +static inline void dccsw(uint32_t val) +{ + asm volatile ("mcr p15, 0, %0, c7, c10, 2" : : "r" (val) : "memory"); +} + /* data cache invalidate by MVA to PoC */ static inline void dcimvac(unsigned long mva) { @@ -289,6 +295,8 @@ void dcache_clean_by_mva(unsigned long addr, unsigned long len); /* dcache clean and invalidate by modified virtual address to PoC */ void dcache_clean_invalidate_by_mva(unsigned long addr, unsigned long len); +void dcache_clean_all(void); + /* dcache invalidate all (on current level given by CCSELR) */ void dcache_invalidate_all(void);