1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * PS3 bootwrapper entry. 4 * 5 * Copyright (C) 2007 Sony Computer Entertainment Inc. 6 * Copyright 2007 Sony Corp. 7 */ 8 9 #include "ppc_asm.h" 10 11 .machine "ppc64" 12 13 .text 14 15 /* 16 * __system_reset_overlay - The PS3 first stage entry. 17 * 18 * The bootwraper build script copies the 512 bytes at symbol 19 * __system_reset_overlay to offset 0x100 of the rom image. This symbol 20 * must occupy 512 or less bytes. 21 * 22 * The PS3 has a single processor with two threads. 23 */ 24 25 .globl __system_reset_overlay 26 __system_reset_overlay: 27 28 /* Switch to 32-bit mode. */ 29 30 mfmsr r9 31 clrldi r9,r9,1 32 mtmsrd r9 33 nop 34 35 /* Get thread number in r3 and branch. */ 36 37 mfspr r3, 0x88 38 cntlzw. r3, r3 39 beq 1f 40 41 /* Secondary goes to __secondary_hold in kernel. */ 42 43 li r4, 0x60 44 mtctr r4 45 bctr 46 47 1: 48 /* Primary delays then goes to _zimage_start in wrapper. */ 49 50 or 31, 31, 31 /* db16cyc */ 51 or 31, 31, 31 /* db16cyc */ 52 53 lis r4, _zimage_start@ha 54 addi r4, r4, _zimage_start@l 55 mtctr r4 56 bctr 57 58 . = __system_reset_overlay + 512 59 60 /* 61 * __system_reset_kernel - Place holder for the kernel reset vector. 62 * 63 * The bootwrapper build script copies 512 bytes from offset 0x100 64 * of the rom image to the symbol __system_reset_kernel. At runtime 65 * the bootwrapper program copies the 512 bytes at __system_reset_kernel 66 * to ram address 0x100. This symbol must occupy 512 bytes. 67 */ 68 69 .globl __system_reset_kernel 70 __system_reset_kernel: 71 72 . = __system_reset_kernel + 512