summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Hendricks <dhendrix@chromium.org>2013-03-19 18:38:48 -0700
committerDavid Hendricks <dhendrix@chromium.org>2013-03-21 05:15:20 +0100
commit426ce4192bd127ceaab52d94468b66d718608572 (patch)
treeeed237d120325d317b978bc2d8f98113cbe42c95
parent758abdd75b22108b14427edc3704a84783759c27 (diff)
downloadcoreboot-426ce4192bd127ceaab52d94468b66d718608572.tar.xz
armv7: add function for dcache_clean_by_mva()
This adds a function for using the DCCMVAC instruction (dcache clean by MVA at point of coherency (main memory)). We already have the inline defined, it's just not used by anything. Change-Id: Ia0641566a8881335bed8da2963e1db8321d74267 Signed-off-by: David Hendricks <dhendrix@chromium.org> Reviewed-on: http://review.coreboot.org/2871 Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org> Tested-by: build bot (Jenkins)
-rw-r--r--src/arch/armv7/include/arch/cache.h3
-rw-r--r--src/arch/armv7/lib/cache.c6
2 files changed, 9 insertions, 0 deletions
diff --git a/src/arch/armv7/include/arch/cache.h b/src/arch/armv7/include/arch/cache.h
index 31ed34579a..c00325629a 100644
--- a/src/arch/armv7/include/arch/cache.h
+++ b/src/arch/armv7/include/arch/cache.h
@@ -215,6 +215,9 @@ static inline void write_sctlr(unsigned int val)
/* dcache clean and invalidate all (on current level given by CCSELR) */
void dcache_clean_invalidate_all(void);
+/* dcache clean by modified virtual address to PoC */
+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);
diff --git a/src/arch/armv7/lib/cache.c b/src/arch/armv7/lib/cache.c
index 8fb238af9b..63e406c03f 100644
--- a/src/arch/armv7/lib/cache.c
+++ b/src/arch/armv7/lib/cache.c
@@ -79,6 +79,7 @@ enum dcache_op {
OP_DCCISW,
OP_DCISW,
OP_DCCIMVAC,
+ OP_DCCMVAC,
};
/*
@@ -193,6 +194,11 @@ static void dcache_op_mva(unsigned long addr,
}
}
+void dcache_clean_by_mva(unsigned long addr, unsigned long len)
+{
+ dcache_op_mva(addr, len, OP_DCCMVAC);
+}
+
void dcache_clean_invalidate_by_mva(unsigned long addr, unsigned long len)
{
dcache_op_mva(addr, len, OP_DCCIMVAC);