fighting with interrupt vectors
[rpikern] / src / sysctl.h
index 8d9634a..e5b75d5 100644 (file)
                        : "memory"); \
        } while(0)
 
+#define sysctl_icache_inval(addr, len) \
+       do { \
+               register uint32_t a asm("r0") = addr; \
+               asm volatile( \
+                       "\n0:\tmcr p15, 0, %0, c7, c5, 1" \
+                       "\n\tadd %0, #64" \
+                       "\n\tcmp %0, %1" \
+                       "\n\tblo 0b" \
+                       :: "r"(a), "r"(addr + len) \
+                       : "memory"); \
+       } while(0)
 
 #endif /* SYSCTL_H_ */