diff options
author | vetch <vetch97@gmail.com> | 2020-01-17 20:49:32 +0100 |
---|---|---|
committer | vetch <vetch97@gmail.com> | 2020-01-17 20:49:32 +0100 |
commit | dfd6177fea6769a0e7dcd2d2205e5a795bba3553 (patch) | |
tree | e11cd7794da7f283f177e36bbb906b3111d51883 /src/arm/PL1/kernel/paging.c | |
parent | c0ce14c3fd8b598fceacdf0a194420f8acd924bf (diff) | |
parent | 9ed55d7612be0ffd17e3e9cc08bea7225470ee67 (diff) | |
download | rpi-MMU-example-dfd6177fea6769a0e7dcd2d2205e5a795bba3553.tar.gz rpi-MMU-example-dfd6177fea6769a0e7dcd2d2205e5a795bba3553.zip |
Merge branch 'bob' of https://repo.or.cz/RPi-MMU-example into alice
# Conflicts:
# src/arm/PL1/kernel/interrupts.c
Diffstat (limited to 'src/arm/PL1/kernel/paging.c')
-rw-r--r-- | src/arm/PL1/kernel/paging.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/arm/PL1/kernel/paging.c b/src/arm/PL1/kernel/paging.c index 771c681..6da9905 100644 --- a/src/arm/PL1/kernel/paging.c +++ b/src/arm/PL1/kernel/paging.c @@ -101,10 +101,11 @@ void setup_flat_map(void) // enable MMU puts("enabling the MMU"); - // redundant - we already have SCTLR contents in the variable - // asm("mrc p15, 0, %0, c1, c0, 0" : "=r" (SCTLR.raw)); + // we already have SCTLR contents in the variable - SCTLR.fields.M = 1; + SCTLR.fields.M = 1; // enable MMU + SCTLR.fields.C = 1; // enable data cache + SCTLR.fields.I = 1; // enable instruction cache asm("mcr p15, 0, %0, c1, c0, 0\n\r" "isb" :: "r" (SCTLR.raw) : "memory"); @@ -241,6 +242,14 @@ uint16_t claim_and_map_section // write modified descriptor to the table *section_entry = descriptor; + // invalidate instruction cache + asm("mcr p15, 0, r0, c7, c5, 0\n\r" // r0 gets ignored + "isb" ::: "memory"); + + // invalidate branch-prediction + asm("mcr p15, 0, r0, c7, c5, 6\n\r" // r0 - same as above + "isb" ::: "memory"); + // invalidate main Translation Lookup Buffer asm("mcr p15, 0, r1, c8, c7, 0\n\r" "isb" ::: "memory"); |