Invalidate D Cache and TLB before setup MMU

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11076 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
isiora 2017-11-25 17:24:10 +00:00
parent 1d3f02c7ef
commit 70c245e116
1 changed files with 10 additions and 3 deletions

View File

@ -98,6 +98,13 @@ static uint32_t mmuTable[4096] CC_ALIGN(16384);
void __mmu_init(void) {
uint32_t pm;
/*
* Invalidate L1 D Cache if it was disabled
*/
pm = __get_SCTLR();
if ((pm & SCTLR_C_Msk) == 0) {
__L1C_CleanInvalidateCache(DCISW_INVALIDATE);
}
/*
* Default, undefined regions
*/
@ -327,9 +334,10 @@ void __mmu_init(void) {
TTE_SECT_EXE_NEVER |
TTE_SECT_S | TTE_TYPE_SECT;
/*
* Invalidate L1 I/D cache
* Invalidate TLB and L1 I cache
* Enable caches and MMU
*/
MMU_InvalidateTLB();
__set_TTBR0((uint32_t)mmuTable|0x5B);
__set_DACR(0xC0000000);
__DSB();
@ -350,11 +358,10 @@ void __mmu_init(void) {
if ((pm & SCTLR_M_Msk) == 0)
__set_SCTLR(pm | SCTLR_M_Msk);
/*
* L1 D cache clean, invalidate and enable
* L1 D cache enable
*/
pm = __get_SCTLR();
if ((pm & SCTLR_C_Msk) == 0) {
__L1C_CleanInvalidateCache(DCISW_CLEAN_AND_INV);
__set_SCTLR(pm | SCTLR_C_Msk);
}
}