xref: /openbmc/linux/arch/powerpc/boot/ps3-head.S (revision 24ed8559)
1/*
2 *  PS3 bootwrapper entry.
3 *
4 *  Copyright (C) 2007 Sony Computer Entertainment Inc.
5 *  Copyright 2007 Sony Corp.
6 *
7 *  This program is free software; you can redistribute it and/or modify
8 *  it under the terms of the GNU General Public License as published by
9 *  the Free Software Foundation; version 2 of the License.
10 *
11 *  This program is distributed in the hope that it will be useful,
12 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 *  GNU General Public License for more details.
15 *
16 *  You should have received a copy of the GNU General Public License
17 *  along with this program; if not, write to the Free Software
18 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21#include "ppc_asm.h"
22
23	.machine "ppc64"
24
25	.text
26
27/*
28 * __system_reset_overlay - The PS3 first stage entry.
29 *
30 * The bootwraper build script copies the 0x100 bytes at symbol
31 * __system_reset_overlay to offset 0x100 of the rom image.
32 *
33 * The PS3 has a single processor with two threads.
34 */
35
36	.globl __system_reset_overlay
37__system_reset_overlay:
38
39	/* Switch to 32-bit mode. */
40
41	mfmsr	r9
42	clrldi	r9,r9,1
43	mtmsrd	r9
44	nop
45
46	/* Get thread number in r3 and branch. */
47
48	mfspr	r3, 0x88
49	cntlzw.	r3, r3
50	li	r4, 0
51	li	r5, 0
52	beq	1f
53
54	/* Secondary goes to __secondary_hold in kernel. */
55
56	li	r4, 0x60
57	mtctr	r4
58	bctr
59
60	/* Primary delays then goes to _zimage_start in wrapper. */
611:
62	or	31, 31, 31 /* db16cyc */
63	or	31, 31, 31 /* db16cyc */
64
65	lis	r4, _zimage_start@ha
66	addi	r4, r4, _zimage_start@l
67	mtctr	r4
68	bctr
69
70/*
71 * __system_reset_kernel - Place holder for the kernel reset vector.
72 *
73 * The bootwrapper build script copies 0x100 bytes from offset 0x100
74 * of the rom image to the symbol __system_reset_kernel.  At runtime
75 * the bootwrapper program copies the 0x100 bytes at __system_reset_kernel
76 * to ram address 0x100.  This symbol must occupy 0x100 bytes.
77 */
78
79	.globl __system_reset_kernel
80__system_reset_kernel:
81
82	. = __system_reset_kernel + 0x100
83