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

📄 meminit.s

📁 microwindows移植到S3C44B0的源码
💻 S
字号:
/*  * Define BUSWIDTH to usually be real buswidth X 2 (i.e assuming  * 2-way interleaving).  This is so that the test pattern and * inverted pattern are written to the same bank of memory, which * prevents us reading back data sitting in the dram buffers and  * getting a false match. */#ifndef BUSWIDTH# if #cpu(r3000) || #cpu(r4300) || #cpu(r4650)#  define BUSWIDTH	8		/* 32 bit memory, bank interleaved */# elif #cpu(r4000)#  define BUSWIDTH	16		/* 64 bit memory, bank interleaved */# endif#endif#ifndef RAM_BASE#define RAM_BASE	KSEG1_BASE#endif			#ifndef MEMSTART#define MEMSTART	0x0		/* start of physical memory */#endif		#ifndef MEMINCR# define MEMINCR	0x10000		/* work up in 64Kb increments */#endifSLEAF(size_mem)	mfc0	t8,C0_STATUS#if #cpu(r4000)	/* disable cache and memory parity checking */	or	t0,t8,SR_DE	mtc0	t0,C0_STATUS#endif	li	t0,RAM_BASE+MEMSTART	# start at bottom of phys mem	move	t1,t0			# remember start address	li	t2,0xaa55aa55		# pattern 	not	t3,t2			# ~pattern	move	t7,k0	la	t4,.fail		# bus error exception catcher	addu	k0,t4,s8		# RELOC 		/* fill first 64Kb with zero (for cache init) */	move	t4,t0	li	t5,0x100001:	sw	zero,0(t4)	sw	zero,4(t4)	sw	zero,8(t4)	sw	zero,12(t4)	subu	t5,16	addu	t4,16	bnez	t5,1b.loop:        addu    t0,MEMINCR			move	t4,t0	/* store pattern in bank 0, line 0 */	sw	t2,0(t4)	addu	t4,4#if BUSWIDTH > 4	/* fill remainder of line with zeros */	li	t5,BUSWIDTH-41:	sw	zero,0(t4)	subu	t5,4	addu	t4,4	bnez	t5,1b#endif	/* store inverse pattern in bank 0, line 1 */	sw	t3,0(t4)	addu	t4,4#if BUSWIDTH > 4	/* fill remainder of line with zeros */	li	t5,BUSWIDTH-41:	sw	zero,0(t4)	subu	t5,4	addu	t4,4	bnez	t5,1b#endif	/* defeat write buffering */#if #cpu(r4000)	sync#else	lw	zero,-4(t4)#endif	lw	t4,0(t0)		# read first word of line	lw	t5,0(t1)		# read start of memory (should be zero)	bne	t4,t2,.fail		# this line wrong?        beq     t5,zero,.loop		# start of mem overwritten?.fail:	move	k0,t7			# clear exception catcher	/* restore Status register */	mtc0	t8,C0_STATUS	/* return top of memory offset (normally == size) */	subu 	v0,t0,RAM_BASE	j	raEND(size_mem)/* * We must often initialise memory so that it has good parity/ecc,  * and this must be done before the caches are used. *//*	clear_mem (size)	  - clear memory from RAM_BASE+MEMSTART to RAM_BASE+MEMSTART+size	clear_mem_range (size, start)  	  - clear memory from start to start+size*/SLEAF(clear_mem)	li	a1,RAM_BASE+MEMSTART	# start at bottom of phys memclear_mem_range:		beqz	a0,9f	addu	a0,a1			# end of memory 		/* XXX should run cached, but caches may not be initialised yet */	.set noreorder	#if __mips >= 31:	sd	zero,0(a1)	sd	zero,8(a1)	sd	zero,16(a1)	sd	zero,24(a1)	sd	zero,32(a1)	sd	zero,40(a1)	sd	zero,48(a1)	addu	a1,64	bne	a1,a0,1b	sd	zero,-8(a1)		# BDSLOT#else	1:	sw	zero,0(a1)	sw	zero,4(a1)	sw	zero,8(a1)	sw	zero,12(a1)	sw	zero,16(a1)	sw	zero,20(a1)	sw	zero,24(a1)	sw	zero,28(a1)	sw	zero,32(a1)	sw	zero,36(a1)	sw	zero,40(a1)	sw	zero,44(a1)	sw	zero,48(a1)	sw	zero,52(a1)	sw	zero,56(a1)	addu	a1,64	bne	a1,a0,1b	sw	zero,-4(a1)		# BDSLOT#endif		.set	reorder9:	j	raEND(clear_mem)SLEAF(init_tlb)	/* initialise tlb */	mtc0	zero,C0_TLBLO0		/* tlblo0 = invalid */	mtc0	zero,C0_TLBLO1		/* tlblo1 = invalid */        mtc0	zero,C0_PGMASK	li	t8,K1BASE		/* tlbhi  = impossible vpn */	li	t9,(NTLBENTRIES-1)	/* index */		.set noreorder	nop1:	mtc0	t8,C0_TLBHI	mtc0	t9,C0_INX	addu	t8,0x2000		/* inc vpn */	tlbwi	bnez	t9,1b	subu	t9,1			# BDSLOT	.set reorder	j	raEND(init_tlb)

⌨️ 快捷键说明

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