1*2874c5fdSThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-or-later */ 26cdd2417SAlbert Herranz/* 36cdd2417SAlbert Herranz * arch/powerpc/boot/wii-head.S 46cdd2417SAlbert Herranz * 56cdd2417SAlbert Herranz * Nintendo Wii bootwrapper entry. 66cdd2417SAlbert Herranz * Copyright (C) 2008-2009 The GameCube Linux Team 76cdd2417SAlbert Herranz * Copyright (C) 2008,2009 Albert Herranz 86cdd2417SAlbert Herranz */ 96cdd2417SAlbert Herranz 106cdd2417SAlbert Herranz#include "ppc_asm.h" 116cdd2417SAlbert Herranz 126cdd2417SAlbert Herranz/* 136cdd2417SAlbert Herranz * The entry code does no assumptions regarding: 146cdd2417SAlbert Herranz * - if the data and instruction caches are enabled or not 156cdd2417SAlbert Herranz * - if the MMU is enabled or not 166cdd2417SAlbert Herranz * - if the high BATs are enabled or not 176cdd2417SAlbert Herranz * 186cdd2417SAlbert Herranz * We enable the high BATs, enable the caches if not already enabled, 196cdd2417SAlbert Herranz * enable the MMU with an identity mapping scheme and jump to the start code. 206cdd2417SAlbert Herranz */ 216cdd2417SAlbert Herranz 226cdd2417SAlbert Herranz .text 236cdd2417SAlbert Herranz 246cdd2417SAlbert Herranz .globl _zimage_start 256cdd2417SAlbert Herranz_zimage_start: 266cdd2417SAlbert Herranz 276cdd2417SAlbert Herranz /* turn the MMU off */ 286cdd2417SAlbert Herranz mfmsr 9 296cdd2417SAlbert Herranz rlwinm 9, 9, 0, ~((1<<4)|(1<<5)) /* MSR_DR|MSR_IR */ 306cdd2417SAlbert Herranz bcl 20, 31, 1f 316cdd2417SAlbert Herranz1: 326cdd2417SAlbert Herranz mflr 8 336cdd2417SAlbert Herranz clrlwi 8, 8, 3 /* convert to a real address */ 346cdd2417SAlbert Herranz addi 8, 8, _mmu_off - 1b 356cdd2417SAlbert Herranz mtsrr0 8 366cdd2417SAlbert Herranz mtsrr1 9 376cdd2417SAlbert Herranz rfi 386cdd2417SAlbert Herranz_mmu_off: 396cdd2417SAlbert Herranz /* MMU disabled */ 406cdd2417SAlbert Herranz 416cdd2417SAlbert Herranz /* setup BATs */ 426cdd2417SAlbert Herranz isync 436cdd2417SAlbert Herranz li 8, 0 446cdd2417SAlbert Herranz mtspr 0x210, 8 /* IBAT0U */ 456cdd2417SAlbert Herranz mtspr 0x212, 8 /* IBAT1U */ 466cdd2417SAlbert Herranz mtspr 0x214, 8 /* IBAT2U */ 476cdd2417SAlbert Herranz mtspr 0x216, 8 /* IBAT3U */ 486cdd2417SAlbert Herranz mtspr 0x218, 8 /* DBAT0U */ 496cdd2417SAlbert Herranz mtspr 0x21a, 8 /* DBAT1U */ 506cdd2417SAlbert Herranz mtspr 0x21c, 8 /* DBAT2U */ 516cdd2417SAlbert Herranz mtspr 0x21e, 8 /* DBAT3U */ 526cdd2417SAlbert Herranz 536cdd2417SAlbert Herranz mtspr 0x230, 8 /* IBAT4U */ 546cdd2417SAlbert Herranz mtspr 0x232, 8 /* IBAT5U */ 556cdd2417SAlbert Herranz mtspr 0x234, 8 /* IBAT6U */ 566cdd2417SAlbert Herranz mtspr 0x236, 8 /* IBAT7U */ 576cdd2417SAlbert Herranz mtspr 0x238, 8 /* DBAT4U */ 586cdd2417SAlbert Herranz mtspr 0x23a, 8 /* DBAT5U */ 596cdd2417SAlbert Herranz mtspr 0x23c, 8 /* DBAT6U */ 606cdd2417SAlbert Herranz mtspr 0x23e, 8 /* DBAT7U */ 616cdd2417SAlbert Herranz 626cdd2417SAlbert Herranz li 8, 0x01ff /* first 16MiB */ 636cdd2417SAlbert Herranz li 9, 0x0002 /* rw */ 646cdd2417SAlbert Herranz mtspr 0x211, 9 /* IBAT0L */ 656cdd2417SAlbert Herranz mtspr 0x210, 8 /* IBAT0U */ 666cdd2417SAlbert Herranz mtspr 0x219, 9 /* DBAT0L */ 676cdd2417SAlbert Herranz mtspr 0x218, 8 /* DBAT0U */ 686cdd2417SAlbert Herranz 696cdd2417SAlbert Herranz lis 8, 0x0c00 /* I/O mem */ 706cdd2417SAlbert Herranz ori 8, 8, 0x3ff /* 32MiB */ 716cdd2417SAlbert Herranz lis 9, 0x0c00 726cdd2417SAlbert Herranz ori 9, 9, 0x002a /* uncached, guarded, rw */ 736cdd2417SAlbert Herranz mtspr 0x21b, 9 /* DBAT1L */ 746cdd2417SAlbert Herranz mtspr 0x21a, 8 /* DBAT1U */ 756cdd2417SAlbert Herranz 766cdd2417SAlbert Herranz lis 8, 0x0100 /* next 8MiB */ 776cdd2417SAlbert Herranz ori 8, 8, 0x00ff /* 8MiB */ 786cdd2417SAlbert Herranz lis 9, 0x0100 796cdd2417SAlbert Herranz ori 9, 9, 0x0002 /* rw */ 806cdd2417SAlbert Herranz mtspr 0x215, 9 /* IBAT2L */ 816cdd2417SAlbert Herranz mtspr 0x214, 8 /* IBAT2U */ 826cdd2417SAlbert Herranz mtspr 0x21d, 9 /* DBAT2L */ 836cdd2417SAlbert Herranz mtspr 0x21c, 8 /* DBAT2U */ 846cdd2417SAlbert Herranz 856cdd2417SAlbert Herranz lis 8, 0x1000 /* MEM2 */ 866cdd2417SAlbert Herranz ori 8, 8, 0x07ff /* 64MiB */ 876cdd2417SAlbert Herranz lis 9, 0x1000 886cdd2417SAlbert Herranz ori 9, 9, 0x0002 /* rw */ 896cdd2417SAlbert Herranz mtspr 0x216, 8 /* IBAT3U */ 906cdd2417SAlbert Herranz mtspr 0x217, 9 /* IBAT3L */ 916cdd2417SAlbert Herranz mtspr 0x21e, 8 /* DBAT3U */ 926cdd2417SAlbert Herranz mtspr 0x21f, 9 /* DBAT3L */ 936cdd2417SAlbert Herranz 946cdd2417SAlbert Herranz /* enable the high BATs */ 956cdd2417SAlbert Herranz mfspr 8, 0x3f3 /* HID4 */ 966cdd2417SAlbert Herranz oris 8, 8, 0x0200 976cdd2417SAlbert Herranz mtspr 0x3f3, 8 /* HID4 */ 986cdd2417SAlbert Herranz 996cdd2417SAlbert Herranz /* enable and invalidate the caches if not already enabled */ 1006cdd2417SAlbert Herranz mfspr 8, 0x3f0 /* HID0 */ 1016cdd2417SAlbert Herranz andi. 0, 8, (1<<15) /* HID0_ICE */ 1026cdd2417SAlbert Herranz bne 1f 1036cdd2417SAlbert Herranz ori 8, 8, (1<<15)|(1<<11) /* HID0_ICE|HID0_ICFI*/ 1046cdd2417SAlbert Herranz1: 1056cdd2417SAlbert Herranz andi. 0, 8, (1<<14) /* HID0_DCE */ 1066cdd2417SAlbert Herranz bne 1f 1076cdd2417SAlbert Herranz ori 8, 8, (1<<14)|(1<<10) /* HID0_DCE|HID0_DCFI*/ 1086cdd2417SAlbert Herranz1: 1096cdd2417SAlbert Herranz mtspr 0x3f0, 8 /* HID0 */ 1106cdd2417SAlbert Herranz isync 1116cdd2417SAlbert Herranz 1126cdd2417SAlbert Herranz /* initialize arguments */ 1136cdd2417SAlbert Herranz li 3, 0 1146cdd2417SAlbert Herranz li 4, 0 1156cdd2417SAlbert Herranz li 5, 0 1166cdd2417SAlbert Herranz 1176cdd2417SAlbert Herranz /* turn the MMU on */ 1186cdd2417SAlbert Herranz bcl 20, 31, 1f 1196cdd2417SAlbert Herranz1: 1206cdd2417SAlbert Herranz mflr 8 1216cdd2417SAlbert Herranz addi 8, 8, _mmu_on - 1b 1226cdd2417SAlbert Herranz mfmsr 9 1236cdd2417SAlbert Herranz ori 9, 9, (1<<4)|(1<<5) /* MSR_DR|MSR_IR */ 1246cdd2417SAlbert Herranz mtsrr0 8 1256cdd2417SAlbert Herranz mtsrr1 9 1266cdd2417SAlbert Herranz sync 1276cdd2417SAlbert Herranz rfi 1286cdd2417SAlbert Herranz_mmu_on: 1296cdd2417SAlbert Herranz /* turn on the front blue led (aka: yay! we got here!) */ 1306cdd2417SAlbert Herranz lis 8, 0x0d00 1316cdd2417SAlbert Herranz ori 8, 8, 0x00c0 1326cdd2417SAlbert Herranz lwz 9, 0(8) 1336cdd2417SAlbert Herranz ori 9, 9, 0x20 1346cdd2417SAlbert Herranz stw 9, 0(8) 1356cdd2417SAlbert Herranz 1366cdd2417SAlbert Herranz b _zimage_start_lib 1376cdd2417SAlbert Herranz 138