mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-27 12:11:41 +01:00 
			
		
		
		
	
		
			
	
	
		
			531 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			531 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /* xdm-regs.h  -  Common register and related definitions for the XDM
 | ||
|  |                   (Xtensa Debug Module) */ | ||
|  | 
 | ||
|  | /* Copyright (c) 2011-2012 Tensilica Inc.
 | ||
|  | 
 | ||
|  |    Permission is hereby granted, free of charge, to any person obtaining | ||
|  |    a copy of this software and associated documentation files (the | ||
|  |    "Software"), to deal in the Software without restriction, including | ||
|  |    without limitation the rights to use, copy, modify, merge, publish, | ||
|  |    distribute, sublicense, and/or sell copies of the Software, and to | ||
|  |    permit persons to whom the Software is furnished to do so, subject to | ||
|  |    the following conditions: | ||
|  | 
 | ||
|  |    The above copyright notice and this permission notice shall be included | ||
|  |    in all copies or substantial portions of the Software. | ||
|  | 
 | ||
|  |    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
|  |    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
|  |    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
|  |    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | ||
|  |    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
|  |    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | ||
|  |    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */ | ||
|  | 
 | ||
|  | 
 | ||
|  | #ifndef _XDM_REGS_H_
 | ||
|  | #define _XDM_REGS_H_
 | ||
|  | 
 | ||
|  | /*  NOTE:  This header file is included by C, assembler, and other sources.
 | ||
|  |     So any C-specific or asm-specific content must be appropriately #ifdef'd.  */ | ||
|  | 
 | ||
|  | 
 | ||
|  | /*
 | ||
|  |  *  XDM registers can be accessed using APB, ERI, or JTAG (via NAR). | ||
|  |  *  Address offsets for APB and ERI are the same, and for JTAG | ||
|  |  *  is different (due to the limited 7-bit NAR addressing). | ||
|  |  * | ||
|  |  *  Here, we first provide the constants as APB / ERI address offsets. | ||
|  |  *  This is necessary for assembler code (which accesses XDM via ERI), | ||
|  |  *  because complex conversion macros between the two address maps | ||
|  |  *  don't work in the assembler. | ||
|  |  *  Conversion macros are used to convert these to/from JTAG (NAR), | ||
|  |  *  addresses, for software using JTAG. | ||
|  |  */ | ||
|  | /* FIXME: maybe provide only MISC+CS registers here, and leave specific
 | ||
|  |    subsystem registers in separate headers? eg. for TRAX, PERF, OCD */ | ||
|  | 
 | ||
|  | /*       XDM_....     		ERI addr  [NAR addr] Description...... */ | ||
|  | 
 | ||
|  | /*  TRAX  */ | ||
|  | #define  XDM_TRAX_ID		0x0000	/*[0x00] ID */
 | ||
|  | #define  XDM_TRAX_CONTROL 	0x0004	/*[0x01] Control */
 | ||
|  | #define  XDM_TRAX_STATUS	0x0008	/*[0x02] Status */
 | ||
|  | #define  XDM_TRAX_DATA		0x000C	/*[0x03] Data */
 | ||
|  | #define  XDM_TRAX_ADDRESS	0x0010	/*[0x04] Address */
 | ||
|  | #define  XDM_TRAX_TRIGGER	0x0014	/*[0x05] Stop PC */
 | ||
|  | #define  XDM_TRAX_MATCH		0x0018	/*[0x06] Stop PC Range */
 | ||
|  | #define  XDM_TRAX_DELAY		0x001C	/*[0x07] Post Stop Trigger Capture Size */
 | ||
|  | #define  XDM_TRAX_STARTADDR	0x0020	/*[0x08] Trace Memory Start */
 | ||
|  | #define  XDM_TRAX_ENDADDR	0x0024	/*[0x09] Trace Memory End */
 | ||
|  | #define  XDM_TRAX_DEBUGPC	0x003C	/*[0x0F] Debug PC */
 | ||
|  | #define  XDM_TRAX_P4CHANGE	0x0040	/*[0x10] X */
 | ||
|  | #define  XDM_TRAX_TIME0		0x0040	/*[0x10] First Time Register */
 | ||
|  | #define  XDM_TRAX_P4REV		0x0044	/*[0x11] X */
 | ||
|  | #define  XDM_TRAX_TIME1		0x0044	/*[0x11] Second Time Register */
 | ||
|  | #define  XDM_TRAX_P4DATE	0x0048	/*[0x12] X */
 | ||
|  | #define  XDM_TRAX_INTTIME_MAX	0x0048 /*[0x12] maximal Value of Timestamp IntTime */
 | ||
|  | #define  XDM_TRAX_P4TIME	0x004C	/*[0x13] X */
 | ||
|  | #define  XDM_TRAX_PDSTATUS	0x0050	/*[0x14] Sample of PDebugStatus */
 | ||
|  | #define  XDM_TRAX_PDDATA	0x0054	/*[0x15] Sample of PDebugData */
 | ||
|  | #define  XDM_TRAX_STOP_PC	0x0058	/*[0x16] X */
 | ||
|  | #define  XDM_TRAX_STOP_ICNT	0x005C	/*[0x16] X */
 | ||
|  | #define  XDM_TRAX_MSG_STATUS	0x0060	/*[0x17] X */
 | ||
|  | #define  XDM_TRAX_FSM_STATUS	0x0064	/*[0x18] X */
 | ||
|  | #define  XDM_TRAX_IB_STATUS	0x0068	/*[0x19] X */
 | ||
|  | #define  XDM_TRAX_STOPCNT	0x006C	/*[0x1A] X */
 | ||
|  | 
 | ||
|  | /*  Performance Monitoring Counters  */ | ||
|  | #define  XDM_PERF_PMG		0x1000	/*[0x20] perf. mon. global control register */
 | ||
