1.1 --- a/stage2/cpu.h Sun Feb 28 01:18:09 2016 +0100
1.2 +++ b/stage2/cpu.h Mon Feb 29 19:09:10 2016 +0100
1.3 @@ -19,6 +19,5 @@
1.4
1.5 #define page_table_start 0x80040000
1.6 #define page_table_task_size 0x00008000
1.7 -#define page_table_task_size_log2 15
1.8
1.9 #endif /* __CPU_H__ */
2.1 --- a/stage2/entry.S Sun Feb 28 01:18:09 2016 +0100
2.2 +++ b/stage2/entry.S Mon Feb 29 19:09:10 2016 +0100
2.3 @@ -30,7 +30,7 @@
2.4 /* NOTE: Duplicated from cpu.h. */
2.5
2.6 #define page_table_start 0x80040000
2.7 -#define page_table_task_size_log2 15
2.8 +#define page_table_task_size 0x00008000
2.9
2.10 _tlb_entry:
2.11 /* Get the bad address. */
2.12 @@ -54,17 +54,19 @@
2.13 /* Otherwise, load the page table entries. */
2.14
2.15 andi $k1, $k0, 0xff /* ASID */
2.16 - sll $k1, $k1, page_table_task_size_log2 /* [ASID] */
2.17 - li $k0, page_table_start /* page_table */
2.18 - add $k0, $k0, $k1 /* page_table[ASID] */
2.19 + li $k0, page_table_task_size
2.20 + mul $k0, $k0, $k1 /* [ASID] (ASID * page_table_task_size) */
2.21 + li $k1, page_table_start /* page_table */
2.22 + addu $k1, $k0, $k1 /* page_table[ASID] */
2.23
2.24 - mfc0 $k1, $4 /* CP0_CONTEXT */
2.25 + mfc0 $k0, $4 /* CP0_CONTEXT */
2.26 nop
2.27 - srl $k1, $k1, 1 /* use 8 byte - not 16 byte - entries */
2.28 - add $k0, $k0, $k1 /* page_table[ASID][entry] */
2.29 + srl $k0, $k0, 1 /* use 8 byte - not 16 byte - entries */
2.30 + addu $k0, $k0, $k1 /* page_table[ASID][entry] */
2.31
2.32 lw $k1, 0($k0) /* page_table[ASID][entry][0] */
2.33 mtc0 $k1, $2 /* CP0_ENTRYLO0 */
2.34 +
2.35 lw $k1, 4($k0) /* page_table[ASID][entry][1] */
2.36 mtc0 $k1, $3 /* CP0_ENTRYLO1 */
2.37 /* page size is 4KB */