public inbox for linux-iio@vger.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Matti Vaittinen <mazziesaccount@gmail.com>
Cc: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>,
	Lars-Peter Clausen <lars@metafoo.de>,
	linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] iio: bu27034: Reinit regmap cache after reset
Date: Sun, 7 May 2023 14:36:02 +0100	[thread overview]
Message-ID: <20230507143602.08a11f12@jic23-huawei> (raw)
In-Reply-To: <453da7af-8a83-f302-eea6-159e6222f430@gmail.com>

On Sun, 7 May 2023 13:16:57 +0300
Matti Vaittinen <mazziesaccount@gmail.com> wrote:

> On 5/6/23 21:07, Jonathan Cameron wrote:
> > On Thu, 4 May 2023 07:59:00 +0300
> > Matti Vaittinen <mazziesaccount@gmail.com> wrote:
> >   
> >> When BU27034 restores the default register values when SWRESET is
> >> issued. This can cause register cache to be outdated.
> >>
> >> Rebuild register cache after SWRESET.
> >>
> >> Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com>
> >> Fixes: e52afbd61039 ("iio: light: ROHM BU27034 Ambient Light Sensor")
> >>
> >> ---
> >> I noticed this was missing while writing driver for another light
> >> sensor. The change is not tested in hardware as I don't have the BU27034
> >> at my hands right now. Careful review would be highly appreciated.
> >>
> >> This change is built on top of the
> >> https://lore.kernel.org/all/ZFIw%2FKdApZe1euN8@fedora/
> >> and could probably be squashed with it. Unfortunately I spotted the
> >> missing cache re-init only after sending the fix linked above.
> >>  
> > 
> > I'm not sure I follow what would be happening here or if this makes sense.
> > 
> > Partly the following is based on my mental image of how regmap caching works
> > and could be completely wrong :)
> > 
> > I don't think it goes off an reads registers until they are actually accessed
> > the first time.  
> 
> I think this is not the absolute truth. AFAIR the regmap_init may lead 
> to regcache_hw_init() - which can read the non volatile registers to the 
> cache. I can't say if this is the case with current bu27034 
> regmap-config without taking a good look at this with some thought :)

I think that's only true if you provide various things you haven't in the
regmap config.

> 
> Nevertheless, we know that _if_ there is anything in cache when we do 
> reset, the cache will most likely be invalid as HW will reset the 
> registers. My thinking was that it is just safest to reinit the cache 
> when this happens, then we do not need to care if regcache was populated 
> when this is called.

True, but that's rather heavy weight when we know we only touched one register.

> 
> >  In this case nothing has been accessed before this point
> > other than the SYSTEM_CONTROL register and that happens to the one that
> > is set to trigger the reset.
> > 
> > So at worst I think the only cache element that will potentially be wrong
> > is the SYSTEM_CONTROL register as the cache will contain the reset bits as set.
> > 
> > That would be a problem if you read it again anywhere in the driver after that
> > point, but you don't so not a 'bug' but perhaps prevention of potential future
> > bugs as this behaviour is odd.  If you were to try setting some other bits
> > then you'd probably accidentally reset the device :)
> > 
> > So, what's the ideal solution.  You could just bypass the regcache initially
> > and turn it on later.  
> 
> I think I've never temporarily bypassed the cache when I've used one :) 
> I need to check how this is done :)
> 

regcache_cache_bypass(map, true / false);

> >  Thus it would never become wrong due to the reset (as nothing
> > would be cached until after that).
> > 
> > Or just leave it as you have it here, but explain why it matters - as prevention
> > of potential issues due to wrong value in that single register.  
> 
> Hm. I'd not limit the potential problems to single register as probe may 
> get changed - or error handling could be added and reset performed after 
> probe. (I was actually thinking of this as the spec states that if VCC 
> drops the sensor may go to undefined state and won't recover unless VCC 
> is turned off for > 1mS. Didn't add this for now as it is not at all 
> obvious the regulator would support detecting under-voltage - or that 
> the sensor could really turn-off the regulator as it might be also 
> supplying something else - so I didn't want to implement some overkill 
> error handling when we might not have hardware which actually benefits 
> from this).

OK. I'm fine with just reinitializing it and paying the penalty of that being
overkill given current code.

Combine this with the other patch into one clean fix / tidy up though.

Jonathan



> 
> Yours,
> 	-- Matti
> 


  reply	other threads:[~2023-05-07 13:20 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-04  4:59 [PATCH] iio: bu27034: Reinit regmap cache after reset Matti Vaittinen
2023-05-06 18:07 ` Jonathan Cameron
2023-05-07 10:16   ` Matti Vaittinen
2023-05-07 13:36     ` Jonathan Cameron [this message]
2023-05-07 15:45       ` Matti Vaittinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230507143602.08a11f12@jic23-huawei \
    --to=jic23@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matti.vaittinen@fi.rohmeurope.com \
    --cc=mazziesaccount@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox