Index: src/arm64/cpu-arm64.cc |
diff --git a/src/arm64/cpu-arm64.cc b/src/arm64/cpu-arm64.cc |
index 712dbbd650b24bc4022c31bb06f190b7afbe385b..7c1084f62da7f853e5d3a4cb2a208b0583225f70 100644 |
--- a/src/arm64/cpu-arm64.cc |
+++ b/src/arm64/cpu-arm64.cc |
@@ -58,14 +58,16 @@ void CpuFeatures::FlushICache(void* address, size_t length) { |
__asm__ __volatile__ ( // NOLINT |
// Clean every line of the D cache containing the target data. |
"0: \n\t" |
- // dc : Data Cache maintenance |
- // c : Clean |
- // va : by (Virtual) Address |
- // u : to the point of Unification |
- // The point of unification for a processor is the point by which the |
- // instruction and data caches are guaranteed to see the same copy of a |
- // memory location. See ARM DDI 0406B page B2-12 for more information. |
- "dc cvau, %[dline] \n\t" |
+ // dc : Data Cache maintenance |
+ // c : Clean |
+ // i : Invalidate |
+ // va : by (Virtual) Address |
+ // c : to the point of Coherency |
+ // See ARM DDI 0406B page B2-12 for more information. |
+ // We would prefer to use "cvau" (clean to the point of unification) here |
+ // but we use "civac" to work around Cortex-A53 errata 819472, 826319, |
+ // 827319 and 824069. |
+ "dc civac, %[dline] \n\t" |
"add %[dline], %[dline], %[dsize] \n\t" |
"cmp %[dline], %[end] \n\t" |
"b.lt 0b \n\t" |