Subject: Forced HW_BREAKPOINT

From: [email-masked] (Cyril Chemparathy)
Date: Wed, 01 Dec 2010 11:17:41 -0500

Hi Will,

On 12/01/2010 04:54 AM, Will Deacon wrote:
> Hi Cyril,
> 
>> I am running an ARM1176JZ-S based SoC, on which HW breakpoints do not
>> seem to function for some reason.
> 
> What are the symptoms that you are seeing? The 1176 has debug architecture
> v6.1 so it should be supported by the code.
>  

Yes, this CPU has a trustzone capable v6.1 debug (DIDR reads
0x15121004).  The problem I am facing is that DSCR bit 15 (monitor
debug-mode enable bit) cannot be set, it always reads back 0x2.  As a
result the hw_breakpoint code spews a WARN_ON() at boot.

>> Unfortunately the current Kconfig forces HW_BREAKPOINT if PERF_EVENTS is
>> enabled on ARMV6 (commit 19852e59002fbba1c2c6ba0f154095a37ad2ac03):
>>
>>> +       select HAVE_HW_BREAKPOINT if (PERF_EVENTS && (CPU_V6 || CPU_V7))
>>
>> As a result, I am unable to use the PMU for OProfile, without having hw
>> breakpoints barf at boot.  Is there any dependency between h/w
>> breakpoints and PMU that I am missing?  If not, does H/W breakpoints
>> have be forced here?
> 
> The hw_breakpoint code depends on 1.) perf and 2.) hardware debug capabilities.
> Since all v6 and v7 cores are supported (at least, everything should fail
> gracefully if something is awry) then I don't see the point in not having it
> enabled. However, if this is causing your board to break during boot we
> should either fix it or allow it to be turned off.
> 

I understand hw_breakpoint's dependency on perf, as well as oprofile's
dependency on perf.  However, if perf does not depend on hw_breakpoint
(on v6/v7), isn't the select above incorrect?

Regards
Cyril.