1.1 --- a/stage2/cpu.c Fri Feb 26 01:09:43 2016 +0100
1.2 +++ b/stage2/cpu.c Fri Feb 26 01:13:51 2016 +0100
1.3 @@ -239,6 +239,28 @@
1.4 );
1.5 }
1.6
1.7 +void map_page_miss(u32 physical, u32 pagesize, u8 flags)
1.8 +{
1.9 + u32 lower = ((physical & 0xfffff000) >> 6) | flags;
1.10 + u32 upper = (((physical + pagesize) & 0xfffff000) >> 6) | flags;
1.11 + u32 pagemask = ((pagesize - 1) & 0xfffff000) << 1;
1.12 +
1.13 + asm volatile(
1.14 + "mtc0 %2, $5\n" /* CP0_PAGEMASK */
1.15 +
1.16 + /* Set physical address. */
1.17 +
1.18 + "mtc0 %0, $2\n" /* CP0_ENTRYLO0 */
1.19 + "mtc0 %1, $3\n" /* CP0_ENTRYLO1 */
1.20 + "nop\n"
1.21 +
1.22 + "tlbwr\n"
1.23 + "nop"
1.24 + :
1.25 + : "r" (lower), "r" (upper), "r" (pagemask)
1.26 + );
1.27 +}
1.28 +
1.29 void unmap_page(u32 virtual, u32 physical, u32 pagesize, u8 flags, u8 asid)
1.30 {
1.31 u32 start = (virtual & 0xffffe000) | asid; /* VPN2 | ASID*/