|  | #define  XDM_PERF_INTPC		0x1010	/*[0x24] perf. mon. interrupt PC */
 | ||
|  | #define  XDM_PERF_PM0		0x1080	/*[0x28] perf. mon. counter 0 value */
 | ||
|  | #define  XDM_PERF_PM1		0x1084	/*[0x29] perf. mon. counter 1 value */
 | ||
|  | #define  XDM_PERF_PM2		0x1088	/*[0x2A] perf. mon. counter 2 value */
 | ||
|  | #define  XDM_PERF_PM3		0x108C	/*[0x2B] perf. mon. counter 3 value */
 | ||
|  | #define  XDM_PERF_PM4		0x1090	/*[0x2C] perf. mon. counter 4 value */
 | ||
|  | #define  XDM_PERF_PM5		0x1094	/*[0x2D] perf. mon. counter 5 value */
 | ||
|  | #define  XDM_PERF_PM6		0x1098	/*[0x2E] perf. mon. counter 6 value */
 | ||
|  | #define  XDM_PERF_PM7		0x109C	/*[0x2F] perf. mon. counter 7 value */
 | ||
|  | #define  XDM_PERF_PM(n)		(0x1080+((n)<<2)) /* perfmon cnt n=0..7 value */
 | ||
|  | #define  XDM_PERF_PMCTRL0	0x1100	/*[0x30] perf. mon. counter 0 control */
 | ||
|  | #define  XDM_PERF_PMCTRL1	0x1104	/*[0x31] perf. mon. counter 1 control */
 | ||
|  | #define  XDM_PERF_PMCTRL2	0x1108	/*[0x32] perf. mon. counter 2 control */
 | ||
|  | #define  XDM_PERF_PMCTRL3	0x110C	/*[0x33] perf. mon. counter 3 control */
 | ||
|  | #define  XDM_PERF_PMCTRL4	0x1110	/*[0x34] perf. mon. counter 4 control */
 | ||
|  | #define  XDM_PERF_PMCTRL5	0x1114	/*[0x35] perf. mon. counter 5 control */
 | ||
|  | #define  XDM_PERF_PMCTRL6	0x1118	/*[0x36] perf. mon. counter 6 control */
 | ||
|  | #define  XDM_PERF_PMCTRL7	0x111C	/*[0x37] perf. mon. counter 7 control */
 | ||
|  | #define  XDM_PERF_PMCTRL(n)	(0x1100+((n)<<2)) /* perfmon cnt n=0..7 control */
 | ||
|  | #define  XDM_PERF_PMSTAT0	0x1180	/*[0x38] perf. mon. counter 0 status */
 | ||
|  | #define  XDM_PERF_PMSTAT1	0x1184	/*[0x39] perf. mon. counter 1 status */
 | ||
|  | #define  XDM_PERF_PMSTAT2	0x1188	/*[0x3A] perf. mon. counter 2 status */
 | ||
|  | #define  XDM_PERF_PMSTAT3	0x118C	/*[0x3B] perf. mon. counter 3 status */
 | ||
|  | #define  XDM_PERF_PMSTAT4	0x1190	/*[0x3C] perf. mon. counter 4 status */
 | ||
|  | #define  XDM_PERF_PMSTAT5	0x1194	/*[0x3D] perf. mon. counter 5 status */
 | ||
|  | #define  XDM_PERF_PMSTAT6	0x1198	/*[0x3E] perf. mon. counter 6 status */
 | ||
|  | #define  XDM_PERF_PMSTAT7	0x119C	/*[0x3F] perf. mon. counter 7 status */
 | ||
|  | #define  XDM_PERF_PMSTAT(n)	(0x1180+((n)<<2)) /* perfmon cnt n=0..7 status */
 | ||
|  | 
 | ||
|  | /*  On-Chip-Debug (OCD)  */ | ||
|  | #define  XDM_OCD_ID		0x2000	/*[0x40] ID register */
 | ||
|  | #define  XDM_OCD_DCR_CLR	0x2008	/*[0x42] Debug Control reg clear */
 | ||
|  | #define  XDM_OCD_DCR_SET	0x200C	/*[0x43] Debug Control reg set */
 | ||
|  | #define  XDM_OCD_DSR		0x2010	/*[0x44] Debug Status reg */
 | ||
|  | #define  XDM_OCD_DDR		0x2014	/*[0x45] Debug Data reg */
 | ||
|  | #define  XDM_OCD_DDREXEC	0x2018	/*[0x46] Debug Data reg + execute-DIR */
 | ||
|  | #define  XDM_OCD_DIR0EXEC	0x201C	/*[0x47] Debug Instruction reg, word 0 + execute-DIR */
 | ||
|  | #define  XDM_OCD_DIR0		0x2020	/*[0x48] Debug Instruction reg, word 1 */
 | ||
|  | #define  XDM_OCD_DIR1		0x2024	/*[0x49] Debug Instruction reg, word 2 */
 | ||
|  | #define  XDM_OCD_DIR2		0x2028	/*[0x4A] Debug Instruction reg, word 3 */
 | ||
|  | #define  XDM_OCD_DIR3		0x202C	/*[0x49] Debug Instruction reg, word 4 */
 | ||
|  | #define  XDM_OCD_DIR4		0x2030	/*[0x4C] Debug Instruction reg, word 5 */
 | ||
|  | #define  XDM_OCD_DIR5		0x2034	/*[0x4D] Debug Instruction reg, word 5 */
 | ||
|  | #define  XDM_OCD_DIR6		0x2038	/*[0x4E] Debug Instruction reg, word 6 */
 | ||
|  | #define  XDM_OCD_DIR7		0x203C	/*[0x4F] Debug Instruction reg, word 7 */
 | ||
