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

📄 starto.s.a1

📁 国产CPU-龙芯(loongson)BIOS源代码
💻 A1
📖 第 1 页 / 共 3 页
字号:
cache_detect_2way:	mfc0	t4, CP0_CONFIG	andi	t5, t4, 0x0e00	srl	t5, t5, 9	andi	t6, t4, 0x01c0	srl	t6, t6, 6	addiu	t6, t6, 11	addiu	t5, t5, 11	addiu	t4, $0, 1	sllv	t6, t4, t6#ifdef CONFIG_CACHE_64K_4WAY	sll	t6,2#endif	sllv	t5, t4, t5#ifdef CONFIG_CACHE_64K_4WAY	sll	t5,2#endif	addiu	t7, $0, 2####part 3####	lui	a0, 0x8000	addu	a1, $0, t5	addu	a2, $0, t6cache_init_d2way:#a0=0x80000000, a1=icache_size, a2=dcache_size#a3, v0 and v1 used as local registers	mtc0	$0, CP0_TAGHI	addu	v0, $0, a0	addu	v1, a0, a21:	slt	a3, v0, v1	beq	a3, $0, 1f	nop	mtc0	$0, CP0_TAGLO	cache	Index_Store_Tag_D, 0x0(v0)	mtc0	$0, CP0_TAGLO	cache	Index_Store_Tag_D, 0x1(v0)/*#ifdef CONFIG_CACHE_64K_4WAY*/	mtc0	$0, CP0_TAGLO	cache   Index_Store_Tag_D, 0x2(v0)	mtc0	$0, CP0_TAGLO	cache   Index_Store_Tag_D, 0x3(v0)/*#endif*/	beq	$0, $0, 1b	addiu	v0, v0, 0x201:cache_flush_i2way:	addu	v0, $0, a0	addu	v1, a0, a11:	slt	a3, v0, v1	beq	a3, $0, 1f	nop	cache	Index_Invalidate_I, 0x0(v0)#	cache	Index_Invalidate_I, 0x1(v0)/*#ifdef  CONFIG_CACHE_64K_4WAY*/#	cache	Index_Invalidate_I, 0x2(v0)#	cache	Index_Invalidate_I, 0x3(v0)/*#endif*/	beq	$0, $0, 1b	addiu	v0, v0, 0x201:cache_flush_d2way:	addu	v0, $0, a0	addu	v1, a0, a21:	slt	a3, v0, v1	beq	a3, $0, 1f	nop	cache	Index_Writeback_Inv_D, 0x0(v0)	cache	Index_Writeback_Inv_D, 0x1(v0)/*#ifdef CONFIG_CACHE_64K_4WAY*/	cache	Index_Writeback_Inv_D, 0x2(v0)	cache	Index_Writeback_Inv_D, 0x3(v0)/*#endif*/	beq	$0, $0, 1b	addiu	v0, v0, 0x201:cache_init_finish:	nop	jr	ra	nopcache_init_panic:	TTYDBG("cache init panic\r\n");1:	b	1b	nop	.end	godson2_cache_initLEAF(invalidate_external_cache_page)	.set push	.set mips3	li	t0, 0x90000010	dsll32	t0, t0, 0	dsubu	t0, t0, 8	sd	a0, 0(t0)	jr	ra	nop		.set mips0	.set pop	.end invalidate_external_cache_page	LEAF(test_icache_1)#define TEST_ILINE \.align 5 ; \1: lw v0, (a0) ; \.align 0 ; \addiu v0, 1 ; \sw v0, (a0) ; \b 1f ; \nop.set noreorder//.set mips3.align 5b 1fsw zero, (a0)TEST_ILINETEST_ILINETEST_ILINETEST_ILINETEST_ILINETEST_ILINETEST_ILINETEST_ILINE.align 51:jr ranopEND(test_icache_1)LEAF(test_icache_2)#undef  TEST_ILINE#define TEST_ILINE \.align 5 ; \1: move v0, a0 ; \.align 0 ; \addiu v0, 1 ; \move a0, v0 ; \b 1f ; \nop.set noreorder//.set mips3.align 5b 1fmove zero, a0TEST_ILINETEST_ILINETEST_ILINETEST_ILINETEST_ILINETEST_ILINETEST_ILINETEST_ILINE.align 51:jr ranopEND(test_icache_2)LEAF(test_icache_3)#undef  TEST_ILINE#define TEST_ILINE \.align 5 ; \nop ;\nop ;\nop ;\nop ;\nop .set noreorder//.set mips3.align 5TEST_ILINETEST_ILINETEST_ILINETEST_ILINETEST_ILINETEST_ILINETEST_ILINETEST_ILINE.align 51:jr ranopEND(test_icache_3)LEAF(test_ld)lui a0,0xa040ori a0,a0,0li   t0,0xaa55aa55dsll t0,t0,32ori  t0,t0,0xaa55sd  t0,0(a0)ld  t1,0(a0)beq t0,t1,1fnopTTYDBG("Write=");dsrl  a0,t0,32bal   hexserialnopmove  a0,t0bal   hexserialnopTTYDBG("Load back=");dsrl  a0,t1,32bal   hexserialnopmove  a0,t1bal   hexserialnopTTYDBG("LD/SD test failure!!")1: // TTYDBG("OK"); j ra nopEND(test_ld)LEAF(fill_icache_1).align 5/*	addiu a0,a0,1	addiu a0,a0,1        lui v0,0x8020        sw a0,0(v0)	lw a0,0(v0)        sw a0,36(v0)*//*	lui  v0,0xbd00	ori  v0,v0,0x20	lbu  v1,23(v0)	andi v1,v1,0x20	beqz v1,1f	nop*//*	.set noreorder	move t8,ra	bal tgt_putchar	li  a0,'='	bal tgt_putchar	li  a0,'@'*/	move t9,ra	li  a0,'@'	jal tgt_putchar	nop	move ra,t9	jr ra	nopEND(fill_icache_1)LEAF(godson2_cache_flush)        li    a0,0x80000000        addu  a1,a0,163841:        cache  1,0(a0)        cache  1,1(a0)        cache  0,(a0)        add    a0,a0,32        beq    a0,a1,1b        nop        TTYDBG("cache flushed");END(godson2_cache_flush)	.rdata;.align 2argv_array: 	.word   0	.word   0	.word   0.align  2env_array:	.word   0	.word   0	.word   0.align  2argv0:	.asciz "g"	.word   0.align  2argv1:        .asciz "root=/dev/hda1" 	.word   0.align  2env0:        .asciz "cpuclock=3000000" 	.word   0.align  2env1:        .asciz "gtbase=b4000000" 	.word   0.align  2arg_end:	.text		TTYDBG("Copy linux kernel to execute location...\r\n")#if 0	li     a0, 0 	bnezl  a0,1f	sw     zero,0(a0)1:	#endif#if 0LEAF(load_linux)	move   s6,a0 // entry	move   s7,a1 // flash addr        mfc0    a0,COP_0_CONFIG        and    a0,a0,0xfffffff8        or     a0,a0,0x2	mtc0   a0,COP_0_CONFIG        move    s0, zero // we are called from cached space,hexserial need it??        	TTYDBG("Copying linux kernel...\r\n");#if 0	la	a0, 0xa0100000	li	a1, 0xbf100000	la	a2, 0xa0400000#endif	la	a0, 0xa0100000	move	a1, s7	la	a2, 0xa0400000	/* copy text section */	li	t0, 01:	ld	v0, 0(a1)	nop	sd	v0, 0(a0)	addu	a0, 8	and     t6, a0, 0xffff	bnez    t6, 2f	nop	move    t7,a0	li      a0,'.'	bal     tgt_putchar	nop	move    a0,t72:	bne a2, a0, 1b	addu	a1, 8	move s0,zero	TTYDBG("Copy done\r\n");#if 1do_copy_param:	move s0,zero	TTYDBG("Copy params...\r\n")	la	a0, argv_array	addu    a0,0xbfc00000 - 0x80020000	la	a1, argv_array	la      a2, arg_end	addu    a2,0xbfc00000 - 0x800200001:	lw	v0, 0(a0)	nop	sw	v0, 0(a1)	addu	a0, 4	bne     a2, a0, 1b	addu	a1, 4	move s0,zero	TTYDBG("Copy param done\r\n")#endif	li	a0,2		la	a1,argv_array        la      t0,argv0	sw      t0,0(a1);         la      t0,argv1	sw      t0,4(a1); 	sw      zero,8(a1); 	la	a2,env_array        la      t0,env0	sw      t0,0(a2);         la      t0,env1	sw      t0,4(a2); 	sw      zero,8(a2); 	move s0,zero	move s2,a0	move s3,a1	move s4,a2	TTYDBG("jumping\r\n");	move a0,s2	move a1,s3	move a2,s4	//li      t9,0x802b4040	//li      t9,0x8026a040	//jalr    t9	jalr   s6	nopEND(load_linux)#endifLEAF(init_regs)/* all initial registers to zero */	.set push	.set mips3	.set noat	.set noreorder#if 1        mfc0   $1,$12        lui    $2,0x400 /* FR = 1 */         or    $1,$1,$2        mtc0   $1,$12                 dmtc1  $0,$0        dmtc1  $0,$1        dmtc1  $0,$2        dmtc1  $0,$3        dmtc1  $0,$4        dmtc1  $0,$5        dmtc1  $0,$6        dmtc1  $0,$7        dmtc1  $0,$8        dmtc1  $0,$9	c.lt.d $f0,$f0        dmtc1  $0,$10        dmtc1  $0,$11        dmtc1  $0,$12        dmtc1  $0,$13        dmtc1  $0,$14        dmtc1  $0,$15        dmtc1  $0,$16        dmtc1  $0,$17        dmtc1  $0,$18        dmtc1  $0,$19        dmtc1  $0,$20        dmtc1  $0,$21        dmtc1  $0,$22        dmtc1  $0,$23        dmtc1  $0,$24        dmtc1  $0,$25        dmtc1  $0,$26        dmtc1  $0,$27        dmtc1  $0,$28        dmtc1  $0,$29        dmtc1  $0,$30        dmtc1  $0,$31/* fix registers */	daddu  $0,$0,$0	daddu  $1,$0,$0	daddu  $2,$0,$0	daddu  $3,$0,$0	daddu  $4,$0,$0	daddu  $5,$0,$0	daddu  $6,$0,$0	daddu  $7,$0,$0	daddu  $8,$0,$0	daddu  $9,$0,$0	daddu  $10,$0,$0	daddu  $11,$0,$0	daddu  $12,$0,$0	daddu  $13,$0,$0	daddu  $14,$0,$0	daddu  $15,$0,$0	daddu  $16,$0,$0	daddu  $17,$0,$0	daddu  $18,$0,$0	daddu  $19,$0,$0	daddu  $20,$0,$0	daddu  $21,$0,$0	daddu  $22,$0,$0	daddu  $23,$0,$0	daddu  $24,$0,$0	daddu  $25,$0,$0	daddu  $26,$0,$0	daddu  $27,$0,$0	daddu  $28,$0,$0	daddu  $29,$0,$0	daddu  $30,$0,$0	//daddu  $31,$0,$0	mthi   $0	mtlo   $0	mtc0	zero, COP_0_STATUS_REG	mtc0	zero, COP_0_CAUSE_REG	li	t0, SR_BOOT_EXC_VEC	/* Exception to Boostrap Location */	mtc0	t0, COP_0_STATUS_REG	la	sp, stack	la	gp, _gp#endif#if 0	.set noreorder	mfc0    t0, COP_0_PRID	mfc0    v0, COP_0_STATUS_REG 	mtc0    zero, COP_0_WATCH_LO	mtc0    zero, COP_0_WATCH_HI	.set reorder	and             v0, SR_SOFT_RESET	or              v0, SR_BOOT_EXC_VEC	.set noreorder	mtc0    v0, COP_0_STATUS_REG	mtc0    zero, COP_0_CAUSE_REG#endif	jr	ra	nop	.set popEND(init_regs)LEAF(test_regs)	addiu   sp,sp,-80	sd     ra,0(sp) 	mfc0	t0, $16	sd	t0, 8(sp)	ori	t0, t0, 3	mtc0	t0, $16#	.align	5		li     t7,1	li     t0,-1	li     t1,01:	bal	test_reg_2	dsrl32	a0, t7, 0	lui	t6, 0xa141	sd	t7, 0x0(t6)	sd	t0, 0x8(t6)#	bne	t7, $0, 1b	bne	t7, t1, 1b#	daddiu	t7, t7, -1	daddu	t7, t7, t0	ld	t0, 0x8(sp)	mtc0	t0, $16		ld   ra,0(sp)	jr   ra	addiu	sp, sp, 80#####test_reg_2:	move	a2, ra	move	a1, a0	li	a3, 2 #711:	rol	a0, a1, 4	move	a1, a0	and	a0, 0xf	la	v0, hexchar	addu	v0, a0	bnez	a3, 11b	addu	a3, -1	li	a0, 0xa	j	a2	nop#####END(test_regs)LEAF(nullfunction)	jr ra	nopEND(nullfunction)

⌨️ 快捷键说明

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