From 8536a351fd3af50e5eba571e562a33247b99870d Mon Sep 17 00:00:00 2001 From: "David E. Garcia Porras" Date: Fri, 3 Apr 2026 14:29:03 -0600 Subject: [PATCH] lib: utils/regmap: Fix reg_stride calculation in syscon regmap The reg_stride field represents the address stride in bytes between consecutive registers. The Linux kernel regmap framework validates register accesses using IS_ALIGNED(reg, map->reg_stride) as an address alignment check (drivers/base/regmap/regmap.c). The Linux kernel syscon driver (drivers/mfd/syscon.c) sets reg_stride directly to reg_io_width: syscon_config.reg_stride = reg_io_width; The current OpenSBI code incorrectly multiplies reg_io_width by 8, converting a byte value to bits. Fix this by using reg_io_width directly as the stride value, consistent with the Linux kernel. Fixes: f21d8f7d5911 ("lib: utils/regmap: Add simple FDT based syscon regmap driver") Signed-off-by: David E. Garcia Porras Reviewed-by: Anup Patel Link: https://lore.kernel.org/r/20260403202903.3407945-1-david.garcia@aheadcomputing.com Signed-off-by: Anup Patel --- lib/utils/regmap/fdt_regmap_syscon.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils/regmap/fdt_regmap_syscon.c b/lib/utils/regmap/fdt_regmap_syscon.c index 1309a55c..59cd5ee5 100644 --- a/lib/utils/regmap/fdt_regmap_syscon.c +++ b/lib/utils/regmap/fdt_regmap_syscon.c @@ -190,7 +190,7 @@ static int regmap_syscon_init(const void *fdt, int nodeoff, srm->rmap.id = nodeoff; srm->rmap.reg_shift = 0; - srm->rmap.reg_stride = srm->reg_io_width * 8; + srm->rmap.reg_stride = srm->reg_io_width; srm->rmap.reg_base = 0; srm->rmap.reg_max = size / srm->reg_io_width; switch (srm->reg_io_width) {