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
