/*
 *  PS3 bootwrapper entry.
 *
 *  Copyright (C) 2007 Sony Computer Entertainment Inc.
 *  Copyright 2007 Sony Corp.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; version 2 of the License.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#include "ppc_asm.h"

	.machine "ppc64"

	.text

/*
 * __system_reset_overlay - The PS3 first stage entry.
 *
 * The bootwraper build script copies the 0x100 bytes at symbol
 * __system_reset_overlay to offset 0x100 of the rom image.
 *
 * The PS3 has a single processor with two threads.
 */

	.globl __system_reset_overlay
__system_reset_overlay:

	/* Switch to 32-bit mode. */

	mfmsr	r9
	clrldi	r9,r9,1
	mtmsrd	r9
	nop

	/* Get thread number in r3 and branch. */

	mfspr	r3, 0x88
	cntlzw.	r3, r3
	li	r4, 0
	li	r5, 0
	beq	1f

	/* Secondary goes to __secondary_hold in kernel. */

	li	r4, 0x60
	mtctr	r4
	bctr

	/* Primary delays then goes to _zimage_start in wrapper. */
1:
	or	31, 31, 31 /* db16cyc */
	or	31, 31, 31 /* db16cyc */

	lis	r4, _zimage_start@ha
	addi	r4, r4, _zimage_start@l
	mtctr	r4
	bctr

/*
 * __system_reset_kernel - Place holder for the kernel reset vector.
 *
 * The bootwrapper build script copies 0x100 bytes from offset 0x100
 * of the rom image to the symbol __system_reset_kernel.  At runtime
 * the bootwrapper program copies the 0x100 bytes at __system_reset_kernel
 * to ram address 0x100.  This symbol must occupy 0x100 bytes.
 */

	.globl __system_reset_kernel
__system_reset_kernel:

	. = __system_reset_kernel + 0x100
