[PATCH v2 1/2] regcache: Warn if regcache_sync() is called in cache_only mode

From: phucduc . bui

Date: Sun Jul 19 2026 - 23:38:16 EST


From: bui duc phuc <phucduc.bui@xxxxxxxxx>

Calling regcache_sync() while cache_only is enabled is invalid API
usage, since writes are intentionally kept in the cache and cannot
be synchronized to hardware.
Document that callers must disable cache_only before calling
regcache_sync(), and reject incorrect usage with a WARN_ON() and
-EINVAL.

Signed-off-by: bui duc phuc <phucduc.bui@xxxxxxxxx>
---

Changes in v2 :
- Check cache_only under the lock.
- Update the function comment.

drivers/base/regmap/regcache.c | 10 ++++++++++
1 file changed, 10 insertions(+)

diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c
index 96cdae25b9c4..20e0641d21b2 100644
--- a/drivers/base/regmap/regcache.c
+++ b/drivers/base/regmap/regcache.c
@@ -397,6 +397,10 @@ static int rbtree_all(const void *key, const struct rb_node *node)
* volatile. In general drivers can choose not to use the provided
* syncing functionality if they so require.
*
+ * This pushes cached changes made while cache_only (e.g. suspend) down
+ * to hardware. The caller must disable cache_only before calling this
+ * function.
+ *
* Return a negative value on failure, 0 on success.
*/
int regcache_sync(struct regmap *map)
@@ -414,6 +418,12 @@ int regcache_sync(struct regmap *map)
BUG_ON(!map->cache_ops);

map->lock(map->lock_arg);
+
+ if (WARN_ON(map->cache_only)) {
+ map->unlock(map->lock_arg);
+ return -EINVAL;
+ }
+
/* Remember the initial bypass state */
bypass = map->cache_bypass;
dev_dbg(map->dev, "Syncing %s cache\n",
--
2.43.0