Linux clock framework development
 help / color / mirror / Atom feed
* [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support
@ 2026-07-08 10:16 Geert Uytterhoeven
  2026-07-08 10:16 ` [PATCH v2 01/10] firmware: arm_scmi: Add scmi_get_base_info() Geert Uytterhoeven
                   ` (10 more replies)
  0 siblings, 11 replies; 17+ messages in thread
From: Geert Uytterhoeven @ 2026-07-08 10:16 UTC (permalink / raw)
  To: Sudeep Holla, Cristian Marussi, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Saravana Kannan, Ulf Hansson, Rafael J . Wysocki,
	Philipp Zabel, Michael Turquette, Stephen Boyd, Brian Masney,
	Bartosz Golaszewski, Vinod Koul, Konrad Dybcio, Kevin Hilman,
	Florian Fainelli, Wolfram Sang, Marek Vasut, Kuninori Morimoto
  Cc: arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel, Geert Uytterhoeven

	Hi all,

TL;DR:

    Describe hardware in DT, and perform the mapping to SCMI in Linux.

The Renesas R-Car X5H-based Ironhide board is the first Renesas
SoC/board combination that implements the ARM System Control and
Management Interface (SCMI).

This means Linux can no longer perform various system operations (e.g.
clock, power domain, and reset control) by accessing the hardware
directly.  Instead, these operations are abstracted according to various
SCMI sub-protocols, and Linux has to send messages to an SCMI-compliant
firmware running on a System Control Processor (SCP).
More specifically, the R-Car X5H SCP FW SCMI controls access to:
  1. Core clocks and module clocks,
  2. Module resets,
  3. Power domains,
  4. System power.
The latter is not relevant for this discussion.

Using SCMI also has an impact on the board DTS: besides the addition of
a firmware/scmi node with protocol-specific subnodes, devices using
SCMI-abstracted system resources now have to refer to these resources
using resource specifiers containing phandles to the SCMI protocol
subnodes, and firmware-specific object IDs[1].

Unfortunately we encountered several issues with this:
  - The clock, reset, and power domain IDs are not stable by design,
    causing DT incompatibilities.
    SCMI requires that the ID space exposed to an agent (i.e. Linux)
    starts at zero and is contiguous.  Hence any change in system
    partitioning (Application CPU core vs. Realtime CPU core,
    virtualization, ...) may mean a renumbering of all SCMI IDs,
    implying a massive change to the DT.
  - There may be different SCP firmware lineages, e.g. proprietary and
    certified variants, and FLOSS variants,
  - SCMI features may differ across firmware versions,
  - SCMI may abstract the hardware in a different way, requiring changes
    in (possibly existing) DT bindings and drivers to support the same
    hardware with and without SCMI:
      - E.g. the number of SCMI clocks inputs to a hardware block may
	differ from the actual hardware,
      - E.g. hardware clock inputs may be abstracted as SCMI power
	domains (or vice versa), like on Qualcomm SA8255P[2].
    Experience has taught that not describing the hardware in DT may
    lead to major issues later.
  - SCMI does not support the concept of a clock domain, so existing
    drivers can no longer rely on Runtime PM, but need to be changed to
    manage functional clocks explicitly,
  - U-Boot IPL (Initial Program Loader) needs a proper hardware
    description in DT, not using SCMI.

This list deliberately ignores ID instability and the need for SCMI
quirks during development of the SCMI firmware.  While upstream Linux
must only support sufficiently mature firmware versions, vendor trees
(e.g. renesas-lts) may still want to support development firmware
versions.

During last OSSJ/LPC, Marek Vasut pondered if we could keep our own ID
lists stable, and perform a mapping to the IDs used by the actual SCMI
implementation running on the system.  This was also briefly discussed
at LPC[3].  After some refining of the initial idea, this series takes a
slightly different approach, by:
  1. Describing the actual hardware components in DT, plus a minimum
     SCMI glue,
  2. Mapping DT hardware descriptions to SCMI-backed objects and
     abstractions (or replacements, in case they are unusable,
     unavailable, or too different), in Linux drivers, based on the
     detected firmware version.

This has the following advantages:
  1. The DT ABI is stable,
  2. DT bindings and drivers for existing hardware blocks do not need to
     be modified,
  2. Current and future firmware can be handled in driver code,
  3. U-Boot IPL can use almost the same DTS; it just needs stripping of
     SCMI-related nodes and properties.
  4. If ever needed, the Clock Pulse Generator (CPG) and Module
     Controller (MDLC) drivers can be extended to program the hardware
     directly if SCMI is not present,

This series depends on "[PATCH v2 0/6] R-Car X5H CPG/MDLC support"[4],
and consists of four parts:
  1. Patches 1-4 add new interfaces needed by the remapping support,
  2. Patches 5-6 update the DT bindings for the R-Car X5H Clock Pulse
     Generator (CPG) and Module Controller (MDLC) blocks,
  3. Patches 7-8 add SCMI remapping support to the R-Car X5H CPG and
     MDLC drivers,
  4. Patches 9-10 enables more SCMI protocols on R-Car X5H Ironhide, and
     link the CPG and MDLC blocks to their SCMI provider.

Changes compared to v1[5]:
  - Drop SCMI quirks and SCMI mapping tables,
  - Move CPG/MDLC DT bindings and minimal base drivers to a separate
    series,
  - Add that SCMI may provide different abstractions,
  - Add missing asterisk to blank kerneldoc line,
  - Let scmi_get_base_info() return -EPROBE_DEFER or -EOPNOTSUPP instead
    of -ENOENT, and propagate these errors in callers,
  - Fall back to the default support when SCMI support or firmware is
    not available, or when the detected SCMI firmware version is not
    supported by the driver,
  - Improve error message on scmi_get_base_info() failure,
  - Check if SCMI firmware node is available,
  - Use reverse xmas ordering in r8a78000_cpg_probe(),
  - Replace the scmi_*_np members of struct r8a78000_*_priv by local
    variables in the probe functions, and pass them to the fill_*_map()
    functions,
  - Join split short lines,
  - Move check for supported firmware version up,
  - Fix DT misindentations,
  - Add scmi_clk node, as it is no longer added in earlier commits.

Note that in reponse of feedback on v1, I did try to use SCMI IDs in DT,
and handle most issues in Linux SCMI drivers and SCMI quirks[6].  While
the result worked, it did not solve everything in the issues list above.

Note that this series does not include actual SCMI quirks and CPG/MDLC
mapping tables, as the SCMI firmware for R-Car X5H is still under
development.

For testing, I have pushed this series plus additional work to[7].

Thanks for your comments!

[1] Documentation/devicetree/bindings/firmware/arm,scmi.yaml
[2] "[PATCH net-next v11 1/7] dt-bindings: phy: document the serdes PHY on sa8255p"
    https://lore.kernel.org/20260629-qcom-sa8255p-emac-v11-1-1b7fb95b51f9@oss.qualcomm.com
[3] "Firmware ABI stability" at Linux Plumbers Conference 2025
    https://lpc.events/event/19/contributions/2153/
[4] "[PATCH v2 0/6] R-Car X5H CPG/MDLC support"
    https://lore.kernel.org/cover.1783505142.git.geert+renesas@glider.be
[5] "[PATCH/RFC 00/14] R-Car X5H Ironhide SCMI CPG/MDLC remapping"
    https://lore.kernel.org/cover.1776793163.git.geert+renesas@glider.be
[6] "[PATCH/RFC 0/9] R-Car X5H Ironhide pure SCMI proof-of-concept"
    https://lore.kernel.org/cover.1781171705.git.geert+renesas@glider.be/
[7] topic/rcar-x5h-ironhide-scmi-cpg-mdlc-remapping-v2 branch of
    https://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git

Geert Uytterhoeven (10):
  firmware: arm_scmi: Add scmi_get_base_info()
  of: property: fw_devlink: Add support for firmware
  pmdomain: Make genpd_get_from_provider() public
  reset: Add reset_controller_get_provider()
  dt-bindings: clock: renesas,r8a78000-cpg: Add firmware property
  dt-bindings: power: renesas,r8a78000-mdlc: Add firmware property
  clk: renesas: r8a78000: Add SCMI remapping support
  pmdomain: renesas: r8a78000: Add SCMI remapping support
  arm64: dts: renesas: ironhide: Enable SCMI devpd, sys, clock, and
    reset
  arm64: dts: renesas: ironhide: Add CPG/MDLC firmware properties

 .../bindings/clock/renesas,r8a78000-cpg.yaml  |   7 +
 .../bindings/power/renesas,r8a78000-mdlc.yaml |   7 +
 .../boot/dts/renesas/r8a78000-ironhide.dts    | 135 ++++++++
 drivers/clk/renesas/r8a78000-cpg.c            | 161 ++++++++-
 drivers/firmware/arm_scmi/driver.c            |  33 ++
 drivers/of/property.c                         |   2 +
 drivers/pmdomain/core.c                       |   4 +-
 drivers/pmdomain/renesas/r8a78000-mdlc.c      | 311 +++++++++++++++++-
 drivers/reset/core.c                          |  11 +
 include/linux/pm_domain.h                     |   7 +
 include/linux/reset-controller.h              |   6 +
 include/linux/scmi_protocol.h                 |   8 +
 12 files changed, 665 insertions(+), 27 deletions(-)

-- 
2.43.0

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 01/10] firmware: arm_scmi: Add scmi_get_base_info()
  2026-07-08 10:16 [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Geert Uytterhoeven
@ 2026-07-08 10:16 ` Geert Uytterhoeven
  2026-07-08 10:16 ` [PATCH v2 02/10] of: property: fw_devlink: Add support for firmware Geert Uytterhoeven
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 17+ messages in thread
From: Geert Uytterhoeven @ 2026-07-08 10:16 UTC (permalink / raw)
  To: Sudeep Holla, Cristian Marussi, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Saravana Kannan, Ulf Hansson, Rafael J . Wysocki,
	Philipp Zabel, Michael Turquette, Stephen Boyd, Brian Masney,
	Bartosz Golaszewski, Vinod Koul, Konrad Dybcio, Kevin Hilman,
	Florian Fainelli, Wolfram Sang, Marek Vasut, Kuninori Morimoto
  Cc: arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel, Geert Uytterhoeven

Currently non-SCMI drivers cannot find out what the specific versions of
each SCMI provider implementation on the running system are.

However, different versions may use different ABIs (e.g. different clock
IDs), provide different abstractions, or behave different, requiring
remapping or workarounds in other drivers.

Add a public function to obtain base protocol information for the
selected SCMI provider.  This will be used by the R-Car X5H Clock Pulse
Generator and Module Controller drivers, to map hardware descriptions in
DT to SCMI abstractions provided by the SCMI implementation present.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v2:
  - Add that SCMI may provide different abstractions,
  - Add missing asterisk to blank kerneldoc line,
  - Return -EPROBE_DEFER or -EOPNOTSUPP instead of -ENOENT.
---
 drivers/firmware/arm_scmi/driver.c | 33 ++++++++++++++++++++++++++++++
 include/linux/scmi_protocol.h      |  8 ++++++++
 2 files changed, 41 insertions(+)

diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
index 3e0d975ec94c4485..80a29c3289f0a841 100644
--- a/drivers/firmware/arm_scmi/driver.c
+++ b/drivers/firmware/arm_scmi/driver.c
@@ -3504,6 +3504,39 @@ int scmi_inflight_count(const struct scmi_handle *handle)
 	}
 }
 
