diff options
Diffstat (limited to 'arch/arm64/include/asm/debug-monitors.h')
-rw-r--r-- | arch/arm64/include/asm/debug-monitors.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/arch/arm64/include/asm/debug-monitors.h b/arch/arm64/include/asm/debug-monitors.h index ee9f28e245aa..6e9b5b36921c 100644 --- a/arch/arm64/include/asm/debug-monitors.h +++ b/arch/arm64/include/asm/debug-monitors.h | |||
@@ -26,6 +26,53 @@ | |||
26 | #define DBG_ESR_EVT_HWWP 0x2 | 26 | #define DBG_ESR_EVT_HWWP 0x2 |
27 | #define DBG_ESR_EVT_BRK 0x6 | 27 | #define DBG_ESR_EVT_BRK 0x6 |
28 | 28 | ||
29 | /* | ||
30 | * Break point instruction encoding | ||
31 | */ | ||
32 | #define BREAK_INSTR_SIZE 4 | ||
33 | |||
34 | /* | ||
35 | * ESR values expected for dynamic and compile time BRK instruction | ||
36 | */ | ||
37 | #define DBG_ESR_VAL_BRK(x) (0xf2000000 | ((x) & 0xfffff)) | ||
38 | |||
39 | /* | ||
40 | * #imm16 values used for BRK instruction generation | ||
41 | * Allowed values for kgbd are 0x400 - 0x7ff | ||
42 | * 0x400: for dynamic BRK instruction | ||
43 | * 0x401: for compile time BRK instruction | ||
44 | */ | ||
45 | #define KGDB_DYN_DGB_BRK_IMM 0x400 | ||
46 | #define KDBG_COMPILED_DBG_BRK_IMM 0x401 | ||
47 | |||
48 | /* | ||
49 | * BRK instruction encoding | ||
50 | * The #imm16 value should be placed at bits[20:5] within BRK ins | ||
51 | */ | ||
52 | #define AARCH64_BREAK_MON 0xd4200000 | ||
53 | |||
54 | /* | ||
55 | * Extract byte from BRK instruction | ||
56 | */ | ||
57 | #define KGDB_DYN_DGB_BRK_INS_BYTE(x) \ | ||
58 | ((((AARCH64_BREAK_MON) & 0xffe0001f) >> (x * 8)) & 0xff) | ||
59 | |||
60 | /* | ||
61 | * Extract byte from BRK #imm16 | ||
62 | */ | ||
63 | #define KGBD_DYN_DGB_BRK_IMM_BYTE(x) \ | ||
64 | (((((KGDB_DYN_DGB_BRK_IMM) & 0xffff) << 5) >> (x * 8)) & 0xff) | ||
65 | |||
66 | #define KGDB_DYN_DGB_BRK_BYTE(x) \ | ||
67 | (KGDB_DYN_DGB_BRK_INS_BYTE(x) | KGBD_DYN_DGB_BRK_IMM_BYTE(x)) | ||
68 | |||
69 | #define KGDB_DYN_BRK_INS_BYTE0 KGDB_DYN_DGB_BRK_BYTE(0) | ||
70 | #define KGDB_DYN_BRK_INS_BYTE1 KGDB_DYN_DGB_BRK_BYTE(1) | ||
71 | #define KGDB_DYN_BRK_INS_BYTE2 KGDB_DYN_DGB_BRK_BYTE(2) | ||
72 | #define KGDB_DYN_BRK_INS_BYTE3 KGDB_DYN_DGB_BRK_BYTE(3) | ||
73 | |||
74 | #define CACHE_FLUSH_IS_SAFE 1 | ||
75 | |||
29 | enum debug_el { | 76 | enum debug_el { |
30 | DBG_ACTIVE_EL0 = 0, | 77 | DBG_ACTIVE_EL0 = 0, |
31 | DBG_ACTIVE_EL1, | 78 | DBG_ACTIVE_EL1, |