diff options
Diffstat (limited to 'cpu/mpc83xx/start.S')
| -rw-r--r-- | cpu/mpc83xx/start.S | 79 | 
1 files changed, 38 insertions, 41 deletions
| diff --git a/cpu/mpc83xx/start.S b/cpu/mpc83xx/start.S index e9f07901b..fb001a654 100644 --- a/cpu/mpc83xx/start.S +++ b/cpu/mpc83xx/start.S @@ -28,7 +28,7 @@   */  #include <config.h> -#include <mpc83xx.h>  +#include <mpc83xx.h>  #include <version.h>  #define CONFIG_83XX	1		/* needed for Linux kernel header files*/ @@ -89,7 +89,7 @@ version_string:  	.ascii U_BOOT_VERSION  	.ascii " (", __DATE__, " - ", __TIME__, ")"  	.ascii " ", CONFIG_IDENT_STRING, "\0" -	 +  	.text  #define _HRCW_TABLE_ENTRY(w)		\  	.fill	8,1,(((w)>>24)&0xff);	\ @@ -101,7 +101,6 @@ version_string:  	_HRCW_TABLE_ENTRY(CFG_HRCW_HIGH) -	  #ifndef CONFIG_DEFAULT_IMMR  #error CONFIG_DEFAULT_IMMR must be defined  #endif /* CFG_DEFAULT_IMMR */ @@ -143,7 +142,7 @@ _start: /* time t 0 */  	. = EXC_OFF_SYS_RESET + 0x10  	.globl	_start_warm -_start_warm:  +_start_warm:  	li	r21, BOOTFLAG_WARM	/* Software reboot	*/  	b	boot_warm @@ -156,12 +155,12 @@ boot_warm: /* time t 5 */  	lis	r3, CFG_IMMRBAR@h  	ori	r3, r3, CFG_IMMRBAR@l  	stw	r3, IMMRBAR(r4) -	 +  	/* Initialise the E300 processor core		*/  	/*------------------------------------------*/ -	 +  	bl	init_e300_core -	 +  #ifndef CFG_RAMBOOT  	/* Inflate flash location so it appears everywhere, calculate */ @@ -218,7 +217,7 @@ _start_of_vectors:  /* External Interrupt exception. */  #ifndef FIXME  	STD_EXCEPTION(0x500, ExtInterrupt, external_interrupt) -#endif	 +#endif  /* Alignment exception. */  	. = 0x600 @@ -417,9 +416,9 @@ init_e300_core: /* time t 10 */  	lis r4, CFG_WATCHDOG_VALUE  	ori r4, r4, (SWCRR_SWEN | SWCRR_SWRI | SWCRR_SWPR)  	stw r4, SWCRR(r3) -	 +  	/* and reset it */ -	 +  	li	r4, 0x556C  	sth	r4, SWSRR@l(r3)  	li	r4, 0xAA39 @@ -502,7 +501,7 @@ init_e300_core: /* time t 10 */  	/* Done!						*/  	/*------------------------------*/ -	blr  +	blr  /* Cache functions.   * @@ -645,8 +644,8 @@ relocate_code:  	mtctr	r0  	la	r8,-4(r4)  	la	r7,-4(r3) -	 -	/* and compare */	 + +	/* and compare */  20:	lwzu	r20,4(r8)  	lwzu	r21,4(r7)  	xor. r22, r20, r21 @@ -664,21 +663,19 @@ relocate_code:  3:	lwzu	r0,-4(r8)  	stwu	r0,-4(r7)  	bdnz	3b -	 -	  /*   * Now flush the cache: note that we must start from a cache aligned   * address. Otherwise we might miss one cache line.   */ -4:	 +4:  	bl un_setup_stack_in_data_cache  	mr r7, r3  	mr r8, r4  	bl dcache_disable  	mr r3, r7  	mr r4, r8 -	 +  	cmpwi	r6,0  	add	r5,r3,r5  	beq	7f	/* Always flush prefetch queue in any case */ @@ -889,9 +886,9 @@ map_flash_by_law1:  	/* Address Mask in OR0 so ROM appears everywhere      */  	/*----------------------------------------------------*/  	lis	r3, (CFG_IMMRBAR)@h  /* r3 <= CFG_IMMRBAR    */ -	lwz	r4, OR0@l(r3)      +	lwz	r4, OR0@l(r3)  	li	r5, 0x7fff        /* r5 <= 0x00007FFFF */ -	and	r4, r4, r5         +	and	r4, r4, r5  	stw	r4, OR0@l(r3)     /* OR0 <= OR0 & 0x00007FFFF */  	/* As MPC8349E User's Manual presented, when RCW[BMS] is set to 0, @@ -926,9 +923,9 @@ remap_flash_by_law0:  	/* Initialize the BR0 with the boot ROM starting address. */  	lwz r4, BR0(r3)  	li  r5, 0x7FFF -	and r4, r4, r5              +	and r4, r4, r5  	lis r5, (CFG_FLASH_BASE & 0xFFFF8000)@h -	ori r5, r5, (CFG_FLASH_BASE & 0xFFFF8000)@l  +	ori r5, r5, (CFG_FLASH_BASE & 0xFFFF8000)@l  	or  r5, r5, r4  	stw r5, BR0(r3) /* r5 <= (CFG_FLASH_BASE & 0xFFFF8000) | (BR0 & 0x00007FFF) */ @@ -950,9 +947,9 @@ remap_flash_by_law0:  	stw r4, LBLAWAR1(r3) /* Off LBIU LAW1 */  	blr -setup_stack_in_data_cache_on_r1:  +setup_stack_in_data_cache_on_r1:  	lis r3, (CFG_IMMRBAR)@h -	 +  	/* setup D-BAT for the D-Cache (with out real memory backup) */  	lis r4, (CFG_INIT_RAM_ADDR & 0xFFFE0000)@h @@ -961,13 +958,13 @@ setup_stack_in_data_cache_on_r1:  	mtspr	DBAT0L, r4  	isync -#if 0	 +#if 0  	/* Enable MMU */  	mfmsr r4  	ori r4, r4, (MSR_DR | MSR_IR)@l  	mtmsr r4 -#endif	 -	 +#endif +  	/* Enable and invalidate data cache. */  	mfspr	r4, HID0  	mr	r5, r4 @@ -977,19 +974,19 @@ setup_stack_in_data_cache_on_r1:  	mtspr	HID0, r4  	mtspr	HID0, r5  	sync -	 +  	/* Allocate Initial RAM in data cache.*/  	li  r0, 0  	lis	r4, (CFG_INIT_RAM_ADDR)@h  	ori	r4, r4, (CFG_INIT_RAM_ADDR)@l -	li	r5, 128*8 /* 128*8*32=32Kb */  +	li	r5, 128*8 /* 128*8*32=32Kb */  	mtctr	r5  1:  	dcbz	r0, r4  	addi	r4, r4, 32  	bdnz	1b  	isync -		 +  	/* Lock all the D-cache, basically leaving the reset of the program without dcache */  	mfspr	r4, HID0  	ori	r4, r4, (HID0_DLOCK)@l @@ -1010,14 +1007,14 @@ un_setup_stack_in_data_cache:  	blr  	mr r14, r4  	mr r15, r5 -	 +  	lis r4, (CFG_INIT_RAM_ADDR & 0xFFFE0000)@h  	mtspr	DBAT0U, r4  	ori r4, r4, 0x0002  	mtspr	DBAT0L, r4  	isync -	 +  	/* un lock all the D-cache */  	mfspr	r4, HID0  	lis r5, (~(HID0_DLOCK))@h @@ -1030,20 +1027,20 @@ un_setup_stack_in_data_cache:  	li  r0, 0  	lis	r4, (CFG_INIT_RAM_ADDR)@h  	ori	r4, r4, (CFG_INIT_RAM_ADDR)@l -	li	r5, 128*8 /* 128*8*32=32Kb */  +	li	r5, 128*8 /* 128*8*32=32Kb */  	mtctr	r5  1:  	dcbz	r0, r4  	addi	r4, r4, 32  	bdnz	1b  	isync -	 +  	mflr r16  	bl dcache_disable  	mtlr r16 -	 +  	blr -	 +  #if 0  #define GREEN_LIGHT 0x2B0D4046  #define RED_LIGHT   0x250D4046 @@ -1054,7 +1051,7 @@ un_setup_stack_in_data_cache:   */  	.globl liblight -liblight:	 +liblight:  	lis	r3, CFG_IMMRBAR@h  	ori	r3, r3, CFG_IMMRBAR@l  	li r4, 0x3002 @@ -1063,7 +1060,7 @@ liblight:  	mtspr	HID0, r4  	mtspr	HID2, r4  	lis r4, 0xF8000000@h -	ori r4, r4, 0xF8000000@l	 +	ori r4, r4, 0xF8000000@l  	stw r4, LBLAWBAR1(r3)  	lis r4, 0x8000000E@h  	ori r4, r4, 0x8000000E@l @@ -1083,14 +1080,14 @@ liblight:  	ori r6, r6, RED_LIGHT@l  	lis r7, LIB_CNT@h  	ori r7, r7, LIB_CNT@l -	 +  1:  	stw r5, 0(r4) -	mtctr r7	 +	mtctr r7  2:	bdnz 2b  	stw r6, 0(r4) -	mtctr r7	 +	mtctr r7  3:	bdnz 3b  	b 1b -	 +  #endif |