|  | 
 | ||
|  | /*  Miscellaneous Registers  */ | ||
|  | #define  XDM_MISC_PWRCTL	0x3020	/*[0x58] Power and Reset Control */
 | ||
|  | #define  XDM_MISC_PWRSTAT	0x3024	/*[0x59] Power and Reset Status */
 | ||
|  | #define  XDM_MISC_ERISTAT	0x3028	/*[0x5A] ERI Transaction Status */
 | ||
|  | #define  XDM_MISC_DATETIME	0x3034	/*[0x5D] [INTERNAL] Timestamps of build */
 | ||
|  | #define  XDM_MISC_UBID		0x3038	/*[0x5E] [INTERNAL] Build Unique ID */
 | ||
|  | #define  XDM_MISC_CID		0x303C	/*[0x5F] [INTERNAL] Customer ID */
 | ||
|  | 
 | ||
|  | /*  CoreSight compatibility  */ | ||
|  | #define  XDM_CS_ITCTRL		0x3F00	/*[0x60] InTegration Mode control reg */
 | ||
|  | #define  XDM_CS_CLAIMSET	0x3FA0	/*[0x68] Claim Tag Set reg */
 | ||
|  | #define  XDM_CS_CLAIMCLR	0x3FA4	/*[0x69] Claim Tag Clear reg */
 | ||
|  | #define  XDM_CS_LOCK_ACCESS	0x3FB0	/*[0x6B] Lock Access (writing 0xC5ACCE55 unlocks) */
 | ||
|  | #define  XDM_CS_LOCK_STATUS	0x3FB4	/*[0x6D] Lock Status */
 | ||
|  | #define  XDM_CS_AUTH_STATUS	0x3FB8	/*[0x6E] Authentication Status */
 | ||
|  | #define  XDM_CS_DEV_ID		0x3FC8	/*[0x72] Device ID */
 | ||
|  | #define  XDM_CS_DEV_TYPE	0x3FCC	/*[0x73] Device Type */
 | ||
|  | #define  XDM_CS_PER_ID4		0x3FD0	/*[0x74] Peripheral ID reg byte 4 */
 | ||
|  | #define  XDM_CS_PER_ID5		0x3FD4	/*[0x75] Peripheral ID reg byte 5 */
 | ||
|  | #define  XDM_CS_PER_ID6		0x3FD8	/*[0x76] Peripheral ID reg byte 6 */
 | ||
|  | #define  XDM_CS_PER_ID7		0x3FDC	/*[0x77] Peripheral ID reg byte 7 */
 | ||
|  | #define  XDM_CS_PER_ID0		0x3FE0	/*[0x78] Peripheral ID reg byte 0 */
 | ||
|  | #define  XDM_CS_PER_ID1		0x3FE4	/*[0x79] Peripheral ID reg byte 1 */
 | ||
|  | #define  XDM_CS_PER_ID2		0x3FE8	/*[0x7A] Peripheral ID reg byte 2 */
 | ||
|  | #define  XDM_CS_PER_ID3		0x3FEC	/*[0x7B] Peripheral ID reg byte 3 */
 | ||
|  | #define  XDM_CS_COMP_ID0	0x3FF0	/*[0x7C] Component ID reg byte 0 */
 | ||
|  | #define  XDM_CS_COMP_ID1	0x3FF4	/*[0x7D] Component ID reg byte 1 */
 | ||
|  | #define  XDM_CS_COMP_ID2	0x3FF8	/*[0x7E] Component ID reg byte 2 */
 | ||
|  | #define  XDM_CS_COMP_ID3	0x3FFC	/*[0x7F] Component ID reg byte 3 */
 | ||
|  | 
 | ||
|  | #define CS_PER_ID0	0x00000003
 | ||
|  | #define CS_PER_ID1	0x00000021
 | ||
|  | #define CS_PER_ID2	0x0000000f
 | ||
|  | #define CS_PER_ID3	0x00000000
 | ||
|  | #define CS_PER_ID4	0x00000024
 | ||
|  | 
 | ||
|  | #define CS_COMP_ID0	0x0000000d
 | ||
|  | #define CS_COMP_ID1	0x00000090
 | ||
|  | #define CS_COMP_ID2	0x00000005
 | ||
|  | #define CS_COMP_ID3	0x000000b1
 | ||
|  | 
 | ||
|  | #define CS_DEV_TYPE	0x00000015
 | ||
|  | 
 | ||
|  | #define XTENSA_IDCODE	0x120034e5    // FIXME (upper bits not spec. out but BE is !)
 | ||
|  | #define XTENSA_MFC_ID	(XTENSA_IDCODE & 0xFFF)
 | ||
|  | #define CS_DEV_ID	XTENSA_IDCODE
 | ||
|  | 
 | ||
|  | #define NXS_OCD_REG(val)  ((val >= 0x40) && (val <= 0x5F))
 | ||
|  | #define NXS_TRAX_REG(val)  val <= 0x3F
 | ||
|  | 
 | ||
|  | #define ERI_TRAX_REG(val)  ((val & 0xFFFF) < 0x1000)
 | ||
|  | #define ERI_OCD_REG(val)   ((val & 0xFFFF) >= 0x2000) && ((val & 0xFFFF) < 0x4000))
 | ||
|  | 
 | ||
|  | /*  Convert above 14-bit ERI/APB address/offset to 7-bit NAR address:  */ | ||
|  | #define _XDM_ERI_TO_NAR(a)	( ((a)&0x3F80)==0x0000 ? (((a)>>2) & 0x1F) \
 | ||
