From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: "Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Stephen Boyd" <sboyd@kernel.org>,
"Brian Masney" <bmasney+clk@redhat.com>,
"Jerome Brunet" <jbrunet+clk@baylibre.com>,
"Ulf Hansson" <ulfh@kernel.org>,
"Philipp Zabel" <p.zabel@pengutronix.de>,
"Rafael J . Wysocki" <rafael@kernel.org>,
"Marek Vasut" <marek.vasut+renesas@mailbox.org>,
"Bartosz Golaszewski" <bartosz.golaszewski@oss.qualcomm.com>,
"Konrad Dybcio" <konrad.dybcio@oss.qualcomm.com>,
"Kevin Hilman" <khilman@baylibre.com>,
"Vinod Koul" <vkoul@kernel.org>,
"Wolfram Sang" <wsa+renesas@sang-engineering.com>,
"Kuninori Morimoto" <kuninori.morimoto.gx@renesas.com>,
"Clément Le Goffic" <clegoffic@baylibre.com>,
"Sudeep Holla" <sudeep.holla@kernel.org>,
"Cristian Marussi" <cristian.marussi@arm.com>,
arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
devicetree@vger.kernel.org, linux-clk@vger.kernel.org,
linux-pm@vger.kernel.org, linux-renesas-soc@vger.kernel.org
Subject: Re: [PATCH v4 1/8] clk: renesas: r8a78000: Add clk_hw to clk_map
Date: Mon, 19 Oct 2026 17:42:56 +0300 [thread overview]
Message-ID: <20261019144256.GC763679@killaraus.ideasonboard.com> (raw)
In-Reply-To: <1d7da50cfb58232c6dd4c4afefb938fd7e62fdcd.1792163045.git.geert+renesas@glider.be>
On Fri, Oct 16, 2026 at 05:55:40PM +0200, Geert Uytterhoeven wrote:
> Prepare for mapping to other than fixed-rate clocks by adding a clk_hw
> pointer to the clk_map structure, and populating it up-front.
>
> Move r8a78000_cpg_priv.fixed_hws into fill_clk_map(), as it is no longer
> needed afterwards, and drop NUM_FIXED_CLKS.
>
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> v4:
> - No changes,
>
> v3:
> - New.
> ---
> drivers/clk/renesas/r8a78000-cpg.c | 78 +++++++++++++++++++++---------
> 1 file changed, 56 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/clk/renesas/r8a78000-cpg.c b/drivers/clk/renesas/r8a78000-cpg.c
> index b8024e76743ea53d..5ffd7b89cb48e41c 100644
> --- a/drivers/clk/renesas/r8a78000-cpg.c
> +++ b/drivers/clk/renesas/r8a78000-cpg.c
> @@ -16,19 +16,24 @@
>
> #include <dt-bindings/clock/renesas,r8a78000-cpg.h>
>
> +struct clk_map_in {
The "_in" suffix isn't very explicit.
> + int dt_id; /* DT binding clock ID or -1 sentinel */
> + u32 fw_id; /* FIXED_CLK() ID */
> +};
> +
> struct clk_map {
> int dt_id; /* DT binding clock ID or -1 sentinel */
> u32 fw_id; /* FIXED_CLK() ID */
> + struct clk_hw *hw;
> };
>
> enum fixed_clk {
> FIXED_CLK_66M,
> FIXED_CLK_133M,
> FIXED_CLK_266M,
> - NUM_FIXED_CLKS
> };
>
> -static const unsigned long fixed_clk_rates[NUM_FIXED_CLKS] = {
> +static const unsigned long fixed_clk_rates[] = {
> [FIXED_CLK_66M] = 66666000,
> [FIXED_CLK_133M] = 133330000,
> [FIXED_CLK_266M] = 266660000,
> @@ -41,12 +46,10 @@ static const unsigned long fixed_clk_rates[NUM_FIXED_CLKS] = {
> *
> * @dev: CPG device
> * @map: Mapping from DT clock IDs to fixed-rate clocks
> - * @fixed_hws: Fixed rate clocks
> */
> struct r8a78000_cpg_priv {
> struct device *dev;
> const struct clk_map *map;
> - struct clk_hw *fixed_hws[NUM_FIXED_CLKS];
> };
>
> static const struct clk_map *clk_map_find(const struct clk_map *map, u32 id)
> @@ -83,8 +86,7 @@ static struct clk_hw *r8a78000_clk_get(struct of_phandle_args *spec,
> }
>
> dev_dbg(dev, "Mapping DT clock %u to fixed clock %u\n", id, map->fw_id);
> -
> - hw = priv->fixed_hws[map->fw_id];
> + hw = map->hw;
>
> dev_dbg(dev, "clock %u is %s at %lu Hz\n", id, clk_hw_get_name(hw),
> clk_hw_get_rate(hw));
> @@ -92,35 +94,69 @@ static struct clk_hw *r8a78000_clk_get(struct of_phandle_args *spec,
> return hw;
> }
>
> -static int register_fixed_clks(struct r8a78000_cpg_priv *priv)
> +static struct clk_hw **register_fixed_clks(struct device *dev)
> {
> - struct device *dev = priv->dev;
> + unsigned int n = ARRAY_SIZE(fixed_clk_rates);
> + struct clk_hw **hws, *hw;
> unsigned long rate;
> - struct clk_hw *hw;
> const char *name;
>
> - for (unsigned int i = 0; i < ARRAY_SIZE(fixed_clk_rates); i++) {
> + hws = devm_kcalloc(dev, n, sizeof(*hws), GFP_KERNEL);
> + if (!hws)
> + return ERR_PTR(-ENOMEM);
> +
> + for (unsigned int i = 0; i < n; i++) {
> rate = fixed_clk_rates[i];
> name = devm_kasprintf(dev, GFP_KERNEL, "cpg-%lu", rate);
> if (!name)
> - return -ENOMEM;
> + return ERR_PTR(-ENOMEM);
>
> hw = devm_clk_hw_register_fixed_rate(dev, name, NULL, 0, rate);
> if (IS_ERR(hw))
> - return PTR_ERR(hw);
> + return ERR_CAST(hw);
>
> - priv->fixed_hws[i] = hw;
> + hws[i] = hw;
> }
>
> - return 0;
> + return hws;
> +}
> +
> +static const struct clk_map *fill_clk_map(struct r8a78000_cpg_priv *priv,
> + const struct clk_map_in *map_in)
> +{
> + struct device *dev = priv->dev;
> + struct clk_hw **fixed_hws;
> + struct clk_map *map;
> + unsigned int i;
> +
> + fixed_hws = register_fixed_clks(dev);
> + if (IS_ERR(fixed_hws))
> + return ERR_CAST(fixed_hws);
> +
> + for (i = 0; map_in[i].dt_id >= 0; i++) { }
This is avoidable by passing { map, ARRAY_SIZE(map) } as match data
instead of just the map.
> +
> + map = devm_kcalloc(dev, i + 1, sizeof(*map), GFP_KERNEL);
> + if (!map)
> + return ERR_PTR(-ENOMEM);
> +
> + for (i = 0; ; i++) {
> + map[i].dt_id = map_in[i].dt_id;
> + if (map[i].dt_id < 0)
> + break;
> +
> + map[i].fw_id = map_in[i].fw_id;
> + map[i].hw = fixed_hws[map[i].fw_id];
> + }
> +
> + devm_kfree(dev, fixed_hws);
Why not plain kcalloc/kfree ?
> + return map;
> }
>
> static int r8a78000_cpg_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> struct r8a78000_cpg_priv *priv;
> - const struct clk_map *map;
> - int ret;
> + const struct clk_map_in *map;
>
> map = of_device_get_match_data(dev);
> if (!map)
> @@ -131,16 +167,14 @@ static int r8a78000_cpg_probe(struct platform_device *pdev)
> return -ENOMEM;
>
> priv->dev = dev;
> - priv->map = map;
> -
> - ret = register_fixed_clks(priv);
> - if (ret)
> - return ret;
> + priv->map = fill_clk_map(priv, map);
> + if (IS_ERR(priv->map))
> + return PTR_ERR(priv->map);
>
> return devm_of_clk_add_hw_provider(dev, r8a78000_clk_get, priv);
> }
>
> -static const struct clk_map r8a78000_cpg_default[] = {
> +static const struct clk_map_in r8a78000_cpg_default[] = {
> { R8A78000_CPG_SGASYNCD4_PERW_BUS, FIXED_CLK(266M) },
> { R8A78000_CPG_SGASYNCD8_PERW_BUS, FIXED_CLK(133M) },
> { R8A78000_CPG_SGASYNCD16_PERW_BUS, FIXED_CLK(66M) },
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2026-10-19 14:43 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-16 15:55 [PATCH v4 0/8] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Geert Uytterhoeven
2026-10-16 15:55 ` [PATCH v4 1/8] clk: renesas: r8a78000: Add clk_hw to clk_map Geert Uytterhoeven
2026-10-17 17:28 ` Marek Vasut
2026-10-18 13:51 ` Geert Uytterhoeven
2026-10-18 14:04 ` Marek Vasut
2026-10-19 14:42 ` Laurent Pinchart [this message]
2026-10-19 14:56 ` Geert Uytterhoeven
2026-10-19 15:22 ` Laurent Pinchart
2026-10-19 16:14 ` Laurent Pinchart
2026-10-19 16:37 ` Geert Uytterhoeven
2026-10-16 15:55 ` [PATCH v4 2/8] clk: renesas: r8a78000: Add SCMI remapping support Geert Uytterhoeven
2026-10-16 16:13 ` sashiko-bot
2026-10-16 16:17 ` Geert Uytterhoeven
2026-10-19 15:56 ` Laurent Pinchart
2026-10-19 16:15 ` Geert Uytterhoeven
2026-10-16 15:55 ` [PATCH v4 3/8] reset: Extract __reset_control_get_from_provider() Geert Uytterhoeven
2026-10-16 15:55 ` [PATCH v4 4/8] reset: Add reset_control_get_from_provider_exclusive() Geert Uytterhoeven
2026-10-16 16:02 ` sashiko-bot
2026-10-16 16:08 ` Geert Uytterhoeven
2026-10-16 15:55 ` [PATCH v4 5/8] pmdomain: Make genpd_get_from_provider() return -EPROBE_DEFER Geert Uytterhoeven
2026-10-16 16:09 ` sashiko-bot
2026-10-19 16:27 ` Geert Uytterhoeven
2026-10-19 16:05 ` Laurent Pinchart
2026-10-19 16:32 ` Geert Uytterhoeven
2026-10-20 7:09 ` Geert Uytterhoeven
2026-10-16 15:55 ` [PATCH v4 6/8] pmdomain: Make genpd_get_from_provider() public Geert Uytterhoeven
2026-10-16 16:08 ` sashiko-bot
2026-10-16 15:55 ` [PATCH v4 7/8] pmdomain: renesas: r8a78000: Add SCMI remapping support Geert Uytterhoeven
2026-10-16 16:15 ` sashiko-bot
2026-10-16 15:55 ` [PATCH v4 8/8] arm64: dts: renesas: ironhide: Enable SCMI devpd, sys, clock, and reset Geert Uytterhoeven
2026-10-17 11:17 ` [PATCH v4 0/8] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Wolfram Sang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261019144256.GC763679@killaraus.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=arm-scmi@vger.kernel.org \
--cc=bartosz.golaszewski@oss.qualcomm.com \
--cc=bmasney+clk@redhat.com \
--cc=clegoffic@baylibre.com \
--cc=conor+dt@kernel.org \
--cc=cristian.marussi@arm.com \
--cc=devicetree@vger.kernel.org \
--cc=geert+renesas@glider.be \
--cc=jbrunet+clk@baylibre.com \
--cc=khilman@baylibre.com \
--cc=konrad.dybcio@oss.qualcomm.com \
--cc=krzk+dt@kernel.org \
--cc=kuninori.morimoto.gx@renesas.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=marek.vasut+renesas@mailbox.org \
--cc=p.zabel@pengutronix.de \
--cc=rafael@kernel.org \
--cc=robh@kernel.org \
--cc=sboyd@kernel.org \
--cc=sudeep.holla@kernel.org \
--cc=ulfh@kernel.org \
--cc=vkoul@kernel.org \
--cc=wsa+renesas@sang-engineering.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.