diff options
| author | Tony Lindgren <tony@atomide.com> | 2011-03-10 21:54:14 -0500 |
|---|---|---|
| committer | Tony Lindgren <tony@atomide.com> | 2011-03-10 21:54:14 -0500 |
| commit | 94a06b74e724caabcf0464c81527cfbcae0c8aff (patch) | |
| tree | 3570b6a627382a5eb5c8328b4959f615544d8e62 /arch/arm/kernel | |
| parent | 0dde52a9f5330eec240660191a94b51bd911ffcd (diff) | |
| parent | 9062511097683b4422f023d181b4a8b2db1a7a72 (diff) | |
Merge branch 'for_2.6.39/pm-misc' of ssh://master.kernel.org/pub/scm/linux/kernel/git/khilman/linux-omap-pm into omap-for-linus
Diffstat (limited to 'arch/arm/kernel')
| -rw-r--r-- | arch/arm/kernel/hw_breakpoint.c | 26 | ||||
| -rw-r--r-- | arch/arm/kernel/ptrace.c | 6 |
2 files changed, 26 insertions, 6 deletions
diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c index d600bd350704..44b84fe6e1b0 100644 --- a/arch/arm/kernel/hw_breakpoint.c +++ b/arch/arm/kernel/hw_breakpoint.c | |||
| @@ -836,9 +836,11 @@ static int hw_breakpoint_pending(unsigned long addr, unsigned int fsr, | |||
| 836 | /* | 836 | /* |
| 837 | * One-time initialisation. | 837 | * One-time initialisation. |
| 838 | */ | 838 | */ |
| 839 | static void reset_ctrl_regs(void *unused) | 839 | static void reset_ctrl_regs(void *info) |
| 840 | { | 840 | { |
| 841 | int i; | 841 | int i, cpu = smp_processor_id(); |
| 842 | u32 dbg_power; | ||
| 843 | cpumask_t *cpumask = info; | ||
| 842 | 844 | ||
| 843 | /* | 845 | /* |
| 844 | * v7 debug contains save and restore registers so that debug state | 846 | * v7 debug contains save and restore registers so that debug state |
| @@ -850,6 +852,17 @@ static void reset_ctrl_regs(void *unused) | |||
| 850 | */ | 852 | */ |
| 851 | if (debug_arch >= ARM_DEBUG_ARCH_V7_ECP14) { | 853 | if (debug_arch >= ARM_DEBUG_ARCH_V7_ECP14) { |
| 852 | /* | 854 | /* |
| 855 | * Ensure sticky power-down is clear (i.e. debug logic is | ||
| 856 | * powered up). | ||
| 857 | */ | ||
| 858 | asm volatile("mrc p14, 0, %0, c1, c5, 4" : "=r" (dbg_power)); | ||
| 859 | if ((dbg_power & 0x1) == 0) { | ||
| 860 | pr_warning("CPU %d debug is powered down!\n", cpu); | ||
| 861 | cpumask_or(cpumask, cpumask, cpumask_of(cpu)); | ||
| 862 | return; | ||
| 863 | } | ||
| 864 | |||
| 865 | /* | ||
| 853 | * Unconditionally clear the lock by writing a value | 866 | * Unconditionally clear the lock by writing a value |
| 854 | * other than 0xC5ACCE55 to the access register. | 867 | * other than 0xC5ACCE55 to the access register. |
| 855 | */ | 868 | */ |
| @@ -887,6 +900,7 @@ static struct notifier_block __cpuinitdata dbg_reset_nb = { | |||
| 887 | static int __init arch_hw_breakpoint_init(void) | 900 | static int __init arch_hw_breakpoint_init(void) |
| 888 | { | 901 | { |
| 889 | u32 dscr; | 902 | u32 dscr; |
| 903 | cpumask_t cpumask = { CPU_BITS_NONE }; | ||
| 890 | 904 | ||
| 891 | debug_arch = get_debug_arch(); | 905 | debug_arch = get_debug_arch(); |
| 892 | 906 | ||
| @@ -911,7 +925,13 @@ static int __init arch_hw_breakpoint_init(void) | |||
| 911 | * Reset the breakpoint resources. We assume that a halting | 925 | * Reset the breakpoint resources. We assume that a halting |
| 912 | * debugger will leave the world in a nice state for us. | 926 | * debugger will leave the world in a nice state for us. |
| 913 | */ | 927 | */ |
| 914 | on_each_cpu(reset_ctrl_regs, NULL, 1); | 928 | on_each_cpu(reset_ctrl_regs, &cpumask, 1); |
| 929 | if (!cpumask_empty(&cpumask)) { | ||
| 930 | core_num_brps = 0; | ||
| 931 | core_num_reserved_brps = 0; | ||
| 932 | core_num_wrps = 0; | ||
| 933 | return 0; | ||
| 934 | } | ||
| 915 | 935 | ||
| 916 | ARM_DBG_READ(c1, 0, dscr); | 936 | ARM_DBG_READ(c1, 0, dscr); |
| 917 | if (dscr & ARM_DSCR_HDBGEN) { | 937 | if (dscr & ARM_DSCR_HDBGEN) { |
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c index 19c6816db61e..b13e70f63d71 100644 --- a/arch/arm/kernel/ptrace.c +++ b/arch/arm/kernel/ptrace.c | |||
| @@ -996,10 +996,10 @@ static int ptrace_gethbpregs(struct task_struct *tsk, long num, | |||
| 996 | while (!(arch_ctrl.len & 0x1)) | 996 | while (!(arch_ctrl.len & 0x1)) |
| 997 | arch_ctrl.len >>= 1; | 997 | arch_ctrl.len >>= 1; |
| 998 | 998 | ||
| 999 | if (idx & 0x1) | 999 | if (num & 0x1) |
| 1000 | reg = encode_ctrl_reg(arch_ctrl); | ||
| 1001 | else | ||
| 1002 | reg = bp->attr.bp_addr; | 1000 | reg = bp->attr.bp_addr; |
| 1001 | else | ||
| 1002 | reg = encode_ctrl_reg(arch_ctrl); | ||
| 1003 | } | 1003 | } |
| 1004 | 1004 | ||
| 1005 | put: | 1005 | put: |