|  | 				: ((a)&0x3E00)==0x1000 ? (0x20 | (((a)>>2) & 7) | (((a)>>4) & 0x18)) \ | ||
|  | 				: ((a)&0x3FC0)==0x2000 ? (0x40 | (((a)>>2) & 0xF)) \ | ||
|  | 				: ((a)&0x3FE0)==0x3020 ? (0x50 | (((a)>>2) & 0xF)) \ | ||
|  | 				: ((a)&0x3FFC)==0x3F00 ? 0x60 \ | ||
|  | 				: ((a)&0x3F80)==0x3F80 ? (0x60 | (((a)>>2) & 0x1F)) \ | ||
|  | 				: -1 ) | ||
|  | 
 | ||
|  | #define XDM_ERI_TO_NAR(a)	_XDM_ERI_TO_NAR(a & 0xFFFF)
 | ||
|  | 
 | ||
|  | /* Convert 7-bit NAR address back to ERI/APB address/offset:  */ | ||
|  | #define _XDM_NAR_TO_APB(a)	((a) <= 0x1f                ? ((a) << 2)                   \
 | ||
|  | 				:(a) >= 0x20 && (a) <= 0x3F ? (0x1000 | (((a)&  7) << 2) | (((a)&0x18)<<4)) \ | ||
|  | 				:(a) >= 0x40 && (a) <= 0x4F ? (0x2000 | (((a)&0xF) << 2))  \ | ||
|  | 				:(a) >= 0x58 && (a) <= 0x5F ? (0x3000 | (((a)&0xF) << 2))  \ | ||
|  | 				:(a) == 0x60                ? (0x3F00)                     \ | ||
|  | 				:(a) >= 0x68 && (a) <= 0x7F ? (0x3F80 | (((a)&0x1F) << 2)) \ | ||
|  | 				: -1) | ||
|  | 
 | ||
|  | #define XDM_NAR_TO_APB(a)	_XDM_NAR_TO_APB((a & 0xFFFF))
 | ||
|  | #define XDM_NAR_TO_ERI(a)	_XDM_NAR_TO_APB((a & 0xFFFF)) | 0x000000
 | ||
|  | 
 | ||
|  | /* Convert APB to ERI address */ | ||
|  | #define XDM_APB_TO_ERI(a)	((a) | (0x100000))
 | ||
|  | #define XDM_ERI_TO_APB(a)	((a) & (0x0FFFFF))
 | ||
|  | 
 | ||
|  | /***********  Bit definitions within some of the above registers  ***********/ | ||
|  | #define OCD_ID_LSDDRP			0x01000000
 | ||
|  | #define OCD_ID_LSDDRP_SHIFT			24
 | ||
|  | #define OCD_ID_ENDIANESS		0x00000001
 | ||
|  | #define OCD_ID_ENDIANESS_SHIFT			 0
 | ||
|  | #define OCD_ID_PSO			0x0000000C
 | ||
|  | #define OCD_ID_PSO_SHIFT			 2
 | ||
|  | #define OCD_ID_TRACEPORT		0x00000080
 | ||
|  | #define OCD_ID_TRACEPORT_SHIFT			 7
 | ||
|  | 
 | ||
|  | /*  Power Status register.  NOTE:  different bit positions in JTAG vs. ERI/APB !!  */ | ||
|  | /*  ERI/APB:  */ | ||
|  | #define PWRSTAT_CORE_DOMAIN_ON		0x00000001	/* set if core is powered on */
 | ||
|  | #define PWRSTAT_CORE_DOMAIN_ON_SHIFT		0
 | ||
|  | #define PWRSTAT_WAKEUP_RESET		0x00000002	/* [ERI only] 0=cold start, 1=PSO wakeup */
 | ||
|  | #define PWRSTAT_WAKEUP_RESET_SHIFT		1
 | ||
|  | #define PWRSTAT_CACHES_LOST_POWER	0x00000004	/* [ERI only] set if caches (/localmems?) lost power */
 | ||
|  | 							/* FIXME: does this include local memories? */ | ||
|  | #define PWRSTAT_CACHES_LOST_POWER_SHIFT		2
 | ||
|  | #define PWRSTAT_CORE_STILL_NEEDED	0x00000010	/* set if others keeping core awake */
 | ||
|  | #define PWRSTAT_CORE_STILL_NEEDED_SHIFT		4
 | ||
|  | #define PWRSTAT_MEM_DOMAIN_ON		0x00000100	/* set if memory domain is powered on */
 | ||
|  | #define PWRSTAT_MEM_DOMAIN_ON_SHIFT		8
 | ||
|  | #define PWRSTAT_DEBUG_DOMAIN_ON		0x00001000	/* set if debug domain is powered on */
 | ||
|  | #define PWRSTAT_DEBUG_DOMAIN_ON_SHIFT		12
 | ||
|  | #define PWRSTAT_ALL_ON			PWRSTAT_CORE_DOMAIN_ON | PWRSTAT_MEM_DOMAIN_ON | PWRSTAT_DEBUG_DOMAIN_ON
 | ||
|  | #define PWRSTAT_CORE_WAS_RESET		0x00010000	/* [APB only] set if core got reset */
 | ||
|  | #define PWRSTAT_CORE_WAS_RESET_SHIFT		16
 | ||
|  | #define PWRSTAT_DEBUG_WAS_RESET		0x10000000	/* set if debug module got reset */
 | ||
|  | #define PWRSTAT_DEBUG_WAS_RESET_SHIFT		28
 | ||
|  | /*  JTAG:  */ | ||
|  | #define J_PWRSTAT_CORE_DOMAIN_ON	0x01		/* set if core is powered on */
 | ||
|  | #define J_PWRSTAT_MEM_DOMAIN_ON		0x02		/* set if memory domain is powered on */
 | ||
|  | #define J_PWRSTAT_DEBUG_DOMAIN_ON	0x04		/* set if debug domain is powered on */
 | ||
