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
73