From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>,
Mark Brown <broonie@kernel.org>,
linux-kernel@vger.kernel.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Danilo Krummrich <dakr@kernel.org>,
DRI mailing list <dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH v3 1/1] regmap: Synchronize cache for the page selector
Date: Mon, 3 Feb 2025 11:19:22 +0200 [thread overview]
Message-ID: <Z6CKGu7URC1iGOVO@smile.fi.intel.com> (raw)
In-Reply-To: <eyjsejpx7klztr4k7xmrvceosfykyozs736kycdnf5uur5by43@5i5x7tsuxtpg>
On Sat, Feb 01, 2025 at 07:18:56PM +0200, Dmitry Baryshkov wrote:
> On Wed, Jan 29, 2025 at 05:07:52PM +0200, Andy Shevchenko wrote:
> > On Tue, Jan 28, 2025 at 06:43:26PM +0200, Andy Shevchenko wrote:
> > > On Tue, Jan 28, 2025 at 05:08:08PM +0100, Marek Szyprowski wrote:
> > > > On 21.01.2025 14:29, Andy Shevchenko wrote:
> > > > > On Tue, Jan 21, 2025 at 08:33:09AM +0100, Marek Szyprowski wrote:
> > > > >> On 17.01.2025 18:28, Andy Shevchenko wrote:
> > > > >>> On Fri, Jan 17, 2025 at 05:05:42PM +0100, Marek Szyprowski wrote:
> > > > >>>
> > > > >>> Does it fail in the same way?
> > > > >> Yes, the hw revision is reported as zero in this case: LT9611 revision:
> > > > >> 0x00.00.00
> > > > > Hmm... This is very interesting! It means that the page selector is a bit
> > > > > magical there. Dmitry, can you chime in and perhaps shed some light on this?
> > > > >
> > > > >>>> Does it mean that there is really a bug in the driver?
> > > > >>> Without looking at the datasheet it's hard to say. At least what I found so far
> > > > >>> is one page of the I²C traffic dump on Windows as an example how to use their
> > > > >>> evaluation board and software, but it doesn't unveil the bigger picture. At
> > > > >>> least what I think is going on here is that the programming is not so easy as
> > > > >>> just paging. Something is more complicated there.
> > > > >>>
> > > > >>> But at least (and as Mark said) the most of the regmap based drivers got
> > > > >>> the ranges wrong (so, at least there is one bug in the driver).
> > > > >> I can do more experiments if this helps. Do you need a dump of all
> > > > >> regmap accesses or i2c traffic from this driver?
> > > > > It would be helpful! Traces from the failed and non-failed cases
> > > > > till the firmware revision and chip ID reading would be enough to
> > > > > start with.
> > > >
> > > > I'm sorry for the delay, I was a bit busy with other stuff.
> > >
> > > No problem and thanks for sharing.
> > >
> > > > Here are logs (all values are in hex):
> > > >
> > > > next-20250128 (probe broken):
> > > > root@target:~# dmesg | grep regmap
> > > > [ 14.817604] regmap_write reg 80ee <- 1
> > > > [ 14.823036] regmap_read reg 8100 -> 0
> > > > [ 14.827631] regmap_read reg 8101 -> 0
> > > > [ 14.832130] regmap_read reg 8102 -> 0
> > >
> > >
> > >
> > > > next-20250128 + 1fd60ed1700c reverted (probe okay):
> > > > root@target:~# dmesg | grep regmap
> > > > [ 13.565920] regmap_write reg 80ee <- 1
> > > > [ 13.567509] regmap_read reg 8100 -> 17
> > > > [ 13.568219] regmap_read reg 8101 -> 4
> > > > [ 13.568909] regmap_read reg 8102 -> 93
> > >
> > > Something is missing here. Like we have an identical start and an immediate
> > > failure. If you did it via printk() approach, it's probably wrong as my patch
> > > uses internal regmap function. Most likely you need to enable trace events
> > > for regmap and collect those for let's say 2 seconds:
> > >
> > > echo 1 > ...trace events...
> > > modprobe ...
> > > sleep 2
> > > echo 0 > ...trace events...
> > >
> > > and dump the buffer to a file. It might have though more than needed
> > > as some other devices might also use regmap at the same time. I don't remember
> > > if the trace events for regmap have a device instance name field which can be
> > > used as a filter.
> > >
> > > Alternatively you may also try to add a printk() into regmap core, but I don't
> > > think it's more practical than trace events.
> >
> > Meanwhile, can you test this patch (on top of non-working case)?
> >
> > diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
> > index 2314744201b4..f799a7a80231 100644
> > --- a/drivers/base/regmap/regmap.c
> > +++ b/drivers/base/regmap/regmap.c
> > @@ -1553,8 +1553,19 @@ static int _regmap_select_page(struct regmap *map, unsigned int *reg,
> > * virtual copy as well.
> > */
> > if (page_chg &&
> > - in_range(range->selector_reg, range->window_start, range->window_len))
> > + in_range(range->selector_reg, range->window_start, range->window_len)) {
> > + bool bypass, cache_only;
> > +
> > + bypass = map->cache_bypass;
> > + cache_only = map->cache_only;
> > + map->cache_bypass = false;
> > + map->cache_only = true;
> > +
> > _regmap_update_bits(map, sel_register, mask, val, NULL, false);
> > +
> > + map->cache_bypass = bypass;
> > + map->cache_only = cache_only;
> > + }
> > }
> >
> > *reg = range->window_start + win_offset;
> >
> > If I understood the case, the affected driver doesn't use case and we actually
> > write to the selector register twice which most likely messes up the things.
>
> Unfortunately I can not comment regarding the LT9611UXC itself, the
> datasheet that I have here is pretty cryptic, incomplete and partially
> written in Mandarin.
>
> This patch though fixes an issue for me too, So:
>
> Tested-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> # Qualcomm RB1
Thank you, guys, for reporting an testing, but it seems the simple problem
to solve requires a lot of changes to be done without regressions
(this fix on fix makes a regression to those who have cache enabled), which
means that for now I propose to revert it (or drop) if possible, Mark,
what is your preference?
> > But this is only a theory (since we don't have the traces yet).
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2025-02-03 9:19 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20250117135754eucas1p1a8558792f9475c2acc009e1ba20c7109@eucas1p1.samsung.com>
2025-01-16 12:42 ` [PATCH v3 1/1] regmap: Synchronize cache for the page selector Andy Shevchenko
2025-01-16 19:14 ` Mark Brown
2025-01-17 13:57 ` Marek Szyprowski
2025-01-17 14:09 ` Andy Shevchenko
2025-01-17 14:30 ` Andy Shevchenko
2025-01-17 15:50 ` Mark Brown
2025-01-17 16:05 ` Marek Szyprowski
2025-01-17 17:28 ` Andy Shevchenko
2025-01-21 7:32 ` Marek Szyprowski
2025-01-21 7:33 ` Marek Szyprowski
2025-01-21 13:29 ` Andy Shevchenko
2025-01-28 16:08 ` Marek Szyprowski
2025-01-28 16:43 ` Andy Shevchenko
2025-01-29 15:07 ` Andy Shevchenko
2025-01-29 17:50 ` Marek Szyprowski
2025-01-29 21:19 ` Mark Brown
2025-01-30 8:21 ` Andy Shevchenko
2025-02-01 17:18 ` Dmitry Baryshkov
2025-02-03 9:19 ` Andy Shevchenko [this message]
2025-02-03 12:45 ` Mark Brown
2025-02-03 13:07 ` Andy Shevchenko
2025-01-17 15:58 ` Marek Szyprowski
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=Z6CKGu7URC1iGOVO@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=broonie@kernel.org \
--cc=dakr@kernel.org \
--cc=dmitry.baryshkov@linaro.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=rafael@kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.