Re: [PATCH v6 1/5] soc: renesas: rz-sysc: Add syscon/regmap support
From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: 2025-08-04 09:19:19
Also in:
linux-pm, linux-renesas-soc, lkml
Hi John, On Thu, 22 May 2025 at 20:23, John Madieu [off-list ref] wrote:
The RZ/G3E system controller has various registers that control or report some properties specific to individual IPs. The regmap is registered as a syscon device to allow these IP drivers to access the registers through the regmap API. As other RZ SoCs might have custom read/write callbacks or max-offsets, add register a custom regmap configuration. Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com> [claudiu.beznea: - s/rzg3e_sysc_regmap/rzv2h_sysc_regmap in RZ/V2H sysc file - do not check the match->data validity in rz_sysc_probe() as it is always valid - register the regmap if data->regmap_cfg is valid] Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Thanks for your patch! As you probably noticed, I am not a big fan of syscon, so I try to avoid getting involved with syscon patches as much as possible. But this patch has appeared in multiple series, so I am afraid I cannot avoid it anymore ;-)
quoted hunk ↗ jump to hunk
--- a/drivers/soc/renesas/r9a08g045-sysc.c +++ b/drivers/soc/renesas/r9a08g045-sysc.c@@ -18,6 +18,16 @@ static const struct rz_sysc_soc_id_init_data rzg3s_sysc_soc_id_init_data __initc .specific_id_mask = GENMASK(27, 0), }; +static const struct regmap_config rzg3s_sysc_regmap __initconst = { + .name = "rzg3s_sysc_regs", + .reg_bits = 32, + .reg_stride = 4, + .val_bits = 32, + .fast_io = true, + .max_register = 0xe20, +};
Struct regmap_config is a rather large structure, and the only SoC-specific members are the .name (which doesn't really matter) and .max_register members. Hence please move .max_register back to struct rz_sysc_init_data (like in v5), and allocate struct regmap_config dynamically (by embedding it into struct rz_sysc).
+
const struct rz_sysc_init_data rzg3s_sysc_init_data __initconst = {
.soc_id_init_data = &rzg3s_sysc_soc_id_init_data,
+ .regmap_cfg = &rzg3s_sysc_regmap,
};quoted hunk ↗ jump to hunk
--- a/drivers/soc/renesas/rz-sysc.c +++ b/drivers/soc/renesas/rz-sysc.c@@ -117,7 +124,15 @@ static int rz_sysc_probe(struct platform_device *pdev) return PTR_ERR(sysc->base); sysc->dev = dev; - return rz_sysc_soc_init(sysc, match); + ret = rz_sysc_soc_init(sysc, match); + if (ret || !data->regmap_cfg)
data->regmap_cfg should never be NULL (but this doesn't matter anymore, in the context of my request above).
+ return ret; + + regmap = devm_regmap_init_mmio(dev, sysc->base, data->regmap_cfg); + if (IS_ERR(regmap)) + return PTR_ERR(regmap); + + return of_syscon_register_regmap(dev->of_node, regmap); }
The rest LGTM.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds