Re: Set DBGCLAIM when self-host debug is enabled

From: Tingwei Zhang
Date: Thu Jan 07 2021 - 23:02:25 EST


On Wed, Jan 06, 2021 at 08:23:56PM +0800, Mark Rutland wrote:
> On Wed, Jan 06, 2021 at 06:29:53PM +0800, tingwei@xxxxxxxxxxxxxx wrote:
> > Hi Will and Mark,
>
> Hi Tingwei,
>
> > In recent implementation of save/restore ARM debug registers in
> > EL2/EL3, we found it's necessary to know whether self-host debug is
> > enabled so EL2/EL3 can avoid saving/restoring debug registers but no
> > one is using debug.
>
> In what situation are you considering? I assume you mean idle sequences
> using CPU_SUSPEND?
>
> Generally our expectation for CPU_SUSPEND is:
>
> * Where StateType==0, the debug state is preserved with all other
> PE state.
>
> * Where StateType==1 and the PE returns "warm" without having entered a
> powerdown state, the debug state is preserved along with all other PE
> state.
>
> * Where StateType==1, and the PE returns "cold" after having entered a
> powerdown state (i.e. we return via the entry point address), the
> debug state is not preserved.
>
> ... and I'm missing where you could avoid saving the state. What
> situation(s) did you have in mind?
>
In StateType==1 case, EL2/EL3 can save debug registers before PE suspend
and restore them after PE resume. If EL2/EL3 doesn't know whether external
debugger or self-host debugger is using debug registers, it can save and
restore bindly everytime. However, if EL2/EL3 can get the information from
DBGCLAIM, it can only save/restore debug registers when debug is ongoing
which means DGBCLAIM[0] is set by external debugger or DGBCLAIM[1] is set
by self-host debugger.

> > In ARM PSCI, it has one option to set DBGCLAIM[1] to 1 to indicate
> > that debug is in use by a self-host debugger. Do you think it's
> > resonable to add this to Kernel?
> >
> > For example, can we set DBGCLAIM[1] to 1 in enable_debug_monitors()
> > and clear it in disable_debug_monitors().
>
> I was under the impression that this was solely for the benefit of an
> external debugger, and should have no functional impact on the PSCI
> implementation from the kernel's PoV, so as above I think we need a
> better description of the case you're trying to address.

If self-host debugger like gdb/kgdb is used for debug, Kernel can set
DBGCLAIM[1] to inform EL2/EL3.

Thanks,
Tingwei
>
> Thanks,
> Mark.