+/**
+ * scmi_get_base_info() - Get SCMI base protocol information
+ *
+ * @of_node: pointer to a device node for an SCMI provider
+ * @version: pointer to write base protocol information
+ *
+ * Check if an SCMI device has been instantiated for the passed device node
+ * pointer, and, if found, return its base info.
+ *
+ * Return: 0 on Success,
+ *         -EPROBE_DEFER if the SCMI provider is not ready yet,
+ *         -EOPNOTSUPP if SCMI support is disabled.
+ */
+int scmi_get_base_info(struct device_node *of_node,
+		       struct scmi_base_info *version)
+{
+	int ret = -EPROBE_DEFER;
+	struct scmi_info *info;
+
+	mutex_lock(&scmi_list_mutex);
+	list_for_each_entry(info, &scmi_list, node) {
+		if (info->dev->of_node == of_node) {
+			*version = info->version;
+			ret = 0;
+			break;
+		}
+	}
+	mutex_unlock(&scmi_list_mutex);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(scmi_get_base_info);
+
 static int __init scmi_driver_init(void)
 {
 	scmi_quirks_initialize();
diff --git a/include/linux/scmi_protocol.h b/include/linux/scmi_protocol.h
index 5ab73b1ab9aa4fa8..fd2d648964f68f53 100644
--- a/include/linux/scmi_protocol.h
+++ b/include/linux/scmi_protocol.h
@@ -971,6 +971,8 @@ struct scmi_driver {
 int scmi_driver_register(struct scmi_driver *driver,
 			 struct module *owner, const char *mod_name);
 void scmi_driver_unregister(struct scmi_driver *driver);
+int scmi_get_base_info(struct device_node *of_node,
+		       struct scmi_base_info *version);
 #else
 static inline int
 scmi_driver_register(struct scmi_driver *driver, struct module *owner,
@@ -980,6 +982,12 @@ scmi_driver_register(struct scmi_driver *driver, struct module *owner,
 }
 
 static inline void scmi_driver_unregister(struct scmi_driver *driver) {}
+
+static inline int scmi_get_base_info(struct device_node *of_node,
+				     struct scmi_base_info *version)
+{
+	return -EOPNOTSUPP;
+}
 #endif /* CONFIG_ARM_SCMI_PROTOCOL */
 
 #define scmi_register(driver) \
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 02/10] of: property: fw_devlink: Add support for firmware
  2026-07-08 10:16 [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Geert Uytterhoeven
  2026-07-08 10:16 ` [PATCH v2 01/10] firmware: arm_scmi: Add scmi_get_base_info() Geert Uytterhoeven
@ 2026-07-08 10:16 ` Geert Uytterhoeven
  2026-07-08 10:16 ` [PATCH v2 03/10] pmdomain: Make genpd_get_from_provider() public Geert Uytterhoeven
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 17+ messages in thread
From: Geert Uytterhoeven @ 2026-07-08 10:16 UTC (permalink / raw)
  To: Sudeep Holla, Cristian Marussi, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Saravana Kannan, Ulf Hansson, Rafael J . Wysocki,
	Philipp Zabel, Michael Turquette, Stephen Boyd, Brian Masney,
	Bartosz Golaszewski, Vinod Koul, Konrad Dybcio, Kevin Hilman,
	Florian Fainelli, Wolfram Sang, Marek Vasut, Kuninori Morimoto
  Cc: arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel, Geert Uytterhoeven

Let fw_devlink create device links between consumers and suppliers of
firmware, and enforce these dependencies.

This prevents probing of drivers before the firmware they depend on
becomes available, thus avoiding unneeded probe deferrals.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
Written for the upcoming R-Car X5H Clock Pulse Generator and Module
Controller drivers and their dependency on SCMI, but the existing
Raspberry Pi power domain driver should benefit from this, too.

v2:
  - No changes.
---
 drivers/of/property.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/of/property.c b/drivers/of/property.c
index 72cf12907de034e9..1a40a4f7db01f0a9 100644
--- a/drivers/of/property.c
+++ b/drivers/of/property.c
@@ -1401,6 +1401,7 @@ DEFINE_SIMPLE_PROP(dmas, "dmas", "#dma-cells")
 DEFINE_SIMPLE_PROP(power_domains, "power-domains", "#power-domain-cells")
 DEFINE_SIMPLE_PROP(hwlocks, "hwlocks", "#hwlock-cells")
 DEFINE_SIMPLE_PROP(extcon, "extcon", NULL)
+DEFINE_SIMPLE_PROP(firmware, "firmware", NULL)
 DEFINE_SIMPLE_PROP(nvmem_cells, "nvmem-cells", "#nvmem-cell-cells")
 DEFINE_SIMPLE_PROP(phys, "phys", "#phy-cells")
 DEFINE_SIMPLE_PROP(wakeup_parent, "wakeup-parent", NULL)
@@ -1550,6 +1551,7 @@ static const struct supplier_bindings of_supplier_bindings[] = {
 	{ .parse_prop = parse_power_domains, },
 	{ .parse_prop = parse_hwlocks, },
 	{ .parse_prop = parse_extcon, },
+	{ .parse_prop = parse_firmware, },
 	{ .parse_prop = parse_nvmem_cells, },
 	{ .parse_prop = parse_phys, },
 	{ .parse_prop = parse_wakeup_parent, },
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 03/10] pmdomain: Make genpd_get_from_provider() public
  2026-07-08 10:16 [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Geert Uytterhoeven
  2026-07-08 10:16 ` [PATCH v2 01/10] firmware: arm_scmi: Add scmi_get_base_info() Geert Uytterhoeven
  2026-07-08 10:16 ` [PATCH v2 02/10] of: property: fw_devlink: Add support for firmware Geert Uytterhoeven
@ 2026-07-08 10:16 ` Geert Uytterhoeven
  2026-07-08 10:16 ` [PATCH v2 04/10] reset: Add reset_controller_get_provider() Geert Uytterhoeven
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 17+ messages in thread
From: Geert Uytterhoeven @ 2026-07-08 10:16 UTC (permalink / raw)
  To: Sudeep Holla, Cristian Marussi, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Saravana Kannan, Ulf Hansson, Rafael J . Wysocki,
	Philipp Zabel, Michael Turquette, Stephen Boyd, Brian Masney,
	Bartosz Golaszewski, Vinod Koul, Konrad Dybcio, Kevin Hilman,
	Florian Fainelli, Wolfram Sang, Marek Vasut, Kuninori Morimoto
  Cc: arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel, Geert Uytterhoeven

Unlike the corresponding function in the clock subsystem
(of_clk_get_from_provider()), genpd_get_from_provider() is private, and
thus cannot be used by PM Domain drivers.

Make it public, so it be used by the R-Car X5H Module Controller driver.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v2:
  - No changes.
---
 drivers/pmdomain/core.c   | 4 ++--
 include/linux/pm_domain.h | 7 +++++++
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
index 842c4169e290677c..7de3c693ddd9a2c8 100644
--- a/drivers/pmdomain/core.c
+++ b/drivers/pmdomain/core.c
@@ -2900,8 +2900,7 @@ EXPORT_SYMBOL_GPL(of_genpd_del_provider);
  * Returns a valid pointer to struct generic_pm_domain on success or ERR_PTR()
  * on failure.
  */
-static struct generic_pm_domain *genpd_get_from_provider(
-					const struct of_phandle_args *genpdspec)
+struct generic_pm_domain *genpd_get_from_provider(const struct of_phandle_args *genpdspec)
 {
 	struct generic_pm_domain *genpd = ERR_PTR(-ENOENT);
 	struct of_genpd_provider *provider;
@@ -2923,6 +2922,7 @@ static struct generic_pm_domain *genpd_get_from_provider(
 
 	return genpd;
 }
+EXPORT_SYMBOL_GPL(genpd_get_from_provider);
 
 /**
  * of_genpd_add_child_ids() - Parse power-domains-child-ids property
diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
index f925614aebdbc914..95fd7e63e87e2095 100644
--- a/include/linux/pm_domain.h
+++ b/include/linux/pm_domain.h
@@ -458,6 +458,7 @@ int of_genpd_add_provider_simple(struct device_node *np,
 int of_genpd_add_provider_onecell(struct device_node *np,
 				  struct genpd_onecell_data *data);
 void of_genpd_del_provider(struct device_node *np);
+struct generic_pm_domain *genpd_get_from_provider(const struct of_phandle_args *genpdspec);
 int of_genpd_add_device(const struct of_phandle_args *args, struct device *dev);
 int of_genpd_add_subdomain(const struct of_phandle_args *parent_spec,
 			   const struct of_phandle_args *subdomain_spec);
@@ -492,6 +493,12 @@ static inline int of_genpd_add_provider_onecell(struct device_node *np,
 
 static inline void of_genpd_del_provider(struct device_node *np) {}
 
+static inline struct generic_pm_domain *genpd_get_from_provider(
+				const struct of_phandle_args *genpdspec)
+{
+	return ERR_PTR(-ENODEV);
+}
+
 static inline int of_genpd_add_device(const struct of_phandle_args *args,
 				      struct device *dev)
 {
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 04/10] reset: Add reset_controller_get_provider()
  2026-07-08 10:16 [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Geert Uytterhoeven
                   ` (2 preceding siblings ...)
  2026-07-08 10:16 ` [PATCH v2 03/10] pmdomain: Make genpd_get_from_provider() public Geert Uytterhoeven
@ 2026-07-08 10:16 ` Geert Uytterhoeven
  2026-07-10 14:49   ` Philipp Zabel
  2026-07-08 10:16 ` [PATCH v2 05/10] dt-bindings: clock: renesas,r8a78000-cpg: Add firmware property Geert Uytterhoeven
                   ` (6 subsequent siblings)
  10 siblings, 1 reply; 17+ messages in thread
From: Geert Uytterhoeven @ 2026-07-08 10:16 UTC (permalink / raw)
  To: Sudeep Holla, Cristian Marussi, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Saravana Kannan, Ulf Hansson, Rafael J . Wysocki,
	Philipp Zabel, Michael Turquette, Stephen Boyd, Brian Masney,
	Bartosz Golaszewski, Vinod Koul, Konrad Dybcio, Kevin Hilman,
	Florian Fainelli, Wolfram Sang, Marek Vasut, Kuninori Morimoto
  Cc: arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel, Geert Uytterhoeven

The reset subsystem differs from the clock subsystem in multiple ways:
  1. It does not provide a public way to lookup resets from a reset
     provider (clock has of_clk_get_from_provider()),
  2. The xlate callback does not return a reset object, but merely an
     index, which is converted to a reset object by the reset core.

Hence add a public helper reset_controller_get_provider(), which just
returns the provider, and will be used by the R-Car X5H Module
Controller driver.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v2:
  - No changes.
---
 drivers/reset/core.c             | 11 +++++++++++
 include/linux/reset-controller.h |  6 ++++++
 2 files changed, 17 insertions(+)

diff --git a/drivers/reset/core.c b/drivers/reset/core.c
index 38e189d04d09b270..57c427bb33b322e2 100644
--- a/drivers/reset/core.c
+++ b/drivers/reset/core.c
@@ -1135,6 +1135,17 @@ __reset_find_rcdev(const struct fwnode_reference_args *args, bool gpio_fallback)
 	return NULL;
 }
 
+struct reset_controller_dev *
+reset_controller_get_provider(struct fwnode_handle *fwnode)
+{
+	struct fwnode_reference_args args = { .fwnode = fwnode };
+
+	guard(mutex)(&reset_list_mutex);
+
+	return __reset_find_rcdev(&args, false);
+}
+EXPORT_SYMBOL_GPL(reset_controller_get_provider);
+
 struct reset_control *
 __fwnode_reset_control_get(struct fwnode_handle *fwnode, const char *id, int index,
 			   enum reset_control_flags flags)
diff --git a/include/linux/reset-controller.h b/include/linux/reset-controller.h
index 52a5a4e81f184407..0c17a36466115ba6 100644
--- a/include/linux/reset-controller.h
+++ b/include/linux/reset-controller.h
@@ -74,6 +74,7 @@ void reset_controller_unregister(struct reset_controller_dev *rcdev);
 struct device;
 int devm_reset_controller_register(struct device *dev,
 				   struct reset_controller_dev *rcdev);
+struct reset_controller_dev *reset_controller_get_provider(struct fwnode_handle *fwnode);
 #else
 static inline int reset_controller_register(struct reset_controller_dev *rcdev)
 {
@@ -89,6 +90,11 @@ static inline int devm_reset_controller_register(struct device *dev,
 {
 	return 0;
 }
+
+static inline struct reset_controller_dev *reset_controller_get_provider(struct fwnode_handle *fwnode)
+{
+	return NULL;
+}
 #endif
 
 #endif
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 05/10] dt-bindings: clock: renesas,r8a78000-cpg: Add firmware property
  2026-07-08 10:16 [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Geert Uytterhoeven
                   ` (3 preceding siblings ...)
  2026-07-08 10:16 ` [PATCH v2 04/10] reset: Add reset_controller_get_provider() Geert Uytterhoeven
@ 2026-07-08 10:16 ` Geert Uytterhoeven
  2026-07-10 10:21   ` Krzysztof Kozlowski
  2026-07-08 10:16 ` [PATCH v2 06/10] dt-bindings: power: renesas,r8a78000-mdlc: " Geert Uytterhoeven
                   ` (5 subsequent siblings)
  10 siblings, 1 reply; 17+ messages in thread
From: Geert Uytterhoeven @ 2026-07-08 10:16 UTC (permalink / raw)
  To: Sudeep Holla, Cristian Marussi, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Saravana Kannan, Ulf Hansson, Rafael J . Wysocki,
	Philipp Zabel, Michael Turquette, Stephen Boyd, Brian Masney,
	Bartosz Golaszewski, Vinod Koul, Konrad Dybcio, Kevin Hilman,
	Florian Fainelli, Wolfram Sang, Marek Vasut, Kuninori Morimoto
  Cc: arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel, Geert Uytterhoeven

Add a firmware property, for systems where SCMI must be used instead of
direct hardware access.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v2:
  - Spin off from "dt-bindings: clock: Document Renesas R-Car X5H Clock
    Pulse Generator".
---
 .../devicetree/bindings/clock/renesas,r8a78000-cpg.yaml    | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/Documentation/devicetree/bindings/clock/renesas,r8a78000-cpg.yaml b/Documentation/devicetree/bindings/clock/renesas,r8a78000-cpg.yaml
index 4e23bba334382346..fc499e7cf52e4f0c 100644
--- a/Documentation/devicetree/bindings/clock/renesas,r8a78000-cpg.yaml
+++ b/Documentation/devicetree/bindings/clock/renesas,r8a78000-cpg.yaml
@@ -35,6 +35,12 @@ properties:
       <dt-bindings/clock/renesas,r8a78000-cpg.h>.
     const: 1
 
+  firmware:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description:
+      Reference to the SCMI firmware device node on systems where SCMI must be
+      used instead of direct hardware access.
+
 required:
   - compatible
   - reg
@@ -52,4 +58,5 @@ examples:
             clocks = <&extal_clk>, <&extalr_clk>;
             clock-names = "extal", "extalr";
             #clock-cells = <1>;
+            firmware = <&scmi>;
     };
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 06/10] dt-bindings: power: renesas,r8a78000-mdlc: Add firmware property
  2026-07-08 10:16 [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Geert Uytterhoeven
                   ` (4 preceding siblings ...)
  2026-07-08 10:16 ` [PATCH v2 05/10] dt-bindings: clock: renesas,r8a78000-cpg: Add firmware property Geert Uytterhoeven
@ 2026-07-08 10:16 ` Geert Uytterhoeven
  2026-07-08 10:16 ` [PATCH v2 07/10] clk: renesas: r8a78000: Add SCMI remapping support Geert Uytterhoeven
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 17+ messages in thread
From: Geert Uytterhoeven @ 2026-07-08 10:16 UTC (permalink / raw)
  To: Sudeep Holla, Cristian Marussi, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Saravana Kannan, Ulf Hansson, Rafael J . Wysocki,
	Philipp Zabel, Michael Turquette, Stephen Boyd, Brian Masney,
	Bartosz Golaszewski, Vinod Koul, Konrad Dybcio, Kevin Hilman,
	Florian Fainelli, Wolfram Sang, Marek Vasut, Kuninori Morimoto
  Cc: arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel, Geert Uytterhoeven

Add a firmware property, for systems where SCMI must be used instead of
direct hardware access.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v2:
  - Spin off from "dt-bindings: power: Document Renesas R-Car X5H Module
    Controller".
---
 .../devicetree/bindings/power/renesas,r8a78000-mdlc.yaml   | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/Documentation/devicetree/bindings/power/renesas,r8a78000-mdlc.yaml b/Documentation/devicetree/bindings/power/renesas,r8a78000-mdlc.yaml
index 1dba1e1b1c5b52d0..9616f0244415896c 100644
--- a/Documentation/devicetree/bindings/power/renesas,r8a78000-mdlc.yaml
+++ b/Documentation/devicetree/bindings/power/renesas,r8a78000-mdlc.yaml
@@ -43,6 +43,12 @@ properties:
       and thus identical to the second power domain specifier cell.
     const: 1
 
+  firmware:
+    $ref: /schemas/types.yaml#/definitions/phandle
+    description:
+      Reference to the SCMI firmware device node on systems where SCMI must be
+      used instead of direct hardware access.
+
 required:
   - compatible
   - reg
@@ -58,4 +64,5 @@ examples:
             reg = <0xc3060000 0x1000>;
             #power-domain-cells = <2>;
             #reset-cells = <1>;
+            firmware = <&scmi>;
     };
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 07/10] clk: renesas: r8a78000: Add SCMI remapping support
  2026-07-08 10:16 [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Geert Uytterhoeven
                   ` (5 preceding siblings ...)
  2026-07-08 10:16 ` [PATCH v2 06/10] dt-bindings: power: renesas,r8a78000-mdlc: " Geert Uytterhoeven
@ 2026-07-08 10:16 ` Geert Uytterhoeven
  2026-07-08 10:16 ` [PATCH v2 08/10] pmdomain: " Geert Uytterhoeven
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 17+ messages in thread
From: Geert Uytterhoeven @ 2026-07-08 10:16 UTC (permalink / raw)
  To: Sudeep Holla, Cristian Marussi, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Saravana Kannan, Ulf Hansson, Rafael J . Wysocki,
	Philipp Zabel, Michael Turquette, Stephen Boyd, Brian Masney,
	Bartosz Golaszewski, Vinod Koul, Konrad Dybcio, Kevin Hilman,
	Florian Fainelli, Wolfram Sang, Marek Vasut, Kuninori Morimoto
  Cc: arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel, Geert Uytterhoeven

Extend the Clock Pulse Generator driver for R-Car X5H with SCMI support,
to remap DT clock IDs to SCMI clocks when running on a system with a
supported SCMI firmware implementation.  Take into account peculiarities
of the detected SCMI firmware version, and use fixed-rate clocks as
replacements for SCMI clocks that are known to be unusable.

This lets us avoid putting unstable SCMI IDs in DT, and allows us to use
the same hardware description in SoC DTS for systems with and without
SCMI firmware.

Note that this only includes SCMI remapping support, and does not
include yet any mapping tables for specific SCMI firmware versions.

Suggested-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v2:
  - Spin off from "clk: renesas: Add R-Car X5H CPG SCMI remapping
    driver",
  - Use reverse xmas ordering in r8a78000_cpg_probe(),
  - Propagate error codes from scmi_get_base_info() now it can return
    -EPROBE_DEFER,
  - Improve error message on scmi_get_base_info() failure,
  - Check if SCMI firmware node is available,
  - Replace the scmi_clk_np member of struct r8a78000_cpg_priv by a
    local variable in r8a78000_cpg_probe(), and pass it to
    fill_clk_map(),
  - Join split short lines,
  - Fall back to the default support when SCMI support or firmware is
    not available, or when the detected SCMI firmware version is not
    supported by the driver,
  - Drop mapping tables.
---
 drivers/clk/renesas/r8a78000-cpg.c | 161 ++++++++++++++++++++++++++---
 1 file changed, 148 insertions(+), 13 deletions(-)

diff --git a/drivers/clk/renesas/r8a78000-cpg.c b/drivers/clk/renesas/r8a78000-cpg.c
index c53d8f33ee88b339..355c57293241a411 100644
--- a/drivers/clk/renesas/r8a78000-cpg.c
+++ b/drivers/clk/renesas/r8a78000-cpg.c
@@ -5,6 +5,7 @@
  * Copyright (C) 2026 Glider bv
  */
 
+#include <linux/cleanup.h>
 #include <linux/clk.h>
 #include <linux/clk-provider.h>
 #include <linux/dev_printk.h>
@@ -12,21 +13,32 @@
 #include <linux/mod_devicetable.h>
 #include <linux/of.h>
 #include <linux/platform_device.h>
+#include <linux/scmi_protocol.h>
 #include <linux/slab.h>
 
 #include <dt-bindings/clock/renesas,r8a78000-cpg.h>
 
 struct clk_map_in {
 	int dt_id;		/* DT binding clock ID or -1 sentinel */
-	u32 fw_id;		/* FIXED_CLK() ID */
+	u32 fw_id;		/* SCMI firmware clock ID or FIXED_CLK() ID */
 };
 
 struct clk_map {
 	int dt_id;		/* DT binding clock ID or -1 sentinel */
-	u32 fw_id;		/* FIXED_CLK() ID */
+	u32 fw_id;		/* SCMI firmware clock ID or FIXED_CLK() ID */
 	struct clk_hw *hw;
 };
 
+struct fw_map {
+	u32 impl_ver;
+	const struct clk_map_in *map;
+};
+
+struct cpg_data {
+	const struct clk_map_in *default_map;
+	const struct fw_map *fw_map;
+};
+
 enum fixed_clk {
 	FIXED_CLK_66M,
 	FIXED_CLK_266M,
@@ -38,14 +50,16 @@ static const unsigned long fixed_clk_rates[NUM_FIXED_CLKS] = {
 	[FIXED_CLK_266M] = 266660000,
 };
 
-#define FIXED_CLK(rate)		FIXED_CLK_ ## rate
+#define FIXED_CLK_OFFSET	0x80000000
+#define FIXED_CLK(rate)		FIXED_CLK_OFFSET + FIXED_CLK_ ## rate
 
 /**
  * struct r8a78000_cpg_priv - Clock Pulse Generator Private Data
  *
  * @dev: CPG device
- * @map: Mapping from DT clock IDs
- * @fixed_hws: Fixed rate clocks
+ * @map: Mapping from DT clock IDs to SCMI clocks
+ * @fixed_hws: Fixed rate clocks used to replace SCMI clocks that do not
+ *             support the SCMI CLOCK_ATTRIBUTES command
  */
 struct r8a78000_cpg_priv {
 	struct device *dev;
@@ -86,9 +100,19 @@ static struct clk_hw *r8a78000_clk_get(struct of_phandle_args *spec,
 		return ERR_PTR(-ENOENT);
 	}
 
-	dev_dbg(dev, "Mapping DT clock %u to fixed clock %u\n", id, map->fw_id);
+	if (map->fw_id < FIXED_CLK_OFFSET)
+		dev_dbg(dev, "Mapping DT clock %u to SCMI clock %u\n", id,
+			map->fw_id);
+	else
+		dev_dbg(dev, "Mapping DT clock %u to fixed clock %u\n", id,
+			 map->fw_id - FIXED_CLK_OFFSET);
 
 	hw = map->hw;
+	if (!hw) {
+		/* CLOCK_ATTRIBUTES is not supported */
+		dev_err(dev, "Clock %u is not available\n", id);
+		return ERR_PTR(-ENOENT);
+	}
 
 	dev_dbg(dev, "clock %u is %s at %lu Hz\n", id, clk_hw_get_name(hw),
 		clk_hw_get_rate(hw));
@@ -96,6 +120,21 @@ static struct clk_hw *r8a78000_clk_get(struct of_phandle_args *spec,
 	return hw;
 }
 
+static struct device_node *scmi_find_proto(struct device_node *scmi, u32 proto)
+{
+	for_each_available_child_of_node_scoped(scmi, child) {
+		u32 reg;
+
+		if (of_property_read_u32(child, "reg", &reg))
+			continue;
+
+		if (reg == proto)
+			return_ptr(child);
+	}
+
+	return NULL;
+}
+
 static void unregister_fixed_clks(void *data)
 {
 	struct r8a78000_cpg_priv *priv = data;
@@ -131,10 +170,14 @@ static int register_fixed_clks(struct r8a78000_cpg_priv *priv)
 }
 
 static const struct clk_map *fill_clk_map(struct r8a78000_cpg_priv *priv,
-					  const struct clk_map_in *map_in)
+					  const struct clk_map_in *map_in,
+					  struct device_node *scmi_clk_np)
 {
+	struct of_phandle_args scmi_spec;
 	struct device *dev = priv->dev;
 	struct clk_map *map;
+	struct clk_hw *hw;
+	struct clk *clk;
 	unsigned int i;
 
 	for (i = 0; map_in[i].dt_id >= 0; i++) { }
@@ -149,8 +192,38 @@ static const struct clk_map *fill_clk_map(struct r8a78000_cpg_priv *priv,
 			break;
 
 		map[i].fw_id = map_in[i].fw_id;
-		map[i].hw = priv->fixed_hws[map[i].fw_id];
-		continue;
+		if (map[i].fw_id >= FIXED_CLK_OFFSET) {
+			enum fixed_clk idx = map[i].fw_id - FIXED_CLK_OFFSET;
+
+			map[i].hw = priv->fixed_hws[idx];
+			continue;
+		}
+
+		scmi_spec.np = scmi_clk_np;
+		scmi_spec.args_count = 1;
+		scmi_spec.args[0] = map[i].fw_id;
+
+		clk = of_clk_get_from_provider(&scmi_spec);
+		if (IS_ERR(clk))
+			return dev_err_cast_probe(dev, clk,
+				"Failed to get SCMI clock %u\n", map[i].fw_id);
+
+		hw = __clk_get_hw(clk);
+		if (IS_ERR(hw))
+			return dev_err_cast_probe(dev, hw,
+				"Failed to get SCMI clock hw %u\n",
+				map[i].fw_id);
+
+		if (!hw) {
+			/* CLOCK_ATTRIBUTES is not supported */
+			dev_warn(dev, "SCMI clock %u is NULL\n", map[i].fw_id);
+			continue;
+		}
+
+		dev_dbg(priv->dev, "SCMI clock %u is %s at %lu Hz\n",
+			map[i].fw_id, clk_hw_get_name(hw), clk_hw_get_rate(hw));
+
+		map[i].hw = hw;
 	}
 
 	return map;
@@ -158,21 +231,74 @@ static const struct clk_map *fill_clk_map(struct r8a78000_cpg_priv *priv,
 
 static int r8a78000_cpg_probe(struct platform_device *pdev)
 {
+	struct device_node *scmi __free(device_node) = NULL;
+	struct device_node *scmi_clk_np = NULL;
 	struct device *dev = &pdev->dev;
+	const struct cpg_data *cpg_data;
 	struct r8a78000_cpg_priv *priv;
+	struct scmi_base_info version;
 	const struct clk_map_in *map;
+	const struct fw_map *fw_map;
 	int ret;
 
-	map = of_device_get_match_data(dev);
-	if (!map)
+	cpg_data = of_device_get_match_data(dev);
+	if (!cpg_data)
 		return -ENODEV;
 
+	map = cpg_data->default_map;
+
 	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;
 
 	priv->dev = dev;
 
+	scmi = of_parse_phandle(dev->of_node, "firmware", 0);
+	if (!scmi) {
+		dev_dbg(dev, "Cannot find SCMI firmware node\n");
+		goto fallback;
+	}
+
+	if (!of_device_is_available(scmi)) {
+		dev_dbg(dev, "SCMI firmware node is not available\n");
+		goto fallback;
+	}
+
+	scmi_clk_np = scmi_find_proto(scmi, SCMI_PROTOCOL_CLOCK);
+	if (!scmi_clk_np) {
+		dev_dbg(dev, "Cannot find SCMI clock management protocol\n");
+		goto fallback;
+	}
+
+	ret = scmi_get_base_info(scmi, &version);
+	if (ret == -EPROBE_DEFER)
+		return dev_err_probe(dev, ret, "SCMI provider not ready\n");
+	if (ret) {
+		dev_dbg(dev, "SCMI is not available\n");
+		goto fallback;
+	}
+
+	if (strcmp(version.vendor_id, "Renesas") ||
+	    strcmp(version.sub_vendor_id, "None")) {
+		dev_warn(dev, "Unsupported SCMI firmware %s/%s\n",
+			 version.vendor_id, version.sub_vendor_id);
+		goto fallback;
+	}
+
+	for (fw_map = cpg_data->fw_map; fw_map->map; fw_map++) {
+		if (fw_map->impl_ver == version.impl_ver)
+			break;
+	}
+
+	if (!fw_map->map) {
+		dev_warn(dev, "Unsupported SCMI firmware version 0x%08x\n",
+			 version.impl_ver);
+		goto fallback;
+	}
+
+	map = fw_map->map;
+
+fallback:
 	ret = register_fixed_clks(priv);
 	if (ret)
 		return ret;
@@ -181,7 +307,7 @@ static int r8a78000_cpg_probe(struct platform_device *pdev)
 	 * We cannot do lazy look-up in r8a78000_clk_get(), as that function is
 	 * called with of_clk_mutex already held.
 	 */
-	priv->map = fill_clk_map(priv, map);
+	priv->map = fill_clk_map(priv, map, scmi_clk_np);
 	if (IS_ERR(priv->map))
 		return PTR_ERR(priv->map);
 
@@ -194,10 +320,19 @@ static const struct clk_map_in r8a78000_cpg_default[] = {
 	{ -1 }
 };
 
+static const struct fw_map r8a78000_cpg_fw_map[] = {
+	{ 0, NULL }
+};
+
+static const struct cpg_data r8a78000_cpg_data = {
+	.default_map = r8a78000_cpg_default,
+	.fw_map = r8a78000_cpg_fw_map,
+};
+
 static const struct of_device_id r8a78000_cpg_match[] = {
 	{
 		.compatible = "renesas,r8a78000-cpg",
-		.data = &r8a78000_cpg_default,
+		.data = &r8a78000_cpg_data,
 	},
 	{ /* sentinel */ }
 };
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 08/10] pmdomain: renesas: r8a78000: Add SCMI remapping support
  2026-07-08 10:16 [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Geert Uytterhoeven
                   ` (6 preceding siblings ...)
  2026-07-08 10:16 ` [PATCH v2 07/10] clk: renesas: r8a78000: Add SCMI remapping support Geert Uytterhoeven
@ 2026-07-08 10:16 ` Geert Uytterhoeven
  2026-07-08 10:16 ` [PATCH v2 09/10] arm64: dts: renesas: ironhide: Enable SCMI devpd, sys, clock, and reset Geert Uytterhoeven
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 17+ messages in thread
From: Geert Uytterhoeven @ 2026-07-08 10:16 UTC (permalink / raw)
  To: Sudeep Holla, Cristian Marussi, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Saravana Kannan, Ulf Hansson, Rafael J . Wysocki,
	Philipp Zabel, Michael Turquette, Stephen Boyd, Brian Masney,
	Bartosz Golaszewski, Vinod Koul, Konrad Dybcio, Kevin Hilman,
	Florian Fainelli, Wolfram Sang, Marek Vasut, Kuninori Morimoto
  Cc: arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel, Geert Uytterhoeven

Extend the Module Controller driver for R-Car X5H with SCMI support,
to remap hardware power domain, module, and reset IDs to SCMI power
domains, clocks, and resets when running on a system with a
supported SCMI firmware implementation.  Take into account peculiarities
of the detected SCMI firmware version, like missing resets.

Note that SCMI clocks representing hardware modules expose access to
Module Standby control: they are fake clocks, with a zero clock rate,
that can just be enabled and disabled.  Hence they are controlled from
the clock domain's start/stop callbacks.

This lets us avoid putting unstable SCMI IDs in DT, and allows us to use
the same hardware description in SoC DTS for systems with and without
SCMI firmware.

Note that this only includes SCMI remapping support, and does not
include yet any mapping tables for specific SCMI firmware versions.

Suggested-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
Note that SCP FW v4.32 has two new reset IDs without corresponding clock
IDs, so the "/* SCMI clock and reset IDs are identical */" comment is no
longer 100% true.  However, these new resets seem to be meant for board
control, not SoC control.

v2:
  - Spin off from "pmdomain: renesas: Add R-Car X5H MDLC SCMI remapping
    driver".
  - Propagate error codes from scmi_get_base_info() now it can return
    -EPROBE_DEFER,
  - Improve error message on scmi_get_base_info() failure,
  - Check if SCMI firmware node is available,
  - Replace scmi_power_np and scmi_reset_np members of struct
    r8a78000_mdlc_priv by local variables in r8a78000_mdlc_probe(), and
    pass the former to fill_power_map(),
  - Move check for supported firmware version up,
  - Fall back to the default support when SCMI support or firmware is
    not available, or when the detected SCMI firmware version is not
    supported by the driver,
  - Drop mapping tables.
---
 drivers/pmdomain/renesas/r8a78000-mdlc.c | 311 ++++++++++++++++++++++-
 1 file changed, 299 insertions(+), 12 deletions(-)

diff --git a/drivers/pmdomain/renesas/r8a78000-mdlc.c b/drivers/pmdomain/renesas/r8a78000-mdlc.c
index ed367e921a3341a7..55f82fcfbe0b0556 100644
--- a/drivers/pmdomain/renesas/r8a78000-mdlc.c
+++ b/drivers/pmdomain/renesas/r8a78000-mdlc.c
@@ -5,26 +5,53 @@
  * Copyright (C) 2026 Glider bv
  */
 
+#include <linux/cleanup.h>
+#include <linux/clk.h>
 #include <linux/dev_printk.h>
 #include <linux/module.h>
 #include <linux/mod_devicetable.h>
 #include <linux/of.h>
 #include <linux/platform_device.h>
+#include <linux/pm_clock.h>
 #include <linux/pm_domain.h>
 #include <linux/reset-controller.h>
+#include <linux/scmi_protocol.h>
 #include <linux/slab.h>
 
 #include <dt-bindings/power/renesas,r8a78000-mdlc.h>
 
+struct power_map_in {
+	int hw_id;		/* Hardware power domain ID or -1 sentinel */
+	u32 fw_id;		/* SCMI firmware power domain ID */
+};
+
+struct power_map {
+	int hw_id;		/* Hardware power domain ID or -1 sentinel */
+	u32 fw_id;		/* SCMI firmware power domain ID */
+	struct generic_pm_domain *genpd;
+};
+
 struct mod_map {
 	int hw_id;		/* Hardware module ID or -1 sentinel */
+	u32 fw_id;		/* SCMI clock and reset IDs are identical */
 };
 
 struct mdlc_info {
 	u32 base;
+	const struct power_map_in *power_map;
 	const struct mod_map *mod_map;
 };
 
+struct fw_map {
+	u32 impl_ver;
+	const struct mdlc_info *info;
+};
+
+struct mdlc_data {
+	const struct mdlc_info *default_info;
+	const struct fw_map *fw_map;
+};
+
 /**
  * struct r8a78000_mdlc_priv - Module Controller Private Data
  *
@@ -33,7 +60,10 @@ struct mdlc_info {
  * @rcdev: Reset controller entity
  * @dev: MDLC device
  * @np: Device node in DT representing the MDLC
- * @mod_map: Mapping from hardware module IDs
+ * @scmi_clk_np: Device node in DT for the SCMI firmware clock protocol
+ * @scmi_rcdev: SCMI reset controller entity
+ * @power_map: Mapping from hardware power domain IDs to SCMI power domains
+ * @mod_map: Mapping from hardware module IDs to SCMI clocks and resets
  */
 struct r8a78000_mdlc_priv {
 	struct hlist_node link;
@@ -41,6 +71,9 @@ struct r8a78000_mdlc_priv {
 	struct reset_controller_dev rcdev;
 	struct device *dev;
 	struct device_node *np;
+	struct device_node *scmi_clk_np;
+	struct reset_controller_dev *scmi_rcdev;
+	const struct power_map *power_map;
 	const struct mod_map *mod_map;
 };
 
@@ -48,12 +81,28 @@ static struct generic_pm_domain *r8a78000_genpd_always_on;
 static HLIST_HEAD(r8a78000_mdlc_list);
 static DEFINE_MUTEX(r8a78000_mdlc_lock);	/* protects the two above */
 
+static const struct power_map *power_map_find(const struct power_map *map,
+					      u32 id)
+{
+	if (!map)
+		return NULL;
+
+	for (; map->hw_id >= 0; map++) {
+		if (map->hw_id == id)
+			return map;
+	}
+
+	return NULL;
+}
+
 static struct generic_pm_domain *r8a78000_genpd_xlate(
 			const struct of_phandle_args *spec, void *data)
 {
 	struct r8a78000_mdlc_priv *priv = container_of(data,
 					struct r8a78000_mdlc_priv, genpd_data);
+	struct generic_pm_domain *genpd;
 	struct device *dev = priv->dev;
+	const struct power_map *map;
 	u32 id;
 
 	if (spec->args_count != 2)
@@ -68,8 +117,18 @@ static struct generic_pm_domain *r8a78000_genpd_xlate(
 		return r8a78000_genpd_always_on;
 	}
 
-	dev_err(dev, "Unknown power domain 0x%x\n", id);
-	return ERR_PTR(-ENOENT);
+	map = power_map_find(priv->power_map, id);
+	if (!map) {
+		dev_err(dev, "Unknown power domain 0x%x\n", id);
+		return ERR_PTR(-ENOENT);
+	}
+
+	dev_dbg(dev, "Mapping HW power domain 0x%x to SCMI power domain %u\n",
+		id, map->fw_id);
+
+	genpd = map->genpd;
+
+	return genpd;
 }
 
 #define rcdev_to_priv(_rcdev)	\
@@ -107,8 +166,15 @@ static int r8a78000_mdlc_reset_xlate(struct reset_controller_dev *rcdev,
 		return -ENOENT;
 	}
 
-	dev_dbg(dev, "Ignoring HW reset 0x%x\n", id);
-	return id;
+	if (!priv->scmi_rcdev) {
+		dev_dbg(dev, "Ignoring HW reset 0x%x\n", id);
+		return id;
+	}
+
+	dev_dbg(dev, "Mapping HW reset 0x%x to SCMI reset %u\n", id,
+		map->fw_id);
+
+	return map->fw_id;
 }
 
 #define DEFINE_MDLC_RESET_WRAPPER(op)					    \
@@ -116,9 +182,22 @@ static int r8a78000_mdlc_reset_xlate(struct reset_controller_dev *rcdev,
 					unsigned long id)		    \
 	{								    \
 		struct r8a78000_mdlc_priv *priv = rcdev_to_priv(rcdev);	    \
+		int ret;						    \
+									    \
+		if (!priv->scmi_rcdev) {				    \
+			dev_dbg(priv->dev, "%s: Ignoring\n", __func__);	    \
+			return 0;					    \
+		}							    \
 									    \
-		dev_dbg(priv->dev, "%s: Ignoring\n", __func__);		    \
-		return 0;						    \
+		if (!priv->scmi_rcdev->ops->op)				    \
+			return -ENOTSUPP;				    \
+									    \
+		ret = priv->scmi_rcdev->ops->op(priv->scmi_rcdev, id);	    \
+		if (ret == -EOPNOTSUPP)					    \
+			dev_dbg(priv->dev,				    \
+				"%s: Ignoring unsupported reset %lu\n",	    \
+				__func__, id);				    \
+		return ret == -EOPNOTSUPP ? 0 : ret;			    \
 	}
 
 DEFINE_MDLC_RESET_WRAPPER(reset)
@@ -133,14 +212,30 @@ static const struct reset_control_ops r8a78000_mdlc_reset_ops = {
 	.status = r8a78000_mdlc_status,
 };
 
+static struct device_node *scmi_find_proto(struct device_node *scmi, u32 proto)
+{
+	for_each_available_child_of_node_scoped(scmi, child) {
+		u32 reg;
+
+		if (of_property_read_u32(child, "reg", &reg))
+			continue;
+
+		if (reg == proto)
+			return_ptr(child);
+	}
+
+	return NULL;
+}
+
 static int r8a78000_mdlc_attach_dev(struct generic_pm_domain *domain,
 				    struct device *dev)
 {
+	struct of_phandle_args pd_spec, scmi_spec;
 	struct device_node *np = dev->of_node;
 	struct r8a78000_mdlc_priv *priv;
-	struct of_phandle_args pd_spec;
 	const struct mod_map *map;
 	unsigned int id;
+	struct clk *clk;
 	int ret;
 
 	ret = of_parse_phandle_with_args(np, "power-domains",
@@ -175,8 +270,107 @@ static int r8a78000_mdlc_attach_dev(struct generic_pm_domain *domain,
 		return -ENOENT;
 	}
 
-	dev_dbg(dev, "Ignoring HW module 0x%x\n", id);
+	if (!priv->scmi_clk_np) {
+		dev_dbg(dev, "Ignoring HW module 0x%x\n", id);
+		return 0;
+	}
+
+	dev_dbg(dev, "Mapping HW module 0x%x to SCMI clock %u\n", id,
+		map->fw_id);
+
+	scmi_spec.np = priv->scmi_clk_np;
+	scmi_spec.args_count = 1;
+	scmi_spec.args[0] = map->fw_id;
+
+	clk = of_clk_get_from_provider(&scmi_spec);
+	if (IS_ERR(clk)) {
+		dev_err(dev, "Cannot get SCMI clock %u: %pe\n", map->fw_id,
+			clk);
+		return PTR_ERR(clk);
+	}
+
+	dev_dbg(dev, "SCMI clock %u is %pC\n", map->fw_id, clk);
+
+	if (!clk) {
+		/* Ignore missing SCMI module clocks */
+		return 0;
+	}
+
+	ret = pm_clk_create(dev);
+	if (ret)
+		goto fail_put;
+
+	ret = pm_clk_add_clk(dev, clk);
+	if (ret)
+		goto fail_destroy;
+
 	return 0;
+
+fail_destroy:
+	pm_clk_destroy(dev);
+fail_put:
+	clk_put(clk);
+	return ret;
+}
+
+static void r8a78000_mdlc_detach_dev(struct generic_pm_domain *domain,
+				     struct device *dev)
+{
+	if (!pm_clk_no_clocks(dev))
+		pm_clk_destroy(dev);
+}
+
+static const struct power_map *fill_power_map(struct r8a78000_mdlc_priv *priv,
+					      const struct power_map_in *map_in,
+					      struct device_node *scmi_power_np)
+{
+	struct of_phandle_args scmi_spec;
+	struct generic_pm_domain *genpd;
+	struct device *dev = priv->dev;
+	struct power_map *map;
+	unsigned int i;
+
+	if (!map_in)
+		return NULL;
+
+	for (i = 0; map_in[i].hw_id >= 0; i++) { }
+
+	map = devm_kcalloc(dev, i + 1, sizeof(*map), GFP_KERNEL);
+	if (!map)
+		return ERR_PTR(-ENOMEM);
+
+	for (i = 0; ; i++) {
+		map[i].hw_id = map_in[i].hw_id;
+		if (map[i].hw_id < 0)
+			break;
+
+		map[i].fw_id = map_in[i].fw_id;
+
+		scmi_spec.np = scmi_power_np;
+		scmi_spec.args_count = 1;
+		scmi_spec.args[0] = map[i].fw_id;
+
+		genpd = genpd_get_from_provider(&scmi_spec);
+		if (IS_ERR(genpd))
+			return dev_err_cast_probe(dev, genpd,
+					"Failed to get SCMI power domain %u\n",
+					map[i].fw_id);
+
+		dev_dbg(dev, "SCMI power domain %u is %s\n", map[i].fw_id,
+			genpd->name);
+
+		map[i].genpd = genpd;
+
+		/* Hook up clock domain support */
+		genpd->attach_dev = r8a78000_mdlc_attach_dev;
+		genpd->detach_dev = r8a78000_mdlc_detach_dev;
+		/* Setting flags this late has no impact, but does not hurt */
+		genpd->flags |= GENPD_FLAG_PM_CLK;
+		genpd->dev_ops.stop = pm_clk_suspend;
+		genpd->dev_ops.start = pm_clk_resume;
+	}
+
+	return map;
 }
 
 static void r8a78000_mdlc_unlink(void *data)
@@ -209,6 +403,8 @@ static int r8a78000_genpd_always_on_singleton(struct device *dev)
 
 	genpd->name = "always-on";
 	genpd->attach_dev = r8a78000_mdlc_attach_dev;
+	genpd->detach_dev = r8a78000_mdlc_detach_dev;
+	genpd->flags |= GENPD_FLAG_PM_CLK;
 
 	ret = pm_genpd_init(genpd, &pm_domain_always_on_gov, false);
 	if (ret) {
@@ -225,8 +421,15 @@ static int r8a78000_mdlc_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
 	struct device_node *np = dev->of_node;
+	struct device_node *scmi __free(device_node) = NULL;
+	struct device_node *scmi_power_np = NULL;
+	const struct mdlc_data *mdlc_data;
+	struct device_node *scmi_reset_np;
+	struct device_node *scmi_clk_np;
 	struct r8a78000_mdlc_priv *priv;
+	struct scmi_base_info version;
 	const struct mdlc_info *info;
+	const struct fw_map *fw_map;
 	struct resource *res;
 	int ret;
 
@@ -234,10 +437,12 @@ static int r8a78000_mdlc_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
-	info = of_device_get_match_data(dev);
-	if (!info)
+	mdlc_data = of_device_get_match_data(dev);
+	if (!mdlc_data)
 		return -ENODEV;
 
+	info = mdlc_data->default_info;
+
 	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
 	if (!priv)
 		return -ENOMEM;
@@ -245,6 +450,71 @@ static int r8a78000_mdlc_probe(struct platform_device *pdev)
 	priv->dev = dev;
 	priv->np = np;
 
+	scmi = of_parse_phandle(dev->of_node, "firmware", 0);
+	if (!scmi) {
+		dev_dbg(dev, "Cannot find SCMI firmware node\n");
+		goto fallback;
+	}
+
+	if (!of_device_is_available(scmi)) {
+		dev_dbg(dev, "SCMI firmware node is not available\n");
+		goto fallback;
+	}
+
+	scmi_power_np = scmi_find_proto(scmi, SCMI_PROTOCOL_POWER);
+	if (!scmi_power_np) {
+		dev_dbg(dev,
+			"Cannot find SCMI power domain management protocol\n");
+		goto fallback;
+	}
+
+	scmi_clk_np = scmi_find_proto(scmi, SCMI_PROTOCOL_CLOCK);
+	if (!scmi_clk_np) {
+		dev_dbg(dev, "Cannot find SCMI clock management protocol\n");
+		goto fallback;
+	}
+
+	scmi_reset_np = scmi_find_proto(scmi, SCMI_PROTOCOL_RESET);
+	if (!scmi_reset_np) {
+		dev_dbg(dev, "Cannot find SCMI reset management protocol\n");
+		goto fallback;
+	}
+
+	ret = scmi_get_base_info(scmi, &version);
+	if (ret == -EPROBE_DEFER)
+		return dev_err_probe(dev, ret, "SCMI provider not ready\n");
+	if (ret) {
+		dev_dbg(dev, "SCMI is not available\n");
+		goto fallback;
+	}
+
+	if (strcmp(version.vendor_id, "Renesas") ||
+	    strcmp(version.sub_vendor_id, "None")) {
+		dev_warn(dev, "Unsupported SCMI firmware %s/%s\n",
+			 version.vendor_id, version.sub_vendor_id);
+		goto fallback;
+	}
+
+	for (fw_map = mdlc_data->fw_map; fw_map->info; fw_map++) {
+		if (fw_map->impl_ver == version.impl_ver)
+			break;
+	}
+
+	if (!fw_map->info) {
+		dev_warn(dev, "Unsupported SCMI firmware version 0x%08x\n",
+			 version.impl_ver);
+		goto fallback;
+	}
+
+	priv->scmi_rcdev = reset_controller_get_provider(of_fwnode_handle(scmi_reset_np));
+	if (!priv->scmi_rcdev)
+		return dev_err_probe(dev, -EPROBE_DEFER,
+				     "SCMI reset not yet available\n");
+
+	priv->scmi_clk_np = scmi_clk_np;
+	info = fw_map->info;
+
+fallback:
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	if (!res)
 		return -ENODEV;
@@ -259,6 +529,14 @@ static int r8a78000_mdlc_probe(struct platform_device *pdev)
 		return -ENODEV;
 	}
 
+	/*
+	 * We cannot do lazy look-up in r8a78000_genpd_xlate(), as that
+	 * function is called with of_genpd_mutex already held.
+	 */
+	priv->power_map = fill_power_map(priv, info->power_map, scmi_power_np);
+	if (IS_ERR(priv->power_map))
+		return PTR_ERR(priv->power_map);
+
 	priv->mod_map = info->mod_map;
 
 	scoped_guard(mutex, &r8a78000_mdlc_lock) {
@@ -307,10 +585,19 @@ static const struct mdlc_info r8a78000_mdlc_default[] = {
 	{ 0 }
 };
 
+static const struct fw_map r8a78000_mdlc_fw_map[] = {
+	{ 0, NULL }
+};
+
+static const struct mdlc_data r8a78000_mdlc_data = {
+	.default_info = r8a78000_mdlc_default,
+	.fw_map = r8a78000_mdlc_fw_map,
+};
+
 static const struct of_device_id r8a78000_mdlc_match[] = {
 	{
 		.compatible = "renesas,r8a78000-mdlc",
-		.data = &r8a78000_mdlc_default,
+		.data = &r8a78000_mdlc_data,
 	},
 	{ /* sentinel */ }
 };
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 09/10] arm64: dts: renesas: ironhide: Enable SCMI devpd, sys, clock, and reset
  2026-07-08 10:16 [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Geert Uytterhoeven
                   ` (7 preceding siblings ...)
  2026-07-08 10:16 ` [PATCH v2 08/10] pmdomain: " Geert Uytterhoeven
@ 2026-07-08 10:16 ` Geert Uytterhoeven
  2026-07-08 15:42 ` [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Marek Vasut
  2026-07-08 16:00 ` [PATCH v2 10/10] arm64: dts: renesas: ironhide: Add CPG/MDLC firmware properties Geert Uytterhoeven
  10 siblings, 0 replies; 17+ messages in thread
From: Geert Uytterhoeven @ 2026-07-08 10:16 UTC (permalink / raw)
  To: Sudeep Holla, Cristian Marussi, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Saravana Kannan, Ulf Hansson, Rafael J . Wysocki,
	Philipp Zabel, Michael Turquette, Stephen Boyd, Brian Masney,
	Bartosz Golaszewski, Vinod Koul, Konrad Dybcio, Kevin Hilman,
	Florian Fainelli, Wolfram Sang, Marek Vasut, Kuninori Morimoto
  Cc: arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel, Geert Uytterhoeven

SCP FW SDKv4.28.0 and later for Renesas R-Car X5H Ironhide not only
implement the SCMI base protocol, but also the SCMI power domain, system
power, clock, and reset domain management protocols.

Enable support for the latter by adding the corresponding SCMI protocol
subnodes.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v2:
  - Fix misindentations,
  - Add scmi_clk node, as it is no longer added in earlier commits.
---
 .../boot/dts/renesas/r8a78000-ironhide.dts    | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/r8a78000-ironhide.dts b/arch/arm64/boot/dts/renesas/r8a78000-ironhide.dts
index d2b3fc08954a1c00..00b5a010b7247722 100644
--- a/arch/arm64/boot/dts/renesas/r8a78000-ironhide.dts
+++ b/arch/arm64/boot/dts/renesas/r8a78000-ironhide.dts
@@ -31,6 +31,25 @@ scmi: scmi {
 			arm,no-completion-irq;
 			#address-cells = <1>;
 			#size-cells = <0>;
+
+			scmi_devpd: protocol@11 {
+				reg = <0x11>;
+				#power-domain-cells = <1>;
+			};
+
+			scmi_sys: protocol@12 {
+				reg = <0x12>;
+			};
+
+			scmi_clk: protocol@14 {
+				reg = <0x14>;
+				#clock-cells = <1>;
+			};
+
+			scmi_reset: protocol@16 {
+				reg = <0x16>;
+				#reset-cells = <1>;
+			};
 		};
 	};
 
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support
  2026-07-08 10:16 [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Geert Uytterhoeven
                   ` (8 preceding siblings ...)
  2026-07-08 10:16 ` [PATCH v2 09/10] arm64: dts: renesas: ironhide: Enable SCMI devpd, sys, clock, and reset Geert Uytterhoeven
@ 2026-07-08 15:42 ` Marek Vasut
  2026-07-08 16:04   ` Geert Uytterhoeven
  2026-07-08 16:00 ` [PATCH v2 10/10] arm64: dts: renesas: ironhide: Add CPG/MDLC firmware properties Geert Uytterhoeven
  10 siblings, 1 reply; 17+ messages in thread
From: Marek Vasut @ 2026-07-08 15:42 UTC (permalink / raw)
  To: Geert Uytterhoeven, Sudeep Holla, Cristian Marussi, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Saravana Kannan, Ulf Hansson,
	Rafael J . Wysocki, Philipp Zabel, Michael Turquette,
	Stephen Boyd, Brian Masney, Bartosz Golaszewski, Vinod Koul,
	Konrad Dybcio, Kevin Hilman, Florian Fainelli, Wolfram Sang,
	Marek Vasut, Kuninori Morimoto
  Cc: arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel

On 7/8/26 12:16 PM, Geert Uytterhoeven wrote:
> 	Hi all,
> 
> TL;DR:
> 
>      Describe hardware in DT, and perform the mapping to SCMI in Linux.
> 
> The Renesas R-Car X5H-based Ironhide board is the first Renesas
> SoC/board combination that implements the ARM System Control and
> Management Interface (SCMI).
> 
> This means Linux can no longer perform various system operations (e.g.
> clock, power domain, and reset control) by accessing the hardware
> directly.  Instead, these operations are abstracted according to various
> SCMI sub-protocols, and Linux has to send messages to an SCMI-compliant
> firmware running on a System Control Processor (SCP).
> More specifically, the R-Car X5H SCP FW SCMI controls access to:
>    1. Core clocks and module clocks,
>    2. Module resets,
>    3. Power domains,
>    4. System power.
> The latter is not relevant for this discussion.
> 
> Using SCMI also has an impact on the board DTS: besides the addition of
> a firmware/scmi node with protocol-specific subnodes, devices using
> SCMI-abstracted system resources now have to refer to these resources
> using resource specifiers containing phandles to the SCMI protocol
> subnodes, and firmware-specific object IDs[1].
> 
> Unfortunately we encountered several issues with this:
>    - The clock, reset, and power domain IDs are not stable by design,
>      causing DT incompatibilities.
>      SCMI requires that the ID space exposed to an agent (i.e. Linux)
>      starts at zero and is contiguous.  Hence any change in system
>      partitioning (Application CPU core vs. Realtime CPU core,
>      virtualization, ...) may mean a renumbering of all SCMI IDs,
>      implying a massive change to the DT.
>    - There may be different SCP firmware lineages, e.g. proprietary and
>      certified variants, and FLOSS variants,
>    - SCMI features may differ across firmware versions,
>    - SCMI may abstract the hardware in a different way, requiring changes
>      in (possibly existing) DT bindings and drivers to support the same
>      hardware with and without SCMI:
>        - E.g. the number of SCMI clocks inputs to a hardware block may
> 	differ from the actual hardware,
>        - E.g. hardware clock inputs may be abstracted as SCMI power
> 	domains (or vice versa), like on Qualcomm SA8255P[2].
>      Experience has taught that not describing the hardware in DT may
>      lead to major issues later.
>    - SCMI does not support the concept of a clock domain, so existing
>      drivers can no longer rely on Runtime PM, but need to be changed to
>      manage functional clocks explicitly,
>    - U-Boot IPL (Initial Program Loader) needs a proper hardware
>      description in DT, not using SCMI.
> 
> This list deliberately ignores ID instability and the need for SCMI
> quirks during development of the SCMI firmware.  While upstream Linux
> must only support sufficiently mature firmware versions, vendor trees
> (e.g. renesas-lts) may still want to support development firmware
> versions.
> 
> During last OSSJ/LPC, Marek Vasut pondered if we could keep our own ID
> lists stable, and perform a mapping to the IDs used by the actual SCMI
> implementation running on the system.  This was also briefly discussed
> at LPC[3].  After some refining of the initial idea, this series takes a
> slightly different approach, by:
>    1. Describing the actual hardware components in DT, plus a minimum
>       SCMI glue,
>    2. Mapping DT hardware descriptions to SCMI-backed objects and
>       abstractions (or replacements, in case they are unusable,
>       unavailable, or too different), in Linux drivers, based on the
>       detected firmware version.
> 
> This has the following advantages:
>    1. The DT ABI is stable,
>    2. DT bindings and drivers for existing hardware blocks do not need to
>       be modified,
>    2. Current and future firmware can be handled in driver code,
>    3. U-Boot IPL can use almost the same DTS; it just needs stripping of
>       SCMI-related nodes and properties.
>    4. If ever needed, the Clock Pulse Generator (CPG) and Module
>       Controller (MDLC) drivers can be extended to program the hardware
>       directly if SCMI is not present,
> 
> This series depends on "[PATCH v2 0/6] R-Car X5H CPG/MDLC support"[4],
> and consists of four parts:
>    1. Patches 1-4 add new interfaces needed by the remapping support,
>    2. Patches 5-6 update the DT bindings for the R-Car X5H Clock Pulse
>       Generator (CPG) and Module Controller (MDLC) blocks,
>    3. Patches 7-8 add SCMI remapping support to the R-Car X5H CPG and
>       MDLC drivers,
>    4. Patches 9-10 enables more SCMI protocols on R-Car X5H Ironhide, and
>       link the CPG and MDLC blocks to their SCMI provider.
> 
> Changes compared to v1[5]:
>    - Drop SCMI quirks and SCMI mapping tables,
>    - Move CPG/MDLC DT bindings and minimal base drivers to a separate
>      series,
>    - Add that SCMI may provide different abstractions,
>    - Add missing asterisk to blank kerneldoc line,
>    - Let scmi_get_base_info() return -EPROBE_DEFER or -EOPNOTSUPP instead
>      of -ENOENT, and propagate these errors in callers,
>    - Fall back to the default support when SCMI support or firmware is
>      not available, or when the detected SCMI firmware version is not
>      supported by the driver,
>    - Improve error message on scmi_get_base_info() failure,
>    - Check if SCMI firmware node is available,
>    - Use reverse xmas ordering in r8a78000_cpg_probe(),
>    - Replace the scmi_*_np members of struct r8a78000_*_priv by local
>      variables in the probe functions, and pass them to the fill_*_map()
>      functions,
>    - Join split short lines,
>    - Move check for supported firmware version up,
>    - Fix DT misindentations,
>    - Add scmi_clk node, as it is no longer added in earlier commits.
> 
> Note that in reponse of feedback on v1, I did try to use SCMI IDs in DT,
> and handle most issues in Linux SCMI drivers and SCMI quirks[6].  While
> the result worked, it did not solve everything in the issues list above.
> 
> Note that this series does not include actual SCMI quirks and CPG/MDLC
> mapping tables, as the SCMI firmware for R-Car X5H is still under
> development.
> 
> For testing, I have pushed this series plus additional work to[7].
> 
> Thanks for your comments!
> 
> [1] Documentation/devicetree/bindings/firmware/arm,scmi.yaml
> [2] "[PATCH net-next v11 1/7] dt-bindings: phy: document the serdes PHY on sa8255p"
>      https://lore.kernel.org/20260629-qcom-sa8255p-emac-v11-1-1b7fb95b51f9@oss.qualcomm.com
> [3] "Firmware ABI stability" at Linux Plumbers Conference 2025
>      https://lpc.events/event/19/contributions/2153/
> [4] "[PATCH v2 0/6] R-Car X5H CPG/MDLC support"
>      https://lore.kernel.org/cover.1783505142.git.geert+renesas@glider.be
> [5] "[PATCH/RFC 00/14] R-Car X5H Ironhide SCMI CPG/MDLC remapping"
>      https://lore.kernel.org/cover.1776793163.git.geert+renesas@glider.be
> [6] "[PATCH/RFC 0/9] R-Car X5H Ironhide pure SCMI proof-of-concept"
>      https://lore.kernel.org/cover.1781171705.git.geert+renesas@glider.be/
> [7] topic/rcar-x5h-ironhide-scmi-cpg-mdlc-remapping-v2 branch of
>      https://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git
> 
> Geert Uytterhoeven (10):
>    firmware: arm_scmi: Add scmi_get_base_info()
>    of: property: fw_devlink: Add support for firmware
>    pmdomain: Make genpd_get_from_provider() public
>    reset: Add reset_controller_get_provider()
>    dt-bindings: clock: renesas,r8a78000-cpg: Add firmware property
>    dt-bindings: power: renesas,r8a78000-mdlc: Add firmware property
>    clk: renesas: r8a78000: Add SCMI remapping support
>    pmdomain: renesas: r8a78000: Add SCMI remapping support
>    arm64: dts: renesas: ironhide: Enable SCMI devpd, sys, clock, and
>      reset
>    arm64: dts: renesas: ironhide: Add CPG/MDLC firmware properties
I think 10/10 did not make it either to my inbox or lore.k.o , but the 
remaining 9 patches look good. Thank you !

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 10/10] arm64: dts: renesas: ironhide: Add CPG/MDLC firmware properties
  2026-07-08 10:16 [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Geert Uytterhoeven
                   ` (9 preceding siblings ...)
  2026-07-08 15:42 ` [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Marek Vasut
@ 2026-07-08 16:00 ` Geert Uytterhoeven
  10 siblings, 0 replies; 17+ messages in thread
From: Geert Uytterhoeven @ 2026-07-08 16:00 UTC (permalink / raw)
  To: Sudeep Holla, Cristian Marussi, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Saravana Kannan, Ulf Hansson, Rafael J . Wysocki,
	Philipp Zabel, Michael Turquette, Stephen Boyd, Brian Masney,
	Bartosz Golaszewski, Vinod Koul, Konrad Dybcio, Kevin Hilman,
	Florian Fainelli, Wolfram Sang, Marek Vasut, Kuninori Morimoto
  Cc: arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel, Geert Uytterhoeven

Link the various Clock Pulse Generator (CPG) and Module Controller
(MDLC) device nodes to their SCMI provider.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v2:
  - No changes.
---
 .../boot/dts/renesas/r8a78000-ironhide.dts    | 116 ++++++++++++++++++
 1 file changed, 116 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/r8a78000-ironhide.dts b/arch/arm64/boot/dts/renesas/r8a78000-ironhide.dts
index 00b5a010b7247722..5c009df903771687 100644
--- a/arch/arm64/boot/dts/renesas/r8a78000-ironhide.dts
+++ b/arch/arm64/boot/dts/renesas/r8a78000-ironhide.dts
@@ -129,6 +129,10 @@ tee@8c400000 {
 	};
 };
 
+&cpg {
+	firmware = <&scmi>;
+};
+
 &extal_clk {
 	clock-frequency = <16666600>;
 };
@@ -142,6 +146,118 @@ &hscif0 {
 	status = "okay";
 };
 
+&mdlc_aon {
+	firmware = <&scmi>;
+};
+
+&mdlc_cmnn {
+	firmware = <&scmi>;
+};
+
+&mdlc_cmns {
+	firmware = <&scmi>;
+};
+
+&mdlc_ddr0 {
+	firmware = <&scmi>;
+};
+
+&mdlc_ddr1 {
+	firmware = <&scmi>;
+};
+
+&mdlc_ddr2 {
+	firmware = <&scmi>;
+};
+
+&mdlc_ddr3 {
+	firmware = <&scmi>;
+};
+
+&mdlc_ddr4 {
+	firmware = <&scmi>;
+};
+
+&mdlc_ddr5 {
+	firmware = <&scmi>;
+};
+
+&mdlc_ddr6 {
+	firmware = <&scmi>;
+};
+
+&mdlc_ddr7 {
+	firmware = <&scmi>;
+};
+
+&mdlc_dsp {
+	firmware = <&scmi>;
+};
+
+&mdlc_gpc {
+	firmware = <&scmi>;
+};
+
+&mdlc_hscn {
+	firmware = <&scmi>;
+};
+
+&mdlc_hscs {
+	firmware = <&scmi>;
+};
+
+&mdlc_imn {
+	firmware = <&scmi>;
+};
+
+&mdlc_ims {
+	firmware = <&scmi>;
+};
+
+&mdlc_mm {
+	firmware = <&scmi>;
+};
+
+&mdlc_npu0 {
+	firmware = <&scmi>;
+};
+
+&mdlc_npu1 {
+	firmware = <&scmi>;
+};
+
+&mdlc_pere {
+	firmware = <&scmi>;
+};
+
+&mdlc_perw {
+	firmware = <&scmi>;
+};
+
+&mdlc_rt {
+	firmware = <&scmi>;
+};
+
+&mdlc_scp {
+	firmware = <&scmi>;
+};
+
+&mdlc_top {
+	firmware = <&scmi>;
+};
+
+&mdlc_vio {
+	firmware = <&scmi>;
+};
+
+&mdlc_vipn {
+	firmware = <&scmi>;
+};
+
+&mdlc_vips {
+	firmware = <&scmi>;
+};
+
 &mfis_scp {
 	status = "okay";
 };
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support
  2026-07-08 15:42 ` [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Marek Vasut
@ 2026-07-08 16:04   ` Geert Uytterhoeven
  2026-07-08 16:48     ` Marek Vasut
  0 siblings, 1 reply; 17+ messages in thread
From: Geert Uytterhoeven @ 2026-07-08 16:04 UTC (permalink / raw)
  To: Marek Vasut
  Cc: Geert Uytterhoeven, Sudeep Holla, Cristian Marussi, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Saravana Kannan, Ulf Hansson,
	Rafael J . Wysocki, Philipp Zabel, Michael Turquette,
	Stephen Boyd, Brian Masney, Bartosz Golaszewski, Vinod Koul,
	Konrad Dybcio, Kevin Hilman, Florian Fainelli, Wolfram Sang,
	Marek Vasut, Kuninori Morimoto, arm-scmi, linux-arm-kernel,
	devicetree, linux-pm, linux-clk, linux-renesas-soc, linux-kernel

Hi Marek,

On Wed, 8 Jul 2026 at 17:42, Marek Vasut <marek.vasut@mailbox.org> wrote:
> On 7/8/26 12:16 PM, Geert Uytterhoeven wrote:
> > Geert Uytterhoeven (10):
> >    firmware: arm_scmi: Add scmi_get_base_info()
> >    of: property: fw_devlink: Add support for firmware
> >    pmdomain: Make genpd_get_from_provider() public
> >    reset: Add reset_controller_get_provider()
> >    dt-bindings: clock: renesas,r8a78000-cpg: Add firmware property
> >    dt-bindings: power: renesas,r8a78000-mdlc: Add firmware property
> >    clk: renesas: r8a78000: Add SCMI remapping support
> >    pmdomain: renesas: r8a78000: Add SCMI remapping support
> >    arm64: dts: renesas: ironhide: Enable SCMI devpd, sys, clock, and
> >      reset
> >    arm64: dts: renesas: ironhide: Add CPG/MDLC firmware properties
>
> I think 10/10 did not make it either to my inbox or lore.k.o , but the
> remaining 9 patches look good. Thank you !

Thanks, I did something silly while sending.
Lore now has it, b4 still seems to miss it, unless I specify the
Message-ID of 10/10.

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support
  2026-07-08 16:04   ` Geert Uytterhoeven
@ 2026-07-08 16:48     ` Marek Vasut
  0 siblings, 0 replies; 17+ messages in thread
From: Marek Vasut @ 2026-07-08 16:48 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Geert Uytterhoeven, Sudeep Holla, Cristian Marussi, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Saravana Kannan, Ulf Hansson,
	Rafael J . Wysocki, Philipp Zabel, Michael Turquette,
	Stephen Boyd, Brian Masney, Bartosz Golaszewski, Vinod Koul,
	Konrad Dybcio, Kevin Hilman, Florian Fainelli, Wolfram Sang,
	Marek Vasut, Kuninori Morimoto, arm-scmi, linux-arm-kernel,
	devicetree, linux-pm, linux-clk, linux-renesas-soc, linux-kernel

On 7/8/26 6:04 PM, Geert Uytterhoeven wrote:

Hello Geert,

> On Wed, 8 Jul 2026 at 17:42, Marek Vasut <marek.vasut@mailbox.org> wrote:
>> On 7/8/26 12:16 PM, Geert Uytterhoeven wrote:
>>> Geert Uytterhoeven (10):
>>>     firmware: arm_scmi: Add scmi_get_base_info()
>>>     of: property: fw_devlink: Add support for firmware
>>>     pmdomain: Make genpd_get_from_provider() public
>>>     reset: Add reset_controller_get_provider()
>>>     dt-bindings: clock: renesas,r8a78000-cpg: Add firmware property
>>>     dt-bindings: power: renesas,r8a78000-mdlc: Add firmware property
>>>     clk: renesas: r8a78000: Add SCMI remapping support
>>>     pmdomain: renesas: r8a78000: Add SCMI remapping support
>>>     arm64: dts: renesas: ironhide: Enable SCMI devpd, sys, clock, and
>>>       reset
>>>     arm64: dts: renesas: ironhide: Add CPG/MDLC firmware properties
>>
>> I think 10/10 did not make it either to my inbox or lore.k.o , but the
>> remaining 9 patches look good. Thank you !
> 
> Thanks, I did something silly while sending.
> Lore now has it, b4 still seems to miss it, unless I specify the
> Message-ID of 10/10.

Thank you, it looks just fine.

-- 
Best regards,
Marek Vasut

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 05/10] dt-bindings: clock: renesas,r8a78000-cpg: Add firmware property
  2026-07-08 10:16 ` [PATCH v2 05/10] dt-bindings: clock: renesas,r8a78000-cpg: Add firmware property Geert Uytterhoeven
@ 2026-07-10 10:21   ` Krzysztof Kozlowski
  2026-07-10 11:02     ` Geert Uytterhoeven
  0 siblings, 1 reply; 17+ messages in thread
From: Krzysztof Kozlowski @ 2026-07-10 10:21 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Sudeep Holla, Cristian Marussi, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Saravana Kannan, Ulf Hansson, Rafael J . Wysocki,
	Philipp Zabel, Michael Turquette, Stephen Boyd, Brian Masney,
	Bartosz Golaszewski, Vinod Koul, Konrad Dybcio, Kevin Hilman,
	Florian Fainelli, Wolfram Sang, Marek Vasut, Kuninori Morimoto,
	arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel

On Wed, Jul 08, 2026 at 12:16:23PM +0200, Geert Uytterhoeven wrote:
> Add a firmware property, for systems where SCMI must be used instead of
> direct hardware access.
> 
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> v2:
>   - Spin off from "dt-bindings: clock: Document Renesas R-Car X5H Clock
>     Pulse Generator".
> ---
>  .../devicetree/bindings/clock/renesas,r8a78000-cpg.yaml    | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/clock/renesas,r8a78000-cpg.yaml b/Documentation/devicetree/bindings/clock/renesas,r8a78000-cpg.yaml
> index 4e23bba334382346..fc499e7cf52e4f0c 100644
> --- a/Documentation/devicetree/bindings/clock/renesas,r8a78000-cpg.yaml
> +++ b/Documentation/devicetree/bindings/clock/renesas,r8a78000-cpg.yaml
> @@ -35,6 +35,12 @@ properties:
>        <dt-bindings/clock/renesas,r8a78000-cpg.h>.
>      const: 1
>  
> +  firmware:

RPi is doing similar, but I have doubts. It looks way too close to
generic "syscon" which is disallowed.

I think this should be vendor+purpose specific, e.g.:
"renesas,scmi-transport" or "renesas,scmi-firmware"

Also we have "firmware" nodes, so this might cause conflicts in dtschema
validation.  Anyway, the phandle itself is fine for me, just the naming.

I'll ping also Rob to chime in.

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 05/10] dt-bindings: clock: renesas,r8a78000-cpg: Add firmware property
  2026-07-10 10:21   ` Krzysztof Kozlowski
@ 2026-07-10 11:02     ` Geert Uytterhoeven
  0 siblings, 0 replies; 17+ messages in thread
From: Geert Uytterhoeven @ 2026-07-10 11:02 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Sudeep Holla, Cristian Marussi, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Saravana Kannan, Ulf Hansson, Rafael J . Wysocki,
	Philipp Zabel, Michael Turquette, Stephen Boyd, Brian Masney,
	Bartosz Golaszewski, Vinod Koul, Konrad Dybcio, Kevin Hilman,
	Florian Fainelli, Wolfram Sang, Marek Vasut, Kuninori Morimoto,
	arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel

Hi Krzysztof,

On Fri, 10 Jul 2026 at 12:21, Krzysztof Kozlowski <krzk@kernel.org> wrote:
> On Wed, Jul 08, 2026 at 12:16:23PM +0200, Geert Uytterhoeven wrote:
> > Add a firmware property, for systems where SCMI must be used instead of
> > direct hardware access.
> >
> > Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> > ---
> > v2:
> >   - Spin off from "dt-bindings: clock: Document Renesas R-Car X5H Clock
> >     Pulse Generator".
> > ---
> >  .../devicetree/bindings/clock/renesas,r8a78000-cpg.yaml    | 7 +++++++
> >  1 file changed, 7 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/clock/renesas,r8a78000-cpg.yaml b/Documentation/devicetree/bindings/clock/renesas,r8a78000-cpg.yaml
> > index 4e23bba334382346..fc499e7cf52e4f0c 100644
> > --- a/Documentation/devicetree/bindings/clock/renesas,r8a78000-cpg.yaml
> > +++ b/Documentation/devicetree/bindings/clock/renesas,r8a78000-cpg.yaml
> > @@ -35,6 +35,12 @@ properties:
> >        <dt-bindings/clock/renesas,r8a78000-cpg.h>.
> >      const: 1
> >
> > +  firmware:
>
> RPi is doing similar, but I have doubts. It looks way too close to
> generic "syscon" which is disallowed.
>
> I think this should be vendor+purpose specific, e.g.:
> "renesas,scmi-transport" or "renesas,scmi-firmware"

The disadvantage of a vendor-specific property is that there are more
cases to handle for fw_devlink, cfr. "[PATCH v2 02/10] of: property:
fw_devlink: Add support for firmware"[1].

> Also we have "firmware" nodes, so this might cause conflicts in dtschema
> validation.  Anyway, the phandle itself is fine for me, just the naming.
>
> I'll ping also Rob to chime in.

Thanks!

[1] https://lore.kernel.org/de34ac0c52695d92c67cf950b3d8e9b30095d305.1783505329.git.geert+renesas@glider.be

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v2 04/10] reset: Add reset_controller_get_provider()
  2026-07-08 10:16 ` [PATCH v2 04/10] reset: Add reset_controller_get_provider() Geert Uytterhoeven
@ 2026-07-10 14:49   ` Philipp Zabel
  0 siblings, 0 replies; 17+ messages in thread
From: Philipp Zabel @ 2026-07-10 14:49 UTC (permalink / raw)
  To: Geert Uytterhoeven, Sudeep Holla, Cristian Marussi, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Saravana Kannan, Ulf Hansson,
	Rafael J . Wysocki, Michael Turquette, Stephen Boyd, Brian Masney,
	Bartosz Golaszewski, Vinod Koul, Konrad Dybcio, Kevin Hilman,
	Florian Fainelli, Wolfram Sang, Marek Vasut, Kuninori Morimoto
  Cc: arm-scmi, linux-arm-kernel, devicetree, linux-pm, linux-clk,
	linux-renesas-soc, linux-kernel

On Mi, 2026-07-08 at 12:16 +0200, Geert Uytterhoeven wrote:
> The reset subsystem differs from the clock subsystem in multiple ways:
>   1. It does not provide a public way to lookup resets from a reset
>      provider (clock has of_clk_get_from_provider()),
>   2. The xlate callback does not return a reset object, but merely an
>      index, which is converted to a reset object by the reset core.
> 
> Hence add a public helper reset_controller_get_provider(), which just
> returns the provider, and will be used by the R-Car X5H Module
> Controller driver.
> 
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>

Please don't. Only the owning reset controller driver and the reset
core should interact with struct reset_controller_dev internals.

I'd be very uncomfortable with a driver reaching directly into another
drivers reset_control_ops, bypassing the core entirely.

I think it would be better to let reset-scmi export a specialized
scmi_reset_assert/deassert/reset(id) API, and add a possibility to
suppress registering the reset-scmi reset controller, so that there
aren't two conflicting paths into scmi_reset_proto_ops.

If you want to stack two reset controllers, the upper one should go
through the proper channels: request exclusive reset controls and use
them via the reset_control_*() APIs from the ops.


regards
Philipp

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2026-07-10 14:49 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-08 10:16 [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Geert Uytterhoeven
2026-07-08 10:16 ` [PATCH v2 01/10] firmware: arm_scmi: Add scmi_get_base_info() Geert Uytterhoeven
2026-07-08 10:16 ` [PATCH v2 02/10] of: property: fw_devlink: Add support for firmware Geert Uytterhoeven
2026-07-08 10:16 ` [PATCH v2 03/10] pmdomain: Make genpd_get_from_provider() public Geert Uytterhoeven
2026-07-08 10:16 ` [PATCH v2 04/10] reset: Add reset_controller_get_provider() Geert Uytterhoeven
2026-07-10 14:49   ` Philipp Zabel
2026-07-08 10:16 ` [PATCH v2 05/10] dt-bindings: clock: renesas,r8a78000-cpg: Add firmware property Geert Uytterhoeven
2026-07-10 10:21   ` Krzysztof Kozlowski
2026-07-10 11:02     ` Geert Uytterhoeven
2026-07-08 10:16 ` [PATCH v2 06/10] dt-bindings: power: renesas,r8a78000-mdlc: " Geert Uytterhoeven
2026-07-08 10:16 ` [PATCH v2 07/10] clk: renesas: r8a78000: Add SCMI remapping support Geert Uytterhoeven
2026-07-08 10:16 ` [PATCH v2 08/10] pmdomain: " Geert Uytterhoeven
2026-07-08 10:16 ` [PATCH v2 09/10] arm64: dts: renesas: ironhide: Enable SCMI devpd, sys, clock, and reset Geert Uytterhoeven
2026-07-08 15:42 ` [PATCH v2 00/10] R-Car X5H Ironhide CPG/MDLC SCMI remapping support Marek Vasut
2026-07-08 16:04   ` Geert Uytterhoeven
2026-07-08 16:48     ` Marek Vasut
2026-07-08 16:00 ` [PATCH v2 10/10] arm64: dts: renesas: ironhide: Add CPG/MDLC firmware properties Geert Uytterhoeven

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox