libpayload: armv7: Add cache control function to invalidate range.

When dealing with DMA, we need a function to invalidate cache without corrupting
contents on main memory (clean).

Change-Id: I28e632ae57a7b7ed1accee74e76045b92f92a699
Signed-off-by: Hung-Te Lin <hungte@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/61078
Reviewed-by: Gabe Black <gabeblack@chromium.org>
Commit-Queue: Gabe Black <gabeblack@chromium.org>
Reviewed-on: http://review.coreboot.org/4345
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
diff --git a/payloads/libpayload/arch/armv7/cache.c b/payloads/libpayload/arch/armv7/cache.c
index 4046451..efdf75e 100644
--- a/payloads/libpayload/arch/armv7/cache.c
+++ b/payloads/libpayload/arch/armv7/cache.c
@@ -80,6 +80,7 @@
 	OP_DCISW,
 	OP_DCCIMVAC,
 	OP_DCCMVAC,
+	OP_DCIMVAC,
 };
 
 /*
@@ -220,6 +221,9 @@
 		case OP_DCCMVAC:
 			dccmvac(line);
 			break;
+		case OP_DCIMVAC:
+			dcimvac(line);
+			break;
 		default:
 			break;
 		}
@@ -238,6 +242,11 @@
 	dcache_op_mva(addr, len, OP_DCCIMVAC);
 }
 
+void dcache_invalidate_by_mva(unsigned long addr, unsigned long len)
+{
+	dcache_op_mva(addr, len, OP_DCIMVAC);
+}
+
 void dcache_mmu_disable(void)
 {
 	uint32_t sctlr;
diff --git a/payloads/libpayload/include/armv7/arch/cache.h b/payloads/libpayload/include/armv7/arch/cache.h
index 1db86dc5..2571e81 100644
--- a/payloads/libpayload/include/armv7/arch/cache.h
+++ b/payloads/libpayload/include/armv7/arch/cache.h
@@ -266,6 +266,9 @@
 /* dcache clean and invalidate by modified virtual address to PoC */
 void dcache_clean_invalidate_by_mva(unsigned long addr, unsigned long len);
 
+/* dcache invalidate by modified virtual address to PoC */
+void dcache_invalidate_by_mva(unsigned long addr, unsigned long len);
+
 /* dcache invalidate all (on current level given by CCSELR) */
 void dcache_invalidate_all(void);