|
|
@@ -378,27 +378,33 @@ alternative_endif
|
|
|
* size: size of the region
|
|
|
* Corrupts: kaddr, size, tmp1, tmp2
|
|
|
*/
|
|
|
+ .macro __dcache_op_workaround_clean_cache, op, kaddr
|
|
|
+alternative_if_not ARM64_WORKAROUND_CLEAN_CACHE
|
|
|
+ dc \op, \kaddr
|
|
|
+alternative_else
|
|
|
+ dc civac, \kaddr
|
|
|
+alternative_endif
|
|
|
+ .endm
|
|
|
+
|
|
|
.macro dcache_by_line_op op, domain, kaddr, size, tmp1, tmp2
|
|
|
dcache_line_size \tmp1, \tmp2
|
|
|
add \size, \kaddr, \size
|
|
|
sub \tmp2, \tmp1, #1
|
|
|
bic \kaddr, \kaddr, \tmp2
|
|
|
9998:
|
|
|
- .if (\op == cvau || \op == cvac)
|
|
|
-alternative_if_not ARM64_WORKAROUND_CLEAN_CACHE
|
|
|
- dc \op, \kaddr
|
|
|
-alternative_else
|
|
|
- dc civac, \kaddr
|
|
|
-alternative_endif
|
|
|
- .elseif (\op == cvap)
|
|
|
-alternative_if ARM64_HAS_DCPOP
|
|
|
- sys 3, c7, c12, 1, \kaddr // dc cvap
|
|
|
-alternative_else
|
|
|
- dc cvac, \kaddr
|
|
|
-alternative_endif
|
|
|
+ .ifc \op, cvau
|
|
|
+ __dcache_op_workaround_clean_cache \op, \kaddr
|
|
|
+ .else
|
|
|
+ .ifc \op, cvac
|
|
|
+ __dcache_op_workaround_clean_cache \op, \kaddr
|
|
|
+ .else
|
|
|
+ .ifc \op, cvap
|
|
|
+ sys 3, c7, c12, 1, \kaddr // dc cvap
|
|
|
.else
|
|
|
dc \op, \kaddr
|
|
|
.endif
|
|
|
+ .endif
|
|
|
+ .endif
|
|
|
add \kaddr, \kaddr, \tmp1
|
|
|
cmp \kaddr, \size
|
|
|
b.lo 9998b
|