Subject: ARM diagnostic register across suspend/resume

From: [email-masked] (Will Deacon)
Date: Tue, 17 Jun 2014 15:34:15 +0100

On Tue, Jun 17, 2014 at 02:03:35PM +0100, Shawn Guo wrote:
> On Tue, Jun 17, 2014 at 11:25:20AM +0100, Will Deacon wrote:
> > On Tue, Jun 17, 2014 at 11:23:44AM +0100, Russell King - ARM Linux wrote:
> > > On Tue, Jun 17, 2014 at 11:21:23AM +0100, Will Deacon wrote:
> > > > I think that actually works ok, because writing zeroes doesn't actually
> > > > do anything as far as I understand. The problem with suspend/resume is
> > > > that the suspend/resume cycle could well clear the internal state and
> > > > writing zeroes won't re-enable the workaround bits.
> > > > 
> > > > I'll double-check this with the hardware guys, since this register really
> > > > is undocumented.
> > > 
> > > Are you saying that it is write one to set, and writing zero is ignored?
> > > If that's true, we should simplify the work-around code to get rid of the
> > > read-modify-write.
> > 
> > That's my understanding for the diagnostic register, but I've asked for
> > clarification internally.
> 
> Hmm, I'm not sure that's the case.  On imx6q, I can read out diagnostic
> register as 0x00200850 which matches the errata we enable.

The hardware guys got back to me, and I was mistaken (in fact, confused by
another register). So the diagnostic register on A9 *does* read back with
the value written to it. You still need to save/restore it across suspend,
but read-modify-write is the right thing to do everywhere else.

Will