⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 start.s.svn-base

📁 u-boot for S3c2443 processor
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
	CRIT_EXCEPTION(0x2000, DebugBreakpoint, DebugException )	.globl	_end_of_vectors_end_of_vectors:	. = 0x2100/* * This code finishes saving the registers to the exception frame * and jumps to the appropriate handler for the exception. * Register r21 is pointer into trap frame, r1 has new stack pointer. */	.globl	transfer_to_handlertransfer_to_handler:	stw	r22,_NIP(r21)	lis	r22,MSR_POW@h	andc	r23,r23,r22	stw	r23,_MSR(r21)	SAVE_GPR(7, r21)	SAVE_4GPRS(8, r21)	SAVE_8GPRS(12, r21)	SAVE_8GPRS(24, r21)#if 0	andi.	r23,r23,MSR_PR	mfspr	r23,SPRG3		/* if from user, fix up tss.regs */	beq	2f	addi	r24,r1,STACK_FRAME_OVERHEAD	stw	r24,PT_REGS(r23)2:	addi	r2,r23,-TSS		/* set r2 to current */	tovirt(r2,r2,r23)#endif	mflr	r23	andi.	r24,r23,0x3f00		/* get vector offset */	stw	r24,TRAP(r21)	li	r22,0	stw	r22,RESULT(r21)	mtspr	SPRG2,r22		/* r1 is now kernel sp */#if 0	addi	r24,r2,TASK_STRUCT_SIZE /* check for kernel stack overflow */	cmplw	0,r1,r2	cmplw	1,r1,r24	crand	1,1,4	bgt	stack_ovf		/* if r2 < r1 < r2+TASK_STRUCT_SIZE */#endif	lwz	r24,0(r23)		/* virtual address of handler */	lwz	r23,4(r23)		/* where to go when done */	mtspr	SRR0,r24	mtspr	SRR1,r20	mtlr	r23	SYNC	rfi				/* jump to handler, enable MMU */int_return:	mfmsr	r28		/* Disable interrupts */	li	r4,0	ori	r4,r4,MSR_EE	andc	r28,r28,r4	SYNC			/* Some chip revs need this... */	mtmsr	r28	SYNC	lwz	r2,_CTR(r1)	lwz	r0,_LINK(r1)	mtctr	r2	mtlr	r0	lwz	r2,_XER(r1)	lwz	r0,_CCR(r1)	mtspr	XER,r2	mtcrf	0xFF,r0	REST_10GPRS(3, r1)	REST_10GPRS(13, r1)	REST_8GPRS(23, r1)	REST_GPR(31, r1)	lwz	r2,_NIP(r1)	/* Restore environment */	lwz	r0,_MSR(r1)	mtspr	SRR0,r2	mtspr	SRR1,r0	lwz	r0,GPR0(r1)	lwz	r2,GPR2(r1)	lwz	r1,GPR1(r1)	SYNC	rficrit_return:	mfmsr	r28		/* Disable interrupts */	li	r4,0	ori	r4,r4,MSR_EE	andc	r28,r28,r4	SYNC			/* Some chip revs need this... */	mtmsr	r28	SYNC	lwz	r2,_CTR(r1)	lwz	r0,_LINK(r1)	mtctr	r2	mtlr	r0	lwz	r2,_XER(r1)	lwz	r0,_CCR(r1)	mtspr	XER,r2	mtcrf	0xFF,r0	REST_10GPRS(3, r1)	REST_10GPRS(13, r1)	REST_8GPRS(23, r1)	REST_GPR(31, r1)	lwz	r2,_NIP(r1)	/* Restore environment */	lwz	r0,_MSR(r1)	mtspr	990,r2		/* SRR2 */	mtspr	991,r0		/* SRR3 */	lwz	r0,GPR0(r1)	lwz	r2,GPR2(r1)	lwz	r1,GPR1(r1)	SYNC	rfci/* Cache functions.*/invalidate_icache:	iccci	r0,r0			/* for 405, iccci invalidates the */	blr				/*   entire I cache */invalidate_dcache:	addi	r6,0,0x0000		/* clear GPR 6 */	/* Do loop for # of dcache congruence classes. */#if defined(CONFIG_440_GX)	lis     r7, (CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)@ha	/* TBS for large sized cache */	ori     r7, r7, (CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)@l#else	addi	r7,r0, (CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)#endif					/* NOTE: dccci invalidates both */	mtctr	r7			/* ways in the D cache */..dcloop:	dccci	0,r6			/* invalidate line */	addi	r6,r6, CFG_CACHELINE_SIZE /* bump to next line */	bdnz	..dcloop	blrflush_dcache:	addis	r9,r0,0x0002		/* set mask for EE and CE msr bits */	ori	r9,r9,0x8000	mfmsr	r12			/* save msr */	andc	r9,r12,r9	mtmsr	r9			/* disable EE and CE */	addi	r10,r0,0x0001		/* enable data cache for unused memory */	mfdccr	r9			/* region 0xF8000000-0xFFFFFFFF via */	or	r10,r10,r9		/* bit 31 in dccr */	mtdccr	r10	/* do loop for # of congruence classes. */#if defined(CONFIG_440_GX)	lis     r10,(CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)@ha	/* TBS: for large cache sizes */	ori     r10,r10,(CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)@l	lis     r11,(CFG_DCACHE_SIZE / 2)@ha /* D cache set size - 2 way sets */	ori     r11,r11,(CFG_DCACHE_SIZE / 2)@l /* D cache set size - 2 way sets */#else	addi	r10,r0,(CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)	addi	r11,r0,(CFG_DCACHE_SIZE / 2) /* D cache set size - 2 way sets */#endif	mtctr	r10	addi	r10,r0,(0xE000-0x10000)	/* start at 0xFFFFE000 */	add	r11,r10,r11		/* add to get to other side of cache line */..flush_dcache_loop:	lwz	r3,0(r10)		/* least recently used side */	lwz	r3,0(r11)		/* the other side */	dccci	r0,r11			/* invalidate both sides */	addi	r10,r10,CFG_CACHELINE_SIZE /* bump to next line */	addi	r11,r11,CFG_CACHELINE_SIZE /* bump to next line */	bdnz	..flush_dcache_loop	sync				/* allow memory access to complete */	mtdccr	r9			/* restore dccr */	mtmsr	r12			/* restore msr */	blr	.globl	icache_enableicache_enable:	mflr	r8	bl	invalidate_icache	mtlr	r8	isync	addis	r3,r0, 0x8000	      /* set bit 0 */	mticcr	r3	blr	.globl	icache_disableicache_disable:	addis	r3,r0, 0x0000	      /* clear bit 0 */	mticcr	r3	isync	blr	.globl	icache_statusicache_status:	mficcr	r3	srwi	r3, r3, 31	/* >>31 => select bit 0 */	blr	.globl	dcache_enabledcache_enable:	mflr	r8	bl	invalidate_dcache	mtlr	r8	isync	addis	r3,r0, 0x8000	      /* set bit 0 */	mtdccr	r3	blr	.globl	dcache_disabledcache_disable:	mflr	r8	bl	flush_dcache	mtlr	r8	addis	r3,r0, 0x0000	      /* clear bit 0 */	mtdccr	r3	blr	.globl	dcache_statusdcache_status:	mfdccr	r3	srwi	r3, r3, 31	/* >>31 => select bit 0 */	blr	.globl get_pvrget_pvr:	mfspr	r3, PVR	blr#if !defined(CONFIG_440)	.globl wr_pitwr_pit:	mtspr	pit, r3	blr#endif	.globl wr_tcrwr_tcr:	mtspr	tcr, r3	blr/*------------------------------------------------------------------------------- *//* Function:	 in8 *//* Description:	 Input 8 bits *//*------------------------------------------------------------------------------- */	.globl	in8in8:	lbz	r3,0x0000(r3)	blr/*------------------------------------------------------------------------------- *//* Function:	 out8 *//* Description:	 Output 8 bits *//*------------------------------------------------------------------------------- */	.globl	out8out8:	stb	r4,0x0000(r3)	blr/*------------------------------------------------------------------------------- *//* Function:	 out16 *//* Description:	 Output 16 bits *//*------------------------------------------------------------------------------- */	.globl	out16out16:	sth	r4,0x0000(r3)	blr/*------------------------------------------------------------------------------- *//* Function:	 out16r *//* Description:	 Byte reverse and output 16 bits *//*------------------------------------------------------------------------------- */	.globl	out16rout16r:	sthbrx	r4,r0,r3	blr/*------------------------------------------------------------------------------- *//* Function:	 out32 *//* Description:	 Output 32 bits *//*------------------------------------------------------------------------------- */	.globl	out32out32:	stw	r4,0x0000(r3)	blr/*------------------------------------------------------------------------------- *//* Function:	 out32r *//* Description:	 Byte reverse and output 32 bits *//*------------------------------------------------------------------------------- */	.globl	out32rout32r:	stwbrx	r4,r0,r3	blr/*------------------------------------------------------------------------------- *//* Function:	 in16 *//* Description:	 Input 16 bits *//*------------------------------------------------------------------------------- */	.globl	in16in16:	lhz	r3,0x0000(r3)	blr/*------------------------------------------------------------------------------- *//* Function:	 in16r *//* Description:	 Input 16 bits and byte reverse *//*------------------------------------------------------------------------------- */	.globl	in16rin16r:	lhbrx	r3,r0,r3	blr/*------------------------------------------------------------------------------- *//* Function:	 in32 *//* Description:	 Input 32 bits *//*------------------------------------------------------------------------------- */	.globl	in32in32:	lwz	3,0x0000(3)	blr/*------------------------------------------------------------------------------- *//* Function:	 in32r *//* Description:	 Input 32 bits and byte reverse *//*------------------------------------------------------------------------------- */	.globl	in32rin32r:	lwbrx	r3,r0,r3	blr/*------------------------------------------------------------------------------- *//* Function:	 ppcDcbf *//* Description:	 Data Cache block flush *//* Input:	 r3 = effective address *//* Output:	 none. *//*------------------------------------------------------------------------------- */	.globl	ppcDcbfppcDcbf:	dcbf	r0,r3	blr/*------------------------------------------------------------------------------- *//* Function:	 ppcDcbi *//* Description:	 Data Cache block Invalidate *//* Input:	 r3 = effective address *//* Output:	 none. *//*------------------------------------------------------------------------------- */	.globl	ppcDcbippcDcbi:	dcbi	r0,r3	blr/*------------------------------------------------------------------------------- *//* Function:	 ppcSync *//* Description:	 Processor Synchronize *//* Input:	 none. *//* Output:	 none. *//*------------------------------------------------------------------------------- */	.globl	ppcSyncppcSync:	sync	blr/*------------------------------------------------------------------------------*//* * void relocate_code (addr_sp, gd, addr_moni) * * This "function" does not return, instead it continues in RAM * after relocating the monitor code. * * r3 = dest * r4 = src * r5 = length in bytes * r6 = cachelinesize */	.globl	relocate_coderelocate_code:	mr	r1,  r3		/* Set new stack pointer		*/	mr	r9,  r4		/* Save copy of Init Data pointer	*/	mr	r10, r5		/* Save copy of Destination Address	*/	mr	r3,  r5				/* Destination Address	*/	lis	r4, CFG_MONITOR_BASE@h		/* Source      Address	*/	ori	r4, r4, CFG_MONITOR_BASE@l	lwz	r5, GOT(__init_end)	sub	r5, r5, r4	li	r6, CFG_CACHELINE_SIZE		/* Cache Line Size	*/	/*	 * Fix GOT pointer:	 *	 * New GOT-PTR = (old GOT-PTR - CFG_MONITOR_BASE) + Destination Address	 *	 * Offset:	 */	sub	r15, r10, r4	/* First our own GOT */	add	r14, r14, r15	/* the the one used by the C code */	add	r30, r30, r15	/*	 * Now relocate code	 */	cmplw	cr1,r3,r4	addi	r0,r5,3	srwi.	r0,r0,2	beq	cr1,4f		/* In place copy is not necessary	*/	beq	7f		/* Protect against 0 count		*/	mtctr	r0	bge	cr1,2f	la	r8,-4(r4)	la	r7,-4(r3)1:	lwzu	r0,4(r8)	stwu	r0,4(r7)	bdnz	1b

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -