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

📄 diag_l2cache.s

📁 一个很好的嵌入式linux平台下的bootloader
💻 S
📖 第 1 页 / 共 5 页
字号:
        nop#endif#ifdef RUN_FROM_K0	li	t0, LOOP_COUNT1:	addi	t0, t0, -1	bne	t0, zero, 1b        nop#endiftest_fail:	addi	t0, zero, 1	sll	t0, t0, k0	dli	t1, PHYS_TO_XKPHYS_UNC(MAC2_HASH0) 	ld	t2, 0(t1)	or 	t0, t0, t2	sd 	t0, 0(t1)test_success:        addi	k0, k0, 1	slt	t0, k0, 4	bne	t0, zero, next_quarter 	    DMFC0	(t2,C0_SR)    li	t0, SR_KX    not t0, t0    and	t1,t2,t0    DMTC0	(t1,C0_SR)/* * Disable the bad quadrant(s) of the cache */	li	t1,PHYS_TO_K1(MAC2_HASH0)	ld	t1,0(t1)	la	t2,disab_table	sll	t1,2			/* make a word offset */	add	t2,t2,t1		/* into the table */	lw	t0,(t2)			/* this is the disable mask */	blt	t0,zero,diag_fail	/* go if total failure */	 nop	li	t1,PHYS_TO_K1(A_L2_CACHE_DISABLE)	or	t1,t1,t0		/* OR in appropriate disable bits */#ifdef _SB1250_PASS2_	sd	t0,0(t1)		/* disable the cache */#else	bne	t0,zero,diag_fail	/* on pass1, any failure is bad */	 nop#endif        MFC0s  (t2,C0_Debug,2)		/* turn off things we defeatured */#ifdef _DEFEATURE_ECC_		and      t1, t2, ~0x0004#else	and      t1, t2, ~0x3004#endif	        MTC0s  (t1,C0_Debug,2)                                    #ifdef USE_LEDS	dli	t8, (('D'<<24)|('O'<<16)|('N'<<8)|'E')	SET_LEDS(t8, t6, t7)#endif	move 	ra, fp 	j	        ra	 nop        diag_fail:	li	t1,PHYS_TO_K1(MAC2_HASH0)	ld	t1,0(t1)	add	t1,t1,'0'	ble	t1,'9',1f	 nop	add	t1,t1,('A'-('9'+1))1:		dli	t8, (('L'<<24)|('2'<<16)|(' '<<8)|0)	or	t8,t8,t1#ifdef USE_LEDS	SET_LEDS(t8, t6, t7)#endif1:	b	     1bEND(diag_main)			#ifdef TEST_ALL_LINES#define L2_LINES_PER_BLOCK 256	#else#define L2_LINES_PER_BLOCK LINES_TO_TEST	#endif#define R_WRBC_RBLK	s1#define R_WRBC_LINE	s2#define R_WRBC_NEXT_WAY s3	#define R_WRBC_RADDR	t5#define R_WRBC_SCRATCH0	t6#define R_WRBC_SCRATCH1	t7#define R_WRBC_SCRATCH2	s6#define R_WRBC_SCRATCH3	s7#define R_PASS_FAIL	t4	/******************************************************** *  l2test_wr_uac_allblocks				* *	Write all blocks of the L2 using uncached	* *	accelerated writes in mgmt mode.		* *	This also marks all blocks as valid and dirty.	* *							* ********************************************************/	#define R_BG_PAT0_0       a0			#define R_BG_PAT0_1       a1			#define R_BG_PAT0_2       a2			#define R_BG_PAT0_3       a3			 							#define R_BG_PAT1_0       t0			#define R_BG_PAT1_1       t1			/*#define R_BG_PAT1_2       t2			#define R_BG_PAT1_3       t3			*/#define R_INV_0	          t2			#define R_INV_1           t3			#define R_PATTERN_IND   s0#define R_BG_LINE       s2			#define R_BG_NEXT_WAY   s3			#define R_BG_BLOCK      s1		#define R_BG_WADDR      t5			#define R_BG_RADDR      t5			#define R_BG_SCRATCH0   t6			#define R_BG_SCRATCH1   t7			#define R_BG_SCRATCH2   t8			#define R_BG_SCRATCH3   t9			#define R_BG_SCRATCH4   s6			#define R_BG_SCRATCH5   s7			#define R_ERR_TABLE_0	v0#define R_ERR_TABLE_1	v1#define R_ERR_TABLE_2	s4#define R_ERR_TABLE_3	s5#define DATA_PATTERN0_0 0#define DATA_PATTERN0_1 0#define DATA_PATTERN0_2 0#define DATA_PATTERN0_3 0#define PATTERN0_INV0   0#define PATTERN0_INV1   0#define DATA_PATTERN1_0 0xffffffffffffffff#define DATA_PATTERN1_1 0xffffffffffffffff#define DATA_PATTERN1_2 0xffffffffffffffff#define DATA_PATTERN1_3 0xffffffffffffffff#define PATTERN1_INV0   0xffffffffffffffff#define PATTERN1_INV1   0xffffffffffffffff#define DATA_PATTERN2_0 0xffffffffffffffff#define DATA_PATTERN2_1 0xffffffffffffffff#define DATA_PATTERN2_2 0xffffffffffffffff#define DATA_PATTERN2_3 0xffffffffffffffff#define PATTERN2_INV0   0 #define PATTERN2_INV1   0xffffffffffffffff#define DATA_PATTERN3_0 0x5555555555555555#define DATA_PATTERN3_1 0x5555555555555555#define DATA_PATTERN3_2 0x5555555555555555#define DATA_PATTERN3_3 0x5555555555555555#define PATTERN3_INV0   0 #define PATTERN3_INV1   0#define DATA_PATTERN4_0 0x3333333333333333#define DATA_PATTERN4_1 0x3333333333333333#define DATA_PATTERN4_2 0x3333333333333333#define DATA_PATTERN4_3 0x3333333333333333#define PATTERN4_INV0   0 #define PATTERN4_INV1   0#define DATA_PATTERN5_0 0x0f0f0f0f0f0f0f0f#define DATA_PATTERN5_1 0x0f0f0f0f0f0f0f0f#define DATA_PATTERN5_2 0x0f0f0f0f0f0f0f0f#define DATA_PATTERN5_3 0x0f0f0f0f0f0f0f0f#define PATTERN5_INV0   0 #define PATTERN5_INV1   0#define DATA_PATTERN6_0 0x00ff00ff00ff00ff#define DATA_PATTERN6_1 0x00ff00ff00ff00ff#define DATA_PATTERN6_2 0x00ff00ff00ff00ff#define DATA_PATTERN6_3 0x00ff00ff00ff00ff#define PATTERN6_INV0   0 #define PATTERN6_INV1   0#define DATA_PATTERN7_0 0x0000ffff0000ffff#define DATA_PATTERN7_1 0x0000ffff0000ffff#define DATA_PATTERN7_2 0x0000ffff0000ffff#define DATA_PATTERN7_3 0x0000ffff0000ffff#define PATTERN7_INV0   0 #define PATTERN7_INV1   0#define DATA_PATTERN8_0 0x00000000ffffffff#define DATA_PATTERN8_1 0x00000000ffffffff#define DATA_PATTERN8_2 0x00000000ffffffff#define DATA_PATTERN8_3 0x00000000ffffffff#define PATTERN8_INV0   0 #define PATTERN8_INV1   0#define DATA_PATTERN9_0 0xffffffffffffffff#define DATA_PATTERN9_1 0x0000000000000000#define DATA_PATTERN9_2 0xffffffffffffffff#define DATA_PATTERN9_3 0x0000000000000000#define PATTERN9_INV0   0 #define PATTERN9_INV1   0#define DATA_PATTERNa_0 0xffffffffffffffff#define DATA_PATTERNa_1 0xffffffffffffffff#define DATA_PATTERNa_2 0x0000000000000000#define DATA_PATTERNa_3 0x0000000000000000#define PATTERNa_INV0   0 #define PATTERNa_INV1   0#undef MAX_PATTERN		/* avoid redef'n of diag_l1cache.h version */#define MAX_PATTERN     11#define BG_WRITE_PAT(addr,pattern0,pattern1,pattern2,pattern3,inv0,inv1)		\	li	R_BG_SCRATCH0, 2;	\1:	sd	pattern0, 0(addr);	\	sd	pattern1, 8(addr);	\	sd      pattern2, 16(addr);	\	sd	pattern3, 24(addr); \	cache	L1CACHEOP(L1C_D,L1C_OP_HIT_WB_INVAL),0(addr); \	xor	pattern0, pattern0, inv0; \	xor	pattern1, pattern1, inv0; \	xor	pattern2, pattern2, inv0; \	xor	pattern3, pattern3, inv0; \	daddu 	addr, addr, R_BG_NEXT_WAY; \	sd	pattern0, 0(addr);	\	sd	pattern1, 8(addr);	\	sd      pattern2, 16(addr);	\	sd	pattern3, 24(addr); \	cache	L1CACHEOP(L1C_D,L1C_OP_HIT_WB_INVAL),0(addr); \	xor	pattern0, pattern0, inv1; \	xor	pattern1, pattern1, inv1; \	xor	pattern2, pattern2, inv1; \	xor	pattern3, pattern3, inv1; \	addi 	R_BG_SCRATCH0, R_BG_SCRATCH0, -1; \	bne	R_BG_SCRATCH0, zero, 1b;   \	daddu 	addr, addr, R_BG_NEXT_WAY; \	li      R_BG_SCRATCH0, -4*2*65536; \        dadd	addr, addr, R_BG_SCRATCH0	/* next line */#define BG_INVAL_L1(addr)		\	move 	R_BG_SCRATCH0, addr;	\	cache	L1CACHEOP(L1C_D,L1C_OP_HITINVAL),0(R_BG_SCRATCH0); \	daddu 	R_BG_SCRATCH0, R_BG_SCRATCH0, R_BG_NEXT_WAY; \	cache	L1CACHEOP(L1C_D,L1C_OP_HITINVAL),0(R_BG_SCRATCH0); \	daddu 	R_BG_SCRATCH0, R_BG_SCRATCH0, R_BG_NEXT_WAY; \	cache	L1CACHEOP(L1C_D,L1C_OP_HITINVAL),0(R_BG_SCRATCH0); \	daddu 	R_BG_SCRATCH0, R_BG_SCRATCH0, R_BG_NEXT_WAY; \	cache	L1CACHEOP(L1C_D,L1C_OP_HITINVAL),0(R_BG_SCRATCH0)#define BG_CHECK_PAT(addr,pattern0,pattern1,pattern2,pattern3,inv0,inv1)		\	li	R_BG_SCRATCH4, 2;	\	dli	R_BG_SCRATCH5, L2M_READ_RAW_ACCESS; \	or 	addr, addr, R_BG_SCRATCH5; \1:	ld	R_BG_SCRATCH0, 0(addr);	\	ld	R_BG_SCRATCH1, 8(addr);	\        sne     R_BG_SCRATCH0, R_BG_SCRATCH0, pattern0;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH0; \	ld	R_BG_SCRATCH2, 16(addr);\        sne     R_BG_SCRATCH1, R_BG_SCRATCH1, pattern1;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH1; \	ld	R_BG_SCRATCH3, 24(addr);\        sne     R_BG_SCRATCH2, R_BG_SCRATCH2, pattern2;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH2; \        sne     R_BG_SCRATCH3, R_BG_SCRATCH3, pattern3;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH3; \	xor	pattern0, pattern0, inv0; \	xor	pattern1, pattern1, inv0; \	xor	pattern2, pattern2, inv0; \	xor	pattern3, pattern3, inv0; \	daddu 	addr, addr, R_BG_NEXT_WAY; \	ld	R_BG_SCRATCH0, 0(addr);	\	ld	R_BG_SCRATCH1, 8(addr);	\        sne     R_BG_SCRATCH0, R_BG_SCRATCH0, pattern0;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH0; \	ld	R_BG_SCRATCH2, 16(addr);\        sne     R_BG_SCRATCH1, R_BG_SCRATCH1, pattern1;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH1; \	ld	R_BG_SCRATCH3, 24(addr);\        sne     R_BG_SCRATCH2, R_BG_SCRATCH2, pattern2;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH2; \        sne     R_BG_SCRATCH3, R_BG_SCRATCH3, pattern3;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH3; \	xor	pattern0, pattern0, inv1; \	xor	pattern1, pattern1, inv1; \	xor	pattern2, pattern2, inv1; \	xor	pattern3, pattern3, inv1; \	addi 	R_BG_SCRATCH4, R_BG_SCRATCH4, -1; \	bne	R_BG_SCRATCH4, zero, 1b;   \	daddu 	addr, addr, R_BG_NEXT_WAY; \	li      R_BG_SCRATCH0, -4*2*65536; \        dadd	addr, addr, R_BG_SCRATCH0;	\	nor	R_BG_SCRATCH5, R_BG_SCRATCH5, $0; \	and 	addr, addr, R_BG_SCRATCH5#define BG_CHECK_PAT1(addr,pattern0,pattern1,pattern2,pattern3,inv0,inv1)		\	li	R_BG_SCRATCH4, 2;	\	dli	R_BG_SCRATCH5, 0x00200000; \	or 	addr, addr, R_BG_SCRATCH5; \1:	ld	R_BG_SCRATCH0, 0(addr);	\	cache	L1CACHEOP(L1C_D,L1C_OP_HITINVAL),0(addr); \	ld	R_BG_SCRATCH0, 0(addr);	\	ld	R_BG_SCRATCH1, 8(addr);	\        sne     R_BG_SCRATCH0, R_BG_SCRATCH0, pattern0;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH0; \	ld	R_BG_SCRATCH2, 16(addr);\        sne     R_BG_SCRATCH1, R_BG_SCRATCH1, pattern1;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH1; \	ld	R_BG_SCRATCH3, 24(addr);\        sne     R_BG_SCRATCH2, R_BG_SCRATCH2, pattern2;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH2; \        sne     R_BG_SCRATCH3, R_BG_SCRATCH3, pattern3;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH3; \	xor	pattern0, pattern0, inv0; \	xor	pattern1, pattern1, inv0; \	xor	pattern2, pattern2, inv0; \	xor	pattern3, pattern3, inv0; \	daddu 	addr, addr, R_BG_NEXT_WAY; \	ld	R_BG_SCRATCH0, 0(addr);	\	cache	L1CACHEOP(L1C_D,L1C_OP_HITINVAL),0(addr); \	ld	R_BG_SCRATCH0, 0(addr);	\	ld	R_BG_SCRATCH1, 8(addr);	\        sne     R_BG_SCRATCH0, R_BG_SCRATCH0, pattern0;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH0; \	ld	R_BG_SCRATCH2, 16(addr);\        sne     R_BG_SCRATCH1, R_BG_SCRATCH1, pattern1;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH1; \	ld	R_BG_SCRATCH3, 24(addr);\        sne     R_BG_SCRATCH2, R_BG_SCRATCH2, pattern2;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH2; \        sne     R_BG_SCRATCH3, R_BG_SCRATCH3, pattern3;     \        or      R_PASS_FAIL, R_PASS_FAIL, R_BG_SCRATCH3; \	xor	pattern0, pattern0, inv1; \	xor	pattern1, pattern1, inv1; \	xor	pattern2, pattern2, inv1; \	xor	pattern3, pattern3, inv1; \	addi 	R_BG_SCRATCH4, R_BG_SCRATCH4, -1; \	bne	R_BG_SCRATCH4, zero, 1b;   \	daddu 	addr, addr, R_BG_NEXT_WAY; \	li      R_BG_SCRATCH0, -4*2*65536; \        dadd	addr, addr, R_BG_SCRATCH0;	\	nor	R_BG_SCRATCH5, R_BG_SCRATCH5, $0; \	and 	addr, addr, R_BG_SCRATCH5#define INV_PAT(pattern0, pattern1, pattern2, pattern3) \	not     pattern0, pattern0; \	not     pattern1, pattern1; \	not     pattern2, pattern2; \	not     pattern3, pattern3#define SET_ERR_TABLE(pass_fail, line)	\	li	R_BG_SCRATCH0, 0x3f;	\	and 	R_BG_SCRATCH0, R_BG_SCRATCH0, line;	\	dsll	R_BG_SCRATCH0, pass_fail, R_BG_SCRATCH0;	\	dsrl	R_BG_SCRATCH1, line, 6;	\	bne	R_BG_SCRATCH1, zero, 1f;	\	li	R_BG_SCRATCH2, 1;	\	or  	R_ERR_TABLE_0, R_ERR_TABLE_0, R_BG_SCRATCH0;	\	b 	4f;	\	nop;	\1:	bne	R_BG_SCRATCH1, R_BG_SCRATCH2, 2f;	\	li	R_BG_SCRATCH2, 2;	\	or  	R_ERR_TABLE_1, R_ERR_TABLE_1, R_BG_SCRATCH0;	\	b 	4f;	\	nop;	\2:	bne	R_BG_SCRATCH1, R_BG_SCRATCH2, 3f;	\	li	R_BG_SCRATCH2, 3;	\	or  	R_ERR_TABLE_2, R_ERR_TABLE_2, R_BG_SCRATCH0;	\	b 	4f;	\	nop;	\3:	or  	R_ERR_TABLE_3, R_ERR_TABLE_3, R_BG_SCRATCH0;	\4:	#ifdef DATA_TEST	l2dtest_bg_rw_uac:	/*li	R_BG_BLOCK, START_BLK */        sll     R_BG_BLOCK, k0, 2	li	R_BG_NEXT_WAY,0x20000	move    R_ERR_TABLE_0, $0	move    R_ERR_TABLE_1, $0	move    R_ERR_TABLE_2, $0	move    R_ERR_TABLE_3, $0bg_next_block:	/* form address */#ifdef USE_LEDS	addi	R_BG_SCRATCH2, R_BG_BLOCK, '0'	or 	R_BG_SCRATCH2, R_BG_SCRATCH2, ('D' << 8)	SET_LEDS_HI(R_BG_SCRATCH2, R_BG_SCRATCH0, R_BG_SCRATCH1)#endif	move	R_PATTERN_IND, $0bg_next_patt:#ifdef USE_LEDS	addi	R_BG_SCRATCH2, R_PATTERN_IND, '0'	or 	R_BG_SCRATCH2, R_BG_SCRATCH2, ('P' << 8)	SET_LEDS_LO(R_BG_SCRATCH2, R_BG_SCRATCH0, R_BG_SCRATCH1)#endif        bne     R_PATTERN_IND, $0, pattern_ne_0        dli     R_BG_PAT0_0, DATA_PATTERN0_0     # data_pattern = pattern[0]        dli     R_BG_PAT0_1, DATA_PATTERN0_1        dli     R_BG_PAT0_2, DATA_PATTERN0_2        dli     R_BG_PAT0_3, DATA_PATTERN0_3        dli     R_INV_0, PATTERN0_INV0        dli     R_INV_1, PATTERN0_INV1        j       test_0        noppattern_ne_0:	li      R_BG_SCRATCH0, 1

⌨️ 快捷键说明

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