|  | #define J_PWRSTAT_ALL_ON		J_PWRSTAT_CORE_DOMAIN_ON | J_PWRSTAT_MEM_DOMAIN_ON | J_PWRSTAT_DEBUG_DOMAIN_ON
 | ||
|  | #define J_PWRSTAT_CORE_STILL_NEEDED	0x08		/* set if others keeping core awake */
 | ||
|  | #define J_PWRSTAT_CORE_WAS_RESET	0x10		/* set if core got reset */
 | ||
|  | #define J_PWRSTAT_DEBUG_WAS_RESET	0x40		/* set if debug module got reset */
 | ||
|  | 
 | ||
|  | /*  Power Control register.  NOTE:  different bit positions in JTAG vs. ERI/APB !!  */ | ||
|  | /*  ERI/APB:  */ | ||
|  | #define PWRCTL_CORE_SHUTOFF		0x00000001	/* [ERI only] core wants to shut off on WAITI */
 | ||
|  | #define PWRCTL_CORE_SHUTOFF_SHIFT		0
 | ||
|  | #define PWRCTL_CORE_WAKEUP		0x00000001	/* [APB only] set to force core to stay powered on */
 | ||
|  | #define PWRCTL_CORE_WAKEUP_SHIFT		0
 | ||
|  | #define PWRCTL_MEM_WAKEUP		0x00000100	/* set to force memory domain to stay powered on */
 | ||
|  | #define PWRCTL_MEM_WAKEUP_SHIFT			8
 | ||
|  | #define PWRCTL_DEBUG_WAKEUP		0x00001000	/* set to force debug domain to stay powered on */
 | ||
|  | #define PWRCTL_DEBUG_WAKEUP_SHIFT		12
 | ||
|  | #define PWRCTL_ALL_ON			PWRCTL_CORE_WAKEUP | PWRCTL_MEM_WAKEUP | PWRCTL_DEBUG_WAKEUP
 | ||
|  | #define PWRCTL_CORE_RESET		0x00010000	/* [APB only] set to assert core reset */
 | ||
|  | #define PWRCTL_CORE_RESET_SHIFT			16
 | ||
|  | #define PWRCTL_DEBUG_RESET		0x10000000	/* set to assert debug module reset */
 | ||
|  | #define PWRCTL_DEBUG_RESET_SHIFT		28
 | ||
|  | /*  JTAG:  */ | ||
|  | #define J_PWRCTL_CORE_WAKEUP		0x01		/* set to force core to stay powered on */
 | ||
|  | #define J_PWRCTL_MEM_WAKEUP		0x02		/* set to force memory domain to stay powered on */
 | ||
|  | #define J_PWRCTL_DEBUG_WAKEUP		0x04		/* set to force debug domain to stay powered on */
 | ||
|  | #define J_DEBUG_USE			0x80		/*  */
 | ||
|  | #define J_PWRCTL_ALL_ON			J_DEBUG_USE | J_PWRCTL_CORE_WAKEUP | J_PWRCTL_MEM_WAKEUP | J_PWRCTL_DEBUG_WAKEUP
 | ||
|  | #define J_PWRCTL_DEBUG_ON		J_DEBUG_USE | J_PWRCTL_DEBUG_WAKEUP
 | ||
|  | #define J_PWRCTL_CORE_RESET		0x10		/* set to assert core reset */
 | ||
|  | #define J_PWRCTL_DEBUG_RESET		0x40		/* set to assert debug module reset */
 | ||
|  | 
 | ||
|  | #define J_PWRCTL_WRITE_MASK		0xFF
 | ||
|  | #define J_PWRSTAT_WRITE_MASK		0xFF
 | ||
|  | 
 | ||
|  | #define PWRCTL_WRITE_MASK		~0
 | ||
|  | #define PWRSTAT_WRITE_MASK		~0
 | ||
|  | 
 | ||
|  | /************  The following are only relevant for JTAG, so perhaps belong in OCD only  **************/ | ||
|  | 
 | ||
|  | /*  XDM 5-bit JTAG Instruction Register (IR) values:  */ | ||
|  | #define XDM_IR_PWRCTL		0x08	/* select 8-bit Power/Reset Control (PRC) */
 | ||
|  | #define XDM_IR_PWRSTAT		0x09	/* select 8-bit Power/Reset Status (PRS) */
 | ||
|  | #define XDM_IR_NAR_SEL		0x1c	/* select altern. 8-bit NAR / 32-bit NDR (Nexus-style) */
 | ||
|  | #define XDM_IR_NDR_SEL		0x1d	/* select altern. 32-bit NDR / 8-bit NAR
 | ||
|  | 					   (FIXME - functionality not yet in HW) */ | ||
|  | #define XDM_IR_IDCODE		0x1e	/* select 32-bit JTAG IDCODE */
 | ||
|  | #define XDM_IR_BYPASS		0x1f	/* select 1-bit bypass */
 | ||
|  | 
 | ||
|  | #define XDM_IR_WIDTH		5	/* width of IR for Xtensa TAP */
 | ||
|  | 
 | ||
|  | /*  NAR register bits:  */ | ||
|  | #define XDM_NAR_WRITE		0x01
 | ||
|  | #define XDM_NAR_ADDR_MASK	0xFE
 | ||
|  | #define XDM_NAR_ADDR_SHIFT	1
 | ||
|  | 
 | ||
|  | #define XDM_NAR_BUSY		0x02
 | ||
|  | #define XDM_NAR_ERROR		0x01
 | ||
|  | 
 | ||
|  | #define NEXUS_DIR_READ	0x00
 | ||
|  | #define	NEXUS_DIR_WRITE	0x01
 | ||
|  | 
 | ||
