diff options
Diffstat (limited to 'cpu/mpc83xx/start.S')
| -rw-r--r-- | cpu/mpc83xx/start.S | 95 | 
1 files changed, 54 insertions, 41 deletions
| diff --git a/cpu/mpc83xx/start.S b/cpu/mpc83xx/start.S index 792b2c8b2..26e31061f 100644 --- a/cpu/mpc83xx/start.S +++ b/cpu/mpc83xx/start.S @@ -109,6 +109,45 @@ version_string:  	.ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"  	.ascii " ", CONFIG_IDENT_STRING, "\0" +	.align 2 + +	.globl enable_addr_trans +enable_addr_trans: +	/* enable address translation */ +	mfmsr	r5 +	ori	r5, r5, (MSR_IR | MSR_DR) +	mtmsr	r5 +	isync +	blr + +	.globl disable_addr_trans +disable_addr_trans: +	/* disable address translation */ +	mflr	r4 +	mfmsr	r3 +	andi.	r0, r3, (MSR_IR | MSR_DR) +	beqlr +	andc	r3, r3, r0 +	mtspr	SRR0, r4 +	mtspr	SRR1, r3 +	rfi + +	.globl get_pvr +get_pvr: +	mfspr	r3, PVR +	blr + +	.globl	ppcDWstore +ppcDWstore: +	lfd	1, 0(r4) +	stfd	1, 0(r3) +	blr + +	.globl	ppcDWload +ppcDWload: +	lfd	1, 0(r3) +	stfd	1, 0(r4) +	blr  #ifndef CONFIG_DEFAULT_IMMR  #error CONFIG_DEFAULT_IMMR must be defined @@ -161,9 +200,23 @@ boot_cold: /* time t 3 */  	nop  boot_warm: /* time t 5 */  	mfmsr	r5			/* save msr contents	*/ + +	/* 83xx manuals prescribe a specific sequence for updating IMMRBAR. */ +	bl	1f +1:	mflr	r7 +  	lis	r3, CONFIG_SYS_IMMR@h  	ori	r3, r3, CONFIG_SYS_IMMR@l + +	lwz	r6, IMMRBAR(r4) +	isync +  	stw	r3, IMMRBAR(r4) +	lwz	r6, 0(r7)		/* Arbitrary external load */ +	isync + +	lwz	r6, IMMRBAR(r3) +	isync  	/* Initialise the E300 processor core		*/  	/*------------------------------------------*/ @@ -173,9 +226,7 @@ boot_warm: /* time t 5 */  	 * is loaded.  Wait for the rest before branching  	 * to another flash page.  	 */ -	addi	r7, r3, 0x50b0 -1:	dcbi	0, r7 -	lwz	r6, 0(r7) +1:	lwz	r6, 0x50b0(r3)  	andi.	r6, r6, 1  	beq	1b  #endif @@ -698,27 +749,6 @@ setup_bats:  	blr -	.globl enable_addr_trans -enable_addr_trans: -	/* enable address translation */ -	mfmsr	r5 -	ori	r5, r5, (MSR_IR | MSR_DR) -	mtmsr	r5 -	isync -	blr - -	.globl disable_addr_trans -disable_addr_trans: -	/* disable address translation */ -	mflr	r4 -	mfmsr	r3 -	andi.	r0, r3, (MSR_IR | MSR_DR) -	beqlr -	andc	r3, r3, r0 -	mtspr	SRR0, r4 -	mtspr	SRR1, r3 -	rfi -  /* Cache functions.   *   * Note: requires that all cache bits in @@ -796,23 +826,6 @@ flush_dcache:  	b	1b  2:	blr -	.globl get_pvr -get_pvr: -	mfspr	r3, PVR -	blr - -	.globl	ppcDWstore -ppcDWstore: -	lfd	1, 0(r4) -	stfd	1, 0(r3) -	blr - -	.globl	ppcDWload -ppcDWload: -	lfd	1, 0(r3) -	stfd	1, 0(r4) -	blr -  /*-------------------------------------------------------------------*/  /* |