cregit-Linux how code gets into the kernel

Release 4.14 arch/m68k/include/asm/mcfwdebug.h

/* SPDX-License-Identifier: GPL-2.0 */
/****************************************************************************/

/*
 *      mcfdebug.h -- ColdFire Debug Module support.
 *
 *      (C) Copyright 2001, Lineo Inc. (www.lineo.com) 
 */

/****************************************************************************/
#ifndef mcfdebug_h

#define mcfdebug_h
/****************************************************************************/

/* Define the debug module registers */

#define MCFDEBUG_CSR	0x0			
/* Configuration status         */

#define MCFDEBUG_BAAR	0x5			
/* BDM address attribute        */

#define MCFDEBUG_AATR	0x6			
/* Address attribute trigger    */

#define MCFDEBUG_TDR	0x7			
/* Trigger definition           */

#define MCFDEBUG_PBR	0x8			
/* PC breakpoint                */

#define MCFDEBUG_PBMR	0x9			
/* PC breakpoint mask           */

#define MCFDEBUG_ABHR	0xc			
/* High address breakpoint      */

#define MCFDEBUG_ABLR	0xd			
/* Low address breakpoint       */

#define MCFDEBUG_DBR	0xe			
/* Data breakpoint              */

#define MCFDEBUG_DBMR	0xf			
/* Data breakpoint mask         */

/* Define some handy constants for the trigger definition register */

#define MCFDEBUG_TDR_TRC_DISP	0x00000000	
/* display on DDATA only        */

#define MCFDEBUG_TDR_TRC_HALT	0x40000000	
/* Processor halt on BP         */

#define MCFDEBUG_TDR_TRC_INTR	0x80000000	
/* Debug intr on BP             */

#define MCFDEBUG_TDR_LXT1	0x00004000	
/* TDR level 1                  */

#define MCFDEBUG_TDR_LXT2	0x00008000	
/* TDR level 2                  */

#define MCFDEBUG_TDR_EBL1	0x00002000	
/* Enable breakpoint level 1    */

#define MCFDEBUG_TDR_EBL2	0x20000000	
/* Enable breakpoint level 2    */

#define MCFDEBUG_TDR_EDLW1	0x00001000	
/* Enable data BP longword      */

#define MCFDEBUG_TDR_EDLW2	0x10000000

#define MCFDEBUG_TDR_EDWL1	0x00000800	
/* Enable data BP lower word    */

#define MCFDEBUG_TDR_EDWL2	0x08000000

#define MCFDEBUG_TDR_EDWU1	0x00000400	
/* Enable data BP upper word    */

#define MCFDEBUG_TDR_EDWU2	0x04000000

#define MCFDEBUG_TDR_EDLL1	0x00000200	
/* Enable data BP low low byte  */

#define MCFDEBUG_TDR_EDLL2	0x02000000

#define MCFDEBUG_TDR_EDLM1	0x00000100	
/* Enable data BP low mid byte  */

#define MCFDEBUG_TDR_EDLM2	0x01000000

#define MCFDEBUG_TDR_EDUM1	0x00000080	
/* Enable data BP up mid byte   */

#define MCFDEBUG_TDR_EDUM2	0x00800000

#define MCFDEBUG_TDR_EDUU1	0x00000040	
/* Enable data BP up up byte    */

#define MCFDEBUG_TDR_EDUU2	0x00400000

#define MCFDEBUG_TDR_DI1	0x00000020	
/* Data BP invert               */

#define MCFDEBUG_TDR_DI2	0x00200000

#define MCFDEBUG_TDR_EAI1	0x00000010	
/* Enable address BP inverted   */

#define MCFDEBUG_TDR_EAI2	0x00100000

#define MCFDEBUG_TDR_EAR1	0x00000008	
/* Enable address BP range      */

#define MCFDEBUG_TDR_EAR2	0x00080000

#define MCFDEBUG_TDR_EAL1	0x00000004	
/* Enable address BP low        */

#define MCFDEBUG_TDR_EAL2	0x00040000

#define MCFDEBUG_TDR_EPC1	0x00000002	
/* Enable PC BP                 */

#define MCFDEBUG_TDR_EPC2	0x00020000

#define MCFDEBUG_TDR_PCI1	0x00000001	
/* PC BP invert                 */

#define MCFDEBUG_TDR_PCI2	0x00010000

/* Constants for the address attribute trigger register */

#define MCFDEBUG_AAR_RESET	0x00000005
/* Fields not yet implemented */

/* And some definitions for the writable sections of the CSR */

#define MCFDEBUG_CSR_RESET	0x00100000

#define MCFDEBUG_CSR_PSTCLK	0x00020000	
/* PSTCLK disable               */

#define MCFDEBUG_CSR_IPW	0x00010000	
/* Inhibit processor writes     */

#define MCFDEBUG_CSR_MAP	0x00008000	
/* Processor refs in emul mode  */

#define MCFDEBUG_CSR_TRC	0x00004000	
/* Emul mode on trace exception */

#define MCFDEBUG_CSR_EMU	0x00002000	
/* Force emulation mode         */

#define MCFDEBUG_CSR_DDC_READ	0x00000800	
/* Debug data control           */

#define MCFDEBUG_CSR_DDC_WRITE	0x00001000

#define MCFDEBUG_CSR_UHE	0x00000400	
/* User mode halt enable        */

#define MCFDEBUG_CSR_BTB0	0x00000000	
/* Branch target 0 bytes        */

#define MCFDEBUG_CSR_BTB2	0x00000100	
/* Branch target 2 bytes        */

#define MCFDEBUG_CSR_BTB3	0x00000200	
/* Branch target 3 bytes        */

#define MCFDEBUG_CSR_BTB4	0x00000300	
/* Branch target 4 bytes        */

#define MCFDEBUG_CSR_NPL	0x00000040	
/* Non-pipelined mode           */

#define MCFDEBUG_CSR_SSM	0x00000010	
/* Single step mode             */

/* Constants for the BDM address attribute register */

#define MCFDEBUG_BAAR_RESET	0x00000005
/* Fields not yet implemented */


/* This routine wrappers up the wdebug asm instruction so that the register
 * and value can be relatively easily specified.  The biggest hassle here is
 * that the debug module instructions (2 longs) must be long word aligned and
 * some pointer fiddling is performed to ensure this.
 */

static inline void wdebug(int reg, unsigned long data) { unsigned short dbg_spc[6]; unsigned short *dbg; // Force alignment to long word boundary dbg = (unsigned short *)((((unsigned long)dbg_spc) + 3) & 0xfffffffc); // Build up the debug instruction dbg[0] = 0x2c80 | (reg & 0xf); dbg[1] = (data >> 16) & 0xffff; dbg[2] = data & 0xffff; dbg[3] = 0; // Perform the wdebug instruction #if 0 // This strain is for gas which doesn't have the wdebug instructions defined asm( "move.l %0, %%a0\n\t" ".word 0xfbd0\n\t" ".word 0x0003\n\t" :: "g" (dbg) : "a0"); #else // And this is for when it does asm( "wdebug (%0)" :: "a" (dbg)); #endif }

Contributors

PersonTokensPropCommitsCommitProp
Alan Cox10499.05%150.00%
Greg Ungerer10.95%150.00%
Total105100.00%2100.00%

#endif

Overall Contributors

PersonTokensPropCommitsCommitProp
Alan Cox40799.51%133.33%
Greg Ungerer10.24%133.33%
Greg Kroah-Hartman10.24%133.33%
Total409100.00%3100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.