mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	 6dff5b6705
			
		
	
	
		6dff5b6705
		
	
	
	
	
		
			
			GCC 5 generates different code for this bootwrapper null check that causes the PS3 to hang very early in its bootup. This check is of limited value, so just get rid of it. Cc: stable@vger.kernel.org Signed-off-by: Geoff Levand <geoff@infradead.org> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /*
 | |
|  *  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 512 bytes at symbol
 | |
|  * __system_reset_overlay to offset 0x100 of the rom image.  This symbol
 | |
|  * must occupy 512 or less bytes.
 | |
|  *
 | |
|  * 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
 | |
| 	beq	1f
 | |
| 
 | |
| 	/* Secondary goes to __secondary_hold in kernel. */
 | |
| 
 | |
| 	li	r4, 0x60
 | |
| 	mtctr	r4
 | |
| 	bctr
 | |
| 
 | |
| 1:
 | |
| 	/* Primary delays then goes to _zimage_start in wrapper. */
 | |
| 
 | |
| 	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_overlay + 512
 | |
| 
 | |
| /*
 | |
|  * __system_reset_kernel - Place holder for the kernel reset vector.
 | |
|  *
 | |
|  * The bootwrapper build script copies 512 bytes from offset 0x100
 | |
|  * of the rom image to the symbol __system_reset_kernel.  At runtime
 | |
|  * the bootwrapper program copies the 512 bytes at __system_reset_kernel
 | |
|  * to ram address 0x100.  This symbol must occupy 512 bytes.
 | |
|  */
 | |
| 
 | |
| 	.globl __system_reset_kernel
 | |
| __system_reset_kernel:
 | |
| 
 | |
| 	. = __system_reset_kernel + 512
 |