1.1 --- a/stage2/cpu.c Sat Dec 05 17:58:33 2015 +0100
1.2 +++ b/stage2/cpu.c Sat Dec 05 18:17:38 2015 +0100
1.3 @@ -115,27 +115,56 @@
1.4 void init_tlb(void)
1.5 {
1.6 asm volatile(
1.7 - "li $t0, 0x001fe000\n" /* 1MB */
1.8 + "li $t0, 0x01ffe000\n" /* 16MB */
1.9 "mtc0 $t0, $5\n" /* CP0_PAGEMASK */
1.10 "nop\n"
1.11 "mtc0 $zero, $6\n" /* CP0_WIRED */
1.12 "nop\n"
1.13
1.14 + /* 0x80000000..0x81000000 -> 0x00000000..0x01000000 */
1.15 +
1.16 + "mtc0 $zero, $0\n" /* CP0_INDEX */
1.17 + "nop\n"
1.18 +
1.19 /* Set physical address. */
1.20
1.21 - "li $t0, 0x0000001b\n" /* 0x000000.. C=3, global, valid */
1.22 + "li $t0, 0x0000001f\n" /* 0x00000000, C=3, dirty, global, valid */
1.23 "mtc0 $t0, $2\n" /* CP0_ENTRYLO0 */
1.24 "nop\n"
1.25 - "li $t0, 0x0000001b\n" /* 0x000000.. C=3, global, valid */
1.26 + "li $t0, 0x0040001f\n" /* 0x00100000, C=3, dirty, global, valid */
1.27 "mtc0 $t0, $3\n" /* CP0_ENTRYLO1 */
1.28 "nop\n"
1.29
1.30 /* Set virtual address. */
1.31
1.32 - "li $t0, 0x80000000\n" /* 0x80000... ASID=0 */
1.33 + "li $t0, 0x80000000\n" /* 0x80000000, ASID=0 */
1.34 "mtc0 $t0, $10\n" /* CP0_ENTRYHI */
1.35 "nop\n"
1.36
1.37 - "tlbwr\n"
1.38 + "tlbwi\n"
1.39 + "nop\n"
1.40 +
1.41 + /* 0x01000000..0x02000000 -> 0x01000000..0x02000000 */
1.42 +
1.43 + "li $t0, 1\n"
1.44 + "mtc0 $t0, $0\n" /* CP0_INDEX */
1.45 + "nop\n"
1.46 +
1.47 + /* Set physical address. */
1.48 +
1.49 + "li $t0, 0x0040001f\n" /* 0x01000000, C=3, dirty, global, valid */
1.50 + "mtc0 $t0, $2\n" /* CP0_ENTRYLO0 */
1.51 + "nop\n"
1.52 + "li $t0, 0x0080001f\n" /* 0x02000000, C=3, dirty, global, valid */
1.53 + "mtc0 $t0, $3\n" /* CP0_ENTRYLO1 */
1.54 + "nop\n"
1.55 +
1.56 + /* Set virtual address. */
1.57 +
1.58 + "li $t0, 0x01000000\n" /* 0x01000000, ASID=0 */
1.59 + "mtc0 $t0, $10\n" /* CP0_ENTRYHI */
1.60 + "nop\n"
1.61 +
1.62 + "tlbwi\n"
1.63 "nop");
1.64 }