arm: Add cache invalidate by virtual address

Invalidate entry in cache to force load from memory.
Useful in case of dma operations.

Change-Id: I62395e81b29ae3b0ca2774e741e1016dbd8b84a2
diff --git a/arch/arm/cache-ops.S b/arch/arm/cache-ops.S
index b169a77..f89a60c 100644
--- a/arch/arm/cache-ops.S
+++ b/arch/arm/cache-ops.S
@@ -343,6 +343,19 @@
 
 	bx		lr
 
+	/* void arch_invalidate_cache_range(addr_t start, size_t len); */
+FUNCTION(arch_invalidate_cache_range)
+0:
+	/* invalidate cache line */
+	mcr		p15, 0, r0, c7, c6, 1
+	add		r0, r0, #CACHE_LINE
+	subs	r1, r1, #CACHE_LINE
+	bhs		0b
+	mov		r0, #0
+	/* data sync barrier (formerly drain write buffer*/
+	mcr		p15, 0, r0, c7, c10, 4
+	bx		lr
+
 	/* void arch_sync_cache_range(addr_t start, size_t len); */
 FUNCTION(arch_sync_cache_range)
 	push    { r14 }