|
@@ -66,7 +66,7 @@ static void icache_enable(void)
|
|
|
cpu_sync();
|
|
|
}
|
|
|
|
|
|
-static void dcache_invalidate_all(void)
|
|
|
+static void _dcache_op_all(volatile uint32_t *opreg)
|
|
|
{
|
|
|
uint32_t ccsidr;
|
|
|
unsigned int sets, ways;
|
|
@@ -78,12 +78,22 @@ static void dcache_invalidate_all(void)
|
|
|
do {
|
|
|
ways = CCSIDR_WAYS(ccsidr);
|
|
|
do {
|
|
|
- cache->dcisw = DCISW_SET(sets) | DCISW_WAY(ways);
|
|
|
+ *opreg = DCISW_SET(sets) | DCISW_WAY(ways);
|
|
|
} while (ways--);
|
|
|
} while (sets--);
|
|
|
cpu_sync();
|
|
|
}
|
|
|
|
|
|
+static void dcache_invalidate_all(void)
|
|
|
+{
|
|
|
+ _dcache_op_all(&cache->dcisw);
|
|
|
+}
|
|
|
+
|
|
|
+static void dcache_clear_and_invalidate_all(void)
|
|
|
+{
|
|
|
+ _dcache_op_all(&cache->dccisw);
|
|
|
+}
|
|
|
+
|
|
|
static void dcache_enable(void)
|
|
|
{
|
|
|
dcache_invalidate_all();
|
|
@@ -91,6 +101,13 @@ static void dcache_enable(void)
|
|
|
cpu_sync();
|
|
|
}
|
|
|
|
|
|
+void dcache_disable(void)
|
|
|
+{
|
|
|
+ scb->ccr &= ~SCB_CCR_DC;
|
|
|
+ cpu_sync();
|
|
|
+ dcache_clear_and_invalidate_all();
|
|
|
+}
|
|
|
+
|
|
|
void peripheral_clock_delay(void)
|
|
|
{
|
|
|
delay_ticks(2);
|