mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Peng Fan <peng.fan@linux.dev>
To: Mark Brown <broonie@kernel.org>,
	 Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	 "Rafael J. Wysocki" <rafael@kernel.org>,
	Danilo Krummrich <dakr@kernel.org>,
	 Johan Hovold <johan@kernel.org>,
	 Lucas Tanure <tanureal@opensource.cirrus.com>
Cc: linux-kernel@vger.kernel.org, driver-core@lists.linux.dev,
	 Peng Fan <peng.fan@nxp.com>, Sashiko <sashiko-bot@kernel.org>
Subject: [PATCH v2 00/10] regmap: clean up and improve __regmap_init()
Date: Fri, 13 Nov 2026 23:31:48 +0800	[thread overview]
Message-ID: <20261113-regmap-improve-v2-0-5dfd6a89078f@nxp.com> (raw)

This series includes three fixes for pre-existing regmap issues noticed
during review, improves the __regmap_init() error handling and removes the
last user of regmap_bus::free_on_exit. Patches 1-3 are fixes suitable for stable;
patches 4-9 are cleanups with no functional change intended; patch 10 adds
KUnit coverage for the new bus callback.

Patch 1 fixes the cache reinitialisation failure paths. regcache_exit()
freed reg_defaults_raw without clearing cache_free, and a failed
regmap_reinit_cache() left map->cache_type set, so a later regmap_exit()
could free the raw defaults a second time. It also drops the old cache_ops
after tearing down the cache, so a successful reinitialisation to
REGCACHE_NONE cannot leave stale cache ops behind. Clear the ownership
state and leave the map without a cache if reinitialisation fails.

Patch 2 fixes regmap_get_i2c_bus() so that applying an adapter read quirk
no longer drops the raw write limit advertised by the selected bus (and
vice versa). It currently starts from zero-initialised locals and
overwrites both limits of the bus copy.

Patch 3 fixes the raw write limit calculation when the adapter's
max_write_len quirk is applied. It compares the bus limit against the
quirk payload size rather than the whole-message size, avoids the
underflow when the register address alone exceeds the quirk limit, and
keeps the existing limit when the quirk cannot fit a single value, which
would otherwise lead to a division by zero in the raw write chunking.
The same minimum-size guard is applied to the read quirk.

Patches 4-7 are mechanical: evaluate fast_io once, and factor out
regmap_set_lock(), regmap_init_ranges() and the format selection into
helpers. The forward goto and the label-based unwinding are reduced to a
single error path.

Patch 8 drops regmap_bus::free_on_exit. Instead of kmemdup()ing the
static I2C/SPI bus to store per-device raw I/O limits, add an optional
regmap_bus::init_limits() callback. __regmap_init() invokes it before
regcache_init(), which is required because regcache_hw_init() may read
raw register defaults from the device during initialization and must
already see the effective max_raw_read limit. The static bus structures
can then be used directly and the per-device allocations disappear.

Patch 9 converts the error unwinding to the cleanup API and drops all
err_* labels. map->cache_type is now assigned just before
regcache_init() and reset to REGCACHE_NONE on failure, so the release
helper can safely call regcache_exit() on a partially initialised map.

Patch 10 adds a KUnit test which verifies that init_limits() is invoked
before regcache_init() by checking that the raw default readback is split
according to the limit installed by the callback.

Testing:
- Built drivers/base/regmap/ with W=1 on x86_64.
- checkpatch.pl clean for all patches.
- regmap KUnit suite pass.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
Changes in v2:
- Rebased onto next-20261112.
- New patch 1: regmap: fix reinit cache failure handling
- Patch 3: regmap-i2c: fix write limit clamping for adapter quirks
  Correct fixes tag
  Rename the patch subject.
  Fix write limit clamping.
- Patch 5: regmap: factor out regmap_set_lock():
  Move ret = -EINVAL below the successful regmap_set_lock() call so it
  cannot be clobbered with 0 on success.

---
Peng Fan (10):
      regmap: fix reinit cache failure handling
      regmap-i2c: keep bus raw write limit when applying read quirk
      regmap-i2c: fix write limit clamping for adapter quirks
      regmap: deduplicate fast_io checks
      regmap: factor out regmap_set_lock()
      regmap: factor out regmap_init_ranges()
      regmap: factor out format initialisation into helpers
      regmap: drop regmap_bus::free_on_exit
      regmap: use cleanup API in __regmap_init()
      regmap: kunit: add test for regmap_bus::init_limits

 drivers/base/regmap/regcache.c     |   8 +-
 drivers/base/regmap/regmap-i2c.c   |  68 ++--
 drivers/base/regmap/regmap-kunit.c |  89 +++++
 drivers/base/regmap/regmap-spi.c   |  64 ++--
 drivers/base/regmap/regmap.c       | 714 +++++++++++++++++++------------------
 include/linux/regmap.h             |   7 +-
 6 files changed, 541 insertions(+), 409 deletions(-)
---
base-commit: 6d582d78fad9d828e575ca0cdcff8ea47a77220b
change-id: 20261109-regmap-improve-915eee5a80ec

Best regards,
-- 
Peng Fan <peng.fan@nxp.com>


             reply	other threads:[~2026-11-13 15:32 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-13 15:31 Peng Fan [this message]
2026-11-13 15:31 ` [PATCH v2 01/10] regmap: fix reinit cache failure handling Peng Fan
2026-11-13 15:31 ` [PATCH v2 02/10] regmap-i2c: keep bus raw write limit when applying read quirk Peng Fan
2026-11-13 15:31 ` [PATCH v2 03/10] regmap-i2c: fix write limit clamping for adapter quirks Peng Fan
2026-11-13 15:31 ` [PATCH v2 04/10] regmap: deduplicate fast_io checks Peng Fan
2026-11-13 15:31 ` [PATCH v2 05/10] regmap: factor out regmap_set_lock() Peng Fan
2026-11-13 15:31 ` [PATCH v2 06/10] regmap: factor out regmap_init_ranges() Peng Fan
2026-11-13 15:31 ` [PATCH v2 07/10] regmap: factor out format initialisation into helpers Peng Fan
2026-11-13 15:31 ` [PATCH v2 08/10] regmap: drop regmap_bus::free_on_exit Peng Fan
2026-11-13 15:31 ` [PATCH v2 09/10] regmap: use cleanup API in __regmap_init() Peng Fan
2026-11-13 15:31 ` [PATCH v2 10/10] regmap: kunit: add test for regmap_bus::init_limits Peng Fan

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=20261113-regmap-improve-v2-0-5dfd6a89078f@nxp.com \
    --to=peng.fan@linux.dev \
    --cc=broonie@kernel.org \
    --cc=dakr@kernel.org \
    --cc=driver-core@lists.linux.dev \
    --cc=gregkh@linuxfoundation.org \
    --cc=johan@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peng.fan@nxp.com \
    --cc=rafael@kernel.org \
    --cc=sashiko-bot@kernel.org \
    --cc=tanureal@opensource.cirrus.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

all inboxes | Powered by JetHome®