From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 46CA73E3152 for ; Sun, 16 Aug 2026 22:13:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786918405; cv=none; b=Eeg01BNt/xexp68XDH3AwRIfoMg/H92+ymHDKRNoeAUeNUE8ia8hRDNFX7+UF/GTdYoyVPjuhQa1YuM5IQHidzRdp1J/tFUGPG5JIBbP+015w7hgCU7dpBZvRbhDCE1PMggTRxg7owT9miApXJctE8Hz++MhKcfbYMBd/gW//IY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786918405; c=relaxed/simple; bh=tTbACmVU2HxU+N4jOmNg+IWJM1yBQj2QekfY/2/BYjY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To; b=eW9jYsorjD1n20xjvz32WiWWruLaoCwbJ/+7rWGWwVosBWnqCo57VUkXjQt6HR9nXKxDdg14yZO867GLe1n34GveC4lW4ZIScaxZ0n4VcpGka+xpTxd6x1BdwRvz175otHspeR0awP6OJkeXEcMfYmmeuvRM6MFABiFxOMIiDIE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cQyBAa5T; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cQyBAa5T" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8CAA71F00A3D; Sun, 16 Aug 2026 22:13:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786918404; bh=Ur3gVV5h1X82STZEOX2VQPQaHO1sZSusqf6jY1Hr2sQ=; h=From:Date:Subject:References:In-Reply-To:To; b=cQyBAa5Tl99/VHOnrb4iwDsDNbjY7UWC9KRRWAJhC0Np18t87HKsPuzGyGjiPcJOC rujN+dQW6b0Nq/udVBg8E3SBumNfD+kBra9980KabPZtq7ijZsz67SgN0ZFDqfpGLl vWSj7shG5/2XoVMwvT4x4B5ePAp/tUhF3uVdz+xY+kKbHmerOmKRjjxOUx1OhwhSDn BnwhL2X2IuoseGSF+uf27eIYoCE/Bh+XUU+7uU/8uV4oG1c9zQZZNeM4r4JWUeN6hA yHV+EhYeD+33gWqabo37jAfX6PA2zxQK0zigaHCtTucPduDvsma3F155NsUz/m+dWl t6zMJ10HRWbXw== From: Mark Brown Date: Sun, 16 Aug 2026 23:13:15 +0100 Subject: [PATCH 1/2] regmap: Allow a base register to be specified for the RAM regmap Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260816-regmap-kunit-cache-high-bit-v1-1-2b98d9e289c2@kernel.org> References: <20260816-regmap-kunit-cache-high-bit-v1-0-2b98d9e289c2@kernel.org> In-Reply-To: <20260816-regmap-kunit-cache-high-bit-v1-0-2b98d9e289c2@kernel.org> To: linux-kernel@vger.kernel.org, Mark Brown X-Mailer: b4 0.17-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=2577; i=broonie@kernel.org; h=from:subject:message-id; bh=tTbACmVU2HxU+N4jOmNg+IWJM1yBQj2QekfY/2/BYjY=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBqgjX9KEuUcuYef8ZP+aK0wLh6h9z4I4nLMbcaW i+wgFtwSIeJATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCaoI1/QAKCRAk1otyXVSH 0BUOB/9mYKQMH9q1M/YvW5N9fI5EFAefZaNaO6EynU279iQS40rwfQtW8F7MqV/O9k9p1MskcDp YwWrLmutD0H1Dt/EwNvavZbG1NyrQi22SPQJjKboHeTgBjxjerlt/SsZ95u3x+y8FJ6wRr2lpOq qmGU/sMTR3QE9Fel/vUjgYx6E4GDi8lQTEhxxzAi1ciVYq+PLfpaiEwjebpQ0s7fsFsHUJ81+Ax aDAlLX2POu3aPD4f33iOLXt3iomEu6tCI39l1hMfxVaN8IjJKrlCKV4q/oXBRlps1kVY6VdWWnF QnhRX9rN6oPACJ5nQHdqU/2Psdt8gWZNXfex5AsQU39b7y0T X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB To allow testing of register maps with very large register values add support for specifying base address to the RAM regmap. Signed-off-by: Mark Brown --- drivers/base/regmap/internal.h | 1 + drivers/base/regmap/regmap-ram.c | 26 ++++++++++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h index 55273a6178f8..8176d91aacd1 100644 --- a/drivers/base/regmap/internal.h +++ b/drivers/base/regmap/internal.h @@ -322,6 +322,7 @@ static inline unsigned int regcache_get_index_by_order(const struct regmap *map, } struct regmap_ram_data { + unsigned int base_reg; unsigned int *vals; /* Allocatd by caller */ bool *read; bool *written; diff --git a/drivers/base/regmap/regmap-ram.c b/drivers/base/regmap/regmap-ram.c index c7356b0d8c83..a666bfb4d667 100644 --- a/drivers/base/regmap/regmap-ram.c +++ b/drivers/base/regmap/regmap-ram.c @@ -20,8 +20,11 @@ static int regmap_ram_write(void *context, unsigned int reg, unsigned int val) { struct regmap_ram_data *data = context; - data->vals[reg] = val; - data->written[reg] = true; + if (reg < data->base_reg) + return -EINVAL; + + data->vals[reg - data->base_reg] = val; + data->written[reg - data->base_reg] = true; return 0; } @@ -30,8 +33,11 @@ static int regmap_ram_read(void *context, unsigned int reg, unsigned int *val) { struct regmap_ram_data *data = context; - *val = data->vals[reg]; - data->read[reg] = true; + if (reg < data->base_reg) + return -EINVAL; + + *val = data->vals[reg - data->base_reg]; + data->read[reg - data->base_reg] = true; return 0; } @@ -60,17 +66,25 @@ struct regmap *__regmap_init_ram(struct device *dev, const char *lock_name) { struct regmap *map; + unsigned int num_regs; if (!config->max_register) { pr_crit("No max_register specified for RAM regmap\n"); return ERR_PTR(-EINVAL); } - data->read = kzalloc_objs(bool, config->max_register + 1); + if (data->base_reg > config->max_register) { + pr_crit("base_reg above max_register for RAM regmap\n"); + return ERR_PTR(-EINVAL); + } + + num_regs = config->max_register - data->base_reg + 1; + + data->read = kzalloc_objs(bool, num_regs); if (!data->read) return ERR_PTR(-ENOMEM); - data->written = kzalloc_objs(bool, config->max_register + 1); + data->written = kzalloc_objs(bool, num_regs); if (!data->written) { kfree(data->read); return ERR_PTR(-ENOMEM); -- 2.47.3