|  | /************  Define DCR register bits  **************/ | ||
|  | 
 | ||
|  | #define DCR_ENABLEOCD		0x0000001
 | ||
|  | #define DCR_ENABLEOCD_SHIFT		0
 | ||
|  | #define DCR_DEBUG_INT		0x0000002
 | ||
|  | #define DCR_DEBUG_INT_SHIFT		1
 | ||
|  | #define DCR_DEBUG_OVERRIDE	0x0000004
 | ||
|  | #define DCR_DEBUG_OVERRIDE_SHIFT	2
 | ||
|  | #define DCR_DEBUG_INTERCEPT	0x0000008
 | ||
|  | #define DCR_DEBUG_INTERCEPT_SHIFT	3
 | ||
|  | #define DCR_MASK_NMI		0x0000020
 | ||
|  | #define DCR_MASK_NMI_SHIFT		5
 | ||
|  | #define DCR_STEP_ENABLE		0x0000040
 | ||
|  | #define DCR_STEP_ENABLE_SHIFT		6
 | ||
|  | #define DCR_BREAK_IN_EN		0x0010000
 | ||
|  | #define DCR_BREAK_IN_EN_SHIFT		16
 | ||
|  | #define DCR_BREAK_OUT_EN	0x0020000
 | ||
|  | #define DCR_BREAK_OUT_EN_SHIFT		17
 | ||
|  | #define DCR_DEBUG_INT_EN	0x0040000
 | ||
|  | #define DCR_DEBUG_INT_EN_SHIFT		18
 | ||
|  | #define DCR_DBG_SW_ACTIVE	0x0100000
 | ||
|  | #define DCR_DBG_SW_ACTIVE_SHIFT		20
 | ||
|  | #define DCR_STALL_IN_EN		0x0200000
 | ||
|  | #define DCR_STALL_IN_EN_SHIFT		21
 | ||
|  | #define DCR_DEBUG_OUT_EN	0x0400000
 | ||
|  | #define DCR_DEBUG_OUT_EN_SHIFT		22
 | ||
|  | #define DCR_BREAK_OUT_ITO	0x1000000
 | ||
|  | #define DCR_STALL_OUT_ITO	0x2000000
 | ||
|  | #define DCR_STALL_OUT_ITO_SHIFT		25
 | ||
|  | 
 | ||
|  | /************  Define DSR register bits  **************/ | ||
|  | 
 | ||
|  | #define DOSR_EXECDONE_ER	0x01
 | ||
|  | #define DOSR_EXECDONE_SHIFT	0
 | ||
|  | #define DOSR_EXCEPTION_ER	0x02
 | ||
|  | #define DOSR_EXCEPTION_SHIFT	1
 | ||
|  | #define DOSR_BUSY		0x04
 | ||
|  | #define DOSR_BUSY_SHIFT		2
 | ||
|  | #define DOSR_OVERRUN		0x08
 | ||
|  | #define DOSR_OVERRUN_SHIFT	3
 | ||
|  | #define DOSR_INOCDMODE_ER	0x10
 | ||
|  | #define DOSR_INOCDMODE_SHIFT	4
 | ||
|  | #define DOSR_CORE_WROTE_DDR_ER		0x400
 | ||
|  | #define DOSR_CORE_WROTE_DDR_SHIFT	10
 | ||
|  | #define DOSR_CORE_READ_DDR_ER		0x800
 | ||
|  | #define DOSR_CORE_READ_DDR_SHIFT	11
 | ||
|  | #define DOSR_HOST_WROTE_DDR_ER		0x4000
 | ||
|  | #define DOSR_HOST_WROTE_DDR_SHIFT	14
 | ||
|  | #define DOSR_HOST_READ_DDR_ER		0x8000
 | ||
|  | #define DOSR_HOST_READ_DDR_SHIFT	15
 | ||
|  | 
 | ||
|  | #define DOSR_DEBUG_PEND_BIN		0x10000
 | ||
|  | #define DOSR_DEBUG_PEND_HOST		0x20000
 | ||
|  | #define DOSR_DEBUG_PEND_TRAX		0x40000
 | ||
|  | #define DOSR_DEBUG_BIN		        0x100000
 | ||
|  | #define DOSR_DEBUG_HOST			0x200000
 | ||
|  | #define DOSR_DEBUG_TRAX			0x400000
 | ||
|  | #define DOSR_DEBUG_PEND_BIN_SHIFT	16
 | ||
|  | #define DOSR_DEBUG_PEND_HOST_SHIFT	17
 | ||
|  | #define DOSR_DEBUG_PEND_TRAX_SHIFT	18
 | ||
|  | #define DOSR_DEBUG_BREAKIN              0x0100000
 | ||
|  | #define DOSR_DEBUG_BREAKIN_SHIFT        20
 | ||
|  | #define DOSR_DEBUG_HOST_SHIFT		21
 | ||
|  | #define DOSR_DEBUG_TRAX_SHIFT		22
 | ||
|  | 
 | ||
|  | #define DOSR_DEBUG_STALL		0x1000000
 | ||
|  | #define DOSR_DEBUG_STALL_SHIFT		24
 | ||
|  | 
 | ||
|  | #define DOSR_CORE_ON			0x40000000
 | ||
|  | #define DOSR_CORE_ON_SHIFT		30
 | ||
|  | #define DOSR_DEBUG_ON			0x80000000
 | ||
|  | #define DOSR_DEBUG_ON_SHIFT		31
 | ||
|  | 
 | ||
|  | /********** Performance monitor registers bits **********/ | ||
|  | 
 | ||
|  | #define PERF_PMG_ENABLE                 0x00000001 /* global enable bit */
 | ||
|  | #define PERF_PMG_ENABLE_SHIFT           0
 | ||
