From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDEA5244665 for ; Wed, 18 Feb 2026 07:49:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.10 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771400990; cv=none; b=KnmwyQGKV6Z3qZCRyRNZrAUMK9R3vAuy1Nrpa0pNVFBbCj20/DEPQdabrETBOThnrgLMI1Iav5knYno2Ox1AdnUpahAWyvanTVG0Djvmu8BjMRZqHgrjj+RQ537w9ougFSdbqJ5rTzj4XmG3BeyczqD475Es6sIPdvsJvFE23Ss= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771400990; c=relaxed/simple; bh=J3xvXXi961/St8fi6XQWdr/0KewP5kfn+njJQJsT1a8=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=tie/tPFgwPupcvvokhZd0hmarMALvXwzdHl1gqr85iqzG4+Dr9XvfW/3z300edYWtxRfrS+nDXejEMmeWvRMbr5Z4DM20sA+wDDOp/5oRA6NXgFrVk7q9bpFclPCtqV2ckWfufQxseLrj2PxswmnIVQZ4Zi0+LXTyfOqkWE3ysM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Ou48Ajd5; arc=none smtp.client-ip=192.198.163.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Ou48Ajd5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1771400988; x=1802936988; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=J3xvXXi961/St8fi6XQWdr/0KewP5kfn+njJQJsT1a8=; b=Ou48Ajd5pScnP7V+cUKWq+OYt3bvxJ5fOiZwhOs+cW6FPR+QhWEuZIa2 jHb9XDIAED/1Yjj12w58Z22VilgQVZlDL4D9PRGmKDq09VonfpEm2oGBn 8HJQohYeoZn+OUEjcBP0W55ynTMt9WeVsxIRpiEQp4fp3Ydqpn86lThfP j8x7DN+P1oMvqruPck5SCzBxJPZBRlWlUSCk0j0I0ZK7VxrBL8gseQJDM bxbo4aiwX1NFHQdNAGz0zW3gv1o7EMgslgP7SDhJgGGgcctFhmIAb+1RD RfFIAMc2rs5byt/bZLiwUa6hONpCcBy4ftYK+/Enis0QVivH6Q3o1x3fb w==; X-CSE-ConnectionGUID: 193dMY/RQ12gtvJidrLcVA== X-CSE-MsgGUID: qkCgTxVPQsSR9KE9BEX//A== X-IronPort-AV: E=McAfee;i="6800,10657,11704"; a="83836496" X-IronPort-AV: E=Sophos;i="6.21,297,1763452800"; d="scan'208";a="83836496" Received: from orviesa009.jf.intel.com ([10.64.159.149]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Feb 2026 23:49:47 -0800 X-CSE-ConnectionGUID: +n2/1EF7QC2zczBJ2rqn9g== X-CSE-MsgGUID: rJ+4pUuGQqesU5IZzdkRhw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,297,1763452800"; d="scan'208";a="213972243" Received: from black.igk.intel.com ([10.91.253.5]) by orviesa009.jf.intel.com with ESMTP; 17 Feb 2026 23:49:44 -0800 Received: by black.igk.intel.com (Postfix, from userid 1003) id 491E295; Wed, 18 Feb 2026 08:49:43 +0100 (CET) From: Andy Shevchenko To: Andy Shevchenko , linux-kernel@vger.kernel.org Cc: Mark Brown , Greg Kroah-Hartman , "Rafael J. Wysocki" , Danilo Krummrich , Dmitry Baryshkov , Marek Szyprowski Subject: [PATCH v4 1/1] regmap: Synchronize cache for the page selector Date: Wed, 18 Feb 2026 08:46:34 +0100 Message-ID: <20260218074934.2005168-1-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.50.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit If the selector register is represented in each page, its value according to the debugfs is stale because it gets synchronized only after the real page switch happens. Hence the regmap cache initialisation from the HW inherits outdated data in the selector register. Synchronize cache for the page selector just in time. Before (offset followed by hexdump, the first byte is selector): // Real registers 18: 05 ff 00 00 ff 0f 00 00 f0 00 00 00 ... // Virtual (per port) 40: 05 ff 00 00 e0 e0 00 00 00 00 00 1f 50: 00 ff 00 00 e0 e0 00 00 00 00 00 1f 60: 01 ff 00 00 ff ff 00 00 00 00 00 00 70: 02 ff 00 00 cf f3 00 00 00 00 00 0c 80: 03 ff 00 00 00 00 00 00 00 00 00 ff 90: 04 ff 00 00 ff 0f 00 00 f0 00 00 00 After: // Real registers 18: 05 ff 00 00 ff 0f 00 00 f0 00 00 00 ... // Virtual (per port) 40: 00 ff 00 00 e0 e0 00 00 00 00 00 1f 50: 01 ff 00 00 e0 e0 00 00 00 00 00 1f 60: 02 ff 00 00 ff ff 00 00 00 00 00 00 70: 03 ff 00 00 cf f3 00 00 00 00 00 0c 80: 04 ff 00 00 00 00 00 00 00 00 00 ff 90: 05 ff 00 00 ff 0f 00 00 f0 00 00 00 Fixes: 6863ca622759 ("regmap: Add support for register indirect addressing.") Signed-off-by: Andy Shevchenko --- v4: reworked the approach completely Marek, Dmitry, Please, test on your HW to be sure this will have no side effects in your case with LT9611. drivers/base/regmap/regmap.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index 5d5a3e115022..1b90f00a5005 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -1525,10 +1525,18 @@ static int _regmap_select_page(struct regmap *map, unsigned int *reg, return -EINVAL; } - /* It is possible to have selector register inside data window. - In that case, selector register is located on every page and - it needs no page switching, when accessed alone. */ + /* + * It is possible to have selector register inside data window. + * In that case, selector register is located on every page and it + * needs no page switching, when accessed alone. + * + * Nevertheless we should synchronize the cache values for it. + * This can't be properly achieved if the selector register is + * the first and the only one to be read inside the data window. + * That's why we update it in that case as well. + */ if (val_num > 1 || + in_range(range->selector_reg, range->window_start, range->window_len) || range->window_start + win_offset != range->selector_reg) { /* Use separate work_buf during page switching */ orig_work_buf = map->work_buf; -- 2.50.1