public inbox for cip-dev@lists.cip-project.org
 help / color / mirror / Atom feed
* [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support
@ 2025-12-17 10:32 Claudiu
  2025-12-17 10:32 ` [PATCH 6.12.y-cip 1/6] clk: renesas: r9a08g045: Add clocks, resets and power domain support for the TSU IP Claudiu
                   ` (6 more replies)
  0 siblings, 7 replies; 14+ messages in thread
From: Claudiu @ 2025-12-17 10:32 UTC (permalink / raw)
  To: pavel, nobuhiro.iwamatsu.x90; +Cc: claudiu.beznea, cip-dev

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

Hi,

Series backports the TSU (Thermal Sensor Unit) support for RZ/G3S.

Thank you,
Claudiu

Claudiu Beznea (6):
  clk: renesas: r9a08g045: Add clocks, resets and power domain support
    for the TSU IP
  dt-bindings: thermal: r9a08g045-tsu: Document the TSU unit
  thermal/drivers/renesas/rzg3s: Add thermal driver for the Renesas
    RZ/G3S SoC
  arm64: dts: renesas: r9a08g045: Add OPP table
  arm64: dts: renesas: r9a08g045: Add TSU node
  arm64: defconfig: Enable Renesas RZ/G3S thermal driver

 .../thermal/renesas,r9a08g045-tsu.yaml        |  93 ++++++
 MAINTAINERS                                   |   7 +
 arch/arm64/boot/dts/renesas/r9a08g045.dtsi    |  77 ++++-
 .../boot/dts/renesas/rzg3s-smarc-som.dtsi     |   4 -
 arch/arm64/configs/defconfig                  |   1 +
 drivers/clk/renesas/r9a08g045-cpg.c           |   5 +
 drivers/thermal/renesas/Kconfig               |   8 +
 drivers/thermal/renesas/Makefile              |   1 +
 drivers/thermal/renesas/rzg3s_thermal.c       | 274 ++++++++++++++++++
 9 files changed, 465 insertions(+), 5 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/thermal/renesas,r9a08g045-tsu.yaml
 create mode 100644 drivers/thermal/renesas/rzg3s_thermal.c

-- 
2.43.0



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

* [PATCH 6.12.y-cip 1/6] clk: renesas: r9a08g045: Add clocks, resets and power domain support for the TSU IP
  2025-12-17 10:32 [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support Claudiu
@ 2025-12-17 10:32 ` Claudiu
  2025-12-17 10:32 ` [PATCH 6.12.y-cip 2/6] dt-bindings: thermal: r9a08g045-tsu: Document the TSU unit Claudiu
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Claudiu @ 2025-12-17 10:32 UTC (permalink / raw)
  To: pavel, nobuhiro.iwamatsu.x90; +Cc: claudiu.beznea, cip-dev

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

commit 5599c7c4b4df440aa4a470a5b72669081413981f upstream.

Add clocks, resets and power domains for the TSU IP available on the
Renesas RZ/G3S SoC.

Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250103163805.1775705-2-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
[claudiu.beznea: fixed conflict by using RZG2L_PD_F_NONE instead of 0
 for adc and tsu power domains]
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
 drivers/clk/renesas/r9a08g045-cpg.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/clk/renesas/r9a08g045-cpg.c b/drivers/clk/renesas/r9a08g045-cpg.c
index 5156032f9fd9..7cdce3cd7dc0 100644
--- a/drivers/clk/renesas/r9a08g045-cpg.c
+++ b/drivers/clk/renesas/r9a08g045-cpg.c
@@ -241,6 +241,7 @@ static const struct rzg2l_mod_clk r9a08g045_mod_clks[] = {
 	DEF_MOD("gpio_hclk",		R9A08G045_GPIO_HCLK, R9A08G045_OSCCLK, 0x598, 0),
 	DEF_MOD("adc_adclk",		R9A08G045_ADC_ADCLK, R9A08G045_CLK_TSU, 0x5a8, 0),
 	DEF_MOD("adc_pclk",		R9A08G045_ADC_PCLK, R9A08G045_CLK_TSU, 0x5a8, 1),
+	DEF_MOD("tsu_pclk",		R9A08G045_TSU_PCLK, R9A08G045_CLK_TSU, 0x5ac, 0),
 	DEF_MOD("vbat_bclk",		R9A08G045_VBAT_BCLK, R9A08G045_OSCCLK, 0x614, 0),
 };
 
@@ -279,6 +280,7 @@ static const struct rzg2l_reset r9a08g045_resets[] = {
 	DEF_RST(R9A08G045_GPIO_SPARE_RESETN, 0x898, 2),
 	DEF_RST(R9A08G045_ADC_PRESETN, 0x8a8, 0),
 	DEF_RST(R9A08G045_ADC_ADRST_N, 0x8a8, 1),
+	DEF_RST(R9A08G045_TSU_PRESETN, 0x8ac, 0),
 	DEF_RST(R9A08G045_VBAT_BRESETN, 0x914, 0),
 };
 
@@ -376,6 +378,9 @@ static const struct rzg2l_cpg_pm_domain_init_data r9a08g045_pm_domains[] = {
 	DEF_PD("adc",		R9A08G045_PD_ADC,
 				DEF_REG_CONF(CPG_BUS_MCPU2_MSTOP, BIT(14)),
 				RZG2L_PD_F_NONE),
+	DEF_PD("tsu",		R9A08G045_PD_TSU,
+				DEF_REG_CONF(CPG_BUS_MCPU2_MSTOP, BIT(15)),
+				RZG2L_PD_F_NONE),
 	DEF_PD("vbat",		R9A08G045_PD_VBAT,
 				DEF_REG_CONF(CPG_BUS_MCPU3_MSTOP, BIT(8)),
 				RZG2L_PD_F_ALWAYS_ON),
-- 
2.43.0



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

* [PATCH 6.12.y-cip 2/6] dt-bindings: thermal: r9a08g045-tsu: Document the TSU unit
  2025-12-17 10:32 [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support Claudiu
  2025-12-17 10:32 ` [PATCH 6.12.y-cip 1/6] clk: renesas: r9a08g045: Add clocks, resets and power domain support for the TSU IP Claudiu
@ 2025-12-17 10:32 ` Claudiu
  2025-12-17 10:32 ` [PATCH 6.12.y-cip 3/6] thermal/drivers/renesas/rzg3s: Add thermal driver for the Renesas RZ/G3S SoC Claudiu
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Claudiu @ 2025-12-17 10:32 UTC (permalink / raw)
  To: pavel, nobuhiro.iwamatsu.x90; +Cc: claudiu.beznea, cip-dev

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

commit a3152e5c742ca2557c5cd0e5a9e6ca6b9a92df93 upstream.

The Renesas RZ/G3S SoC includes a Thermal Sensor Unit (TSU) block designed
to measure the junction temperature. The temperature is measured using
the RZ/G3S ADC, with a dedicated ADC channel directly connected to the TSU.
Add documentation for it.

Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Link: https://lore.kernel.org/r/20250810122125.792966-2-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
 .../thermal/renesas,r9a08g045-tsu.yaml        | 93 +++++++++++++++++++
 1 file changed, 93 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/thermal/renesas,r9a08g045-tsu.yaml

diff --git a/Documentation/devicetree/bindings/thermal/renesas,r9a08g045-tsu.yaml b/Documentation/devicetree/bindings/thermal/renesas,r9a08g045-tsu.yaml
new file mode 100644
index 000000000000..573e2b9d3752
--- /dev/null
+++ b/Documentation/devicetree/bindings/thermal/renesas,r9a08g045-tsu.yaml
@@ -0,0 +1,93 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/thermal/renesas,r9a08g045-tsu.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Renesas RZ/G3S Thermal Sensor Unit
+
+description:
+  The thermal sensor unit (TSU) measures the temperature(Tj) inside
+  the LSI.
+
+maintainers:
+  - Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
+
+$ref: thermal-sensor.yaml#
+
+properties:
+  compatible:
+    const: renesas,r9a08g045-tsu
+
+  reg:
+    maxItems: 1
+
+  clocks:
+    items:
+      - description: TSU module clock
+
+  power-domains:
+    maxItems: 1
+
+  resets:
+    items:
+      - description: TSU module reset
+
+  io-channels:
+    items:
+      - description: ADC channel which reports the TSU temperature
+
+  io-channel-names:
+    items:
+      - const: tsu
+
+  "#thermal-sensor-cells":
+    const: 0
+
+required:
+  - compatible
+  - reg
+  - clocks
+  - power-domains
+  - resets
+  - io-channels
+  - io-channel-names
+  - '#thermal-sensor-cells'
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/r9a08g045-cpg.h>
+
+    tsu: thermal@10059000 {
+        compatible = "renesas,r9a08g045-tsu";
+        reg = <0x10059000 0x1000>;
+        clocks = <&cpg CPG_MOD R9A08G045_TSU_PCLK>;
+        resets = <&cpg R9A08G045_TSU_PRESETN>;
+        power-domains = <&cpg>;
+        #thermal-sensor-cells = <0>;
+        io-channels = <&adc 8>;
+        io-channel-names = "tsu";
+    };
+
+    thermal-zones {
+        cpu-thermal {
+            polling-delay-passive = <250>;
+            polling-delay = <1000>;
+            thermal-sensors = <&tsu>;
+
+            trips {
+                sensor_crit: sensor-crit {
+                    temperature = <125000>;
+                    hysteresis = <1000>;
+                    type = "critical";
+                };
+                target: trip-point {
+                    temperature = <100000>;
+                    hysteresis = <1000>;
+                    type = "passive";
+                };
+            };
+        };
+    };
-- 
2.43.0



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

* [PATCH 6.12.y-cip 3/6] thermal/drivers/renesas/rzg3s: Add thermal driver for the Renesas RZ/G3S SoC
  2025-12-17 10:32 [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support Claudiu
  2025-12-17 10:32 ` [PATCH 6.12.y-cip 1/6] clk: renesas: r9a08g045: Add clocks, resets and power domain support for the TSU IP Claudiu
  2025-12-17 10:32 ` [PATCH 6.12.y-cip 2/6] dt-bindings: thermal: r9a08g045-tsu: Document the TSU unit Claudiu
@ 2025-12-17 10:32 ` Claudiu
  2025-12-29 20:21   ` Pavel Machek
  2025-12-17 10:32 ` [PATCH 6.12.y-cip 4/6] arm64: dts: renesas: r9a08g045: Add OPP table Claudiu
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 14+ messages in thread
From: Claudiu @ 2025-12-17 10:32 UTC (permalink / raw)
  To: pavel, nobuhiro.iwamatsu.x90; +Cc: claudiu.beznea, cip-dev

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

commit dc095b37b09e1abbdb6daf5e69dbd0cd5265087e upstream.

The Renesas RZ/G3S SoC features a Thermal Sensor Unit (TSU) that reports
the junction temperature. The temperature is reported through a dedicated
ADC channel. Add a driver for the Renesas RZ/G3S TSU.

Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Link: https://lore.kernel.org/r/20250810122125.792966-3-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
[claudiu.beznea: added pm_runtime_mark_last_busy() as it is not embedded in
 pm_runtime_put_autosuspend() on v6.12 CIP]
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
 MAINTAINERS                             |   7 +
 drivers/thermal/renesas/Kconfig         |   8 +
 drivers/thermal/renesas/Makefile        |   1 +
 drivers/thermal/renesas/rzg3s_thermal.c | 274 ++++++++++++++++++++++++
 4 files changed, 290 insertions(+)
 create mode 100644 drivers/thermal/renesas/rzg3s_thermal.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 8e5467865d18..0f82f70a78c0 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -19760,6 +19760,13 @@ S:	Maintained
 F:	Documentation/devicetree/bindings/iio/potentiometer/renesas,x9250.yaml
 F:	drivers/iio/potentiometer/x9250.c
 
+RENESAS RZ/G3S THERMAL SENSOR UNIT DRIVER
+M:	Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
+L:	linux-pm@vger.kernel.org
+S:	Maintained
+F:	Documentation/devicetree/bindings/thermal/renesas,r9a08g045-tsu.yaml
+F:	drivers/thermal/renesas/rzg3s_thermal.c
+
 RESET CONTROLLER FRAMEWORK
 M:	Philipp Zabel <p.zabel@pengutronix.de>
 S:	Maintained
diff --git a/drivers/thermal/renesas/Kconfig b/drivers/thermal/renesas/Kconfig
index dcf5fc5ae08e..566478797095 100644
--- a/drivers/thermal/renesas/Kconfig
+++ b/drivers/thermal/renesas/Kconfig
@@ -26,3 +26,11 @@ config RZG2L_THERMAL
 	help
 	  Enable this to plug the RZ/G2L thermal sensor driver into the Linux
 	  thermal framework.
+
+config RZG3S_THERMAL
+	tristate "Renesas RZ/G3S thermal driver"
+	depends on ARCH_R9A08G045 || COMPILE_TEST
+	depends on OF && IIO && RZG2L_ADC
+	help
+	  Enable this to plug the RZ/G3S thermal sensor driver into the Linux
+	  thermal framework.
diff --git a/drivers/thermal/renesas/Makefile b/drivers/thermal/renesas/Makefile
index bf9cb3cb94d6..1feb5ab78827 100644
--- a/drivers/thermal/renesas/Makefile
+++ b/drivers/thermal/renesas/Makefile
@@ -3,3 +3,4 @@
 obj-$(CONFIG_RCAR_GEN3_THERMAL)	+= rcar_gen3_thermal.o
 obj-$(CONFIG_RCAR_THERMAL)	+= rcar_thermal.o
 obj-$(CONFIG_RZG2L_THERMAL)	+= rzg2l_thermal.o
+obj-$(CONFIG_RZG3S_THERMAL)	+= rzg3s_thermal.o
diff --git a/drivers/thermal/renesas/rzg3s_thermal.c b/drivers/thermal/renesas/rzg3s_thermal.c
new file mode 100644
index 000000000000..d184dccc882f
--- /dev/null
+++ b/drivers/thermal/renesas/rzg3s_thermal.c
@@ -0,0 +1,274 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Renesas RZ/G3S TSU Thermal Sensor Driver
+ *
+ * Copyright (C) 2024 Renesas Electronics Corporation
+ */
+
+#include <linux/bitfield.h>
+#include <linux/delay.h>
+#include <linux/iio/consumer.h>
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
+#include <linux/reset.h>
+#include <linux/thermal.h>
+#include <linux/units.h>
+
+#include "../thermal_hwmon.h"
+
+#define TSU_SM			0x0
+#define TSU_SM_EN		BIT(0)
+#define TSU_SM_OE		BIT(1)
+#define OTPTSUTRIM_REG(n)	(0x18 + (n) * 0x4)
+#define OTPTSUTRIM_EN_MASK	BIT(31)
+#define OTPTSUTRIM_MASK		GENMASK(11, 0)
+
+#define TSU_READ_STEPS		8
+
+/* Default calibration values, if FUSE values are missing. */
+#define SW_CALIB0_VAL		1297
+#define SW_CALIB1_VAL		751
+
+#define MCELSIUS(temp)		((temp) * MILLIDEGREE_PER_DEGREE)
+
+/**
+ * struct rzg3s_thermal_priv - RZ/G3S thermal private data structure
+ * @base: TSU base address
+ * @dev: device pointer
+ * @tz: thermal zone pointer
+ * @rstc: reset control
+ * @channel: IIO channel to read the TSU
+ * @mode: current device mode
+ * @calib0: calibration value
+ * @calib1: calibration value
+ */
+struct rzg3s_thermal_priv {
+	void __iomem *base;
+	struct device *dev;
+	struct thermal_zone_device *tz;
+	struct reset_control *rstc;
+	struct iio_channel *channel;
+	enum thermal_device_mode mode;
+	u16 calib0;
+	u16 calib1;
+};
+
+static int rzg3s_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
+{
+	struct rzg3s_thermal_priv *priv = thermal_zone_device_priv(tz);
+	int ts_code_ave = 0;
+
+	if (priv->mode != THERMAL_DEVICE_ENABLED)
+		return -EAGAIN;
+
+	for (u8 i = 0; i < TSU_READ_STEPS; i++) {
+		int ret, val;
+
+		ret = iio_read_channel_raw(priv->channel, &val);
+		if (ret < 0)
+			return ret;
+
+		ts_code_ave += val;
+		/*
+		 * According to the HW manual (Rev.1.10, section 40.4.4 Procedure for Measuring
+		 * the Temperature) we need to wait here at leat 3us.
+		 */
+		usleep_range(5, 10);
+	}
+
+	ts_code_ave = DIV_ROUND_CLOSEST(MCELSIUS(ts_code_ave), TSU_READ_STEPS);
+
+	/*
+	 * According to the HW manual (Rev.1.10, section 40.4.4 Procedure for Measuring the
+	 * Temperature) the computation formula is as follows:
+	 *
+	 * Tj = (ts_code_ave - priv->calib1) * 165 / (priv->calib0 - priv->calib1) - 40
+	 *
+	 * Convert everything to milli Celsius before applying the formula to avoid
+	 * losing precision.
+	 */
+
+	*temp = div_s64((s64)(ts_code_ave - MCELSIUS(priv->calib1)) * MCELSIUS(165),
+			MCELSIUS(priv->calib0 - priv->calib1)) - MCELSIUS(40);
+
+	/* Report it in milli degrees Celsius and round it up to 0.5 degrees Celsius. */
+	*temp = roundup(*temp, 500);
+
+	return 0;
+}
+
+static void rzg3s_thermal_set_mode(struct rzg3s_thermal_priv *priv,
+				   enum thermal_device_mode mode)
+{
+	struct device *dev = priv->dev;
+	int ret;
+
+	ret = pm_runtime_resume_and_get(dev);
+	if (ret)
+		return;
+
+	if (mode == THERMAL_DEVICE_DISABLED) {
+		writel(0, priv->base + TSU_SM);
+	} else {
+		writel(TSU_SM_EN, priv->base + TSU_SM);
+		/*
+		 * According to the HW manual (Rev.1.10, section 40.4.1 Procedure for
+		 * Starting the TSU) we need to wait here 30us or more.
+		 */
+		usleep_range(30, 40);
+
+		writel(TSU_SM_OE | TSU_SM_EN, priv->base + TSU_SM);
+		/*
+		 * According to the HW manual (Rev.1.10, section 40.4.1 Procedure for
+		 * Starting the TSU) we need to wait here 50us or more.
+		 */
+		usleep_range(50, 60);
+	}
+
+	pm_runtime_mark_last_busy(dev);
+	pm_runtime_put_autosuspend(dev);
+}
+
+static int rzg3s_thermal_change_mode(struct thermal_zone_device *tz,
+				     enum thermal_device_mode mode)
+{
+	struct rzg3s_thermal_priv *priv = thermal_zone_device_priv(tz);
+
+	if (priv->mode == mode)
+		return 0;
+
+	rzg3s_thermal_set_mode(priv, mode);
+	priv->mode = mode;
+
+	return 0;
+}
+
+static const struct thermal_zone_device_ops rzg3s_tz_of_ops = {
+	.get_temp = rzg3s_thermal_get_temp,
+	.change_mode = rzg3s_thermal_change_mode,
+};
+
+static int rzg3s_thermal_read_calib(struct rzg3s_thermal_priv *priv)
+{
+	struct device *dev = priv->dev;
+	u32 val;
+	int ret;
+
+	ret = pm_runtime_resume_and_get(dev);
+	if (ret)
+		return ret;
+
+	val = readl(priv->base + OTPTSUTRIM_REG(0));
+	if (val & OTPTSUTRIM_EN_MASK)
+		priv->calib0 = FIELD_GET(OTPTSUTRIM_MASK, val);
+	else
+		priv->calib0 = SW_CALIB0_VAL;
+
+	val = readl(priv->base + OTPTSUTRIM_REG(1));
+	if (val & OTPTSUTRIM_EN_MASK)
+		priv->calib1 = FIELD_GET(OTPTSUTRIM_MASK, val);
+	else
+		priv->calib1 = SW_CALIB1_VAL;
+
+	pm_runtime_mark_last_busy(dev);
+	pm_runtime_put_autosuspend(dev);
+
+	return 0;
+}
+
+static int rzg3s_thermal_probe(struct platform_device *pdev)
+{
+	struct rzg3s_thermal_priv *priv;
+	struct device *dev = &pdev->dev;
+	int ret;
+
+	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+
+	priv->base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(priv->base))
+		return PTR_ERR(priv->base);
+
+	priv->channel = devm_iio_channel_get(dev, "tsu");
+	if (IS_ERR(priv->channel))
+		return dev_err_probe(dev, PTR_ERR(priv->channel), "Failed to get IIO channel!\n");
+
+	priv->rstc = devm_reset_control_get_exclusive_deasserted(dev, NULL);
+	if (IS_ERR(priv->rstc))
+		return dev_err_probe(dev, PTR_ERR(priv->rstc), "Failed to get reset!\n");
+
+	priv->dev = dev;
+	priv->mode = THERMAL_DEVICE_DISABLED;
+	platform_set_drvdata(pdev, priv);
+
+	pm_runtime_set_autosuspend_delay(dev, 300);
+	pm_runtime_use_autosuspend(dev);
+	ret = devm_pm_runtime_enable(dev);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to enable runtime PM!\n");
+
+	ret = rzg3s_thermal_read_calib(priv);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to read calibration data!\n");
+
+	priv->tz = devm_thermal_of_zone_register(dev, 0, priv, &rzg3s_tz_of_ops);
+	if (IS_ERR(priv->tz))
+		return dev_err_probe(dev, PTR_ERR(priv->tz), "Failed to register thermal zone!\n");
+
+	ret = devm_thermal_add_hwmon_sysfs(dev, priv->tz);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to add hwmon sysfs!\n");
+
+	return 0;
+}
+
+static int rzg3s_thermal_suspend(struct device *dev)
+{
+	struct rzg3s_thermal_priv *priv = dev_get_drvdata(dev);
+
+	rzg3s_thermal_set_mode(priv, THERMAL_DEVICE_DISABLED);
+
+	return reset_control_assert(priv->rstc);
+}
+
+static int rzg3s_thermal_resume(struct device *dev)
+{
+	struct rzg3s_thermal_priv *priv = dev_get_drvdata(dev);
+	int ret;
+
+	ret = reset_control_deassert(priv->rstc);
+	if (ret)
+		return ret;
+
+	if (priv->mode != THERMAL_DEVICE_DISABLED)
+		rzg3s_thermal_set_mode(priv, priv->mode);
+
+	return 0;
+}
+
+static const struct dev_pm_ops rzg3s_thermal_pm_ops = {
+	SYSTEM_SLEEP_PM_OPS(rzg3s_thermal_suspend, rzg3s_thermal_resume)
+};
+
+static const struct of_device_id rzg3s_thermal_dt_ids[] = {
+	{ .compatible = "renesas,r9a08g045-tsu" },
+	{ /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, rzg3s_thermal_dt_ids);
+
+static struct platform_driver rzg3s_thermal_driver = {
+	.driver = {
+		.name = "rzg3s-thermal",
+		.of_match_table = rzg3s_thermal_dt_ids,
+		.pm = pm_ptr(&rzg3s_thermal_pm_ops),
+	},
+	.probe = rzg3s_thermal_probe,
+};
+module_platform_driver(rzg3s_thermal_driver);
+
+MODULE_DESCRIPTION("Renesas RZ/G3S Thermal Sensor Unit Driver");
+MODULE_AUTHOR("Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>");
+MODULE_LICENSE("GPL");
-- 
2.43.0



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

* [PATCH 6.12.y-cip 4/6] arm64: dts: renesas: r9a08g045: Add OPP table
  2025-12-17 10:32 [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support Claudiu
                   ` (2 preceding siblings ...)
  2025-12-17 10:32 ` [PATCH 6.12.y-cip 3/6] thermal/drivers/renesas/rzg3s: Add thermal driver for the Renesas RZ/G3S SoC Claudiu
@ 2025-12-17 10:32 ` Claudiu
  2025-12-17 10:32 ` [PATCH 6.12.y-cip 5/6] arm64: dts: renesas: r9a08g045: Add TSU node Claudiu
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Claudiu @ 2025-12-17 10:32 UTC (permalink / raw)
  To: pavel, nobuhiro.iwamatsu.x90; +Cc: claudiu.beznea, cip-dev

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

commit b6f4b126b2471211f35720d8e976b65044e13020 upstream.

Add OPP table for the Renesas RZ/G3S SoC.

Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250128145616.2691841-1-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
 arch/arm64/boot/dts/renesas/r9a08g045.dtsi | 28 ++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/r9a08g045.dtsi b/arch/arm64/boot/dts/renesas/r9a08g045.dtsi
index d1e228b439df..0364f89776e6 100644
--- a/arch/arm64/boot/dts/renesas/r9a08g045.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a08g045.dtsi
@@ -28,6 +28,33 @@ audio_clk2: audio2-clk {
 		clock-frequency = <0>;
 	};
 
+	cluster0_opp: opp-table-0 {
+		compatible = "operating-points-v2";
+		opp-shared;
+
+		opp-137500000 {
+			opp-hz = /bits/ 64 <137500000>;
+			opp-microvolt = <940000>;
+			clock-latency-ns = <300000>;
+		};
+		opp-275000000 {
+			opp-hz = /bits/ 64 <275000000>;
+			opp-microvolt = <940000>;
+			clock-latency-ns = <300000>;
+		};
+		opp-550000000 {
+			opp-hz = /bits/ 64 <550000000>;
+			opp-microvolt = <940000>;
+			clock-latency-ns = <300000>;
+		};
+		opp-1100000000 {
+			opp-hz = /bits/ 64 <1100000000>;
+			opp-microvolt = <940000>;
+			clock-latency-ns = <300000>;
+			opp-suspend;
+		};
+	};
+
 	cpus {
 		#address-cells = <1>;
 		#size-cells = <0>;
@@ -40,6 +67,7 @@ cpu0: cpu@0 {
 			next-level-cache = <&L3_CA55>;
 			enable-method = "psci";
 			clocks = <&cpg CPG_CORE R9A08G045_CLK_I>;
+			operating-points-v2 = <&cluster0_opp>;
 		};
 
 		L3_CA55: cache-controller-0 {
-- 
2.43.0



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

* [PATCH 6.12.y-cip 5/6] arm64: dts: renesas: r9a08g045: Add TSU node
  2025-12-17 10:32 [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support Claudiu
                   ` (3 preceding siblings ...)
  2025-12-17 10:32 ` [PATCH 6.12.y-cip 4/6] arm64: dts: renesas: r9a08g045: Add OPP table Claudiu
@ 2025-12-17 10:32 ` Claudiu
  2025-12-17 10:32 ` [PATCH 6.12.y-cip 6/6] arm64: defconfig: Enable Renesas RZ/G3S thermal driver Claudiu
  2025-12-25  2:13 ` [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support nobuhiro.iwamatsu.x90
  6 siblings, 0 replies; 14+ messages in thread
From: Claudiu @ 2025-12-17 10:32 UTC (permalink / raw)
  To: pavel, nobuhiro.iwamatsu.x90; +Cc: claudiu.beznea, cip-dev

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

commit ee9bfab464247edd9a3f0f65e7ed96053e4b1095 upstream.

Add TSU node along with thermal zones and keep it enabled in the SoC DTSI.
The temperature reported by the TSU can only be read through channel 8 of
the ADC. Therefore, enable the ADC by default.

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Link: https://patch.msgid.link/20250810122125.792966-4-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
[claudiu.beznea: fixed conflict around the i3c node as this is not yet in
 v6.12 CIP]
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
 arch/arm64/boot/dts/renesas/r9a08g045.dtsi    | 49 ++++++++++++++++++-
 .../boot/dts/renesas/rzg3s-smarc-som.dtsi     |  4 --
 2 files changed, 48 insertions(+), 5 deletions(-)

diff --git a/arch/arm64/boot/dts/renesas/r9a08g045.dtsi b/arch/arm64/boot/dts/renesas/r9a08g045.dtsi
index 0364f89776e6..3f56fff7d9b0 100644
--- a/arch/arm64/boot/dts/renesas/r9a08g045.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a08g045.dtsi
@@ -233,7 +233,6 @@ adc: adc@10058000 {
 			#address-cells = <1>;
 			#size-cells = <0>;
 			#io-channel-cells = <1>;
-			status = "disabled";
 
 			channel@0 {
 				reg = <0>;
@@ -272,6 +271,17 @@ channel@8 {
 			};
 		};
 
+		tsu: thermal@10059000 {
+			compatible = "renesas,r9a08g045-tsu";
+			reg = <0 0x10059000 0 0x1000>;
+			clocks = <&cpg CPG_MOD R9A08G045_TSU_PCLK>;
+			resets = <&cpg R9A08G045_TSU_PRESETN>;
+			power-domains = <&cpg>;
+			#thermal-sensor-cells = <0>;
+			io-channels = <&adc 8>;
+			io-channel-names = "tsu";
+		};
+
 		vbattb: clock-controller@1005c000 {
 			compatible = "renesas,r9a08g045-vbattb";
 			reg = <0 0x1005c000 0 0x1000>;
@@ -717,6 +727,43 @@ timer {
 				  "hyp-virt";
 	};
 
+	thermal-zones {
+		cpu_thermal: cpu-thermal {
+			polling-delay-passive = <250>;
+			polling-delay = <1000>;
+			thermal-sensors = <&tsu>;
+			sustainable-power = <423>;
+
+			cooling-maps {
+				map0 {
+					trip = <&cpu_alert0>;
+					cooling-device = <&cpu0 0 2>;
+					contribution = <1024>;
+				};
+			};
+
+			trips {
+				cpu_crit: cpu-critical {
+					temperature = <110000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+
+				cpu_alert1: trip-point1 {
+					temperature = <90000>;
+					hysteresis = <1000>;
+					type = "passive";
+				};
+
+				cpu_alert0: trip-point0 {
+					temperature = <85000>;
+					hysteresis = <1000>;
+					type = "passive";
+				};
+			};
+		};
+	};
+
 	vbattb_xtal: vbattb-xtal {
 		compatible = "fixed-clock";
 		#clock-cells = <0>;
diff --git a/arch/arm64/boot/dts/renesas/rzg3s-smarc-som.dtsi b/arch/arm64/boot/dts/renesas/rzg3s-smarc-som.dtsi
index 39845faec894..6f25ab617982 100644
--- a/arch/arm64/boot/dts/renesas/rzg3s-smarc-som.dtsi
+++ b/arch/arm64/boot/dts/renesas/rzg3s-smarc-som.dtsi
@@ -84,10 +84,6 @@ x3_clk: x3-clock {
 	};
 };
 
-&adc {
-	status = "okay";
-};
-
 #if SW_CONFIG3 == SW_ON
 &eth0 {
 	pinctrl-0 = <&eth0_pins>;
-- 
2.43.0



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

* [PATCH 6.12.y-cip 6/6] arm64: defconfig: Enable Renesas RZ/G3S thermal driver
  2025-12-17 10:32 [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support Claudiu
                   ` (4 preceding siblings ...)
  2025-12-17 10:32 ` [PATCH 6.12.y-cip 5/6] arm64: dts: renesas: r9a08g045: Add TSU node Claudiu
@ 2025-12-17 10:32 ` Claudiu
  2025-12-25  2:13 ` [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support nobuhiro.iwamatsu.x90
  6 siblings, 0 replies; 14+ messages in thread
From: Claudiu @ 2025-12-17 10:32 UTC (permalink / raw)
  To: pavel, nobuhiro.iwamatsu.x90; +Cc: claudiu.beznea, cip-dev

From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

commit 823062d153851a944e61768014d7458d609fa4ca upstream.

Enable the CONFIG_RZG3S_THERMAL flag for the RZ/G3S SoC.

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Link: https://patch.msgid.link/20250810122125.792966-5-claudiu.beznea.uj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
 arch/arm64/configs/defconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index affd0e1f107a..789830ba9870 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -703,6 +703,7 @@ CONFIG_ROCKCHIP_THERMAL=m
 CONFIG_RCAR_THERMAL=y
 CONFIG_RCAR_GEN3_THERMAL=y
 CONFIG_RZG2L_THERMAL=y
+CONFIG_RZG3S_THERMAL=m
 CONFIG_ARMADA_THERMAL=y
 CONFIG_MTK_THERMAL=m
 CONFIG_MTK_LVTS_THERMAL=m
-- 
2.43.0



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

* RE: [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support
  2025-12-17 10:32 [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support Claudiu
                   ` (5 preceding siblings ...)
  2025-12-17 10:32 ` [PATCH 6.12.y-cip 6/6] arm64: defconfig: Enable Renesas RZ/G3S thermal driver Claudiu
@ 2025-12-25  2:13 ` nobuhiro.iwamatsu.x90
  2025-12-29 13:20   ` [cip-dev] " Claudiu Beznea
                     ` (2 more replies)
  6 siblings, 3 replies; 14+ messages in thread
From: nobuhiro.iwamatsu.x90 @ 2025-12-25  2:13 UTC (permalink / raw)
  To: claudiu.beznea, pavel; +Cc: cip-dev

Hi all,

> -----Original Message-----
> From: Claudiu <claudiu.beznea@tuxon.dev>
> Sent: Wednesday, December 17, 2025 7:32 PM
> To: pavel@denx.de; iwamatsu nobuhiro(岩松 信洋 □DITC○CPT)
> <nobuhiro.iwamatsu.x90@mail.toshiba>
> Cc: claudiu.beznea@tuxon.dev; cip-dev@lists.cip-project.org
> Subject: [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support
> 
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> 
> Hi,
> 
> Series backports the TSU (Thermal Sensor Unit) support for RZ/G3S.
> 
> Thank you,
> Claudiu
> 
> Claudiu Beznea (6):
>   clk: renesas: r9a08g045: Add clocks, resets and power domain support
>     for the TSU IP
>   dt-bindings: thermal: r9a08g045-tsu: Document the TSU unit
>   thermal/drivers/renesas/rzg3s: Add thermal driver for the Renesas
>     RZ/G3S SoC
>   arm64: dts: renesas: r9a08g045: Add OPP table
>   arm64: dts: renesas: r9a08g045: Add TSU node
>   arm64: defconfig: Enable Renesas RZ/G3S thermal driver
> 
>  .../thermal/renesas,r9a08g045-tsu.yaml        |  93 ++++++
>  MAINTAINERS                                   |   7 +
>  arch/arm64/boot/dts/renesas/r9a08g045.dtsi    |  77 ++++-
>  .../boot/dts/renesas/rzg3s-smarc-som.dtsi     |   4 -
>  arch/arm64/configs/defconfig                  |   1 +
>  drivers/clk/renesas/r9a08g045-cpg.c           |   5 +
>  drivers/thermal/renesas/Kconfig               |   8 +
>  drivers/thermal/renesas/Makefile              |   1 +
>  drivers/thermal/renesas/rzg3s_thermal.c       | 274
> ++++++++++++++++++
>  9 files changed, 465 insertions(+), 5 deletions(-)  create mode 100644
> Documentation/devicetree/bindings/thermal/renesas,r9a08g045-tsu.yaml
>  create mode 100644 drivers/thermal/renesas/rzg3s_thermal.c
> 

I reviewed this series for each branches, looks good to me.
I can apply this if testing is no issue and there are no other comments.
  https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232119913
  https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232120629
  https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232120713

Reviewed-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.x90@mail.toshiba>



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

* Re: [cip-dev] [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support
  2025-12-25  2:13 ` [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support nobuhiro.iwamatsu.x90
@ 2025-12-29 13:20   ` Claudiu Beznea
  2025-12-29 20:12     ` Pavel Machek
  2025-12-29 20:26   ` Pavel Machek
  2026-01-05 21:57   ` Pavel Machek
  2 siblings, 1 reply; 14+ messages in thread
From: Claudiu Beznea @ 2025-12-29 13:20 UTC (permalink / raw)
  To: nobuhiro.iwamatsu.x90, pavel; +Cc: cip-dev

Hi, Nobuhiro,

On 12/25/25 04:13, Nobuhiro Iwamatsu via lists.cip-project.org wrote:
> Hi all,
> 
>> -----Original Message-----
>> From: Claudiu <claudiu.beznea@tuxon.dev>
>> Sent: Wednesday, December 17, 2025 7:32 PM
>> To: pavel@denx.de; iwamatsu nobuhiro(岩松 信洋 □DITC○CPT)
>> <nobuhiro.iwamatsu.x90@mail.toshiba>
>> Cc: claudiu.beznea@tuxon.dev; cip-dev@lists.cip-project.org
>> Subject: [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support
>>
>> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>>
>> Hi,
>>
>> Series backports the TSU (Thermal Sensor Unit) support for RZ/G3S.
>>
>> Thank you,
>> Claudiu
>>
>> Claudiu Beznea (6):
>>    clk: renesas: r9a08g045: Add clocks, resets and power domain support
>>      for the TSU IP
>>    dt-bindings: thermal: r9a08g045-tsu: Document the TSU unit
>>    thermal/drivers/renesas/rzg3s: Add thermal driver for the Renesas
>>      RZ/G3S SoC
>>    arm64: dts: renesas: r9a08g045: Add OPP table
>>    arm64: dts: renesas: r9a08g045: Add TSU node
>>    arm64: defconfig: Enable Renesas RZ/G3S thermal driver
>>
>>   .../thermal/renesas,r9a08g045-tsu.yaml        |  93 ++++++
>>   MAINTAINERS                                   |   7 +
>>   arch/arm64/boot/dts/renesas/r9a08g045.dtsi    |  77 ++++-
>>   .../boot/dts/renesas/rzg3s-smarc-som.dtsi     |   4 -
>>   arch/arm64/configs/defconfig                  |   1 +
>>   drivers/clk/renesas/r9a08g045-cpg.c           |   5 +
>>   drivers/thermal/renesas/Kconfig               |   8 +
>>   drivers/thermal/renesas/Makefile              |   1 +
>>   drivers/thermal/renesas/rzg3s_thermal.c       | 274
>> ++++++++++++++++++
>>   9 files changed, 465 insertions(+), 5 deletions(-)  create mode 100644
>> Documentation/devicetree/bindings/thermal/renesas,r9a08g045-tsu.yaml
>>   create mode 100644 drivers/thermal/renesas/rzg3s_thermal.c
>>
> 
> I reviewed this series for each branches, looks good to me.
> I can apply this if testing is no issue and there are no other comments.
>    https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232119913
>    https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232120629
>    https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232120713

I see there are some failures among these pipelines. I see bootloader 
issues and console logging kind of failures. Are these related to this 
series and v5.10, v6.1 ones?

Thank you,
Claudiu


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

* Re: [cip-dev] [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support
  2025-12-29 13:20   ` [cip-dev] " Claudiu Beznea
@ 2025-12-29 20:12     ` Pavel Machek
  0 siblings, 0 replies; 14+ messages in thread
From: Pavel Machek @ 2025-12-29 20:12 UTC (permalink / raw)
  To: Claudiu Beznea; +Cc: nobuhiro.iwamatsu.x90, cip-dev

[-- Attachment #1: Type: text/plain, Size: 869 bytes --]

Hi!

> > I reviewed this series for each branches, looks good to me.
> > I can apply this if testing is no issue and there are no other comments.
> >    https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232119913
> >    https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232120629
> >    https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232120713
> 
> I see there are some failures among these pipelines. I see bootloader issues
> and console logging kind of failures. Are these related to this series and
> v5.10, v6.1 ones?

The "*629" pipeline... mcom does not have available targets, so that's
not your fault. I hit retry on the renesas target.

Best regards,
								Pavel
-- 
In cooperation with DENX Software Engineering GmbH, HRB 165235 Munich,
Office: Kirchenstr.5, D-82194 Groebenzell, Germany

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

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

* Re: [PATCH 6.12.y-cip 3/6] thermal/drivers/renesas/rzg3s: Add thermal driver for the Renesas RZ/G3S SoC
  2025-12-17 10:32 ` [PATCH 6.12.y-cip 3/6] thermal/drivers/renesas/rzg3s: Add thermal driver for the Renesas RZ/G3S SoC Claudiu
@ 2025-12-29 20:21   ` Pavel Machek
  2026-01-07 12:21     ` Claudiu Beznea
  0 siblings, 1 reply; 14+ messages in thread
From: Pavel Machek @ 2025-12-29 20:21 UTC (permalink / raw)
  To: Claudiu; +Cc: nobuhiro.iwamatsu.x90, cip-dev

[-- Attachment #1: Type: text/plain, Size: 1711 bytes --]

Hi!

I have some comments below.

> index 000000000000..d184dccc882f
> --- /dev/null
> +++ b/drivers/thermal/renesas/rzg3s_thermal.c
> +static int rzg3s_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
> +{
> +	struct rzg3s_thermal_priv *priv = thermal_zone_device_priv(tz);
> +	int ts_code_ave = 0;
> +
> +	if (priv->mode != THERMAL_DEVICE_ENABLED)
> +		return -EAGAIN;

I'm pretty sure -EAGAIN is wrong error code here. -EBUSY or something?

> +	/*
> +	 * According to the HW manual (Rev.1.10, section 40.4.4 Procedure for Measuring the
> +	 * Temperature) the computation formula is as follows:
> +	 *
> +	 * Tj = (ts_code_ave - priv->calib1) * 165 / (priv->calib0 - priv->calib1) - 40
> +	 *
> +	 * Convert everything to milli Celsius before applying the formula to avoid
> +	 * losing precision.
> +	 */
> +
> +	*temp = div_s64((s64)(ts_code_ave - MCELSIUS(priv->calib1)) * MCELSIUS(165),
> +			MCELSIUS(priv->calib0 - priv->calib1)) - MCELSIUS(40);
> +
> +	/* Report it in milli degrees Celsius and round it up to 0.5 degrees Celsius. */
> +	*temp = roundup(*temp, 500);

If we did the computation in high precision, and interface wants
millicelsius, is rounding good idea?

> +static void rzg3s_thermal_set_mode(struct rzg3s_thermal_priv *priv,
> +				   enum thermal_device_mode mode)
> +{
> +	struct device *dev = priv->dev;
> +	int ret;
> +
> +	ret = pm_runtime_resume_and_get(dev);
> +	if (ret)
> +		return;

Now caller does not know if we failed or not. Should this return errno?

Best regards,
								Pavel
-- 
In cooperation with DENX Software Engineering GmbH, HRB 165235 Munich,
Office: Kirchenstr.5, D-82194 Groebenzell, Germany

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

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

* Re: [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support
  2025-12-25  2:13 ` [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support nobuhiro.iwamatsu.x90
  2025-12-29 13:20   ` [cip-dev] " Claudiu Beznea
@ 2025-12-29 20:26   ` Pavel Machek
  2026-01-05 21:57   ` Pavel Machek
  2 siblings, 0 replies; 14+ messages in thread
From: Pavel Machek @ 2025-12-29 20:26 UTC (permalink / raw)
  To: nobuhiro.iwamatsu.x90; +Cc: claudiu.beznea, cip-dev

[-- Attachment #1: Type: text/plain, Size: 838 bytes --]

Hi!

> I reviewed this series for each branches, looks good to me.
> I can apply this if testing is no issue and there are no other comments.
>   https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232119913
>   https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232120629
>   https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232120713
> 
> Reviewed-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.x90@mail.toshiba>

I had some minor comments here,	but those should be fixed in mainline,
first, so they should not block the merge.

5.10 and 6.1 versions look good to me, too.

Reviewed-by: Pavel Machek <pavel@denx.de>
                          					Pavel
-- 
In cooperation with DENX Software Engineering GmbH, HRB 165235 Munich,
Office: Kirchenstr.5, D-82194 Groebenzell, Germany

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

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

* Re: [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support
  2025-12-25  2:13 ` [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support nobuhiro.iwamatsu.x90
  2025-12-29 13:20   ` [cip-dev] " Claudiu Beznea
  2025-12-29 20:26   ` Pavel Machek
@ 2026-01-05 21:57   ` Pavel Machek
  2 siblings, 0 replies; 14+ messages in thread
From: Pavel Machek @ 2026-01-05 21:57 UTC (permalink / raw)
  To: nobuhiro.iwamatsu.x90; +Cc: claudiu.beznea, cip-dev

[-- Attachment #1: Type: text/plain, Size: 683 bytes --]

Hi!

> > Hi,
> > 
> > Series backports the TSU (Thermal Sensor Unit) support for RZ/G3S.
> 
> I reviewed this series for each branches, looks good to me.
> I can apply this if testing is no issue and there are no other comments.
>   https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232119913
>   https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232120629
>   https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/2232120713
> 
> Reviewed-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.x90@mail.toshiba>

Thanks for review, I applied the series and pushed the result.

Best regards,
								Pavel
-- 
In cooperation with Nabla.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

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

* Re: [PATCH 6.12.y-cip 3/6] thermal/drivers/renesas/rzg3s: Add thermal driver for the Renesas RZ/G3S SoC
  2025-12-29 20:21   ` Pavel Machek
@ 2026-01-07 12:21     ` Claudiu Beznea
  0 siblings, 0 replies; 14+ messages in thread
From: Claudiu Beznea @ 2026-01-07 12:21 UTC (permalink / raw)
  To: Pavel Machek; +Cc: nobuhiro.iwamatsu.x90, cip-dev

Hi, Pavel,

Sorry for the late reply, I was off for a while.

On 12/29/25 22:21, Pavel Machek wrote:
> Hi!
> 
> I have some comments below.
> 
>> index 000000000000..d184dccc882f
>> --- /dev/null
>> +++ b/drivers/thermal/renesas/rzg3s_thermal.c
>> +static int rzg3s_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
>> +{
>> +	struct rzg3s_thermal_priv *priv = thermal_zone_device_priv(tz);
>> +	int ts_code_ave = 0;
>> +
>> +	if (priv->mode != THERMAL_DEVICE_ENABLED)
>> +		return -EAGAIN;
> 
> I'm pretty sure -EAGAIN is wrong error code here. -EBUSY or something?

-EAGAIN is something that the thermal core expects here in case the 
temperature reading is failing:

https://elixir.bootlin.com/linux/v6.18.3/source/drivers/thermal/thermal_core.c#L319

https://elixir.bootlin.com/linux/v6.18.3/source/drivers/thermal/thermal_sysfs.c#L46


> 
>> +	/*
>> +	 * According to the HW manual (Rev.1.10, section 40.4.4 Procedure for Measuring the
>> +	 * Temperature) the computation formula is as follows:
>> +	 *
>> +	 * Tj = (ts_code_ave - priv->calib1) * 165 / (priv->calib0 - priv->calib1) - 40
>> +	 *
>> +	 * Convert everything to milli Celsius before applying the formula to avoid
>> +	 * losing precision.
>> +	 */
>> +
>> +	*temp = div_s64((s64)(ts_code_ave - MCELSIUS(priv->calib1)) * MCELSIUS(165),
>> +			MCELSIUS(priv->calib0 - priv->calib1)) - MCELSIUS(40);
>> +
>> +	/* Report it in milli degrees Celsius and round it up to 0.5 degrees Celsius. */
>> +	*temp = roundup(*temp, 500);
> 
> If we did the computation in high precision, and interface wants
> millicelsius, is rounding good idea?

If I remember correctly, not adjusting the above code for precision lead 
to temperature variation at degree level not be detected. I chose to 
round it to 0.5 milli degrees to follow similar Renesas thermal drivers.

> 
>> +static void rzg3s_thermal_set_mode(struct rzg3s_thermal_priv *priv,
>> +				   enum thermal_device_mode mode)
>> +{
>> +	struct device *dev = priv->dev;
>> +	int ret;
>> +
>> +	ret = pm_runtime_resume_and_get(dev);
>> +	if (ret)
>> +		return;
> 
> Now caller does not know if we failed or not. Should this return errno?

Yes, this one could be improved to return the error code.

Thank you,
Claudiu


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

end of thread, other threads:[~2026-01-07 12:22 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-17 10:32 [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support Claudiu
2025-12-17 10:32 ` [PATCH 6.12.y-cip 1/6] clk: renesas: r9a08g045: Add clocks, resets and power domain support for the TSU IP Claudiu
2025-12-17 10:32 ` [PATCH 6.12.y-cip 2/6] dt-bindings: thermal: r9a08g045-tsu: Document the TSU unit Claudiu
2025-12-17 10:32 ` [PATCH 6.12.y-cip 3/6] thermal/drivers/renesas/rzg3s: Add thermal driver for the Renesas RZ/G3S SoC Claudiu
2025-12-29 20:21   ` Pavel Machek
2026-01-07 12:21     ` Claudiu Beznea
2025-12-17 10:32 ` [PATCH 6.12.y-cip 4/6] arm64: dts: renesas: r9a08g045: Add OPP table Claudiu
2025-12-17 10:32 ` [PATCH 6.12.y-cip 5/6] arm64: dts: renesas: r9a08g045: Add TSU node Claudiu
2025-12-17 10:32 ` [PATCH 6.12.y-cip 6/6] arm64: defconfig: Enable Renesas RZ/G3S thermal driver Claudiu
2025-12-25  2:13 ` [PATCH 6.12.y-cip 0/6] RZ/G3S: Backport TSU support nobuhiro.iwamatsu.x90
2025-12-29 13:20   ` [cip-dev] " Claudiu Beznea
2025-12-29 20:12     ` Pavel Machek
2025-12-29 20:26   ` Pavel Machek
2026-01-05 21:57   ` Pavel Machek

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