|  | 
 | ||
|  | #define PERF_PMCTRL_INT_ENABLE          0x00000001 /* assert interrupt on overflow */
 | ||
|  | #define PERF_PMCTRL_INT_ENABLE_SHIFT    0
 | ||
|  | #define PERF_PMCTRL_KRNLCNT             0x00000008 /* ignore TRACELEVEL */
 | ||
|  | #define PERF_PMCTRL_KRNLCNT_SHIFT       3
 | ||
|  | #define PERF_PMCTRL_TRACELEVEL          0x000000F0 /* count when CINTLEVEL <= TRACELEVEL */
 | ||
|  | #define PERF_PMCTRL_TRACELEVEL_SHIFT    4
 | ||
|  | #define PERF_PMCTRL_SELECT              0x00001F00 /* events group selector */
 | ||
|  | #define PERF_PMCTRL_SELECT_SHIFT        8
 | ||
|  | #define PERF_PMCTRL_MASK                0xFFFF0000 /* events mask */
 | ||
|  | #define PERF_PMCTRL_MASK_SHIFT          16
 | ||
|  | 
 | ||
|  | #define PERF_PMSTAT_OVERFLOW            0x00000001 /* counter overflowed */
 | ||
|  | #define PERF_PMSTAT_OVERFLOW_SHIFT      0
 | ||
|  | #define PERF_PMSTAT_INT                 0x00000010 /* interrupt asserted */
 | ||
|  | #define PERF_PMSTAT_INT_SHIFT           4
 | ||
|  | 
 | ||
|  | #if defined (USE_XDM_REGNAME) || defined (USE_DAP_REGNAME)
 | ||
|  | /*  Describes XDM register:  */ | ||
|  | typedef struct { | ||
|  |     int    reg; | ||
|  |     char*  name; | ||
|  | } regdef_t; | ||
|  | 
 | ||
|  | /*char* regname(regdef_t* list, int regno)
 | ||
|  | { | ||
|  |   unsigned i; | ||
|  |   for(i = 0 ; i < (sizeof(list) / sizeof(regdef_t)); i++){ | ||
|  |     if(list[i].reg == regno) | ||
|  |       return list[i].name; | ||
|  |   } | ||
|  |   return "???"; | ||
|  | }*/ | ||
|  | 
 | ||
|  | /*
 | ||
|  |  *  Returns the name of the specified XDM register number, | ||
|  |  *  or simply "???" if the register number is not recognized. | ||
|  |  *  FIXME - requires -1 as the last entry - change to compare the name to ??? | ||
|  |  *  or even better, make the code above to work. | ||
|  |  */ | ||
|  | static char * regname(regdef_t* list, int reg) | ||
|  | { | ||
|  |   int i = 0; | ||
|  |   while (list[i].reg != -1){ | ||
|  |     if (list[i].reg == reg) | ||
|  |       break; | ||
|  |     i++; | ||
|  |   } | ||
|  |   return list[i].name; | ||
|  | } | ||
|  | 
 | ||
|  | #if defined (USE_XDM_REGNAME)
 | ||
