1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const ips = rdtcr_el1() & TCR_EL1_IPS_MASK;
log::printfln("old TCR_EL1: {:b}", rdtcr_el1());
const tcr_el1: u64 =
ips | // IPS from EFI
TCR_EL1_TG1_4K | // Higher half: 4K granule size
TCR_EL1_SH1_IS | // Higher half: inner shareable
TCR_EL1_ORGN1_WB | // Higher half: outer write-back
TCR_EL1_IRGN1_WB | // Higher half: inner write-back
TCR_EL1_EPD1 | // Higher half enable
(24 << TCR_EL1_T1SZ) | // Higher half: 3 levels (1024G)
TCR_EL1_TG0_4K | // Lower half: 4K granule size
TCR_EL1_SH0_IS | // Lower half: inner sharable
TCR_EL1_ORGN0_WB | // Lower half: outer write-back
TCR_EL1_IRGN0_WB | // Lower half: inner write-back
TCR_EL1_EPD0 | // Lower half enable
(24 << TCR_EL1_T0SZ); // Lower half: 3 levels (1024G)
wrtcr_el1(tcr_el1);
log::printfln("new TCR_EL1: {:b}", tcr_el1);