blob: b16c4568cb01cffbe0698bd3c650aebd58d0f9b0 [file] [log] [blame]
Will Deaconf81ef4a2010-09-03 10:41:08 +01001/*
2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License version 2 as
4 * published by the Free Software Foundation.
5 *
6 * This program is distributed in the hope that it will be useful,
7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 * GNU General Public License for more details.
10 *
11 * You should have received a copy of the GNU General Public License
12 * along with this program; if not, write to the Free Software
13 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
14 *
15 * Copyright (C) 2009, 2010 ARM Limited
16 *
17 * Author: Will Deacon <will.deacon@arm.com>
18 */
19
20/*
21 * HW_breakpoint: a unified kernel/user-space hardware breakpoint facility,
22 * using the CPU's debug registers.
23 */
24#define pr_fmt(fmt) "hw-breakpoint: " fmt
25
26#include <linux/errno.h>
Will Deacon7e202692010-11-28 14:57:24 +000027#include <linux/hardirq.h>
Will Deaconf81ef4a2010-09-03 10:41:08 +010028#include <linux/perf_event.h>
29#include <linux/hw_breakpoint.h>
30#include <linux/smp.h>
31
32#include <asm/cacheflush.h>
33#include <asm/cputype.h>
34#include <asm/current.h>
35#include <asm/hw_breakpoint.h>
36#include <asm/kdebug.h>
37#include <asm/system.h>
38#include <asm/traps.h>
39
40/* Breakpoint currently in use for each BRP. */
41static DEFINE_PER_CPU(struct perf_event *, bp_on_reg[ARM_MAX_BRP]);
42
43/* Watchpoint currently in use for each WRP. */
44static DEFINE_PER_CPU(struct perf_event *, wp_on_reg[ARM_MAX_WRP]);
45
46/* Number of BRP/WRP registers on this CPU. */
47static int core_num_brps;
Will Deacon0017ff42010-11-28 15:09:36 +000048static int core_num_reserved_brps;
Will Deaconf81ef4a2010-09-03 10:41:08 +010049static int core_num_wrps;
50
51/* Debug architecture version. */
52static u8 debug_arch;
53
54/* Maximum supported watchpoint length. */
55static u8 max_watchpoint_len;
56
Will Deaconf81ef4a2010-09-03 10:41:08 +010057#define READ_WB_REG_CASE(OP2, M, VAL) \
58 case ((OP2 << 4) + M): \
59 ARM_DBG_READ(c ## M, OP2, VAL); \
60 break
61
62#define WRITE_WB_REG_CASE(OP2, M, VAL) \
63 case ((OP2 << 4) + M): \
64 ARM_DBG_WRITE(c ## M, OP2, VAL);\
65 break
66
67#define GEN_READ_WB_REG_CASES(OP2, VAL) \
68 READ_WB_REG_CASE(OP2, 0, VAL); \
69 READ_WB_REG_CASE(OP2, 1, VAL); \
70 READ_WB_REG_CASE(OP2, 2, VAL); \
71 READ_WB_REG_CASE(OP2, 3, VAL); \
72 READ_WB_REG_CASE(OP2, 4, VAL); \
73 READ_WB_REG_CASE(OP2, 5, VAL); \
74 READ_WB_REG_CASE(OP2, 6, VAL); \
75 READ_WB_REG_CASE(OP2, 7, VAL); \
76 READ_WB_REG_CASE(OP2, 8, VAL); \
77 READ_WB_REG_CASE(OP2, 9, VAL); \
78 READ_WB_REG_CASE(OP2, 10, VAL); \
79 READ_WB_REG_CASE(OP2, 11, VAL); \
80 READ_WB_REG_CASE(OP2, 12, VAL); \
81 READ_WB_REG_CASE(OP2, 13, VAL); \
82 READ_WB_REG_CASE(OP2, 14, VAL); \
83 READ_WB_REG_CASE(OP2, 15, VAL)
84
85#define GEN_WRITE_WB_REG_CASES(OP2, VAL) \
86 WRITE_WB_REG_CASE(OP2, 0, VAL); \
87 WRITE_WB_REG_CASE(OP2, 1, VAL); \
88 WRITE_WB_REG_CASE(OP2, 2, VAL); \
89 WRITE_WB_REG_CASE(OP2, 3, VAL); \
90 WRITE_WB_REG_CASE(OP2, 4, VAL); \
91 WRITE_WB_REG_CASE(OP2, 5, VAL); \
92 WRITE_WB_REG_CASE(OP2, 6, VAL); \
93 WRITE_WB_REG_CASE(OP2, 7, VAL); \
94 WRITE_WB_REG_CASE(OP2, 8, VAL); \
95 WRITE_WB_REG_CASE(OP2, 9, VAL); \
96 WRITE_WB_REG_CASE(OP2, 10, VAL); \
97 WRITE_WB_REG_CASE(OP2, 11, VAL); \
98 WRITE_WB_REG_CASE(OP2, 12, VAL); \
99 WRITE_WB_REG_CASE(OP2, 13, VAL); \
100 WRITE_WB_REG_CASE(OP2, 14, VAL); \
101 WRITE_WB_REG_CASE(OP2, 15, VAL)
102
103static u32 read_wb_reg(int n)
104{
105 u32 val = 0;
106
107 switch (n) {
108 GEN_READ_WB_REG_CASES(ARM_OP2_BVR, val);
109 GEN_READ_WB_REG_CASES(ARM_OP2_BCR, val);
110 GEN_READ_WB_REG_CASES(ARM_OP2_WVR, val);
111 GEN_READ_WB_REG_CASES(ARM_OP2_WCR, val);
112 default:
113 pr_warning("attempt to read from unknown breakpoint "
114 "register %d\n", n);
115 }
116
117 return val;
118}
119
120static void write_wb_reg(int n, u32 val)
121{
122 switch (n) {
123 GEN_WRITE_WB_REG_CASES(ARM_OP2_BVR, val);
124 GEN_WRITE_WB_REG_CASES(ARM_OP2_BCR, val);
125 GEN_WRITE_WB_REG_CASES(ARM_OP2_WVR, val);
126 GEN_WRITE_WB_REG_CASES(ARM_OP2_WCR, val);
127 default:
128 pr_warning("attempt to write to unknown breakpoint "
129 "register %d\n", n);
130 }
131 isb();
132}
133
Will Deacon0017ff42010-11-28 15:09:36 +0000134/* Determine debug architecture. */
135static u8 get_debug_arch(void)
136{
137 u32 didr;
138
139 /* Do we implement the extended CPUID interface? */
140 if (((read_cpuid_id() >> 16) & 0xf) != 0xf) {
141 pr_warning("CPUID feature registers not supported. "
142 "Assuming v6 debug is present.\n");
143 return ARM_DEBUG_ARCH_V6;
144 }
145
146 ARM_DBG_READ(c0, 0, didr);
147 return (didr >> 16) & 0xf;
148}
149
150u8 arch_get_debug_arch(void)
151{
152 return debug_arch;
153}
154
155/* Determine number of BRP register available. */
156static int get_num_brp_resources(void)
157{
158 u32 didr;
159 ARM_DBG_READ(c0, 0, didr);
160 return ((didr >> 24) & 0xf) + 1;
161}
162
163/* Does this core support mismatch breakpoints? */
164static int core_has_mismatch_brps(void)
165{
166 return (get_debug_arch() >= ARM_DEBUG_ARCH_V7_ECP14 &&
167 get_num_brp_resources() > 1);
168}
169
170/* Determine number of usable WRPs available. */
171static int get_num_wrps(void)
172{
173 /*
174 * FIXME: When a watchpoint fires, the only way to work out which
175 * watchpoint it was is by disassembling the faulting instruction
176 * and working out the address of the memory access.
177 *
178 * Furthermore, we can only do this if the watchpoint was precise
179 * since imprecise watchpoints prevent us from calculating register
180 * based addresses.
181 *
182 * Providing we have more than 1 breakpoint register, we only report
183 * a single watchpoint register for the time being. This way, we always
184 * know which watchpoint fired. In the future we can either add a
185 * disassembler and address generation emulator, or we can insert a
186 * check to see if the DFAR is set on watchpoint exception entry
187 * [the ARM ARM states that the DFAR is UNKNOWN, but experience shows
188 * that it is set on some implementations].
189 */
190
191#if 0
192 int wrps;
193 u32 didr;
194 ARM_DBG_READ(c0, 0, didr);
195 wrps = ((didr >> 28) & 0xf) + 1;
196#endif
197 int wrps = 1;
198
199 if (core_has_mismatch_brps() && wrps >= get_num_brp_resources())
200 wrps = get_num_brp_resources() - 1;
201
202 return wrps;
203}
204
205/* We reserve one breakpoint for each watchpoint. */
206static int get_num_reserved_brps(void)
207{
208 if (core_has_mismatch_brps())
209 return get_num_wrps();
210 return 0;
211}
212
213/* Determine number of usable BRPs available. */
214static int get_num_brps(void)
215{
216 int brps = get_num_brp_resources();
217 if (core_has_mismatch_brps())
218 brps -= get_num_reserved_brps();
219 return brps;
220}
221
222int hw_breakpoint_slots(int type)
223{
224 /*
225 * We can be called early, so don't rely on
226 * our static variables being initialised.
227 */
228 switch (type) {
229 case TYPE_INST:
230 return get_num_brps();
231 case TYPE_DATA:
232 return get_num_wrps();
233 default:
234 pr_warning("unknown slot type: %d\n", type);
235 return 0;
236 }
237}
238
Will Deaconf81ef4a2010-09-03 10:41:08 +0100239/*
240 * In order to access the breakpoint/watchpoint control registers,
241 * we must be running in debug monitor mode. Unfortunately, we can
242 * be put into halting debug mode at any time by an external debugger
243 * but there is nothing we can do to prevent that.
244 */
245static int enable_monitor_mode(void)
246{
247 u32 dscr;
248 int ret = 0;
249
250 ARM_DBG_READ(c1, 0, dscr);
251
252 /* Ensure that halting mode is disabled. */
253 if (WARN_ONCE(dscr & ARM_DSCR_HDBGEN, "halting debug mode enabled."
254 "Unable to access hardware resources.")) {
255 ret = -EPERM;
256 goto out;
257 }
258
259 /* Write to the corresponding DSCR. */
260 switch (debug_arch) {
261 case ARM_DEBUG_ARCH_V6:
262 case ARM_DEBUG_ARCH_V6_1:
263 ARM_DBG_WRITE(c1, 0, (dscr | ARM_DSCR_MDBGEN));
264 break;
265 case ARM_DEBUG_ARCH_V7_ECP14:
266 ARM_DBG_WRITE(c2, 2, (dscr | ARM_DSCR_MDBGEN));
267 break;
268 default:
269 ret = -ENODEV;
270 goto out;
271 }
272
273 /* Check that the write made it through. */
274 ARM_DBG_READ(c1, 0, dscr);
275 if (WARN_ONCE(!(dscr & ARM_DSCR_MDBGEN),
276 "failed to enable monitor mode.")) {
277 ret = -EPERM;
278 }
279
280out:
281 return ret;
282}
283
284/*
285 * Check if 8-bit byte-address select is available.
286 * This clobbers WRP 0.
287 */
288static u8 get_max_wp_len(void)
289{
290 u32 ctrl_reg;
291 struct arch_hw_breakpoint_ctrl ctrl;
292 u8 size = 4;
293
294 if (debug_arch < ARM_DEBUG_ARCH_V7_ECP14)
295 goto out;
296
297 if (enable_monitor_mode())
298 goto out;
299
300 memset(&ctrl, 0, sizeof(ctrl));
301 ctrl.len = ARM_BREAKPOINT_LEN_8;
302 ctrl_reg = encode_ctrl_reg(ctrl);
303
304 write_wb_reg(ARM_BASE_WVR, 0);
305 write_wb_reg(ARM_BASE_WCR, ctrl_reg);
306 if ((read_wb_reg(ARM_BASE_WCR) & ctrl_reg) == ctrl_reg)
307 size = 8;
308
309out:
310 return size;
311}
312
313u8 arch_get_max_wp_len(void)
314{
315 return max_watchpoint_len;
316}
317
318/*
319 * Handler for reactivating a suspended watchpoint when the single
320 * step `mismatch' breakpoint is triggered.
321 */
322static void wp_single_step_handler(struct perf_event *bp, int unused,
323 struct perf_sample_data *data,
324 struct pt_regs *regs)
325{
326 perf_event_enable(counter_arch_bp(bp)->suspended_wp);
327 unregister_hw_breakpoint(bp);
328}
329
330static int bp_is_single_step(struct perf_event *bp)
331{
332 return bp->overflow_handler == wp_single_step_handler;
333}
334
335/*
336 * Install a perf counter breakpoint.
337 */
338int arch_install_hw_breakpoint(struct perf_event *bp)
339{
340 struct arch_hw_breakpoint *info = counter_arch_bp(bp);
341 struct perf_event **slot, **slots;
342 int i, max_slots, ctrl_base, val_base, ret = 0;
343
344 /* Ensure that we are in monitor mode and halting mode is disabled. */
345 ret = enable_monitor_mode();
346 if (ret)
347 goto out;
348
349 if (info->ctrl.type == ARM_BREAKPOINT_EXECUTE) {
350 /* Breakpoint */
351 ctrl_base = ARM_BASE_BCR;
352 val_base = ARM_BASE_BVR;
353 slots = __get_cpu_var(bp_on_reg);
Will Deacon0017ff42010-11-28 15:09:36 +0000354 max_slots = core_num_brps;
Will Deaconf81ef4a2010-09-03 10:41:08 +0100355
356 if (bp_is_single_step(bp)) {
357 info->ctrl.mismatch = 1;
358 i = max_slots;
359 slots[i] = bp;
360 goto setup;
361 }
362 } else {
363 /* Watchpoint */
364 ctrl_base = ARM_BASE_WCR;
365 val_base = ARM_BASE_WVR;
366 slots = __get_cpu_var(wp_on_reg);
367 max_slots = core_num_wrps;
368 }
369
370 for (i = 0; i < max_slots; ++i) {
371 slot = &slots[i];
372
373 if (!*slot) {
374 *slot = bp;
375 break;
376 }
377 }
378
379 if (WARN_ONCE(i == max_slots, "Can't find any breakpoint slot")) {
380 ret = -EBUSY;
381 goto out;
382 }
383
384setup:
385 /* Setup the address register. */
386 write_wb_reg(val_base + i, info->address);
387
388 /* Setup the control register. */
389 write_wb_reg(ctrl_base + i, encode_ctrl_reg(info->ctrl) | 0x1);
390
391out:
392 return ret;
393}
394
395void arch_uninstall_hw_breakpoint(struct perf_event *bp)
396{
397 struct arch_hw_breakpoint *info = counter_arch_bp(bp);
398 struct perf_event **slot, **slots;
399 int i, max_slots, base;
400
401 if (info->ctrl.type == ARM_BREAKPOINT_EXECUTE) {
402 /* Breakpoint */
403 base = ARM_BASE_BCR;
404 slots = __get_cpu_var(bp_on_reg);
Will Deacon0017ff42010-11-28 15:09:36 +0000405 max_slots = core_num_brps;
Will Deaconf81ef4a2010-09-03 10:41:08 +0100406
407 if (bp_is_single_step(bp)) {
408 i = max_slots;
409 slots[i] = NULL;
410 goto reset;
411 }
412 } else {
413 /* Watchpoint */
414 base = ARM_BASE_WCR;
415 slots = __get_cpu_var(wp_on_reg);
416 max_slots = core_num_wrps;
417 }
418
419 /* Remove the breakpoint. */
420 for (i = 0; i < max_slots; ++i) {
421 slot = &slots[i];
422
423 if (*slot == bp) {
424 *slot = NULL;
425 break;
426 }
427 }
428
429 if (WARN_ONCE(i == max_slots, "Can't find any breakpoint slot"))
430 return;
431
432reset:
433 /* Reset the control register. */
434 write_wb_reg(base + i, 0);
435}
436
437static int get_hbp_len(u8 hbp_len)
438{
439 unsigned int len_in_bytes = 0;
440
441 switch (hbp_len) {
442 case ARM_BREAKPOINT_LEN_1:
443 len_in_bytes = 1;
444 break;
445 case ARM_BREAKPOINT_LEN_2:
446 len_in_bytes = 2;
447 break;
448 case ARM_BREAKPOINT_LEN_4:
449 len_in_bytes = 4;
450 break;
451 case ARM_BREAKPOINT_LEN_8:
452 len_in_bytes = 8;
453 break;
454 }
455
456 return len_in_bytes;
457}
458
459/*
460 * Check whether bp virtual address is in kernel space.
461 */
462int arch_check_bp_in_kernelspace(struct perf_event *bp)
463{
464 unsigned int len;
465 unsigned long va;
466 struct arch_hw_breakpoint *info = counter_arch_bp(bp);
467
468 va = info->address;
469 len = get_hbp_len(info->ctrl.len);
470
471 return (va >= TASK_SIZE) && ((va + len - 1) >= TASK_SIZE);
472}
473
474/*
475 * Extract generic type and length encodings from an arch_hw_breakpoint_ctrl.
476 * Hopefully this will disappear when ptrace can bypass the conversion
477 * to generic breakpoint descriptions.
478 */
479int arch_bp_generic_fields(struct arch_hw_breakpoint_ctrl ctrl,
480 int *gen_len, int *gen_type)
481{
482 /* Type */
483 switch (ctrl.type) {
484 case ARM_BREAKPOINT_EXECUTE:
485 *gen_type = HW_BREAKPOINT_X;
486 break;
487 case ARM_BREAKPOINT_LOAD:
488 *gen_type = HW_BREAKPOINT_R;
489 break;
490 case ARM_BREAKPOINT_STORE:
491 *gen_type = HW_BREAKPOINT_W;
492 break;
493 case ARM_BREAKPOINT_LOAD | ARM_BREAKPOINT_STORE:
494 *gen_type = HW_BREAKPOINT_RW;
495 break;
496 default:
497 return -EINVAL;
498 }
499
500 /* Len */
501 switch (ctrl.len) {
502 case ARM_BREAKPOINT_LEN_1:
503 *gen_len = HW_BREAKPOINT_LEN_1;
504 break;
505 case ARM_BREAKPOINT_LEN_2:
506 *gen_len = HW_BREAKPOINT_LEN_2;
507 break;
508 case ARM_BREAKPOINT_LEN_4:
509 *gen_len = HW_BREAKPOINT_LEN_4;
510 break;
511 case ARM_BREAKPOINT_LEN_8:
512 *gen_len = HW_BREAKPOINT_LEN_8;
513 break;
514 default:
515 return -EINVAL;
516 }
517
518 return 0;
519}
520
521/*
522 * Construct an arch_hw_breakpoint from a perf_event.
523 */
524static int arch_build_bp_info(struct perf_event *bp)
525{
526 struct arch_hw_breakpoint *info = counter_arch_bp(bp);
527
528 /* Type */
529 switch (bp->attr.bp_type) {
530 case HW_BREAKPOINT_X:
531 info->ctrl.type = ARM_BREAKPOINT_EXECUTE;
532 break;
533 case HW_BREAKPOINT_R:
534 info->ctrl.type = ARM_BREAKPOINT_LOAD;
535 break;
536 case HW_BREAKPOINT_W:
537 info->ctrl.type = ARM_BREAKPOINT_STORE;
538 break;
539 case HW_BREAKPOINT_RW:
540 info->ctrl.type = ARM_BREAKPOINT_LOAD | ARM_BREAKPOINT_STORE;
541 break;
542 default:
543 return -EINVAL;
544 }
545
546 /* Len */
547 switch (bp->attr.bp_len) {
548 case HW_BREAKPOINT_LEN_1:
549 info->ctrl.len = ARM_BREAKPOINT_LEN_1;
550 break;
551 case HW_BREAKPOINT_LEN_2:
552 info->ctrl.len = ARM_BREAKPOINT_LEN_2;
553 break;
554 case HW_BREAKPOINT_LEN_4:
555 info->ctrl.len = ARM_BREAKPOINT_LEN_4;
556 break;
557 case HW_BREAKPOINT_LEN_8:
558 info->ctrl.len = ARM_BREAKPOINT_LEN_8;
559 if ((info->ctrl.type != ARM_BREAKPOINT_EXECUTE)
560 && max_watchpoint_len >= 8)
561 break;
562 default:
563 return -EINVAL;
564 }
565
Will Deacon6ee33c22010-11-25 12:01:54 +0000566 /*
567 * Breakpoints must be of length 2 (thumb) or 4 (ARM) bytes.
568 * Watchpoints can be of length 1, 2, 4 or 8 bytes if supported
569 * by the hardware and must be aligned to the appropriate number of
570 * bytes.
571 */
572 if (info->ctrl.type == ARM_BREAKPOINT_EXECUTE &&
573 info->ctrl.len != ARM_BREAKPOINT_LEN_2 &&
574 info->ctrl.len != ARM_BREAKPOINT_LEN_4)
575 return -EINVAL;
576
Will Deaconf81ef4a2010-09-03 10:41:08 +0100577 /* Address */
578 info->address = bp->attr.bp_addr;
579
580 /* Privilege */
581 info->ctrl.privilege = ARM_BREAKPOINT_USER;
582 if (arch_check_bp_in_kernelspace(bp) && !bp_is_single_step(bp))
583 info->ctrl.privilege |= ARM_BREAKPOINT_PRIV;
584
585 /* Enabled? */
586 info->ctrl.enabled = !bp->attr.disabled;
587
588 /* Mismatch */
589 info->ctrl.mismatch = 0;
590
591 return 0;
592}
593
594/*
595 * Validate the arch-specific HW Breakpoint register settings.
596 */
597int arch_validate_hwbkpt_settings(struct perf_event *bp)
598{
599 struct arch_hw_breakpoint *info = counter_arch_bp(bp);
600 int ret = 0;
Will Deacon6ee33c22010-11-25 12:01:54 +0000601 u32 offset, alignment_mask = 0x3;
Will Deaconf81ef4a2010-09-03 10:41:08 +0100602
603 /* Build the arch_hw_breakpoint. */
604 ret = arch_build_bp_info(bp);
605 if (ret)
606 goto out;
607
608 /* Check address alignment. */
609 if (info->ctrl.len == ARM_BREAKPOINT_LEN_8)
610 alignment_mask = 0x7;
Will Deacon6ee33c22010-11-25 12:01:54 +0000611 offset = info->address & alignment_mask;
612 switch (offset) {
613 case 0:
614 /* Aligned */
615 break;
616 case 1:
617 /* Allow single byte watchpoint. */
618 if (info->ctrl.len == ARM_BREAKPOINT_LEN_1)
619 break;
620 case 2:
621 /* Allow halfword watchpoints and breakpoints. */
622 if (info->ctrl.len == ARM_BREAKPOINT_LEN_2)
623 break;
624 default:
625 ret = -EINVAL;
626 goto out;
Will Deaconf81ef4a2010-09-03 10:41:08 +0100627 }
628
Will Deacon6ee33c22010-11-25 12:01:54 +0000629 info->address &= ~alignment_mask;
630 info->ctrl.len <<= offset;
631
Will Deaconf81ef4a2010-09-03 10:41:08 +0100632 /*
633 * Currently we rely on an overflow handler to take
634 * care of single-stepping the breakpoint when it fires.
635 * In the case of userspace breakpoints on a core with V7 debug,
636 * we can use the mismatch feature as a poor-man's hardware single-step.
637 */
638 if (WARN_ONCE(!bp->overflow_handler &&
Will Deacon0017ff42010-11-28 15:09:36 +0000639 (arch_check_bp_in_kernelspace(bp) || !core_has_mismatch_brps()),
Will Deaconf81ef4a2010-09-03 10:41:08 +0100640 "overflow handler required but none found")) {
641 ret = -EINVAL;
Will Deaconf81ef4a2010-09-03 10:41:08 +0100642 }
643out:
644 return ret;
645}
646
647static void update_mismatch_flag(int idx, int flag)
648{
649 struct perf_event *bp = __get_cpu_var(bp_on_reg[idx]);
650 struct arch_hw_breakpoint *info;
651
652 if (bp == NULL)
653 return;
654
655 info = counter_arch_bp(bp);
656
657 /* Update the mismatch field to enter/exit `single-step' mode */
658 if (!bp->overflow_handler && info->ctrl.mismatch != flag) {
659 info->ctrl.mismatch = flag;
660 write_wb_reg(ARM_BASE_BCR + idx, encode_ctrl_reg(info->ctrl) | 0x1);
661 }
662}
663
664static void watchpoint_handler(unsigned long unknown, struct pt_regs *regs)
665{
666 int i;
667 struct perf_event *bp, **slots = __get_cpu_var(wp_on_reg);
668 struct arch_hw_breakpoint *info;
669 struct perf_event_attr attr;
670
671 /* Without a disassembler, we can only handle 1 watchpoint. */
672 BUG_ON(core_num_wrps > 1);
673
674 hw_breakpoint_init(&attr);
675 attr.bp_addr = regs->ARM_pc & ~0x3;
676 attr.bp_len = HW_BREAKPOINT_LEN_4;
677 attr.bp_type = HW_BREAKPOINT_X;
678
679 for (i = 0; i < core_num_wrps; ++i) {
680 rcu_read_lock();
681
682 if (slots[i] == NULL) {
683 rcu_read_unlock();
684 continue;
685 }
686
687 /*
688 * The DFAR is an unknown value. Since we only allow a
689 * single watchpoint, we can set the trigger to the lowest
690 * possible faulting address.
691 */
692 info = counter_arch_bp(slots[i]);
693 info->trigger = slots[i]->attr.bp_addr;
694 pr_debug("watchpoint fired: address = 0x%x\n", info->trigger);
695 perf_bp_event(slots[i], regs);
696
697 /*
698 * If no overflow handler is present, insert a temporary
699 * mismatch breakpoint so we can single-step over the
700 * watchpoint trigger.
701 */
702 if (!slots[i]->overflow_handler) {
703 bp = register_user_hw_breakpoint(&attr,
704 wp_single_step_handler,
705 current);
706 counter_arch_bp(bp)->suspended_wp = slots[i];
707 perf_event_disable(slots[i]);
708 }
709
710 rcu_read_unlock();
711 }
712}
713
714static void breakpoint_handler(unsigned long unknown, struct pt_regs *regs)
715{
716 int i;
717 int mismatch;
718 u32 ctrl_reg, val, addr;
719 struct perf_event *bp, **slots = __get_cpu_var(bp_on_reg);
720 struct arch_hw_breakpoint *info;
721 struct arch_hw_breakpoint_ctrl ctrl;
722
723 /* The exception entry code places the amended lr in the PC. */
724 addr = regs->ARM_pc;
725
Will Deacon0017ff42010-11-28 15:09:36 +0000726 for (i = 0; i < core_num_brps + core_num_reserved_brps; ++i) {
Will Deaconf81ef4a2010-09-03 10:41:08 +0100727 rcu_read_lock();
728
729 bp = slots[i];
730
731 if (bp == NULL) {
732 rcu_read_unlock();
733 continue;
734 }
735
736 mismatch = 0;
737
738 /* Check if the breakpoint value matches. */
739 val = read_wb_reg(ARM_BASE_BVR + i);
740 if (val != (addr & ~0x3))
741 goto unlock;
742
743 /* Possible match, check the byte address select to confirm. */
744 ctrl_reg = read_wb_reg(ARM_BASE_BCR + i);
745 decode_ctrl_reg(ctrl_reg, &ctrl);
746 if ((1 << (addr & 0x3)) & ctrl.len) {
747 mismatch = 1;
748 info = counter_arch_bp(bp);
749 info->trigger = addr;
750 }
751
752unlock:
753 if ((mismatch && !info->ctrl.mismatch) || bp_is_single_step(bp)) {
754 pr_debug("breakpoint fired: address = 0x%x\n", addr);
755 perf_bp_event(bp, regs);
756 }
757
758 update_mismatch_flag(i, mismatch);
759 rcu_read_unlock();
760 }
761}
762
763/*
764 * Called from either the Data Abort Handler [watchpoint] or the
Will Deacon7e202692010-11-28 14:57:24 +0000765 * Prefetch Abort Handler [breakpoint] with preemption disabled.
Will Deaconf81ef4a2010-09-03 10:41:08 +0100766 */
767static int hw_breakpoint_pending(unsigned long addr, unsigned int fsr,
768 struct pt_regs *regs)
769{
Will Deacon7e202692010-11-28 14:57:24 +0000770 int ret = 0;
Will Deaconf81ef4a2010-09-03 10:41:08 +0100771 u32 dscr;
772
Will Deacon7e202692010-11-28 14:57:24 +0000773 /* We must be called with preemption disabled. */
774 WARN_ON(preemptible());
775
Will Deaconf81ef4a2010-09-03 10:41:08 +0100776 /* We only handle watchpoints and hardware breakpoints. */
777 ARM_DBG_READ(c1, 0, dscr);
778
779 /* Perform perf callbacks. */
780 switch (ARM_DSCR_MOE(dscr)) {
781 case ARM_ENTRY_BREAKPOINT:
782 breakpoint_handler(addr, regs);
783 break;
784 case ARM_ENTRY_ASYNC_WATCHPOINT:
Joe Perches235584b2010-10-30 14:21:24 -0700785 WARN(1, "Asynchronous watchpoint exception taken. Debugging results may be unreliable\n");
Will Deaconf81ef4a2010-09-03 10:41:08 +0100786 case ARM_ENTRY_SYNC_WATCHPOINT:
787 watchpoint_handler(addr, regs);
788 break;
789 default:
Will Deacon7e202692010-11-28 14:57:24 +0000790 ret = 1; /* Unhandled fault. */
Will Deaconf81ef4a2010-09-03 10:41:08 +0100791 }
792
Will Deacon7e202692010-11-28 14:57:24 +0000793 /*
794 * Re-enable preemption after it was disabled in the
795 * low-level exception handling code.
796 */
797 preempt_enable();
798
Will Deaconf81ef4a2010-09-03 10:41:08 +0100799 return ret;
800}
801
802/*
803 * One-time initialisation.
804 */
Will Deacon7d993312010-11-24 17:45:49 +0000805static void reset_ctrl_regs(void *unused)
Will Deaconf81ef4a2010-09-03 10:41:08 +0100806{
807 int i;
808
Will Deaconac88e072010-11-24 16:51:17 +0000809 /*
810 * v7 debug contains save and restore registers so that debug state
811 * can be maintained across low-power modes without leaving
812 * the debug logic powered up. It is IMPLEMENTATION DEFINED whether
813 * we can write to the debug registers out of reset, so we must
814 * unlock the OS Lock Access Register to avoid taking undefined
815 * instruction exceptions later on.
816 */
817 if (debug_arch >= ARM_DEBUG_ARCH_V7_ECP14) {
818 /*
819 * Unconditionally clear the lock by writing a value
820 * other than 0xC5ACCE55 to the access register.
821 */
822 asm volatile("mcr p14, 0, %0, c1, c0, 4" : : "r" (0));
823 isb();
824 }
825
Will Deaconf81ef4a2010-09-03 10:41:08 +0100826 if (enable_monitor_mode())
827 return;
828
Will Deacon0017ff42010-11-28 15:09:36 +0000829 /* We must also reset any reserved registers. */
830 for (i = 0; i < core_num_brps + core_num_reserved_brps; ++i) {
Will Deaconf81ef4a2010-09-03 10:41:08 +0100831 write_wb_reg(ARM_BASE_BCR + i, 0UL);
832 write_wb_reg(ARM_BASE_BVR + i, 0UL);
833 }
834
835 for (i = 0; i < core_num_wrps; ++i) {
836 write_wb_reg(ARM_BASE_WCR + i, 0UL);
837 write_wb_reg(ARM_BASE_WVR + i, 0UL);
838 }
839}
840
Will Deacon7d993312010-11-24 17:45:49 +0000841static int __cpuinit dbg_reset_notify(struct notifier_block *self,
842 unsigned long action, void *cpu)
843{
844 if (action == CPU_ONLINE)
845 smp_call_function_single((int)cpu, reset_ctrl_regs, NULL, 1);
846 return NOTIFY_OK;
847}
848
849static struct notifier_block __cpuinitdata dbg_reset_nb = {
850 .notifier_call = dbg_reset_notify,
851};
852
Will Deaconf81ef4a2010-09-03 10:41:08 +0100853static int __init arch_hw_breakpoint_init(void)
854{
855 int ret = 0;
856 u32 dscr;
857
858 debug_arch = get_debug_arch();
859
860 if (debug_arch > ARM_DEBUG_ARCH_V7_ECP14) {
861 pr_info("debug architecture 0x%x unsupported.\n", debug_arch);
862 ret = -ENODEV;
863 goto out;
864 }
865
866 /* Determine how many BRPs/WRPs are available. */
867 core_num_brps = get_num_brps();
Will Deacon0017ff42010-11-28 15:09:36 +0000868 core_num_reserved_brps = get_num_reserved_brps();
Will Deaconf81ef4a2010-09-03 10:41:08 +0100869 core_num_wrps = get_num_wrps();
870
871 pr_info("found %d breakpoint and %d watchpoint registers.\n",
Will Deacon0017ff42010-11-28 15:09:36 +0000872 core_num_brps + core_num_reserved_brps, core_num_wrps);
Will Deaconf81ef4a2010-09-03 10:41:08 +0100873
Will Deacon0017ff42010-11-28 15:09:36 +0000874 if (core_num_reserved_brps)
875 pr_info("%d breakpoint(s) reserved for watchpoint "
876 "single-step.\n", core_num_reserved_brps);
Will Deaconf81ef4a2010-09-03 10:41:08 +0100877
878 ARM_DBG_READ(c1, 0, dscr);
879 if (dscr & ARM_DSCR_HDBGEN) {
880 pr_warning("halting debug mode enabled. Assuming maximum "
881 "watchpoint size of 4 bytes.");
882 } else {
Will Deaconf81ef4a2010-09-03 10:41:08 +0100883 /*
884 * Reset the breakpoint resources. We assume that a halting
885 * debugger will leave the world in a nice state for us.
886 */
887 smp_call_function(reset_ctrl_regs, NULL, 1);
888 reset_ctrl_regs(NULL);
Will Deaconac88e072010-11-24 16:51:17 +0000889
890 /* Work out the maximum supported watchpoint length. */
891 max_watchpoint_len = get_max_wp_len();
892 pr_info("maximum watchpoint size is %u bytes.\n",
893 max_watchpoint_len);
Will Deaconf81ef4a2010-09-03 10:41:08 +0100894 }
895
896 /* Register debug fault handler. */
897 hook_fault_code(2, hw_breakpoint_pending, SIGTRAP, TRAP_HWBKPT,
898 "watchpoint debug exception");
899 hook_ifault_code(2, hw_breakpoint_pending, SIGTRAP, TRAP_HWBKPT,
900 "breakpoint debug exception");
901
Will Deacon7d993312010-11-24 17:45:49 +0000902 /* Register hotplug notifier. */
903 register_cpu_notifier(&dbg_reset_nb);
Will Deaconf81ef4a2010-09-03 10:41:08 +0100904out:
905 return ret;
906}
907arch_initcall(arch_hw_breakpoint_init);
908
909void hw_breakpoint_pmu_read(struct perf_event *bp)
910{
911}
912
913/*
914 * Dummy function to register with die_notifier.
915 */
916int hw_breakpoint_exceptions_notify(struct notifier_block *unused,
917 unsigned long val, void *data)
918{
919 return NOTIFY_DONE;
920}