|  | regdef_t xdm_reglist[] = | ||
|  | { | ||
|  |   {XDM_TRAX_ID		  ,"TRAX_ID"      }, | ||
|  |   {XDM_TRAX_CONTROL	  ,"CONTROL"      }, | ||
|  |   {XDM_TRAX_STATUS	  ,"STATUS"       }, | ||
|  |   {XDM_TRAX_DATA          ,"DATA"         }, | ||
|  |   {XDM_TRAX_ADDRESS	  ,"ADDRESS"      }, | ||
|  |   {XDM_TRAX_TRIGGER	  ,"TRIGGER PC"   }, | ||
|  |   {XDM_TRAX_MATCH         ,"PC MATCH"     }, | ||
|  |   {XDM_TRAX_DELAY	  ,"DELAY CNT."   }, | ||
|  |   {XDM_TRAX_STARTADDR	  ,"START ADDRESS"}, | ||
|  |   {XDM_TRAX_ENDADDR	  ,"END ADDRESS"  }, | ||
|  |   {XDM_TRAX_DEBUGPC	  ,"DEBUG PC"  }, | ||
|  |   {XDM_TRAX_P4CHANGE	  ,"P4 CHANGE"    }, | ||
|  |   {XDM_TRAX_P4REV         ,"P4 REV."      }, | ||
|  |   {XDM_TRAX_P4DATE	  ,"P4 DATE"      }, | ||
|  |   {XDM_TRAX_P4TIME	  ,"P4 TIME"      }, | ||
|  |   {XDM_TRAX_PDSTATUS	  ,"PD STATUS"    }, | ||
|  |   {XDM_TRAX_PDDATA	  ,"PD DATA"      }, | ||
|  |   {XDM_TRAX_STOP_PC	  ,"STOP PC"      }, | ||
|  |   {XDM_TRAX_STOP_ICNT	  ,"STOP ICNT"    }, | ||
|  |   {XDM_TRAX_MSG_STATUS	  ,"MSG STAT."    }, | ||
|  |   {XDM_TRAX_FSM_STATUS	  ,"FSM STAT."    }, | ||
|  |   {XDM_TRAX_IB_STATUS	  ,"IB STAT."     }, | ||
|  | 
 | ||
|  |   {XDM_OCD_ID         ,"OCD_ID"  }, | ||
|  |   {XDM_OCD_DCR_CLR    ,"DCR_CLR" }, | ||
|  |   {XDM_OCD_DCR_SET    ,"DCR_SET" }, | ||
|  |   {XDM_OCD_DSR        ,"DOSR"    }, | ||
|  |   {XDM_OCD_DDR        ,"DDR"     }, | ||
|  |   {XDM_OCD_DDREXEC    ,"DDREXEC" }, | ||
|  |   {XDM_OCD_DIR0EXEC   ,"DIR0EXEC"}, | ||
|  |   {XDM_OCD_DIR0       ,"DIR0"    }, | ||
|  |   {XDM_OCD_DIR1       ,"DIR1"    }, | ||
|  |   {XDM_OCD_DIR2       ,"DIR2"    }, | ||
|  |   {XDM_OCD_DIR3       ,"DIR3"    }, | ||
|  |   {XDM_OCD_DIR4       ,"DIR4"    }, | ||
|  |   {XDM_OCD_DIR5       ,"DIR5"    }, | ||
|  |   {XDM_OCD_DIR6       ,"DIR6"    }, | ||
|  |   {XDM_OCD_DIR7       ,"DIR7"    }, | ||
|  | 
 | ||
|  |   {XDM_PERF_PMG       ,"PMG"    }, | ||
|  |   {XDM_PERF_INTPC     ,"INTPC"  }, | ||
|  |   {XDM_PERF_PM0       ,"PM0 "   }, | ||
|  |   {XDM_PERF_PM1       ,"PM1 "   }, | ||
|  |   {XDM_PERF_PM2       ,"PM2 "   }, | ||
|  |   {XDM_PERF_PM3       ,"PM3 "   }, | ||
|  |   {XDM_PERF_PM4       ,"PM4 "   }, | ||
|  |   {XDM_PERF_PM5       ,"PM5 "   }, | ||
|  |   {XDM_PERF_PM6       ,"PM6 "   }, | ||
|  |   {XDM_PERF_PM7       ,"PM7 "   }, | ||
|  |   {XDM_PERF_PMCTRL0   ,"PMCTRL0"}, | ||
|  |   {XDM_PERF_PMCTRL1   ,"PMCTRL1"}, | ||
|  |   {XDM_PERF_PMCTRL2   ,"PMCTRL2"}, | ||
|  |   {XDM_PERF_PMCTRL3   ,"PMCTRL3"}, | ||
|  |   {XDM_PERF_PMCTRL4   ,"PMCTRL4"}, | ||
|  |   {XDM_PERF_PMCTRL5   ,"PMCTRL5"}, | ||
|  |   {XDM_PERF_PMCTRL6   ,"PMCTRL6"}, | ||
|  |   {XDM_PERF_PMCTRL7   ,"PMCTRL7"}, | ||
|  |   {XDM_PERF_PMSTAT0   ,"PMSTAT0"}, | ||
|  |   {XDM_PERF_PMSTAT1   ,"PMSTAT1"}, | ||
|  |   {XDM_PERF_PMSTAT2   ,"PMSTAT2"}, | ||
|  |   {XDM_PERF_PMSTAT3   ,"PMSTAT3"}, | ||
|  |   {XDM_PERF_PMSTAT4   ,"PMSTAT4"}, | ||
|  |   {XDM_PERF_PMSTAT5   ,"PMSTAT5"}, | ||
|  |   {XDM_PERF_PMSTAT6   ,"PMSTAT6"}, | ||
|  |   {XDM_PERF_PMSTAT7   ,"PMSTAT7"}, | ||
|  | 
 | ||
|  |   {XDM_MISC_PWRCTL    ,"PWRCTL"  }, | ||
|  |   {XDM_MISC_PWRSTAT   ,"PWRSTAT" }, | ||
|  |   {XDM_MISC_ERISTAT   ,"ERISTAT" }, | ||
|  |   {XDM_MISC_DATETIME  ,"DATETIME"}, | ||
|  |   {XDM_MISC_UBID      ,"UBID"    }, | ||
|  |   {XDM_MISC_CID       ,"CID"     }, | ||
|  | 
 | ||
|  |   {XDM_CS_ITCTRL      ,"ITCTRL"     }, | ||
|  |   {XDM_CS_CLAIMSET    ,"CLAIMSET"   }, | ||
|  |   {XDM_CS_CLAIMCLR    ,"CLAIMCLR"   }, | ||
|  |   {XDM_CS_LOCK_ACCESS ,"LOCK_ACCESS"}, | ||
|  |   {XDM_CS_LOCK_STATUS ,"LOCK_STATUS"}, | ||
|  |   {XDM_CS_AUTH_STATUS ,"AUTH_STATUS"}, | ||
|  |   {XDM_CS_DEV_ID      ,"DEV_ID"     }, | ||
|  |   {XDM_CS_DEV_TYPE    ,"DEV_TYPE"   }, | ||
|  |   {XDM_CS_PER_ID4     ,"PER_ID4"    }, | ||
|  |   {XDM_CS_PER_ID5     ,"PER_ID5"    }, | ||
|  |   {XDM_CS_PER_ID6     ,"PER_ID6"    }, | ||
|  |   {XDM_CS_PER_ID7     ,"PER_ID7"    }, | ||
|  |   {XDM_CS_PER_ID0     ,"PER_ID0"    }, | ||
|  |   {XDM_CS_PER_ID1     ,"PER_ID1"    }, | ||
|  |   {XDM_CS_PER_ID2     ,"PER_ID2"    }, | ||
|  |   {XDM_CS_PER_ID3     ,"PER_ID3"    }, | ||
|  |   {XDM_CS_COMP_ID0    ,"COMP_ID0"   }, | ||
|  |   {XDM_CS_COMP_ID1    ,"COMP_ID1"   }, | ||
|  |   {XDM_CS_COMP_ID2    ,"COMP_ID2"   }, | ||
|  |   {XDM_CS_COMP_ID3    ,"COMP_ID3"   }, | ||
|  |   {-1                 ,"???"        }, | ||
|  | }; | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif /* _XDM_REGS_H_ */
 |