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

📄 cplbhdlr.s

📁 u-boot-1.1.6 源码包
💻 S
字号:
/* Copyright (C) 2003 Analog Devices, Inc. All Rights Reserved. * * This file is subject to the terms and conditions of the GNU General Public * License. * * Blackfin BF533/2.6 support : LG Soft India *//* Include an exception handler to invoke the CPLB manager */#include <asm-blackfin/linkage.h>#include <asm/cplb.h>#include <asm/entry.h>.text.globl _cplb_hdr;.type _cplb_hdr, STT_FUNC;.extern _cplb_mgr;.type _cplb_mgr, STT_FUNC;.extern __unknown_exception_occurred;.type __unknown_exception_occurred, STT_FUNC;.extern __cplb_miss_all_locked;.type __cplb_miss_all_locked, STT_FUNC;.extern __cplb_miss_without_replacement;.type __cplb_miss_without_replacement, STT_FUNC;.extern __cplb_protection_violation;.type __cplb_protection_violation, STT_FUNC;.extern panic_pv;.align 2;ENTRY(_cplb_hdr)	SSYNC;	[--SP] = ( R7:0, P5:0 );	[--SP] = ASTAT;	[--SP] = SEQSTAT;	[--SP] = I0;	[--SP] = I1;	[--SP] = I2;	[--SP] = I3;	[--SP] = LT0;	[--SP] = LB0;	[--SP] = LC0;	[--SP] = LT1;	[--SP] = LB1;	[--SP] = LC1;	R2 = SEQSTAT;	/*Mask the contents of SEQSTAT and leave only EXCAUSE in R2*/	R2 <<= 26;	R2 >>= 26;	R1 = 0x23; /* Data access CPLB protection violation */	CC = R2 == R1;	IF !CC JUMP not_data_write;	R0 = 2;		/* is a write to data space*/	JUMP is_icplb_miss;not_data_write:	R1 = 0x2C; /* CPLB miss on an instruction fetch */	CC = R2 == R1;	R0 = 0;		/* is_data_miss == False*/	IF CC JUMP is_icplb_miss;	R1 = 0x26;	CC = R2 == R1;	IF !CC JUMP unknown;	R0 = 1;		/* is_data_miss == True*/is_icplb_miss:#if ( defined (CONFIG_BLKFIN_CACHE) || defined (CONFIG_BLKFIN_DCACHE))#if ( defined (CONFIG_BLKFIN_CACHE) && !defined (CONFIG_BLKFIN_DCACHE))	R1 = CPLB_ENABLE_ICACHE;#endif#if ( !defined (CONFIG_BLKFIN_CACHE) && defined (CONFIG_BLKFIN_DCACHE))	R1 = CPLB_ENABLE_DCACHE;#endif#if ( defined (CONFIG_BLKFIN_CACHE) && defined (CONFIG_BLKFIN_DCACHE))	R1 = CPLB_ENABLE_DCACHE | CPLB_ENABLE_ICACHE;#endif#else	R1 = 0;#endif	[--SP] = RETS;	CALL _cplb_mgr;	RETS = [SP++];	CC = R0 == 0;	IF !CC JUMP not_replaced;	LC1 = [SP++];	LB1 = [SP++];	LT1 = [SP++];	LC0 = [SP++];	LB0 = [SP++];	LT0 = [SP++];	I3 = [SP++];	I2 = [SP++];	I1 = [SP++];	I0 = [SP++];	SEQSTAT = [SP++];	ASTAT = [SP++];	( R7:0, P5:0 ) = [SP++];	RTS;unknown:	[--SP] = RETS;	CALL __unknown_exception_occurred;	RETS = [SP++];	JUMP unknown;not_replaced:	CC = R0 == CPLB_NO_UNLOCKED;	IF !CC JUMP next_check;	[--SP] = RETS;	CALL __cplb_miss_all_locked;	RETS = [SP++];next_check:	CC = R0 == CPLB_NO_ADDR_MATCH;	IF !CC JUMP next_check2;	[--SP] = RETS;	CALL __cplb_miss_without_replacement;	RETS = [SP++];	JUMP not_replaced;next_check2:	CC = R0 == CPLB_PROT_VIOL;	IF !CC JUMP strange_return_from_cplb_mgr;	[--SP] = RETS;	CALL __cplb_protection_violation;	RETS = [SP++];	JUMP not_replaced;strange_return_from_cplb_mgr:	IDLE;	CSYNC;	JUMP strange_return_from_cplb_mgr;/************************************ * Diagnostic exception handlers */__cplb_miss_all_locked:	sp += -12;	R0 = CPLB_NO_UNLOCKED;	call panic_bfin;	SP += 12;	RTS; __cplb_miss_without_replacement:	sp += -12;	R0 = CPLB_NO_ADDR_MATCH;	call panic_bfin;	SP += 12;	RTS;__cplb_protection_violation:	sp += -12;	R0 = CPLB_PROT_VIOL;	call panic_bfin;	SP += 12;	RTS;__unknown_exception_occurred:	/* This function is invoked by the default exception	 * handler, if it does not recognise the kind of	 * exception that has occurred. In other words, the	 * default handler only handles some of the system's	 * exception types, and it does not expect any others	 * to occur. If your application is going to be using	 * other kinds of exceptions, you must replace the	 * default handler with your own, that handles all the	 * exceptions you will use.	 *	 * Since there's nothing we can do, we just loop here	 * at what we hope is a suitably informative label.	 */	IDLE;do_not_know_what_to_do:	CSYNC;	JUMP __unknown_exception_occurred;	RTS;.__unknown_exception_occurred.end:.global __unknown_exception_occurred;.type __unknown_exception_occurred, STT_FUNC;panic_bfin:	RTS;

⌨️ 快捷键说明

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