From nobody Sun Feb 8 15:58:32 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012004.outbound.protection.outlook.com [40.107.209.4]) (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 6999730E0C8; Mon, 12 Jan 2026 04:30:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.4 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768192267; cv=fail; b=eyNRKVi+bc24nWETfJACheiTzGF4K2NeZTw9HIh0G1fGT3FJN8d1QQSg5PHqIByXjtJVQVM6cpKO/3twWKugSnD2K3HZ4zO0E77pFGG7QXAFHckLseF6XGSU15ObyUcaYJrOVJnmCxx/hq8ayxLBrMYD7u5hoE4i8vCvi6Ikgf8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768192267; c=relaxed/simple; bh=UrwTilfCoYM3dB+iwH4V+ytfmvXwHnsP82Cs5rZQ+fQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=InjPXRt5dASV2uHrAIbBim+DOQADaq9PEhqrKCd4G1Wip6+de8XWj7V3CF3V5HlRLM6+uI73hEpS0sxRq1p/RF00yuQErI7zT/+b8slZanuIZchoy8GECFJvW3Rgo87ucixGtq2MUnqs1NKQo2UVFWSVRDyGM9ltN/mDOSNRUvg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=uDhX2mVg; arc=fail smtp.client-ip=40.107.209.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="uDhX2mVg" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QfEYWjbVhDz209uBdU8m+kh+Wl2N6icd4wri9emjzLF1Cpveh/5c78Dyol1MOZqmnx56462V284LGV3du9PGJEXXY63jfThUcDoMIqyzbi2zLFrzFUzq1O8abXuMjE92Zk7tR69Ku5FY9KGy6387Ssh3UcjLkpbOKPC2mnOsNwFE81RZ1dvuyvBXvVpdJOSyJDTJ49rgJxRkZPlMOAtLzi6uWCkrXbmXeJvBjsWd55VUj4iWwh4haZeSWf7PGdevOxTV13RpiUXkExVkP+zZUYdvCthQFFiitvKzb9j4np1oV0rYG5E9FOPk+Bh+W/Mkyz6x+mA6FxMlG/S5O+922Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JhiJHs9XQvyqOSgJdHtnKq+aFupnrMit9CkchPQ1MA8=; b=uxubbnEwEHmCISebA2pflCgZdS2wwy4hSjcQDlvNm0VPEO3zsi8XJncRPvIBnKW8hP0v2NV9NlMAdX9gKk+wS0tnlnmMqv9C6nNcvGo6aXOsDY+R8BeUtBoK100IAeZwaqw1BQ4FEvuA6pSKfdReqCuE0ZepysAoCmTfWvQrMa7aMRwchsmwpfVZKAFT1t07PfgJJDAVnWt982HZ2VRriQtLYBmZUOZioozfdIpgZAFwOzUPSVXpBeEEpeilEscG2R8T0X0QEAoRHdoX7BqPE9vwjcirNnN2U8R5uC9BK0Z9S/TwTEUQVTs5TSB/3UZPmXki9firXZ6XfWQ+7Z4QdQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JhiJHs9XQvyqOSgJdHtnKq+aFupnrMit9CkchPQ1MA8=; b=uDhX2mVgwAPw75HYRvqwUV9/obf0B1byaVIitIywz9W1IK5NoJrS53yupXTlgLoT6z2azl8UQeVRJZa5khrwQdWfJn/DV3zXLAbGpV6+pdzlM4qDZcWZvafie6uUC6tZgv9VJq8uoZwaXffssjhGFO6mxZeZxV0BPJAlxr4iOVGwOtPsaG1NfcU8Gaue+8K4by11ksJRAPNaejiCfPX2ZKVs1/oEpqhAUctotloyNN2hWyHuCOhl64Rj7WI7qdhTMoqIVTTjvny0QExLVqRTkBhvUyx/9Uqd2YYTU87Zp7GecPzXPngnkrdRsFa5heX7pX5My29wBvXRudkoJ9nqsA== Received: from PH0PR07CA0015.namprd07.prod.outlook.com (2603:10b6:510:5::20) by LV8PR12MB9690.namprd12.prod.outlook.com (2603:10b6:408:296::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.7; Mon, 12 Jan 2026 04:30:51 +0000 Received: from CY4PEPF0000E9D3.namprd03.prod.outlook.com (2603:10b6:510:5:cafe::28) by PH0PR07CA0015.outlook.office365.com (2603:10b6:510:5::20) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9499.7 via Frontend Transport; Mon, 12 Jan 2026 04:30:46 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CY4PEPF0000E9D3.mail.protection.outlook.com (10.167.241.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.1 via Frontend Transport; Mon, 12 Jan 2026 04:30:51 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Sun, 11 Jan 2026 20:30:31 -0800 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Sun, 11 Jan 2026 20:30:31 -0800 Received: from sheetal.nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Sun, 11 Jan 2026 20:30:27 -0800 From: "Sheetal ." To: Mark Brown CC: Sander Vanheule , Greg Kroah-Hartman , "Rafael J . Wysocki" , Danilo Krummrich , Liam Girdwood , Jaroslav Kysela , Takashi Iwai , "Thierry Reding" , Jonathan Hunter , Mohan kumar , , , , Sheetal Subject: [RFC PATCH v2 1/3] regmap: Add flat_cache_default_is_zero flag for flat cache Date: Mon, 12 Jan 2026 09:58:39 +0530 Message-ID: <20260112042841.51799-2-sheetal@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260112042841.51799-1-sheetal@nvidia.com> References: <20260112042841.51799-1-sheetal@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9D3:EE_|LV8PR12MB9690:EE_ X-MS-Office365-Filtering-Correlation-Id: 798fc17c-1409-4b6e-f5f5-08de51935e1e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|82310400026|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?5k4Ue3ftiubZxGU6u8/BfpM47d7lMcl1i66wWUchVfZhkmtWGkPEHTGDCNbk?= =?us-ascii?Q?3gtVj0US2ZmhpAaefuywrq7R68TSCX3lVWRGm1MNDMN4B+Og9ZQPpojGu6EF?= =?us-ascii?Q?W6xUh4nBmzliTEXKcsxXCHvfccKZbmSRqqqg639bZ+kzptiBJcTUcjHtuJb7?= =?us-ascii?Q?u7cOEmuVBM5rdw3T/X2bUTw3O0N31nQehl9DAVDlUUC6pD8EaGzpFLSTSIL8?= =?us-ascii?Q?Yn/s/gzZO8Vytep55vHU5dtgxyUyW/+0kxWOy80owVK7oV65tbxFaDyUCvF4?= =?us-ascii?Q?PFFZNfQu/aCkrMjLnUn6PN8X1EXxi0YCLdC+RK8pNZANTH/OKVhAIhhxWAp/?= =?us-ascii?Q?EYgWnL9yyiaqG1X8C1lhB/pXwb60ij0ytkjeZEvlt+jAZZKJGml3AjlS07ZC?= =?us-ascii?Q?Zz7ScwVFlm/OBZjLDMypINhCgaE63F/V1APjUpafsyFiOJPd3/ZZwzaQ4hSG?= =?us-ascii?Q?S7+3/tAIx7XNBtS8B9Xx3wB/W2vL7KdZ0YDWfZlXl9HBhltdrsBgzKBsD12q?= =?us-ascii?Q?aAtnKgVZqfGqUCj0Sy1aiXSBNpXjKfEdJT8Amc8n27CJ7/PzlClnYwVLxQyr?= =?us-ascii?Q?q2K0+1cvw1BpHqogeqR0wM0RztATyCxaVMMqOyVKKPMHirteutZ0EO3JCfgw?= =?us-ascii?Q?aRBVxkeFs/ghBfxodZTOd8V79MYqx7SG4LANuasA+kJ88RK5sWhykmb+oB+4?= =?us-ascii?Q?oD0KUP7YL7911XT6B4NYd4Na83Aw1A+MvZyOKSz58PTAi7dPxINNDXAcO8cO?= =?us-ascii?Q?U4d5CkwQW2JhmiV3Zg9C289BzBuB+sGtU07dyZ2nobBfXYx/a/z/9Ix3JmEf?= =?us-ascii?Q?cS96nbivETBKx6xquKWjYycL+QTWBG7p4+uSQmyPHUm002aRcITnblVkF/kM?= =?us-ascii?Q?tLE3/ommvrngCx0gGl3SDqMsyiJhJSybZTZEzyXlVQ3jXCvDMU/eMYqSM7J3?= =?us-ascii?Q?2WCq8s7hJ1v71mze4PJQgy7Q6m2Di7TsRw8CxTwy1g8KP8Jp4cpOLyBly+G2?= =?us-ascii?Q?/xQXaoVktazEkkzx7hGIYP2HegVPsqsxBxboPx7dlOWTQK7r/Nv+zZfBVNBE?= =?us-ascii?Q?oSXajH/M5wJ1unj6FHVtST/q5JrqUZCEOrn7NGs0VTP75pN+Zx8DdJ2xDwwk?= =?us-ascii?Q?0B0amD7PjmaJdeNMJSnHDqfa1d4PXwTfzmJr41ostGwiYC06985bA40RrnMQ?= =?us-ascii?Q?JKJq4NLG6T/96X+XRjKoLsCEKU4wiZI/yxYR+rNHTNhYIBNSndjgMwZHog6r?= =?us-ascii?Q?ApLl886KSpWSgVCtrt2d3Fa2LarZCxfdSlFdOeyKBGlGsjLqHI+jrxBHor3/?= =?us-ascii?Q?McjivHZPT8jTXYmhy4zqQkpGNWxzMxkkpRaT8RYTU/DNoNb6+vZCdqnCc4je?= =?us-ascii?Q?PUuZxS7rZ7ReAI2nz+C85cHo9+TaK41Nzt9YaxiQERdwjlZ0jPWw+cSq3325?= =?us-ascii?Q?FsRRJZRYsVyGLUQmw9ShXxKSNfgg78uaf5Jkoa9ep1VC+/AuVhKcSSeaq8xP?= =?us-ascii?Q?DBL2y3QgX7ImIvykGoYPUv3Gsq9GDeVc5rqjkOAUoynauS+f/B6llWixbt28?= =?us-ascii?Q?Lzd5eaYvZbOMnf00h9Y=3D?= X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(7416014)(376014)(82310400026)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jan 2026 04:30:51.2906 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 798fc17c-1409-4b6e-f5f5-08de51935e1e X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9D3.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR12MB9690 Content-Type: text/plain; charset="utf-8" From: Sheetal Commit e062bdfdd6ad ("regmap: warn users about uninitialized flat cache") added a warning for drivers using REGCACHE_FLAT when reading registers not present in reg_defaults. For hardware where registers have a power-on-reset value of zero or drivers that wish to treat zero as a valid cache default, adding all such registers to reg_defaults has drawbacks: 1. Maintenance burden: Drivers must list every readable register regardless of its reset value. 2. No functional benefit: Entries like { REG, 0x0 } only set the validity bit; the flat cache value is already zero. 3. Code bloat: Large reg_defaults arrays increase driver size. Add a flat_cache_default_is_zero flag to struct regmap_config. When set, the flat cache marks registers as valid on first read instead of warning. The valid bit is set on first read rather than marking all registers valid at init time for the following reasons: - Avoids writes to register holes or unused addresses during sync. - Safer for drivers that don't have writeable_reg callback defined. Signed-off-by: Sheetal --- drivers/base/regmap/internal.h | 2 ++ drivers/base/regmap/regcache-flat.c | 12 ++++++++---- drivers/base/regmap/regcache.c | 1 + include/linux/regmap.h | 1 + 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h index 1477329410ec..xxxxxxxxxxxx 100644 --- a/drivers/base/regmap/internal.h +++ b/drivers/base/regmap/internal.h @@ -157,6 +157,8 @@ struct regmap { bool cache_dirty; /* if set, the HW registers are known to match map->reg_defaults */ bool no_sync_defaults; + /* if set, zero is a valid default for REGCACHE_FLAT cache type registers= not in reg_defaults */ + bool flat_cache_default_is_zero; =20 struct reg_sequence *patch; int patch_regs; diff --git a/drivers/base/regmap/regcache-flat.c b/drivers/base/regmap/regc= ache-flat.c index 53cc59c84e2f..xxxxxxxxxxxx 100644 --- a/drivers/base/regmap/regcache-flat.c +++ b/drivers/base/regmap/regcache-flat.c @@ -88,10 +88,14 @@ static int regcache_flat_read(struct regmap *map, struct regcache_flat_data *cache =3D map->cache; unsigned int index =3D regcache_flat_get_index(map, reg); =20 - /* legacy behavior: ignore validity, but warn the user */ - if (unlikely(!test_bit(index, cache->valid))) - dev_warn_once(map->dev, - "using zero-initialized flat cache, this may cause unexpected behavior"= ); + /* legacy behavior: ignore validity, but warn if zero is not a valid defa= ult */ + if (unlikely(!test_bit(index, cache->valid))) { + if (map->flat_cache_default_is_zero) + set_bit(index, cache->valid); + else + dev_warn_once(map->dev, + "using zero-initialized flat cache, this may cause unexpected be= havior"); + } =20 *value =3D cache->data[index]; =20 diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c index 319c342bf5a0..xxxxxxxxxxxx 100644 --- a/drivers/base/regmap/regcache.c +++ b/drivers/base/regmap/regcache.c @@ -177,6 +177,7 @@ int regcache_init(struct regmap *map, const struct regm= ap_config *config) map->reg_defaults_raw =3D config->reg_defaults_raw; map->cache_word_size =3D BITS_TO_BYTES(config->val_bits); map->cache_size_raw =3D map->cache_word_size * config->num_reg_defaults_r= aw; + map->flat_cache_default_is_zero =3D config->flat_cache_default_is_zero; =20 map->cache =3D NULL; map->cache_ops =3D cache_types[i]; diff --git a/include/linux/regmap.h b/include/linux/regmap.h index b0b9be750d93..xxxxxxxxxxxx 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h @@ -452,6 +452,7 @@ struct regmap_config { enum regcache_type cache_type; const void *reg_defaults_raw; unsigned int num_reg_defaults_raw; + bool flat_cache_default_is_zero; =20 unsigned long read_flag_mask; unsigned long write_flag_mask; --=20 2.34.1 From nobody Sun Feb 8 15:58:32 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011024.outbound.protection.outlook.com [40.107.208.24]) (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 A2B8F30EF66; Mon, 12 Jan 2026 04:31:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.24 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768192276; cv=fail; b=Sgz5GpjeaW2j9LIqW6+WocVX4MCOI6156/JRLO4cbHLY3pIbgr4Qz3Yl+qjCD6pbcabYlGyLesXP/d2F8JxM1QWztKD+ZBOA5C5Y/lW42k/SvOWpglElCmzwz/zTQLfiZNhow5tmtWK0jwELSmk5Od7x0Bx7sGAb0y8sJqcVaQg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768192276; c=relaxed/simple; bh=NPXxlIDiNnLPrF7zvb8NfTwNU40a/+vELL7lulrDgkw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Yt9EQhGRwggBRwLFP7dijNkkAcOsa9pGXYA87QkWbkxC5QDmgMjhSurrvUzdpaNApeKwwx5ttVh7D1PY2b/XGsLNP7pRMScYd+0WwxCUez8/NAyuBCOI386N5vCDtRjZJ9B4EJ/JKRu9CfeLp+kTPtHpt3d2niGK6Ems7qW72IQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=GT4hDQID; arc=fail smtp.client-ip=40.107.208.24 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="GT4hDQID" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oYhbyhKEn4N+/buSuOo8CnkAkrDFHYcOXk8vMhfPI2HCcq3b9xGDeByVGjOC4PMNzxcq0Z34bG1l2ZD8vmVCb4LXm6O6uA09niSn/DqHkFqUU1ti83qk157uVPAIKlW7jU0QRTiTAPvBoL+/X3v2VkUaM7SC2YFgXffA5TCXaFmwx1UydG//GcM6wTkJglPesxG9CBokL5LYKU/zc+cDcLQBV97Kfv3Td7P8AN2hr0RIyXmNTc8/5ZmGk/OkPEfVswF0QGmbfLKb8keLFQ7MWBbcBGNbuOqMnrnl/j3PbuNOm8igD2Ow2dysW06G1CBY7VvTx1uTwAQlgB/vGLpAng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mLN05YuOErO20dd3+mhEBofp/tdf/yEPe+MC1wXbJ/E=; b=o6eDJk81HUZaz64q6v/zIa+lPLcXlebRhUxdLwavDqWSkugVrB9qkEvmOzKH+HARXL/yKx9iEWvbTADtTiRSiYFn/f5aZiwUTS8ZixH9WVZApU1UQH8kWPCvhOBNoWp1eds5KOeHmbmFW6utfTGpPlpi3QV2xXkWhUZjfewu3ci9LlixYEOVOTvIjR91geSFMpTXbfkvG880wsqgl2Dl2tKR61uoxQMt3JQvfItN+P8thSyUI+/5iEWwzZlLO0feROfBg264+yjQ1ZLoJBNRWsHcpz/HS7hOTMvsRQ6mDvxsxvM6DkcRJoyxhKx3nn1maCMU4AsSOkEJvndiRG5Qvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mLN05YuOErO20dd3+mhEBofp/tdf/yEPe+MC1wXbJ/E=; b=GT4hDQIDEBoLVGXXVU8btS3SExce8+VKCvZ1tUSyR8D5J7Fns4r/5EjCDsUvykdP000OW7nvwMkgNYadJML/XPo1F6M0e/Aq/RLnrx6YMvSA8HTw/mmEXIxySLTACvOoK1Fr+X+5fCAh49NN+gxr96rhPjc2/y2I+xKzsJbVj4nnTk+zebirsa6x6ljaxLfJmaLKKiYLmqhLUHuMdA74fjmRYKaca7dpiUk86kxHVopJS2COpGL9R5n1TkWRpj4OjUrrGUzyFAt89c05t9BZr+m0ARps43lk4OEAwbfHPGsQ8c8clS72S9oN1Fpey1JzDvZH4OYJmU//haDErIkZbg== Received: from PH0PR07CA0024.namprd07.prod.outlook.com (2603:10b6:510:5::29) by SA0PR12MB4416.namprd12.prod.outlook.com (2603:10b6:806:99::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.7; Mon, 12 Jan 2026 04:30:58 +0000 Received: from CY4PEPF0000E9D3.namprd03.prod.outlook.com (2603:10b6:510:5:cafe::7f) by PH0PR07CA0024.outlook.office365.com (2603:10b6:510:5::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9499.7 via Frontend Transport; Mon, 12 Jan 2026 04:30:20 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CY4PEPF0000E9D3.mail.protection.outlook.com (10.167.241.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.1 via Frontend Transport; Mon, 12 Jan 2026 04:30:58 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Sun, 11 Jan 2026 20:30:39 -0800 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Sun, 11 Jan 2026 20:30:39 -0800 Received: from sheetal.nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Sun, 11 Jan 2026 20:30:34 -0800 From: "Sheetal ." To: Mark Brown CC: Sander Vanheule , Greg Kroah-Hartman , "Rafael J . Wysocki" , Danilo Krummrich , Liam Girdwood , Jaroslav Kysela , Takashi Iwai , "Thierry Reding" , Jonathan Hunter , Mohan kumar , , , , Sheetal Subject: [RFC PATCH v2 2/3] regmap: Add KUnit test for flat_cache_default_is_zero Date: Mon, 12 Jan 2026 09:58:40 +0530 Message-ID: <20260112042841.51799-3-sheetal@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260112042841.51799-1-sheetal@nvidia.com> References: <20260112042841.51799-1-sheetal@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9D3:EE_|SA0PR12MB4416:EE_ X-MS-Office365-Filtering-Correlation-Id: 9d873298-6d9b-452e-03dd-08de51936253 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|82310400026|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?qUEtFjZpIcqB4EmASZivWTrYgoba7w89NbsAgkfis1G0/qBT1AU4V2waPy7C?= =?us-ascii?Q?tdXlmZh/F9IweS8O50Lr4IXYl6qhvxDx+WkKaNchPnhm5coOikg2lNsQt0oJ?= =?us-ascii?Q?cR4XbujwUPBTRIevWx53VFKQqSYMFFZ1tEk/lHTmfUDE5Come/EfDTcrUeJ0?= =?us-ascii?Q?5uhVG2KSGLovoMC58FIzHeuWauKMkIhsv15thWpg6Pn/23iIT245jPMhYWL4?= =?us-ascii?Q?+5MAiUI9h4mcZnR+scMMUQeinuSIUEN1zFevcAvGlI4dzoK7rpcpCXS1JMPS?= =?us-ascii?Q?WbBkfYIDIKgiyraHWG/T9ORVUJN9uBGTAe2fyizFpCt6szuDwK30KeXsUkJN?= =?us-ascii?Q?BXJIBaWVqIZXfd2J2APMXKZs0Z2Hi1nPEBhmgu1dSbgJrntdXiXWvQarPf6z?= =?us-ascii?Q?R5bvqHszT65Yl9+hFEllb7to9XWBlrOld5JD83BLxLQ8dvrJfjWjjt/B3jvw?= =?us-ascii?Q?EoD0XgDUe8b4UlwR51mHbyXyWf6NbbV/zqt0lqhQNr0b5cJN9WC+xBb3xeX4?= =?us-ascii?Q?7PTzYP0evRdsn2FhmxsTn7D59onEnLbkqap2Sf1fhLinHsaDOxNxfc0xgor4?= =?us-ascii?Q?Y51ocSz4yWvHCluUS6krIcJET3oZX0FZBsnhdcRBpFF2CSYvOc5ZEF9QBJ7c?= =?us-ascii?Q?yUjK3D+aUANvIqrg8vPGNTOphaz4tkb+ItQcu8BCZqTD6GK+p3TV0hLEplJo?= =?us-ascii?Q?rM65tUx9ZD4btX9qI9thps5loOTtVHmjTXOt2ZVGsvqJSVTXvwh2XwoV8XRj?= =?us-ascii?Q?GFsOZfnxhbTSlTei6AZg4r3k96u2TnKavGV2/9wiS+6RA5ArIR2y7+yXDelo?= =?us-ascii?Q?xO1BsI0q8IuK14bZ5Gw+C5PB316LwsnP52uOiWXqudy6wJUgsfe9OqtfZble?= =?us-ascii?Q?n5mbXV5fk2gkjZu5k+pfHDvqXYu647f8GYQCl4sESU7ZwODnP3uWPegP2tKh?= =?us-ascii?Q?SlVZo1bm6BaeH1quibjM2QEqgJQMEDaiwUvpe/Y4Ns2WvnR58P/sGoH75yKd?= =?us-ascii?Q?Toco8sYEzWkTM240K7zwLx3mp42IEqjk8FNpSxrS6jTtmiH7yqh0F8RFHFwn?= =?us-ascii?Q?n5/WJoQdZfrrExzmFfBO7BgVC0a6aASnryfj5Yk8kk1zx9HRf/o7JNa7BY8j?= =?us-ascii?Q?si+kQdDTekCdhdPzF8gJqhnpg0UHFenqr79EPkDfTorE0f+TvgbC3kgyTIpK?= =?us-ascii?Q?RSsm/YRSXCHK5exaUIa0cmO4lqlS3UncdwrOmWv/eat8LZVSziUQaWHFKXjn?= =?us-ascii?Q?/QmikHEYzpBIYcBwUXZW8FssqM+CuFsgreJt0tK1/F4cZkvpr/wzPndEEj/C?= =?us-ascii?Q?4ptxq5KzwwvhlXTH8c+piRLff35rG3Ll2v38tckOd5hQ3SX01fjoNaFIqHVD?= =?us-ascii?Q?dflNA+089BQmAGk7NWmYXrUZcLqCnXYcoR/iuv3xm9aqvB4k3Y9oFSnmKcsB?= =?us-ascii?Q?siiNWWhzvlukg5V+a4wb8RMcqxnji8xpssK5BU4TaWuxU4ZwR1stYqNGjBhn?= =?us-ascii?Q?SpRPiwcn1n8tKX0/twKxLnatwknlwxXdkUj/F/kUsE5DuvO7r9RPJ6NeyRly?= =?us-ascii?Q?2NcxLl74sqkYU0bbUFg=3D?= X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(7416014)(82310400026)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jan 2026 04:30:58.3363 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9d873298-6d9b-452e-03dd-08de51936253 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9D3.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR12MB4416 Content-Type: text/plain; charset="utf-8" From: Sheetal Add KUnit test coverage for the flat_cache_default_is_zero flag. The test verifies that when the flag is set: - Writes in cache_only mode work before registers are marked valid - Writes in cache_only mode work after registers are marked valid - After regcache_mark_dirty() and regcache_sync(), cached values are correctly written to hardware - Reads return the cached values Test command: ./tools/testing/kunit/kunit.py run regmap Test results: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D flat_cache_default_is_zero_flag = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D [PASSED] flat-default @0x0 [PASSED] flat-default fast I/O @0x0 [PASSED] flat-default @0x2001 [PASSED] flat-default @0x2002 =3D=3D=3D=3D=3D=3D=3D=3D=3D [PASSED] flat_cache_default_is_zero_flag =3D= =3D=3D=3D=3D=3D=3D=3D=3D Signed-off-by: Sheetal --- drivers/base/regmap/regmap-kunit.c | 87 +++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/drivers/base/regmap/regmap-kunit.c b/drivers/base/regmap/regma= p-kunit.c index f6fc5ed016da..7eec555c449c 100644 --- a/drivers/base/regmap/regmap-kunit.c +++ b/drivers/base/regmap/regmap-kunit.c @@ -118,6 +118,15 @@ static const struct regmap_test_param real_cache_types= _only_list[] =3D { =20 KUNIT_ARRAY_PARAM(real_cache_types_only, real_cache_types_only_list, param= _to_desc); =20 +static const struct regmap_test_param flat_cache_types_list[] =3D { + { .cache =3D REGCACHE_FLAT, .from_reg =3D 0 }, + { .cache =3D REGCACHE_FLAT, .from_reg =3D 0, .fast_io =3D true }, + { .cache =3D REGCACHE_FLAT, .from_reg =3D 0x2001 }, + { .cache =3D REGCACHE_FLAT, .from_reg =3D 0x2002 }, +}; + +KUNIT_ARRAY_PARAM(flat_cache_types, flat_cache_types_list, param_to_desc); + static const struct regmap_test_param real_cache_types_list[] =3D { { .cache =3D REGCACHE_FLAT, .from_reg =3D 0 }, { .cache =3D REGCACHE_FLAT, .from_reg =3D 0, .fast_io =3D true }, @@ -1517,6 +1526,83 @@ static void cache_present(struct kunit *test) KUNIT_ASSERT_TRUE(test, regcache_reg_cached(map, param->from_reg + i)); } =20 +/* + * Test flat_cache_default_is_zero flag behavior. + * + * When this flag is set on REGCACHE_FLAT, registers not in reg_defaults + * are treated as having a default value of zero. This allows drivers to + * avoid maintaining large reg_defaults arrays for hardware with zero + * power-on-reset values. + */ +static void flat_cache_default_is_zero_flag(struct kunit *test) +{ + const struct regmap_test_param *param =3D test->param_value; + struct regmap *map; + struct regmap_config config; + struct regmap_ram_data *data; + unsigned int val; + int i; + + config =3D test_regmap_config; + config.flat_cache_default_is_zero =3D true; + + map =3D gen_regmap(test, &config, &data); + KUNIT_ASSERT_FALSE(test, IS_ERR(map)); + if (IS_ERR(map)) + return; + + for (i =3D 0; i < BLOCK_TEST_SIZE; i++) { + data->read[param->from_reg + i] =3D false; + data->written[param->from_reg + i] =3D false; + } + + /* Write in cache_only mode before registers are marked valid */ + regcache_cache_only(map, true); + for (i =3D 0; i < BLOCK_TEST_SIZE; i++) + KUNIT_EXPECT_EQ(test, 0, regmap_write(map, param->from_reg + i, i + 0x10= 0)); + + for (i =3D 0; i < BLOCK_TEST_SIZE; i++) + KUNIT_ASSERT_FALSE(test, data->written[param->from_reg + i]); + + regcache_cache_only(map, false); + regcache_mark_dirty(map); + KUNIT_EXPECT_EQ(test, 0, regcache_sync(map)); + + for (i =3D 0; i < BLOCK_TEST_SIZE; i++) + KUNIT_ASSERT_TRUE(test, data->written[param->from_reg + i]); + + for (i =3D 0; i < BLOCK_TEST_SIZE; i++) + KUNIT_EXPECT_EQ(test, i + 0x100, data->vals[param->from_reg + i]); + + /* Verify reads return cached values */ + for (i =3D 0; i < BLOCK_TEST_SIZE; i++) { + KUNIT_EXPECT_EQ(test, 0, regmap_read(map, param->from_reg + i, &val)); + KUNIT_EXPECT_EQ(test, i + 0x100, val); + } + + for (i =3D 0; i < BLOCK_TEST_SIZE; i++) + data->written[param->from_reg + i] =3D false; + + /* Write in cache_only mode after registers are already valid */ + regcache_cache_only(map, true); + + for (i =3D 0; i < BLOCK_TEST_SIZE; i++) + KUNIT_EXPECT_EQ(test, 0, regmap_write(map, param->from_reg + i, i + 0x20= 0)); + + for (i =3D 0; i < BLOCK_TEST_SIZE; i++) + KUNIT_ASSERT_FALSE(test, data->written[param->from_reg + i]); + + regcache_cache_only(map, false); + regcache_mark_dirty(map); + KUNIT_EXPECT_EQ(test, 0, regcache_sync(map)); + + for (i =3D 0; i < BLOCK_TEST_SIZE; i++) + KUNIT_ASSERT_TRUE(test, data->written[param->from_reg + i]); + + for (i =3D 0; i < BLOCK_TEST_SIZE; i++) + KUNIT_EXPECT_EQ(test, i + 0x200, data->vals[param->from_reg + i]); +} + static void cache_write_zero(struct kunit *test) { const struct regmap_test_param *param =3D test->param_value; @@ -2078,6 +2164,7 @@ static struct kunit_case regmap_test_cases[] =3D { KUNIT_CASE_PARAM(cache_present, sparse_cache_types_gen_params), KUNIT_CASE_PARAM(cache_write_zero, sparse_cache_types_gen_params), KUNIT_CASE_PARAM(cache_range_window_reg, real_cache_types_only_gen_params= ), + KUNIT_CASE_PARAM(flat_cache_default_is_zero_flag, flat_cache_types_gen_pa= rams), =20 KUNIT_CASE_PARAM(raw_read_defaults_single, raw_test_types_gen_params), KUNIT_CASE_PARAM(raw_read_defaults, raw_test_types_gen_params), --=20 2.17.1 From nobody Sun Feb 8 15:58:32 2026 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012068.outbound.protection.outlook.com [52.101.48.68]) (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 42F1930DEAA; Mon, 12 Jan 2026 04:31:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.48.68 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768192289; cv=fail; b=lbeYoUbKKaiDUjzGWFS13oz9VnRCNf8SbGblZXmMVoCCVLfyW46ZRkKDm/ehBnlpGSa7RWrYXF/fbKPqkcqognbEUPUOrvTbfH6DwYYrymPoSEyBlYoTDkV+aHPz4tWuElMc+7eNJ1ZXfMX0ZuEzK4B82+JLaK3lxd69gOkBsfI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768192289; c=relaxed/simple; bh=OAJqbQH7PJpwdqvIzv4Joc+3LtBXl0enmrsUwqjpTSA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qI+yWEA6EruMW9aL3Tcd4ZWysAGqPjDcByniKiZaaHbNi/afwzabIz5MnQYL/oMfl9xV7kLtF+Q5HSAQN9sqcd0VwOpqimpMWPmBP319sNzjTM4f3UC0h59pj0Lwwb2K7Sx4mu47saCBc/vEkOHHTId6U5rdCp1fQiiMpf8Cj90= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=tthUbkOg; arc=fail smtp.client-ip=52.101.48.68 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="tthUbkOg" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oGqKyppYx2X9My3Wk/TlvdojdHhXDNYEz7TQi58POe+daw09soPo4gumT9rbkRbWrsmAYuCOLw0uvzXm0PMsZy6xcZNyZRoNfIyM9fiBzJwdfZE9yLMN2anJp/RviCxaFnCMwuYJTX3myyT0c1iFQMm163psL7RDGFTuOq2NZ8LjuryRan/oTIgtyd6aOU5VzmwTRCbFZ4NN8DqshAvuKRRQDWjM+A7SE1c4NpzTylbKwqpPHyRvSqDqg+AGd9gb/NHafd58RwV/GnRWf/XI2OdGNc8Vn5gd9MxYWPeLE9QSlg3HvOqm+g7hT+U2TqQSGaru8hR1c9YjztgoTw+lXw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=V/JlBOSakJ6lHphY9xavIo62xqbDHbeLC3Oakq7NwW0=; b=CMZOLUxu430rqUaLQQIo77qSE5sRKIcYUrWT8oxZFIna8NXHUvBHdIpzuwcpbFm/a892nd0o/JuJkLSxH61vIbxOQzs2NTr9ZoAiUcTomJHvShRZLJ1m5Sa+gukCWT+bhDDi5NsAquQWlHLPtIoRZh4MN0z5iIsUfyYU5OAeeibunUR3htUO+d+21f23lafplFRgm5zqsUJ53EVvBjGwQqc1gzR9wlmitX0Cx9t18vr2f79lo9AwSMd2r6ApANwwMA63/Qsw7nuwTOUqJweJrUiPQOUP8+ppaiPa/JJqhRGQi9PbJnMKo9V2iSA2ItfYXv6TqXvNkNuuzp1Wc0gH0Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=V/JlBOSakJ6lHphY9xavIo62xqbDHbeLC3Oakq7NwW0=; b=tthUbkOg68zsiCf+KdgUCLhcue0pM0yWFgs3Hrnu5zyNl/AJlan8yTmsBvNEYQ6vd5IFuJEVMhEGM4g7piOnnXimZtCwIB2LqFkpynNJQ+nnOCOHmA/X2tlobP5DtntNMxZg8YRODoapdVdxlUgtp77pl//jdXFfaJisjNOJh3/1b+Y7ELCcgei8SRQcKiNOLubfivPoTOzNqUvGg1flgWHktrFLti3dWQPzJInmAMJZBATDaKuB3rsXKfOyUd/+YI/e2ktlN5kj8mhYMpNrZSMrfd+lVy6ngrneq9Vk1CuDTPPieVmvjpEit2mNbrN2tO2OSGDOiysDpNthGkhT8w== Received: from SA9PR13CA0015.namprd13.prod.outlook.com (2603:10b6:806:21::20) by BL3PR12MB6521.namprd12.prod.outlook.com (2603:10b6:208:3bd::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.7; Mon, 12 Jan 2026 04:31:02 +0000 Received: from SA2PEPF00003AE6.namprd02.prod.outlook.com (2603:10b6:806:21:cafe::ad) by SA9PR13CA0015.outlook.office365.com (2603:10b6:806:21::20) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9520.4 via Frontend Transport; Mon, 12 Jan 2026 04:30:45 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SA2PEPF00003AE6.mail.protection.outlook.com (10.167.248.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.1 via Frontend Transport; Mon, 12 Jan 2026 04:31:02 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Sun, 11 Jan 2026 20:30:45 -0800 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Sun, 11 Jan 2026 20:30:44 -0800 Received: from sheetal.nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Sun, 11 Jan 2026 20:30:40 -0800 From: "Sheetal ." To: Mark Brown CC: Sander Vanheule , Greg Kroah-Hartman , "Rafael J . Wysocki" , Danilo Krummrich , Liam Girdwood , Jaroslav Kysela , Takashi Iwai , "Thierry Reding" , Jonathan Hunter , Mohan kumar , , , , Sheetal Subject: [RFC PATCH v2 3/3] ASoC: tegra: Enable flat_cache_default_is_zero for audio drivers Date: Mon, 12 Jan 2026 09:58:41 +0530 Message-ID: <20260112042841.51799-4-sheetal@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260112042841.51799-1-sheetal@nvidia.com> References: <20260112042841.51799-1-sheetal@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA2PEPF00003AE6:EE_|BL3PR12MB6521:EE_ X-MS-Office365-Filtering-Correlation-Id: 04d9bc07-d1f0-4e56-7fb3-08de51936499 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|376014|7416014|1800799024|36860700013|13003099007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?wgzhptv2MwcH12aZNb2TqDv8E4SvEA5c1E1Ea5bC5XKgc30bwWzZYewgbiLL?= =?us-ascii?Q?U80aPE4LWtptgn+oI/+z8ivPwcNmMk2eN6Gwq62W0Muwa0gQvXxaCSsWAnmK?= =?us-ascii?Q?xFQ5MRncnzqAzcCnolzLcaMqT3M7TmEmuaJ3ymrfZ3HdICaZKT26oxBgeh2m?= =?us-ascii?Q?c2coSKpjr3ZgWRAsW6EdPQ8i7twDmc9YFAc0sd7cp+oTR/ppNcZT5a4gQgQ3?= =?us-ascii?Q?Z81VrDWJqRgt5ai0qPgJ2LtbvQA3PsWhENgO4TSmqA10Lf5bBOktMqksJyhK?= =?us-ascii?Q?+CeCqL4oklkKV++B+4nr1S9OfIemKetGEOohx2QEyW3IdLaeABCfmDk5/k9M?= =?us-ascii?Q?8ci5B0zwflOTKQy6VN6teRPVIjQ/tq5QvOBIcG4FalgjsqhDUDxT81aaQUO9?= =?us-ascii?Q?00X5Cb1zTAJwIFyEBO7GZijqEmS6O3W49UGD1N1E0HgZEczflV89sTZLZj/3?= =?us-ascii?Q?vETfIkvvm96N+IgV1esnH7Dw+t2Fky8gtLQWjJbNKmm5/ul4SiL1oqHaS+1s?= =?us-ascii?Q?dA1TfSGYNwnsZiRxBKPRJuraHrbzoOLO70eBeCi4W1DLYfzYZI101EeuVAHT?= =?us-ascii?Q?1ZWbgcKFQFJMA+la4iyunyp/1NotQtiuQoHSPMZip+9PzpAVW5q3x9aOKfE4?= =?us-ascii?Q?qPmxRUNKYReuqN2DL5hySe8BzM2O3rgGnGLIk0GwZaAbs6dO9uHy416ha7Z0?= =?us-ascii?Q?plzW0MWRRlyxZLALtc8b2g4R5vdiNk8xA/08452MCDYp2C1Ai0+71+6JuNav?= =?us-ascii?Q?XiI9mSL9rq+QJjW1zG96Q8AVe8+hO2S8FAeiMOPBFocZAOBIJlHT71NHzBsF?= =?us-ascii?Q?p3kRk9vzBxQ1ZpkDWalsRT9NgHSOVJuXu4OAuPCt5aNomb2sVR29NTCD+isy?= =?us-ascii?Q?PYGq8bK1CjUwHKNNsUv5KNgg7ohocpdgkfVlwOEg+EBRo2Apv0uDIzM/Wtjy?= =?us-ascii?Q?uP6rJQIMTyXCN7M6EExoIqC6exqHB5lZc1QHST80KGFpOqj2ISlJgqbx4KuG?= =?us-ascii?Q?eNG+8ydlwJnHHmWOtpGXM8Cae9qB6vyfdAsHZMekyerJnJyUAZodItEUXt+c?= =?us-ascii?Q?2iSMVrU+hSHKjl8WoSWN62vqOiqfgJg91FnrF9fqG2lHsbD5PrnEUOy14nhn?= =?us-ascii?Q?7GotW2JZDHZwDEpZhGplamh73x8LDthYR7c07sANIyoUgeEkNGAOvxWmoR4r?= =?us-ascii?Q?HCwN1/1MCuUyfLZobF1Jw01YpOBgj0vByUHu91dRwX6mkAsY2VhS27OyAHXt?= =?us-ascii?Q?nzb1WVn6Q2obS9L5rUg8n+60GM+F/vY/NeRJ2k0Qrab5XkObzRzrSPPGlXkO?= =?us-ascii?Q?bP53bCBwE2Mu05kKi+Oeu8DuTaDy0ivdENQdKRpscuMaPQ2VIQ2Vo8lEgeh5?= =?us-ascii?Q?/wFkIjwUeenggHzE/QBflPkjkbZx1x8IxWtgx4Jnymh9iJy9IccllC6/NJUr?= =?us-ascii?Q?rXrCRiLgPOM/LoySf5k8eyJ7B3IVyo7gjLUy7eBQ0jE0dNgieFYbNb46mmrt?= =?us-ascii?Q?oQYfHpmInCu+ACUTeANlvTbDf+S9HQKXAaUdZVBZXa6tpUZHu8NjkX0gxeSo?= =?us-ascii?Q?esro8cfZS/uT7C7nQkg=3D?= X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(82310400026)(376014)(7416014)(1800799024)(36860700013)(13003099007);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jan 2026 04:31:02.1636 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 04d9bc07-d1f0-4e56-7fb3-08de51936499 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SA2PEPF00003AE6.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR12MB6521 Content-Type: text/plain; charset="utf-8" From: Sheetal Set flat_cache_default_is_zero flag in Tegra audio driver regmap configurations. Tegra APE hardware has numerous registers with zero power-on-reset values. Use flat_cache_default_is_zero to mark cache entries as valid instead of adding all these registers to reg_defaults arrays. This patch depends on: https://patchwork.ozlabs.org/project/linux-tegra/patch/20251217132524.28444= 99-1-sheetal@nvidia.com/ Signed-off-by: Sheetal --- sound/soc/tegra/tegra186_asrc.c | 21 ++++++----- sound/soc/tegra/tegra186_dspk.c | 21 ++++++----- sound/soc/tegra/tegra210_admaif.c | 63 ++++++++++++++++--------------- sound/soc/tegra/tegra210_adx.c | 42 +++++++++++---------- sound/soc/tegra/tegra210_ahub.c | 35 +++++++++-------- sound/soc/tegra/tegra210_amx.c | 63 ++++++++++++++++--------------- sound/soc/tegra/tegra210_dmic.c | 21 ++++++----- sound/soc/tegra/tegra210_i2s.c | 42 +++++++++++---------- sound/soc/tegra/tegra210_mbdrc.c | 25 ++++++------ sound/soc/tegra/tegra210_mixer.c | 23 +++++------ sound/soc/tegra/tegra210_mvc.c | 21 ++++++----- sound/soc/tegra/tegra210_ope.c | 21 ++++++----- sound/soc/tegra/tegra210_peq.c | 25 ++++++------ sound/soc/tegra/tegra210_sfc.c | 23 +++++------ 14 files changed, 234 insertions(+), 212 deletions(-) diff --git a/sound/soc/tegra/tegra186_asrc.c b/sound/soc/tegra/tegra186_asr= c.c index 2c0220e14a57..5f95b7cb9421 100644 --- a/sound/soc/tegra/tegra186_asrc.c +++ b/sound/soc/tegra/tegra186_asrc.c @@ -941,16 +941,17 @@ static bool tegra186_asrc_volatile_reg(struct device = *dev, unsigned int reg) } =20 static const struct regmap_config tegra186_asrc_regmap_config =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA186_ASRC_CYA, - .writeable_reg =3D tegra186_asrc_wr_reg, - .readable_reg =3D tegra186_asrc_rd_reg, - .volatile_reg =3D tegra186_asrc_volatile_reg, - .reg_defaults =3D tegra186_asrc_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra186_asrc_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA186_ASRC_CYA, + .writeable_reg =3D tegra186_asrc_wr_reg, + .readable_reg =3D tegra186_asrc_rd_reg, + .volatile_reg =3D tegra186_asrc_volatile_reg, + .reg_defaults =3D tegra186_asrc_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra186_asrc_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct tegra_asrc_soc_data soc_data_tegra186 =3D { diff --git a/sound/soc/tegra/tegra186_dspk.c b/sound/soc/tegra/tegra186_dsp= k.c index a762150db802..4183c8fc124f 100644 --- a/sound/soc/tegra/tegra186_dspk.c +++ b/sound/soc/tegra/tegra186_dspk.c @@ -458,16 +458,17 @@ static bool tegra186_dspk_volatile_reg(struct device = *dev, unsigned int reg) } =20 static const struct regmap_config tegra186_dspk_regmap =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA186_DSPK_CODEC_CTRL, - .writeable_reg =3D tegra186_dspk_wr_reg, - .readable_reg =3D tegra186_dspk_rd_reg, - .volatile_reg =3D tegra186_dspk_volatile_reg, - .reg_defaults =3D tegra186_dspk_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra186_dspk_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA186_DSPK_CODEC_CTRL, + .writeable_reg =3D tegra186_dspk_wr_reg, + .readable_reg =3D tegra186_dspk_rd_reg, + .volatile_reg =3D tegra186_dspk_volatile_reg, + .reg_defaults =3D tegra186_dspk_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra186_dspk_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct of_device_id tegra186_dspk_of_match[] =3D { diff --git a/sound/soc/tegra/tegra210_admaif.c b/sound/soc/tegra/tegra210_a= dmaif.c index f9f6040c4e34..5ecd83517413 100644 --- a/sound/soc/tegra/tegra210_admaif.c +++ b/sound/soc/tegra/tegra210_admaif.c @@ -232,42 +232,45 @@ static bool tegra_admaif_volatile_reg(struct device *= dev, unsigned int reg) } =20 static const struct regmap_config tegra210_admaif_regmap_config =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA210_ADMAIF_LAST_REG, - .writeable_reg =3D tegra_admaif_wr_reg, - .readable_reg =3D tegra_admaif_rd_reg, - .volatile_reg =3D tegra_admaif_volatile_reg, - .reg_defaults =3D tegra210_admaif_reg_defaults, - .num_reg_defaults =3D TEGRA210_ADMAIF_CHANNEL_COUNT * 6 + 1, - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA210_ADMAIF_LAST_REG, + .writeable_reg =3D tegra_admaif_wr_reg, + .readable_reg =3D tegra_admaif_rd_reg, + .volatile_reg =3D tegra_admaif_volatile_reg, + .reg_defaults =3D tegra210_admaif_reg_defaults, + .num_reg_defaults =3D TEGRA210_ADMAIF_CHANNEL_COUNT * 6 + 1, + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct regmap_config tegra186_admaif_regmap_config =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA186_ADMAIF_LAST_REG, - .writeable_reg =3D tegra_admaif_wr_reg, - .readable_reg =3D tegra_admaif_rd_reg, - .volatile_reg =3D tegra_admaif_volatile_reg, - .reg_defaults =3D tegra186_admaif_reg_defaults, - .num_reg_defaults =3D TEGRA186_ADMAIF_CHANNEL_COUNT * 6 + 1, - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA186_ADMAIF_LAST_REG, + .writeable_reg =3D tegra_admaif_wr_reg, + .readable_reg =3D tegra_admaif_rd_reg, + .volatile_reg =3D tegra_admaif_volatile_reg, + .reg_defaults =3D tegra186_admaif_reg_defaults, + .num_reg_defaults =3D TEGRA186_ADMAIF_CHANNEL_COUNT * 6 + 1, + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct regmap_config tegra264_admaif_regmap_config =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA264_ADMAIF_LAST_REG, - .writeable_reg =3D tegra_admaif_wr_reg, - .readable_reg =3D tegra_admaif_rd_reg, - .volatile_reg =3D tegra_admaif_volatile_reg, - .reg_defaults =3D tegra264_admaif_reg_defaults, - .num_reg_defaults =3D TEGRA264_ADMAIF_CHANNEL_COUNT * 6 + 1, - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA264_ADMAIF_LAST_REG, + .writeable_reg =3D tegra_admaif_wr_reg, + .readable_reg =3D tegra_admaif_rd_reg, + .volatile_reg =3D tegra_admaif_volatile_reg, + .reg_defaults =3D tegra264_admaif_reg_defaults, + .num_reg_defaults =3D TEGRA264_ADMAIF_CHANNEL_COUNT * 6 + 1, + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static int tegra_admaif_runtime_suspend(struct device *dev) diff --git a/sound/soc/tegra/tegra210_adx.c b/sound/soc/tegra/tegra210_adx.c index 6c9a410085bc..de7f64bd5d75 100644 --- a/sound/soc/tegra/tegra210_adx.c +++ b/sound/soc/tegra/tegra210_adx.c @@ -616,29 +616,31 @@ static bool tegra264_adx_volatile_reg(struct device *= dev, } =20 static const struct regmap_config tegra210_adx_regmap_config =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA210_ADX_CFG_RAM_DATA, - .writeable_reg =3D tegra210_adx_wr_reg, - .readable_reg =3D tegra210_adx_rd_reg, - .volatile_reg =3D tegra210_adx_volatile_reg, - .reg_defaults =3D tegra210_adx_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra210_adx_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA210_ADX_CFG_RAM_DATA, + .writeable_reg =3D tegra210_adx_wr_reg, + .readable_reg =3D tegra210_adx_rd_reg, + .volatile_reg =3D tegra210_adx_volatile_reg, + .reg_defaults =3D tegra210_adx_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra210_adx_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct regmap_config tegra264_adx_regmap_config =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA264_ADX_CFG_RAM_DATA, - .writeable_reg =3D tegra264_adx_wr_reg, - .readable_reg =3D tegra264_adx_rd_reg, - .volatile_reg =3D tegra264_adx_volatile_reg, - .reg_defaults =3D tegra264_adx_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra264_adx_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA264_ADX_CFG_RAM_DATA, + .writeable_reg =3D tegra264_adx_wr_reg, + .readable_reg =3D tegra264_adx_rd_reg, + .volatile_reg =3D tegra264_adx_volatile_reg, + .reg_defaults =3D tegra264_adx_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra264_adx_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct tegra210_adx_soc_data soc_data_tegra210 =3D { diff --git a/sound/soc/tegra/tegra210_ahub.c b/sound/soc/tegra/tegra210_ahu= b.c index e795907a3963..e67850dac18d 100644 --- a/sound/soc/tegra/tegra210_ahub.c +++ b/sound/soc/tegra/tegra210_ahub.c @@ -2073,28 +2073,31 @@ static bool tegra264_ahub_wr_reg(struct device *dev= , unsigned int reg) } =20 static const struct regmap_config tegra210_ahub_regmap_config =3D { - .reg_bits =3D 32, - .val_bits =3D 32, - .reg_stride =3D 4, - .max_register =3D TEGRA210_MAX_REGISTER_ADDR, - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .val_bits =3D 32, + .reg_stride =3D 4, + .max_register =3D TEGRA210_MAX_REGISTER_ADDR, + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct regmap_config tegra186_ahub_regmap_config =3D { - .reg_bits =3D 32, - .val_bits =3D 32, - .reg_stride =3D 4, - .max_register =3D TEGRA186_MAX_REGISTER_ADDR, - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .val_bits =3D 32, + .reg_stride =3D 4, + .max_register =3D TEGRA186_MAX_REGISTER_ADDR, + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct regmap_config tegra264_ahub_regmap_config =3D { - .reg_bits =3D 32, - .val_bits =3D 32, - .reg_stride =3D 4, - .writeable_reg =3D tegra264_ahub_wr_reg, - .max_register =3D TEGRA264_MAX_REGISTER_ADDR, - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .val_bits =3D 32, + .reg_stride =3D 4, + .writeable_reg =3D tegra264_ahub_wr_reg, + .max_register =3D TEGRA264_MAX_REGISTER_ADDR, + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct tegra_ahub_soc_data soc_data_tegra210 =3D { diff --git a/sound/soc/tegra/tegra210_amx.c b/sound/soc/tegra/tegra210_amx.c index c94f8c84e04f..1a7943bb41cc 100644 --- a/sound/soc/tegra/tegra210_amx.c +++ b/sound/soc/tegra/tegra210_amx.c @@ -645,42 +645,45 @@ static bool tegra264_amx_volatile_reg(struct device *= dev, } =20 static const struct regmap_config tegra210_amx_regmap_config =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA210_AMX_CFG_RAM_DATA, - .writeable_reg =3D tegra210_amx_wr_reg, - .readable_reg =3D tegra210_amx_rd_reg, - .volatile_reg =3D tegra210_amx_volatile_reg, - .reg_defaults =3D tegra210_amx_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra210_amx_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA210_AMX_CFG_RAM_DATA, + .writeable_reg =3D tegra210_amx_wr_reg, + .readable_reg =3D tegra210_amx_rd_reg, + .volatile_reg =3D tegra210_amx_volatile_reg, + .reg_defaults =3D tegra210_amx_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra210_amx_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct regmap_config tegra194_amx_regmap_config =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA194_AMX_RX4_LAST_FRAME_PERIOD, - .writeable_reg =3D tegra194_amx_wr_reg, - .readable_reg =3D tegra194_amx_rd_reg, - .volatile_reg =3D tegra210_amx_volatile_reg, - .reg_defaults =3D tegra210_amx_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra210_amx_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA194_AMX_RX4_LAST_FRAME_PERIOD, + .writeable_reg =3D tegra194_amx_wr_reg, + .readable_reg =3D tegra194_amx_rd_reg, + .volatile_reg =3D tegra210_amx_volatile_reg, + .reg_defaults =3D tegra210_amx_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra210_amx_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct regmap_config tegra264_amx_regmap_config =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA264_AMX_RX4_LAST_FRAME_PERIOD, - .writeable_reg =3D tegra264_amx_wr_reg, - .readable_reg =3D tegra264_amx_rd_reg, - .volatile_reg =3D tegra264_amx_volatile_reg, - .reg_defaults =3D tegra264_amx_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra264_amx_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA264_AMX_RX4_LAST_FRAME_PERIOD, + .writeable_reg =3D tegra264_amx_wr_reg, + .readable_reg =3D tegra264_amx_rd_reg, + .volatile_reg =3D tegra264_amx_volatile_reg, + .reg_defaults =3D tegra264_amx_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra264_amx_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct tegra210_amx_soc_data soc_data_tegra210 =3D { diff --git a/sound/soc/tegra/tegra210_dmic.c b/sound/soc/tegra/tegra210_dmi= c.c index 66fff53aeaa6..71b46a86443e 100644 --- a/sound/soc/tegra/tegra210_dmic.c +++ b/sound/soc/tegra/tegra210_dmic.c @@ -474,16 +474,17 @@ static bool tegra210_dmic_volatile_reg(struct device = *dev, unsigned int reg) } =20 static const struct regmap_config tegra210_dmic_regmap_config =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA210_DMIC_LP_BIQUAD_1_COEF_4, - .writeable_reg =3D tegra210_dmic_wr_reg, - .readable_reg =3D tegra210_dmic_rd_reg, - .volatile_reg =3D tegra210_dmic_volatile_reg, - .reg_defaults =3D tegra210_dmic_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra210_dmic_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA210_DMIC_LP_BIQUAD_1_COEF_4, + .writeable_reg =3D tegra210_dmic_wr_reg, + .readable_reg =3D tegra210_dmic_rd_reg, + .volatile_reg =3D tegra210_dmic_volatile_reg, + .reg_defaults =3D tegra210_dmic_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra210_dmic_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static int tegra210_dmic_probe(struct platform_device *pdev) diff --git a/sound/soc/tegra/tegra210_i2s.c b/sound/soc/tegra/tegra210_i2s.c index b91e0e6cd7fe..940d9f6bdc3f 100644 --- a/sound/soc/tegra/tegra210_i2s.c +++ b/sound/soc/tegra/tegra210_i2s.c @@ -988,16 +988,17 @@ static bool tegra264_i2s_volatile_reg(struct device *= dev, unsigned int reg) } =20 static const struct regmap_config tegra210_regmap_conf =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA210_I2S_CYA, - .writeable_reg =3D tegra210_i2s_wr_reg, - .readable_reg =3D tegra210_i2s_rd_reg, - .volatile_reg =3D tegra210_i2s_volatile_reg, - .reg_defaults =3D tegra210_i2s_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra210_i2s_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA210_I2S_CYA, + .writeable_reg =3D tegra210_i2s_wr_reg, + .readable_reg =3D tegra210_i2s_rd_reg, + .volatile_reg =3D tegra210_i2s_volatile_reg, + .reg_defaults =3D tegra210_i2s_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra210_i2s_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 /* @@ -1035,16 +1036,17 @@ static void tegra210_parse_client_convert(struct de= vice *dev) } =20 static const struct regmap_config tegra264_regmap_conf =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA264_I2S_PAD_MACRO_STATUS, - .writeable_reg =3D tegra264_i2s_wr_reg, - .readable_reg =3D tegra264_i2s_rd_reg, - .volatile_reg =3D tegra264_i2s_volatile_reg, - .reg_defaults =3D tegra264_i2s_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra264_i2s_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA264_I2S_PAD_MACRO_STATUS, + .writeable_reg =3D tegra264_i2s_wr_reg, + .readable_reg =3D tegra264_i2s_rd_reg, + .volatile_reg =3D tegra264_i2s_volatile_reg, + .reg_defaults =3D tegra264_i2s_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra264_i2s_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static int tegra210_i2s_probe(struct platform_device *pdev) diff --git a/sound/soc/tegra/tegra210_mbdrc.c b/sound/soc/tegra/tegra210_mb= drc.c index 09fe3c5cf540..485fae392741 100644 --- a/sound/soc/tegra/tegra210_mbdrc.c +++ b/sound/soc/tegra/tegra210_mbdrc.c @@ -752,18 +752,19 @@ static bool tegra210_mbdrc_precious_reg(struct device= *dev, unsigned int reg) } =20 static const struct regmap_config tegra210_mbdrc_regmap_cfg =3D { - .name =3D "mbdrc", - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA210_MBDRC_MAX_REG, - .writeable_reg =3D tegra210_mbdrc_wr_reg, - .readable_reg =3D tegra210_mbdrc_rd_reg, - .volatile_reg =3D tegra210_mbdrc_volatile_reg, - .precious_reg =3D tegra210_mbdrc_precious_reg, - .reg_defaults =3D tegra210_mbdrc_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra210_mbdrc_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .name =3D "mbdrc", + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA210_MBDRC_MAX_REG, + .writeable_reg =3D tegra210_mbdrc_wr_reg, + .readable_reg =3D tegra210_mbdrc_rd_reg, + .volatile_reg =3D tegra210_mbdrc_volatile_reg, + .precious_reg =3D tegra210_mbdrc_precious_reg, + .reg_defaults =3D tegra210_mbdrc_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra210_mbdrc_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 int tegra210_mbdrc_hw_params(struct snd_soc_component *cmpnt) diff --git a/sound/soc/tegra/tegra210_mixer.c b/sound/soc/tegra/tegra210_mi= xer.c index ff8e9f2d7abf..b05d1140c689 100644 --- a/sound/soc/tegra/tegra210_mixer.c +++ b/sound/soc/tegra/tegra210_mixer.c @@ -598,17 +598,18 @@ static bool tegra210_mixer_precious_reg(struct device= *dev, } =20 static const struct regmap_config tegra210_mixer_regmap_config =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA210_MIXER_CTRL, - .writeable_reg =3D tegra210_mixer_wr_reg, - .readable_reg =3D tegra210_mixer_rd_reg, - .volatile_reg =3D tegra210_mixer_volatile_reg, - .precious_reg =3D tegra210_mixer_precious_reg, - .reg_defaults =3D tegra210_mixer_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra210_mixer_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA210_MIXER_CTRL, + .writeable_reg =3D tegra210_mixer_wr_reg, + .readable_reg =3D tegra210_mixer_rd_reg, + .volatile_reg =3D tegra210_mixer_volatile_reg, + .precious_reg =3D tegra210_mixer_precious_reg, + .reg_defaults =3D tegra210_mixer_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra210_mixer_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct of_device_id tegra210_mixer_of_match[] =3D { diff --git a/sound/soc/tegra/tegra210_mvc.c b/sound/soc/tegra/tegra210_mvc.c index 779d4c199da9..a0699563a512 100644 --- a/sound/soc/tegra/tegra210_mvc.c +++ b/sound/soc/tegra/tegra210_mvc.c @@ -690,16 +690,17 @@ static bool tegra210_mvc_volatile_reg(struct device *= dev, unsigned int reg) } =20 static const struct regmap_config tegra210_mvc_regmap_config =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA210_MVC_CONFIG_ERR_TYPE, - .writeable_reg =3D tegra210_mvc_wr_reg, - .readable_reg =3D tegra210_mvc_rd_reg, - .volatile_reg =3D tegra210_mvc_volatile_reg, - .reg_defaults =3D tegra210_mvc_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra210_mvc_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA210_MVC_CONFIG_ERR_TYPE, + .writeable_reg =3D tegra210_mvc_wr_reg, + .readable_reg =3D tegra210_mvc_rd_reg, + .volatile_reg =3D tegra210_mvc_volatile_reg, + .reg_defaults =3D tegra210_mvc_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra210_mvc_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct of_device_id tegra210_mvc_of_match[] =3D { diff --git a/sound/soc/tegra/tegra210_ope.c b/sound/soc/tegra/tegra210_ope.c index 27db70af2746..6a1c05829b4b 100644 --- a/sound/soc/tegra/tegra210_ope.c +++ b/sound/soc/tegra/tegra210_ope.c @@ -288,16 +288,17 @@ static bool tegra210_ope_volatile_reg(struct device *= dev, unsigned int reg) } =20 static const struct regmap_config tegra210_ope_regmap_config =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA210_OPE_DIR, - .writeable_reg =3D tegra210_ope_wr_reg, - .readable_reg =3D tegra210_ope_rd_reg, - .volatile_reg =3D tegra210_ope_volatile_reg, - .reg_defaults =3D tegra210_ope_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra210_ope_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA210_OPE_DIR, + .writeable_reg =3D tegra210_ope_wr_reg, + .readable_reg =3D tegra210_ope_rd_reg, + .volatile_reg =3D tegra210_ope_volatile_reg, + .reg_defaults =3D tegra210_ope_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra210_ope_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static int tegra210_ope_probe(struct platform_device *pdev) diff --git a/sound/soc/tegra/tegra210_peq.c b/sound/soc/tegra/tegra210_peq.c index 9a05e6913276..0f90a9d27f2e 100644 --- a/sound/soc/tegra/tegra210_peq.c +++ b/sound/soc/tegra/tegra210_peq.c @@ -295,18 +295,19 @@ static bool tegra210_peq_precious_reg(struct device *= dev, unsigned int reg) } =20 static const struct regmap_config tegra210_peq_regmap_config =3D { - .name =3D "peq", - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA210_PEQ_CFG_RAM_SHIFT_DATA, - .writeable_reg =3D tegra210_peq_wr_reg, - .readable_reg =3D tegra210_peq_rd_reg, - .volatile_reg =3D tegra210_peq_volatile_reg, - .precious_reg =3D tegra210_peq_precious_reg, - .reg_defaults =3D tegra210_peq_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra210_peq_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .name =3D "peq", + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA210_PEQ_CFG_RAM_SHIFT_DATA, + .writeable_reg =3D tegra210_peq_wr_reg, + .readable_reg =3D tegra210_peq_rd_reg, + .volatile_reg =3D tegra210_peq_volatile_reg, + .precious_reg =3D tegra210_peq_precious_reg, + .reg_defaults =3D tegra210_peq_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra210_peq_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 void tegra210_peq_restore(struct regmap *regmap, u32 *biquad_gains, diff --git a/sound/soc/tegra/tegra210_sfc.c b/sound/soc/tegra/tegra210_sfc.c index d6341968bebe..4aee0a86c5dc 100644 --- a/sound/soc/tegra/tegra210_sfc.c +++ b/sound/soc/tegra/tegra210_sfc.c @@ -3559,17 +3559,18 @@ static bool tegra210_sfc_precious_reg(struct device= *dev, unsigned int reg) } =20 static const struct regmap_config tegra210_sfc_regmap_config =3D { - .reg_bits =3D 32, - .reg_stride =3D 4, - .val_bits =3D 32, - .max_register =3D TEGRA210_SFC_CFG_RAM_DATA, - .writeable_reg =3D tegra210_sfc_wr_reg, - .readable_reg =3D tegra210_sfc_rd_reg, - .volatile_reg =3D tegra210_sfc_volatile_reg, - .precious_reg =3D tegra210_sfc_precious_reg, - .reg_defaults =3D tegra210_sfc_reg_defaults, - .num_reg_defaults =3D ARRAY_SIZE(tegra210_sfc_reg_defaults), - .cache_type =3D REGCACHE_FLAT, + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA210_SFC_CFG_RAM_DATA, + .writeable_reg =3D tegra210_sfc_wr_reg, + .readable_reg =3D tegra210_sfc_rd_reg, + .volatile_reg =3D tegra210_sfc_volatile_reg, + .precious_reg =3D tegra210_sfc_precious_reg, + .reg_defaults =3D tegra210_sfc_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra210_sfc_reg_defaults), + .cache_type =3D REGCACHE_FLAT, + .flat_cache_default_is_zero =3D true, }; =20 static const struct of_device_id tegra210_sfc_of_match[] =3D { --=20 2.17.1