diff --git a/sys/powerpc/aim/locore32.S b/sys/powerpc/aim/locore32.S index 80c3c08..fdfee59 100644 --- sys/powerpc/aim/locore32.S.orig +++ sys/powerpc/aim/locore32.S @@ -128,6 +128,104 @@ __start: sync isync + /* Save the argument pointer and length */ + mr 20,6 + mr 21,7 + + /* turn the MMU off */ + mfmsr 9 + rlwinm 9, 9, 0, ~((1<<4)|(1<<5)) /* MSR_DR|MSR_IR */ + bcl 20, 31, 1f +1: + mflr 8 + clrlwi 8, 8, 3 /* convert to a real address */ + addi 8, 8, _mmu_off - 1b + mtsrr0 8 + mtsrr1 9 + rfi +_mmu_off: + /* MMU disabled */ + /* setup BATs */ + isync + li 8, 0 + mtspr 0x210, 8 /* IBAT0U */ + mtspr 0x211, 8 /* IBAT0L */ + mtspr 0x212, 8 /* IBAT1U */ + mtspr 0x213, 8 /* IBAT1L */ + mtspr 0x214, 8 /* IBAT2U */ + mtspr 0x215, 8 /* IBAT2L */ + mtspr 0x216, 8 /* IBAT3U */ + mtspr 0x217, 8 /* IBAT3L */ + mtspr 0x218, 8 /* DBAT0U */ + mtspr 0x219, 8 /* DBAT0L */ + mtspr 0x21a, 8 /* DBAT1U */ + mtspr 0x21b, 8 /* DBAT1L */ + mtspr 0x21c, 8 /* DBAT2U */ + mtspr 0x21d, 8 /* DBAT2L */ + mtspr 0x21e, 8 /* DBAT3U */ + mtspr 0x21f, 8 /* DBAT3L */ + + mtspr 0x230, 8 /* IBAT4U */ + mtspr 0x231, 8 /* IBAT4L */ + mtspr 0x232, 8 /* IBAT5U */ + mtspr 0x233, 8 /* IBAT5L */ + mtspr 0x234, 8 /* IBAT6U */ + mtspr 0x235, 8 /* IBAT6L */ + mtspr 0x236, 8 /* IBAT7U */ + mtspr 0x237, 8 /* IBAT7L */ + mtspr 0x238, 8 /* DBAT4U */ + mtspr 0x239, 8 /* DBAT4L */ + mtspr 0x23a, 8 /* DBAT5U */ + mtspr 0x23b, 8 /* DBAT5L */ + mtspr 0x23c, 8 /* DBAT6U */ + mtspr 0x23d, 8 /* DBAT6L */ + mtspr 0x23e, 8 /* DBAT7U */ + mtspr 0x23f, 8 /* DBAT7L */ + + li 8, 0x01ff /* first 16MiB */ + li 9, 0x0002 /* rw */ + mtspr 0x210, 8 /* IBAT0U */ + mtspr 0x211, 9 /* IBAT0L */ + mtspr 0x218, 8 /* DBAT0U */ + mtspr 0x219, 9 /* DBAT0L */ + + lis 8, 0x0c00 /* I/O mem */ + ori 8, 8, 0x3ff /* 32MiB */ + lis 9, 0x0c00 + ori 9, 9, 0x002a /* uncached, guarded, rw */ + mtspr 0x21a, 8 /* DBAT1U */ + mtspr 0x21b, 9 /* DBAT1L */ + + lis 8, 0x0100 /* next 8MiB */ + ori 8, 8, 0x00ff /* 8MiB */ + lis 9, 0x0100 + ori 9, 9, 0x0002 /* rw */ + mtspr 0x214, 8 /* IBAT2U */ + mtspr 0x215, 9 /* IBAT2L */ + mtspr 0x21c, 8 /* DBAT2U */ + mtspr 0x21d, 9 /* DBAT2L */ + + lis 8, 0x1000 /* MEM2 */ + ori 8, 8, 0x07ff /* 64MiB */ + lis 9, 0x1000 + ori 9, 9, 0x0002 /* rw */ + mtspr 0x216, 8 /* IBAT3U */ + mtspr 0x217, 9 /* IBAT3L */ + mtspr 0x21e, 8 /* DBAT3U */ + mtspr 0x21f, 9 /* DBAT3L */ + + /* turn the MMU on */ + bcl 20, 31, 1f +1: + mflr 8 + addi 8, 8, _mmu_on - 1b + mfmsr 9 + ori 9, 9, (1<<4)|(1<<5) /* MSR_DR|MSR_IR */ + mtsrr0 8 + mtsrr1 9 + sync + rfi +_mmu_on: /* Zero bss, in case we were started by something unhelpful */ li 0,0 lis 8,_edata@ha