On Wed, Jan 06, 2021 at 08:23:56PM +0800, Mark Rutland wrote: > On Wed, Jan 06, 2021 at 06:29:53PM +0800, ting...@codeaurora.org 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.