Cortex-A: Don't flush the data/unified cache if MMU is off
When the SCTLR has C set but M unset (i.e. Caching on, but MMU off) the cache if effectively off. So only flush the cache if MMU is on, otherwise stale entries might be committed to memory. Change-Id: Iaff8b6f25b7a41ba838b91d45684c98f99fc0b27 Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Reviewed-on: http://openocd.zylin.com/2429 Tested-by: jenkins Reviewed-by: Christopher Head <chead@zaber.com> Reviewed-by: Paul Fertser <fercerpav@gmail.com> Reviewed-by: Vladimir Svoboda <ze.vlad@gmail.com>
This commit is contained in:
parent
0836a0fa21
commit
e968fd1895
|
@ -146,6 +146,7 @@ static int cortex_a_mmu_modify(struct target *target, int enable)
|
||||||
cortex_a->cp15_control_reg_curr);
|
cortex_a->cp15_control_reg_curr);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if ((cortex_a->cp15_control_reg_curr & 0x1U)) {
|
||||||
if (cortex_a->cp15_control_reg_curr & 0x4U) {
|
if (cortex_a->cp15_control_reg_curr & 0x4U) {
|
||||||
/* data cache is active */
|
/* data cache is active */
|
||||||
cortex_a->cp15_control_reg_curr &= ~0x4U;
|
cortex_a->cp15_control_reg_curr &= ~0x4U;
|
||||||
|
@ -153,7 +154,6 @@ static int cortex_a_mmu_modify(struct target *target, int enable)
|
||||||
if (armv7a->armv7a_mmu.armv7a_cache.flush_all_data_cache)
|
if (armv7a->armv7a_mmu.armv7a_cache.flush_all_data_cache)
|
||||||
armv7a->armv7a_mmu.armv7a_cache.flush_all_data_cache(target);
|
armv7a->armv7a_mmu.armv7a_cache.flush_all_data_cache(target);
|
||||||
}
|
}
|
||||||
if ((cortex_a->cp15_control_reg_curr & 0x1U)) {
|
|
||||||
cortex_a->cp15_control_reg_curr &= ~0x1U;
|
cortex_a->cp15_control_reg_curr &= ~0x1U;
|
||||||
retval = armv7a->arm.mcr(target, 15,
|
retval = armv7a->arm.mcr(target, 15,
|
||||||
0, 0, /* op1, op2 */
|
0, 0, /* op1, op2 */
|
||||||
|
|
Loading…
Reference in New Issue