ARM: hw_breakpoint: don't advertise reserved breakpoints
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / arch / arm / kernel / hw_breakpoint.c
blobb16c4568cb01cffbe0698bd3c650aebd58d0f9b0
1 /*
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.
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.
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.
15 * Copyright (C) 2009, 2010 ARM Limited
17 * Author: Will Deacon <will.deacon@arm.com>
21 * HW_breakpoint: a unified kernel/user-space hardware breakpoint facility,
22 * using the CPU's debug registers.
24 #define pr_fmt(fmt) "hw-breakpoint: " fmt
26 #include <linux/errno.h>
27 #include <linux/hardirq.h>
28 #include <linux/perf_event.h>
29 #include <linux/hw_breakpoint.h>
30 #include <linux/smp.h>
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>
40 /* Breakpoint currently in use for each BRP. */
41 static DEFINE_PER_CPU(struct perf_event *, bp_on_reg[ARM_MAX_BRP]);
43 /* Watchpoint currently in use for each WRP. */
44 static DEFINE_PER_CPU(struct perf_event *, wp_on_reg[ARM_MAX_WRP]);
46 /* Number of BRP/WRP registers on this CPU. */
47 static int core_num_brps;
48 static int core_num_reserved_brps;
49 static int core_num_wrps;
51 /* Debug architecture version. */
52 static u8 debug_arch;
54 /* Maximum supported watchpoint length. */
55 static u8 max_watchpoint_len;
57 #define READ_WB_REG_CASE(OP2, M, VAL) \
58 case ((OP2 << 4) + M): \
59 ARM_DBG_READ(c ## M, OP2, VAL); \
60 break
62 #define WRITE_WB_REG_CASE(OP2, M, VAL) \
63 case ((OP2 << 4) + M): \
64 ARM_DBG_WRITE(c ## M, OP2, VAL);\
65 break
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)
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)
103 static u32 read_wb_reg(int n)
105 u32 val = 0;
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);
117 return val;
120 static void write_wb_reg(int n, u32 val)
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);
131 isb();
134 /* Determine debug architecture. */
135 static u8 get_debug_arch(void)
137 u32 didr;
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;
146 ARM_DBG_READ(c0, 0, didr);
147 return (didr >> 16) & 0xf;
150 u8 arch_get_debug_arch(void)
152 return debug_arch;
155 /* Determine number of BRP register available. */
156 static int get_num_brp_resources(void)
158 u32 didr;
159 ARM_DBG_READ(c0, 0, didr);
160 return ((didr >> 24) & 0xf) + 1;
163 /* Does this core support mismatch breakpoints? */
164 static int core_has_mismatch_brps(void)
166 return (get_debug_arch() >= ARM_DEBUG_ARCH_V7_ECP14 &&
167 get_num_brp_resources() > 1);
170 /* Determine number of usable WRPs available. */
171 static int get_num_wrps(void)
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.
178 * Furthermore, we can only do this if the watchpoint was precise
179 * since imprecise watchpoints prevent us from calculating register
180 * based addresses.
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].
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;
199 if (core_has_mismatch_brps() && wrps >= get_num_brp_resources())
200 wrps = get_num_brp_resources() - 1;
202 return wrps;
205 /* We reserve one breakpoint for each watchpoint. */
206 static int get_num_reserved_brps(void)
208 if (core_has_mismatch_brps())
209 return get_num_wrps();
210 return 0;
213 /* Determine number of usable BRPs available. */
214 static int get_num_brps(void)
216 int brps = get_num_brp_resources();
217 if (core_has_mismatch_brps())
218 brps -= get_num_reserved_brps();
219 return brps;
222 int hw_breakpoint_slots(int type)
225 * We can be called early, so don't rely on
226 * our static variables being initialised.
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;
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.
245 static int enable_monitor_mode(void)
247 u32 dscr;
248 int ret = 0;
250 ARM_DBG_READ(c1, 0, dscr);
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;
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;
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;
280 out:
281 return ret;
285 * Check if 8-bit byte-address select is available.
286 * This clobbers WRP 0.
288 static u8 get_max_wp_len(void)
290 u32 ctrl_reg;
291 struct arch_hw_breakpoint_ctrl ctrl;
292 u8 size = 4;
294 if (debug_arch < ARM_DEBUG_ARCH_V7_ECP14)
295 goto out;
297 if (enable_monitor_mode())
298 goto out;
300 memset(&ctrl, 0, sizeof(ctrl));
301 ctrl.len = ARM_BREAKPOINT_LEN_8;
302 ctrl_reg = encode_ctrl_reg(ctrl);
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;
309 out:
310 return size;
313 u8 arch_get_max_wp_len(void)
315 return max_watchpoint_len;
319 * Handler for reactivating a suspended watchpoint when the single
320 * step `mismatch' breakpoint is triggered.
322 static void wp_single_step_handler(struct perf_event *bp, int unused,
323 struct perf_sample_data *data,
324 struct pt_regs *regs)
326 perf_event_enable(counter_arch_bp(bp)->suspended_wp);
327 unregister_hw_breakpoint(bp);
330 static int bp_is_single_step(struct perf_event *bp)
332 return bp->overflow_handler == wp_single_step_handler;
336 * Install a perf counter breakpoint.
338 int arch_install_hw_breakpoint(struct perf_event *bp)
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;
344 /* Ensure that we are in monitor mode and halting mode is disabled. */
345 ret = enable_monitor_mode();
346 if (ret)
347 goto out;
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);
354 max_slots = core_num_brps;
356 if (bp_is_single_step(bp)) {
357 info->ctrl.mismatch = 1;
358 i = max_slots;
359 slots[i] = bp;
360 goto setup;
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;
370 for (i = 0; i < max_slots; ++i) {
371 slot = &slots[i];
373 if (!*slot) {
374 *slot = bp;
375 break;
379 if (WARN_ONCE(i == max_slots, "Can't find any breakpoint slot")) {
380 ret = -EBUSY;
381 goto out;
384 setup:
385 /* Setup the address register. */
386 write_wb_reg(val_base + i, info->address);
388 /* Setup the control register. */
389 write_wb_reg(ctrl_base + i, encode_ctrl_reg(info->ctrl) | 0x1);
391 out:
392 return ret;
395 void arch_uninstall_hw_breakpoint(struct perf_event *bp)
397 struct arch_hw_breakpoint *info = counter_arch_bp(bp);
398 struct perf_event **slot, **slots;
399 int i, max_slots, base;
401 if (info->ctrl.type == ARM_BREAKPOINT_EXECUTE) {
402 /* Breakpoint */
403 base = ARM_BASE_BCR;
404 slots = __get_cpu_var(bp_on_reg);
405 max_slots = core_num_brps;
407 if (bp_is_single_step(bp)) {
408 i = max_slots;
409 slots[i] = NULL;
410 goto reset;
412 } else {
413 /* Watchpoint */
414 base = ARM_BASE_WCR;
415 slots = __get_cpu_var(wp_on_reg);
416 max_slots = core_num_wrps;
419 /* Remove the breakpoint. */
420 for (i = 0; i < max_slots; ++i) {
421 slot = &slots[i];
423 if (*slot == bp) {
424 *slot = NULL;
425 break;
429 if (WARN_ONCE(i == max_slots, "Can't find any breakpoint slot"))
430 return;
432 reset:
433 /* Reset the control register. */
434 write_wb_reg(base + i, 0);
437 static int get_hbp_len(u8 hbp_len)
439 unsigned int len_in_bytes = 0;
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;
456 return len_in_bytes;
460 * Check whether bp virtual address is in kernel space.
462 int arch_check_bp_in_kernelspace(struct perf_event *bp)
464 unsigned int len;
465 unsigned long va;
466 struct arch_hw_breakpoint *info = counter_arch_bp(bp);
468 va = info->address;
469 len = get_hbp_len(info->ctrl.len);
471 return (va >= TASK_SIZE) && ((va + len - 1) >= TASK_SIZE);
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.
479 int arch_bp_generic_fields(struct arch_hw_breakpoint_ctrl ctrl,
480 int *gen_len, int *gen_type)
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;
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;
518 return 0;
522 * Construct an arch_hw_breakpoint from a perf_event.
524 static int arch_build_bp_info(struct perf_event *bp)
526 struct arch_hw_breakpoint *info = counter_arch_bp(bp);
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;
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;
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.
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;
577 /* Address */
578 info->address = bp->attr.bp_addr;
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;
585 /* Enabled? */
586 info->ctrl.enabled = !bp->attr.disabled;
588 /* Mismatch */
589 info->ctrl.mismatch = 0;
591 return 0;
595 * Validate the arch-specific HW Breakpoint register settings.
597 int arch_validate_hwbkpt_settings(struct perf_event *bp)
599 struct arch_hw_breakpoint *info = counter_arch_bp(bp);
600 int ret = 0;
601 u32 offset, alignment_mask = 0x3;
603 /* Build the arch_hw_breakpoint. */
604 ret = arch_build_bp_info(bp);
605 if (ret)
606 goto out;
608 /* Check address alignment. */
609 if (info->ctrl.len == ARM_BREAKPOINT_LEN_8)
610 alignment_mask = 0x7;
611 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;
629 info->address &= ~alignment_mask;
630 info->ctrl.len <<= offset;
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.
638 if (WARN_ONCE(!bp->overflow_handler &&
639 (arch_check_bp_in_kernelspace(bp) || !core_has_mismatch_brps()),
640 "overflow handler required but none found")) {
641 ret = -EINVAL;
643 out:
644 return ret;
647 static void update_mismatch_flag(int idx, int flag)
649 struct perf_event *bp = __get_cpu_var(bp_on_reg[idx]);
650 struct arch_hw_breakpoint *info;
652 if (bp == NULL)
653 return;
655 info = counter_arch_bp(bp);
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);
664 static void watchpoint_handler(unsigned long unknown, struct pt_regs *regs)
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;
671 /* Without a disassembler, we can only handle 1 watchpoint. */
672 BUG_ON(core_num_wrps > 1);
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;
679 for (i = 0; i < core_num_wrps; ++i) {
680 rcu_read_lock();
682 if (slots[i] == NULL) {
683 rcu_read_unlock();
684 continue;
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.
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);
698 * If no overflow handler is present, insert a temporary
699 * mismatch breakpoint so we can single-step over the
700 * watchpoint trigger.
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]);
710 rcu_read_unlock();
714 static void breakpoint_handler(unsigned long unknown, struct pt_regs *regs)
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;
723 /* The exception entry code places the amended lr in the PC. */
724 addr = regs->ARM_pc;
726 for (i = 0; i < core_num_brps + core_num_reserved_brps; ++i) {
727 rcu_read_lock();
729 bp = slots[i];
731 if (bp == NULL) {
732 rcu_read_unlock();
733 continue;
736 mismatch = 0;
738 /* Check if the breakpoint value matches. */
739 val = read_wb_reg(ARM_BASE_BVR + i);
740 if (val != (addr & ~0x3))
741 goto unlock;
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;
752 unlock:
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);
758 update_mismatch_flag(i, mismatch);
759 rcu_read_unlock();
764 * Called from either the Data Abort Handler [watchpoint] or the
765 * Prefetch Abort Handler [breakpoint] with preemption disabled.
767 static int hw_breakpoint_pending(unsigned long addr, unsigned int fsr,
768 struct pt_regs *regs)
770 int ret = 0;
771 u32 dscr;
773 /* We must be called with preemption disabled. */
774 WARN_ON(preemptible());
776 /* We only handle watchpoints and hardware breakpoints. */
777 ARM_DBG_READ(c1, 0, dscr);
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:
785 WARN(1, "Asynchronous watchpoint exception taken. Debugging results may be unreliable\n");
786 case ARM_ENTRY_SYNC_WATCHPOINT:
787 watchpoint_handler(addr, regs);
788 break;
789 default:
790 ret = 1; /* Unhandled fault. */
794 * Re-enable preemption after it was disabled in the
795 * low-level exception handling code.
797 preempt_enable();
799 return ret;
803 * One-time initialisation.
805 static void reset_ctrl_regs(void *unused)
807 int i;
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.
817 if (debug_arch >= ARM_DEBUG_ARCH_V7_ECP14) {
819 * Unconditionally clear the lock by writing a value
820 * other than 0xC5ACCE55 to the access register.
822 asm volatile("mcr p14, 0, %0, c1, c0, 4" : : "r" (0));
823 isb();
826 if (enable_monitor_mode())
827 return;
829 /* We must also reset any reserved registers. */
830 for (i = 0; i < core_num_brps + core_num_reserved_brps; ++i) {
831 write_wb_reg(ARM_BASE_BCR + i, 0UL);
832 write_wb_reg(ARM_BASE_BVR + i, 0UL);
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);
841 static int __cpuinit dbg_reset_notify(struct notifier_block *self,
842 unsigned long action, void *cpu)
844 if (action == CPU_ONLINE)
845 smp_call_function_single((int)cpu, reset_ctrl_regs, NULL, 1);
846 return NOTIFY_OK;
849 static struct notifier_block __cpuinitdata dbg_reset_nb = {
850 .notifier_call = dbg_reset_notify,
853 static int __init arch_hw_breakpoint_init(void)
855 int ret = 0;
856 u32 dscr;
858 debug_arch = get_debug_arch();
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;
866 /* Determine how many BRPs/WRPs are available. */
867 core_num_brps = get_num_brps();
868 core_num_reserved_brps = get_num_reserved_brps();
869 core_num_wrps = get_num_wrps();
871 pr_info("found %d breakpoint and %d watchpoint registers.\n",
872 core_num_brps + core_num_reserved_brps, core_num_wrps);
874 if (core_num_reserved_brps)
875 pr_info("%d breakpoint(s) reserved for watchpoint "
876 "single-step.\n", core_num_reserved_brps);
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 {
884 * Reset the breakpoint resources. We assume that a halting
885 * debugger will leave the world in a nice state for us.
887 smp_call_function(reset_ctrl_regs, NULL, 1);
888 reset_ctrl_regs(NULL);
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);
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");
902 /* Register hotplug notifier. */
903 register_cpu_notifier(&dbg_reset_nb);
904 out:
905 return ret;
907 arch_initcall(arch_hw_breakpoint_init);
909 void hw_breakpoint_pmu_read(struct perf_event *bp)
914 * Dummy function to register with die_notifier.
916 int hw_breakpoint_exceptions_notify(struct notifier_block *unused,
917 unsigned long val, void *data)
919 return NOTIFY_DONE;