public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v6 0/7] Add TSENS support for IPQ5332, IPQ5424
@ 2024-11-04 12:44 Manikanta Mylavarapu
  2024-11-04 12:44 ` [PATCH v6 1/7] dt-bindings: thermal: tsens: Add ipq5332, ipq5424 compatible Manikanta Mylavarapu
                   ` (6 more replies)
  0 siblings, 7 replies; 23+ messages in thread
From: Manikanta Mylavarapu @ 2024-11-04 12:44 UTC (permalink / raw)
  To: srinivas.kandagatla, robh, krzk+dt, conor+dt, amitk,
	thara.gopinath, rafael, daniel.lezcano, rui.zhang, lukasz.luba,
	andersson, konradybcio, linux-arm-msm, devicetree, linux-kernel,
	linux-pm
  Cc: quic_srichara, quic_varada

IPQ5332 uses tsens v2.3.3 IP with combined interrupt for
upper/lower and critical. IPQ5332 does not have RPM and
kernel has to take care of TSENS enablement and calibration.

IPQ5424 also uses same tsens v2.3.3 IP and it's similar to IPQ5332
(no RPM) hence add IPQ5424 support in this series itself.

This patch series adds the temperature sensor enablement,
calibration support for IPQ5332 and IPQ5424.

Depends On:
https://lore.kernel.org/linux-arm-msm/20241028060506.246606-1-quic_srichara@quicinc.com/

Changes in V6:
	- Patches are re-ordered as follows
	  1) dt-bindings
	  2) driver
	  3) dts
	- Patch #1 and Patch #5 from V5 have been merged and incorporated into
	  Patch #3 in V6
	- Added TSENS support for IPQ5424
	- Detailed change logs are added to the respective patches

V5 can be found at:
https://lore.kernel.org/linux-arm-msm/20230721054619.2366510-1-quic_ipkumar@quicinc.com/

V4 can be found at:
https://lore.kernel.org/linux-arm-msm/20230719104041.126718-1-quic_ipkumar@quicinc.com/

V3 can be found at:
https://lore.kernel.org/linux-arm-msm/20230713052732.787853-1-quic_ipkumar@quicinc.com/

V2 can be found at:
https://lore.kernel.org/linux-arm-msm/20230712113539.4029941-1-quic_ipkumar@quicinc.com/

Manikanta Mylavarapu (3):
  dt-bindings: nvmem: Add compatible for IPQ5424
  arm64: dts: qcom: ipq5424: Add tsens node
  arm64: dts: qcom: ipq5424: Add thermal zone nodes

Praveenkumar I (4):
  dt-bindings: thermal: tsens: Add ipq5332, ipq5424 compatible
  thermal/drivers/tsens: Add TSENS enable and calibration support for V2
  arm64: dts: qcom: ipq5332: Add tsens node
  arm64: dts: qcom: ipq5332: Add thermal zone nodes

 .../bindings/nvmem/qcom,qfprom.yaml           |   1 +
 .../bindings/thermal/qcom-tsens.yaml          |  18 ++
 arch/arm64/boot/dts/qcom/ipq5332.dtsi         | 144 ++++++++++++
 arch/arm64/boot/dts/qcom/ipq5424.dtsi         | 211 ++++++++++++++++++
 drivers/thermal/qcom/tsens-v2.c               | 182 +++++++++++++++
 drivers/thermal/qcom/tsens.c                  |   8 +-
 drivers/thermal/qcom/tsens.h                  |   4 +-
 7 files changed, 566 insertions(+), 2 deletions(-)


base-commit: 1ffec08567f426a1c593e038cadc61bdc38cb467
prerequisite-patch-id: 1090fe9cee19a52dc8595e2fecef659199828246
prerequisite-patch-id: 491c9f6c32738c4eb4398962c1ae7c625cd43238
prerequisite-patch-id: 1651c75547b539eb46eb4d02630e364f262860bf
prerequisite-patch-id: 7ce54f0af6083e897067a7e5cd9561198f3d4d41
prerequisite-patch-id: 0a04fdee4b5b76cd5b734c666f7c8f5561e3e9d8
prerequisite-patch-id: 084f6dced27c39b600711dde2f797b43393cde73
-- 
2.34.1


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

* [PATCH v6 1/7] dt-bindings: thermal: tsens: Add ipq5332, ipq5424 compatible
  2024-11-04 12:44 [PATCH v6 0/7] Add TSENS support for IPQ5332, IPQ5424 Manikanta Mylavarapu
@ 2024-11-04 12:44 ` Manikanta Mylavarapu
  2024-11-05  8:45   ` Krzysztof Kozlowski
  2024-11-04 12:44 ` [PATCH v6 2/7] dt-bindings: nvmem: Add compatible for IPQ5424 Manikanta Mylavarapu
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 23+ messages in thread
From: Manikanta Mylavarapu @ 2024-11-04 12:44 UTC (permalink / raw)
  To: srinivas.kandagatla, robh, krzk+dt, conor+dt, amitk,
	thara.gopinath, rafael, daniel.lezcano, rui.zhang, lukasz.luba,
	andersson, konradybcio, linux-arm-msm, devicetree, linux-kernel,
	linux-pm
  Cc: quic_srichara, quic_varada

From: Praveenkumar I <quic_ipkumar@quicinc.com>

The IPQ5332 and IPQ5424 use TSENS v2.3.3 IP with combined interrupt.
RPM is not available in these SoCs, hence adding new compatible
to have the sensor enablement and calibration function. Also add
nvmem-cell-names.

Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
---
Changes in V6:
	- Remove the R-b tag because support for IPQ5424 has been added

 .../bindings/thermal/qcom-tsens.yaml           | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/Documentation/devicetree/bindings/thermal/qcom-tsens.yaml b/Documentation/devicetree/bindings/thermal/qcom-tsens.yaml
index a12fddc81955..c9570d647fea 100644
--- a/Documentation/devicetree/bindings/thermal/qcom-tsens.yaml
+++ b/Documentation/devicetree/bindings/thermal/qcom-tsens.yaml
@@ -73,6 +73,8 @@ properties:
 
       - description: v2 of TSENS with combined interrupt
         enum:
+          - qcom,ipq5332-tsens
+          - qcom,ipq5424-tsens
           - qcom,ipq8074-tsens
 
       - description: v2 of TSENS with combined interrupt
@@ -209,6 +211,18 @@ properties:
           - const: s9_p2_backup
           - const: s10_p1_backup
           - const: s10_p2_backup
+      - minItems: 8
+        items:
+          - const: mode
+          - const: base0
+          - const: base1
+          - pattern: '^s[0-9]+$'
+          - pattern: '^s[0-9]+$'
+          - pattern: '^s[0-9]+$'
+          - pattern: '^s[0-9]+$'
+          - pattern: '^s[0-9]+$'
+          - pattern: '^s[0-9]+$'
+          - pattern: '^s[0-9]+$'
 
   "#qcom,sensors":
     description:
@@ -268,6 +282,8 @@ allOf:
         compatible:
           contains:
             enum:
+              - qcom,ipq5332-tsens
+              - qcom,ipq5424-tsens
               - qcom,ipq8074-tsens
     then:
       properties:
@@ -283,6 +299,8 @@ allOf:
         compatible:
           contains:
             enum:
+              - qcom,ipq5332-tsens
+              - qcom,ipq5424-tsens
               - qcom,ipq8074-tsens
               - qcom,tsens-v0_1
               - qcom,tsens-v1
-- 
2.34.1


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

* [PATCH v6 2/7] dt-bindings: nvmem: Add compatible for IPQ5424
  2024-11-04 12:44 [PATCH v6 0/7] Add TSENS support for IPQ5332, IPQ5424 Manikanta Mylavarapu
  2024-11-04 12:44 ` [PATCH v6 1/7] dt-bindings: thermal: tsens: Add ipq5332, ipq5424 compatible Manikanta Mylavarapu
@ 2024-11-04 12:44 ` Manikanta Mylavarapu
  2024-11-05  8:43   ` Krzysztof Kozlowski
  2024-11-04 12:44 ` [PATCH v6 3/7] thermal/drivers/tsens: Add TSENS enable and calibration support for V2 Manikanta Mylavarapu
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 23+ messages in thread
From: Manikanta Mylavarapu @ 2024-11-04 12:44 UTC (permalink / raw)
  To: srinivas.kandagatla, robh, krzk+dt, conor+dt, amitk,
	thara.gopinath, rafael, daniel.lezcano, rui.zhang, lukasz.luba,
	andersson, konradybcio, linux-arm-msm, devicetree, linux-kernel,
	linux-pm
  Cc: quic_srichara, quic_varada

Document the QFPROM block found on IPQ5424

Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
---
 Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml b/Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml
index 80845c722ae4..507671a75cb7 100644
--- a/Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml
+++ b/Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml
@@ -20,6 +20,7 @@ properties:
           - qcom,apq8064-qfprom
           - qcom,apq8084-qfprom
           - qcom,ipq5332-qfprom
+          - qcom,ipq5424-qfprom
           - qcom,ipq6018-qfprom
           - qcom,ipq8064-qfprom
           - qcom,ipq8074-qfprom
-- 
2.34.1


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

* [PATCH v6 3/7] thermal/drivers/tsens: Add TSENS enable and calibration support for V2
  2024-11-04 12:44 [PATCH v6 0/7] Add TSENS support for IPQ5332, IPQ5424 Manikanta Mylavarapu
  2024-11-04 12:44 ` [PATCH v6 1/7] dt-bindings: thermal: tsens: Add ipq5332, ipq5424 compatible Manikanta Mylavarapu
  2024-11-04 12:44 ` [PATCH v6 2/7] dt-bindings: nvmem: Add compatible for IPQ5424 Manikanta Mylavarapu
@ 2024-11-04 12:44 ` Manikanta Mylavarapu
  2024-11-04 19:42   ` Dmitry Baryshkov
  2024-11-04 12:44 ` [PATCH v6 4/7] arm64: dts: qcom: ipq5332: Add tsens node Manikanta Mylavarapu
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 23+ messages in thread
From: Manikanta Mylavarapu @ 2024-11-04 12:44 UTC (permalink / raw)
  To: srinivas.kandagatla, robh, krzk+dt, conor+dt, amitk,
	thara.gopinath, rafael, daniel.lezcano, rui.zhang, lukasz.luba,
	andersson, konradybcio, linux-arm-msm, devicetree, linux-kernel,
	linux-pm
  Cc: quic_srichara, quic_varada

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="y", Size: 9640 bytes --]

From: Praveenkumar I <quic_ipkumar@quicinc.com>

SoCs without RPM need to enable sensors and calibrate them from the kernel.
The IPQ5332 and IPQ5424 use the tsens v2.3.3 IP and do not have RPM.
Therefore, add a new calibration function for V2, as the tsens.c calib
function only supports V1. Also add new feature_config, ops and data for
IPQ5332, IPQ5424.

Although the TSENS IP supports 16 sensors, not all are used. The hw_id
is used to enable the relevant sensors.

Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
---
Changes in V6:
	- Add IPQ5424 support
	- Patch #1 and Patch #5 from V5 have been merged and
	  incorporated into Patch #3 in V6 to resolve below
	  compilation warnings.
drivers/thermal/qcom/tsens-v2.c:216:19: warning: ‘init_tsens_v2_no_rpm’
defined but not used [-Wunused-function]
 static int __init init_tsens_v2_no_rpm(struct tsens_priv *priv)
drivers/thermal/qcom/tsens-v2.c:180:12: warning: ‘tsens_v2_calibration’
defined but not used [-Wunused-function]
 static int tsens_v2_calibration(struct tsens_priv *priv)

 drivers/thermal/qcom/tsens-v2.c | 182 ++++++++++++++++++++++++++++++++
 drivers/thermal/qcom/tsens.c    |   8 +-
 drivers/thermal/qcom/tsens.h    |   4 +-
 3 files changed, 192 insertions(+), 2 deletions(-)

diff --git a/drivers/thermal/qcom/tsens-v2.c b/drivers/thermal/qcom/tsens-v2.c
index 0cb7301eca6e..90b6915607ea 100644
--- a/drivers/thermal/qcom/tsens-v2.c
+++ b/drivers/thermal/qcom/tsens-v2.c
@@ -4,13 +4,32 @@
  * Copyright (c) 2018, Linaro Limited
  */
 
+#include <linux/bitfield.h>
 #include <linux/bitops.h>
 #include <linux/regmap.h>
+#include <linux/nvmem-consumer.h>
 #include "tsens.h"
 
 /* ----- SROT ------ */
 #define SROT_HW_VER_OFF	0x0000
 #define SROT_CTRL_OFF		0x0004
+#define SROT_MEASURE_PERIOD	0x0008
+#define SROT_Sn_CONVERSION	0x0060
+#define V2_SHIFT_DEFAULT	0x0003
+#define V2_SLOPE_DEFAULT	0x0cd0
+#define V2_CZERO_DEFAULT	0x016a
+#define ONE_PT_SLOPE		0x0cd0
+#define TWO_PT_SHIFTED_GAIN	921600
+#define ONE_PT_CZERO_CONST	94
+#define SW_RST_DEASSERT		0x0
+#define SW_RST_ASSERT		0x1
+#define MEASURE_PERIOD_2mSEC	0x1
+#define RSEULT_FORMAT_TEMP	0x1
+#define TSENS_ENABLE		0x1
+#define SENSOR_CONVERSION(n)	(((n) * 4) + SROT_Sn_CONVERSION)
+#define CONVERSION_SHIFT_MASK	GENMASK(24, 23)
+#define CONVERSION_SLOPE_MASK	GENMASK(22, 10)
+#define CONVERSION_CZERO_MASK	GENMASK(9, 0)
 
 /* ----- TM ------ */
 #define TM_INT_EN_OFF			0x0004
@@ -50,6 +69,17 @@ static struct tsens_features ipq8074_feat = {
 	.trip_max_temp	= 204000,
 };
 
+static struct tsens_features ipq5332_feat = {
+	.ver_major	= VER_2_X_NO_RPM,
+	.crit_int	= 1,
+	.combo_int	= 1,
+	.adc		= 0,
+	.srot_split	= 1,
+	.max_sensors	= 16,
+	.trip_min_temp	= 0,
+	.trip_max_temp	= 204000,
+};
+
 static const struct reg_field tsens_v2_regfields[MAX_REGFIELDS] = {
 	/* ----- SROT ------ */
 	/* VERSION */
@@ -59,6 +89,11 @@ static const struct reg_field tsens_v2_regfields[MAX_REGFIELDS] = {
 	/* CTRL_OFF */
 	[TSENS_EN]     = REG_FIELD(SROT_CTRL_OFF,    0,  0),
 	[TSENS_SW_RST] = REG_FIELD(SROT_CTRL_OFF,    1,  1),
+	[SENSOR_EN]    = REG_FIELD(SROT_CTRL_OFF,    3,  18),
+	[CODE_OR_TEMP] = REG_FIELD(SROT_CTRL_OFF,    21, 21),
+
+	/* MAIN_MEASURE_PERIOD */
+	[MAIN_MEASURE_PERIOD] = REG_FIELD(SROT_MEASURE_PERIOD, 0, 7),
 
 	/* ----- TM ------ */
 	/* INTERRUPT ENABLE */
@@ -104,6 +139,131 @@ static const struct reg_field tsens_v2_regfields[MAX_REGFIELDS] = {
 	[TRDY] = REG_FIELD(TM_TRDY_OFF, 0, 0),
 };
 
+static int tsens_v2_calibrate_sensor(struct device *dev, struct tsens_sensor *sensor,
+				     struct regmap *map,  u32 mode, u32 base0, u32 base1)
+{
+	u32 slope, czero, val;
+	char name[8];
+	int ret;
+
+	/* Read offset value */
+	ret = snprintf(name, sizeof(name), "s%d", sensor->hw_id);
+	if (ret < 0)
+		return ret;
+
+	ret = nvmem_cell_read_variable_le_u32(dev, name, &sensor->offset);
+	if (ret)
+		return ret;
+
+	/* Based on calib mode, program SHIFT, SLOPE and CZERO */
+	switch (mode) {
+	case TWO_PT_CALIB:
+		slope = (TWO_PT_SHIFTED_GAIN / (base1 - base0));
+
+		czero = (base0 + sensor->offset - ((base1 - base0) / 3));
+
+		val = FIELD_PREP(CONVERSION_SHIFT_MASK, V2_SHIFT_DEFAULT) |
+		      FIELD_PREP(CONVERSION_SLOPE_MASK, slope) |
+		      FIELD_PREP(CONVERSION_CZERO_MASK, czero);
+
+		fallthrough;
+	case ONE_PT_CALIB2:
+		czero = base0 + sensor->offset - ONE_PT_CZERO_CONST;
+
+		val = FIELD_PREP(CONVERSION_SHIFT_MASK, V2_SHIFT_DEFAULT) |
+		      FIELD_PREP(CONVERSION_SLOPE_MASK, ONE_PT_SLOPE) |
+		      FIELD_PREP(CONVERSION_CZERO_MASK, czero);
+
+		break;
+	default:
+		dev_dbg(dev, "calibrationless mode\n");
+
+		val = FIELD_PREP(CONVERSION_SHIFT_MASK, V2_SHIFT_DEFAULT) |
+		      FIELD_PREP(CONVERSION_SLOPE_MASK, V2_SLOPE_DEFAULT) |
+		      FIELD_PREP(CONVERSION_CZERO_MASK, V2_CZERO_DEFAULT);
+	}
+
+	regmap_write(map, SENSOR_CONVERSION(sensor->hw_id), val);
+
+	return 0;
+}
+
+static int tsens_v2_calibration(struct tsens_priv *priv)
+{
+	struct device *dev = priv->dev;
+	u32 mode, base0, base1;
+	int i, ret;
+
+	if (priv->num_sensors > MAX_SENSORS)
+		return -EINVAL;
+
+	ret = nvmem_cell_read_variable_le_u32(priv->dev, "mode", &mode);
+	if (ret == -ENOENT)
+		dev_warn(priv->dev, "Calibration data not present in DT\n");
+	if (ret < 0)
+		return ret;
+
+	dev_dbg(priv->dev, "calibration mode is %d\n", mode);
+
+	ret = nvmem_cell_read_variable_le_u32(priv->dev, "base0", &base0);
+	if (ret < 0)
+		return ret;
+
+	ret = nvmem_cell_read_variable_le_u32(priv->dev, "base1", &base1);
+	if (ret < 0)
+		return ret;
+
+	/* Calibrate each sensor */
+	for (i = 0; i < priv->num_sensors; i++) {
+		ret = tsens_v2_calibrate_sensor(dev, &priv->sensor[i], priv->srot_map,
+						mode, base0, base1);
+		if (ret < 0)
+			return ret;
+	}
+
+	return 0;
+}
+
+static int __init init_tsens_v2_no_rpm(struct tsens_priv *priv)
+{
+	struct device *dev = priv->dev;
+	int i, ret;
+	u32 val = 0;
+
+	ret = init_common(priv);
+	if (ret < 0)
+		return ret;
+
+	priv->rf[CODE_OR_TEMP] = devm_regmap_field_alloc(dev, priv->srot_map,
+							 priv->fields[CODE_OR_TEMP]);
+	if (IS_ERR(priv->rf[CODE_OR_TEMP]))
+		return PTR_ERR(priv->rf[CODE_OR_TEMP]);
+
+	priv->rf[MAIN_MEASURE_PERIOD] = devm_regmap_field_alloc(dev, priv->srot_map,
+								priv->fields[MAIN_MEASURE_PERIOD]);
+	if (IS_ERR(priv->rf[MAIN_MEASURE_PERIOD]))
+		return PTR_ERR(priv->rf[MAIN_MEASURE_PERIOD]);
+
+	regmap_field_write(priv->rf[TSENS_SW_RST], SW_RST_ASSERT);
+
+	regmap_field_write(priv->rf[MAIN_MEASURE_PERIOD], MEASURE_PERIOD_2mSEC);
+
+	/* Enable available sensors */
+	for (i = 0; i < priv->num_sensors; i++)
+		val |= 1 << priv->sensor[i].hw_id;
+
+	regmap_field_write(priv->rf[SENSOR_EN], val);
+
+	/* Select temperature format, unit is deci-Celsius */
+	regmap_field_write(priv->rf[CODE_OR_TEMP], RSEULT_FORMAT_TEMP);
+
+	regmap_field_write(priv->rf[TSENS_SW_RST], SW_RST_DEASSERT);
+
+	regmap_field_write(priv->rf[TSENS_EN], TSENS_ENABLE);
+
+	return 0;
+}
+
 static const struct tsens_ops ops_generic_v2 = {
 	.init		= init_common,
 	.get_temp	= get_temp_tsens_valid,
@@ -122,6 +282,28 @@ struct tsens_plat_data data_ipq8074 = {
 	.fields	= tsens_v2_regfields,
 };
 
+static const struct tsens_ops ops_ipq5332 = {
+	.init		= init_tsens_v2_no_rpm,
+	.get_temp	= get_temp_tsens_valid,
+	.calibrate	= tsens_v2_calibration,
+};
+
+struct tsens_plat_data data_ipq5332 = {
+	.num_sensors	= 5,
+	.ops		= &ops_ipq5332,
+	.hw_ids		= (unsigned int []){11, 12, 13, 14, 15},
+	.feat		= &ipq5332_feat,
+	.fields		= tsens_v2_regfields,
+};
+
+struct tsens_plat_data data_ipq5424 = {
+	.num_sensors	= 7,
+	.ops		= &ops_ipq5332,
+	.hw_ids		= (unsigned int []){9, 10, 11, 12, 13, 14, 15},
+	.feat		= &ipq5332_feat,
+	.fields		= tsens_v2_regfields,
+};
+
 /* Kept around for backward compatibility with old msm8996.dtsi */
 struct tsens_plat_data data_8996 = {
 	.num_sensors	= 13,
diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
index 0b4421bf4785..c5409225756f 100644
--- a/drivers/thermal/qcom/tsens.c
+++ b/drivers/thermal/qcom/tsens.c
@@ -975,7 +975,7 @@ int __init init_common(struct tsens_priv *priv)
 	ret = regmap_field_read(priv->rf[TSENS_EN], &enabled);
 	if (ret)
 		goto err_put_device;
-	if (!enabled) {
+	if (!enabled && (tsens_version(priv) != VER_2_X_NO_RPM)) {
 		dev_err(dev, "%s: device not enabled\n", __func__);
 		ret = -ENODEV;
 		goto err_put_device;
@@ -1102,6 +1102,12 @@ static SIMPLE_DEV_PM_OPS(tsens_pm_ops, tsens_suspend, tsens_resume);
 
 static const struct of_device_id tsens_table[] = {
 	{
+		.compatible = "qcom,ipq5332-tsens",
+		.data = &data_ipq5332,
+	}, {
+		.compatible = "qcom,ipq5424-tsens",
+		.data = &data_ipq5424,
+	}, {
 		.compatible = "qcom,ipq8064-tsens",
 		.data = &data_8960,
 	}, {
diff --git a/drivers/thermal/qcom/tsens.h b/drivers/thermal/qcom/tsens.h
index cab39de045b1..ac5358e48f74 100644
--- a/drivers/thermal/qcom/tsens.h
+++ b/drivers/thermal/qcom/tsens.h
@@ -35,6 +35,7 @@ enum tsens_ver {
 	VER_0_1,
 	VER_1_X,
 	VER_2_X,
+	VER_2_X_NO_RPM,
 };
 
 enum tsens_irq_type {
@@ -168,6 +169,7 @@ enum regfield_ids {
 	TSENS_SW_RST,
 	SENSOR_EN,
 	CODE_OR_TEMP,
+	MAIN_MEASURE_PERIOD,
 
 	/* ----- TM ------ */
 	/* TRDY */
@@ -650,6 +652,6 @@ extern struct tsens_plat_data data_8226, data_8909, data_8916, data_8939, data_8
 extern struct tsens_plat_data data_tsens_v1, data_8976, data_8956;
 
 /* TSENS v2 targets */
-extern struct tsens_plat_data data_8996, data_ipq8074, data_tsens_v2;
+extern struct tsens_plat_data data_8996, data_ipq8074, data_ipq5332, data_ipq5424, data_tsens_v2;
 
 #endif /* __QCOM_TSENS_H__ */
-- 
2.34.1


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

* [PATCH v6 4/7] arm64: dts: qcom: ipq5332: Add tsens node
  2024-11-04 12:44 [PATCH v6 0/7] Add TSENS support for IPQ5332, IPQ5424 Manikanta Mylavarapu
                   ` (2 preceding siblings ...)
  2024-11-04 12:44 ` [PATCH v6 3/7] thermal/drivers/tsens: Add TSENS enable and calibration support for V2 Manikanta Mylavarapu
@ 2024-11-04 12:44 ` Manikanta Mylavarapu
  2024-11-07 14:50   ` Konrad Dybcio
  2024-11-04 12:44 ` [PATCH v6 5/7] arm64: dts: qcom: ipq5332: Add thermal zone nodes Manikanta Mylavarapu
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 23+ messages in thread
From: Manikanta Mylavarapu @ 2024-11-04 12:44 UTC (permalink / raw)
  To: srinivas.kandagatla, robh, krzk+dt, conor+dt, amitk,
	thara.gopinath, rafael, daniel.lezcano, rui.zhang, lukasz.luba,
	andersson, konradybcio, linux-arm-msm, devicetree, linux-kernel,
	linux-pm
  Cc: quic_srichara, quic_varada

From: Praveenkumar I <quic_ipkumar@quicinc.com>

IPQ5332 has tsens v2.3.3 peripheral. This patch adds the tsense
node with nvmem cells for calibration data.

Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
---
Changes in V6:
	- No change

 arch/arm64/boot/dts/qcom/ipq5332.dtsi | 66 +++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/ipq5332.dtsi b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
index d3c3e215a15c..94dca05fdc2a 100644
--- a/arch/arm64/boot/dts/qcom/ipq5332.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
@@ -177,6 +177,46 @@ cpu_speed_bin: cpu-speed-bin@1d {
 				reg = <0x1d 0x2>;
 				bits = <7 2>;
 			};
+
+			s11: s11@3a5 {
+				reg = <0x3a5 0x1>;
+				bits = <4 4>;
+			};
+
+			s12: s12@3a6 {
+				reg = <0x3a6 0x1>;
+				bits = <0 4>;
+			};
+
+			s13: s13@3a6 {
+				reg = <0x3a6 0x1>;
+				bits = <4 4>;
+			};
+
+			s14: s14@3ad {
+				reg = <0x3ad 0x2>;
+				bits = <7 4>;
+			};
+
+			s15: s15@3ae {
+				reg = <0x3ae 0x1>;
+				bits = <3 4>;
+			};
+
+			tsens_mode: mode@3e1 {
+				reg = <0x3e1 0x1>;
+				bits = <0 3>;
+			};
+
+			tsens_base0: base0@3e1 {
+				reg = <0x3e1 0x2>;
+				bits = <3 10>;
+			};
+
+			tsens_base1: base1@3e2 {
+				reg = <0x3e2 0x2>;
+				bits = <5 10>;
+			};
 		};
 
 		rng: rng@e3000 {
@@ -186,6 +226,32 @@ rng: rng@e3000 {
 			clock-names = "core";
 		};
 
+		tsens: thermal-sensor@4a9000 {
+			compatible = "qcom,ipq5332-tsens";
+			reg = <0x4a9000 0x1000>,
+			      <0x4a8000 0x1000>;
+			nvmem-cells = <&tsens_mode>,
+				      <&tsens_base0>,
+				      <&tsens_base1>,
+				      <&s11>,
+				      <&s12>,
+				      <&s13>,
+				      <&s14>,
+				      <&s15>;
+			nvmem-cell-names = "mode",
+					   "base0",
+					   "base1",
+					   "s11",
+					   "s12",
+					   "s13",
+					   "s14",
+					   "s15";
+			interrupts = <GIC_SPI 320 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-names = "combined";
+			#qcom,sensors = <5>;
+			#thermal-sensor-cells = <1>;
+		};
+
 		tlmm: pinctrl@1000000 {
 			compatible = "qcom,ipq5332-tlmm";
 			reg = <0x01000000 0x300000>;
-- 
2.34.1


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

* [PATCH v6 5/7] arm64: dts: qcom: ipq5332: Add thermal zone nodes
  2024-11-04 12:44 [PATCH v6 0/7] Add TSENS support for IPQ5332, IPQ5424 Manikanta Mylavarapu
                   ` (3 preceding siblings ...)
  2024-11-04 12:44 ` [PATCH v6 4/7] arm64: dts: qcom: ipq5332: Add tsens node Manikanta Mylavarapu
@ 2024-11-04 12:44 ` Manikanta Mylavarapu
  2024-11-04 12:44 ` [PATCH v6 6/7] arm64: dts: qcom: ipq5424: Add tsens node Manikanta Mylavarapu
  2024-11-04 12:44 ` [PATCH v6 7/7] arm64: dts: qcom: ipq5424: Add thermal zone nodes Manikanta Mylavarapu
  6 siblings, 0 replies; 23+ messages in thread
From: Manikanta Mylavarapu @ 2024-11-04 12:44 UTC (permalink / raw)
  To: srinivas.kandagatla, robh, krzk+dt, conor+dt, amitk,
	thara.gopinath, rafael, daniel.lezcano, rui.zhang, lukasz.luba,
	andersson, konradybcio, linux-arm-msm, devicetree, linux-kernel,
	linux-pm
  Cc: quic_srichara, quic_varada

From: Praveenkumar I <quic_ipkumar@quicinc.com>

This patch adds thermal zone nodes for sensors present in
IPQ5332.

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
---
Changes in V6:
	- No change

 arch/arm64/boot/dts/qcom/ipq5332.dtsi | 78 +++++++++++++++++++++++++++
 1 file changed, 78 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/ipq5332.dtsi b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
index 94dca05fdc2a..72d724d67587 100644
--- a/arch/arm64/boot/dts/qcom/ipq5332.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
@@ -554,4 +554,82 @@ timer {
 			     <GIC_PPI 4 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
 			     <GIC_PPI 1 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
 	};
+
+	thermal-zones {
+		rfa-0-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsens 11>;
+
+			trips {
+				rfa-0-critical {
+					temperature = <125000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		rfa-1-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsens 12>;
+
+			trips {
+				rfa-1-critical {
+					temperature = <125000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		misc-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsens 13>;
+
+			trips {
+				misc-critical {
+					temperature = <125000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+
+		cpu-top-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsens 14>;
+
+			trips {
+				cpu-top-critical {
+					temperature = <115000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+
+				cpu-passive {
+					temperature = <105000>;
+					hysteresis = <1000>;
+					type = "passive";
+				};
+			};
+		};
+
+		top-glue-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsens 15>;
+
+			trips {
+				top-glue-critical {
+					temperature = <125000>;
+					hysteresis = <1000>;
+					type = "critical";
+				};
+			};
+		};
+	};
 };
-- 
2.34.1


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

* [PATCH v6 6/7] arm64: dts: qcom: ipq5424: Add tsens node
  2024-11-04 12:44 [PATCH v6 0/7] Add TSENS support for IPQ5332, IPQ5424 Manikanta Mylavarapu
                   ` (4 preceding siblings ...)
  2024-11-04 12:44 ` [PATCH v6 5/7] arm64: dts: qcom: ipq5332: Add thermal zone nodes Manikanta Mylavarapu
@ 2024-11-04 12:44 ` Manikanta Mylavarapu
  2024-11-04 12:44 ` [PATCH v6 7/7] arm64: dts: qcom: ipq5424: Add thermal zone nodes Manikanta Mylavarapu
  6 siblings, 0 replies; 23+ messages in thread
From: Manikanta Mylavarapu @ 2024-11-04 12:44 UTC (permalink / raw)
  To: srinivas.kandagatla, robh, krzk+dt, conor+dt, amitk,
	thara.gopinath, rafael, daniel.lezcano, rui.zhang, lukasz.luba,
	andersson, konradybcio, linux-arm-msm, devicetree, linux-kernel,
	linux-pm
  Cc: quic_srichara, quic_varada

IPQ5424 has tsens v2.3.3 peripheral. This patch adds the tsense
node with nvmem cells for calibration data.

Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
---
 arch/arm64/boot/dts/qcom/ipq5424.dtsi | 87 +++++++++++++++++++++++++++
 1 file changed, 87 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/ipq5424.dtsi b/arch/arm64/boot/dts/qcom/ipq5424.dtsi
index 76af0d87e9a8..e97cf6529dd7 100644
--- a/arch/arm64/boot/dts/qcom/ipq5424.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq5424.dtsi
@@ -137,6 +137,93 @@ soc@0 {
 		#size-cells = <2>;
 		ranges = <0 0 0 0 0x10 0>;
 
+		efuse@a4000 {
+			compatible = "qcom,ipq5424-qfprom", "qcom,qfprom";
+			reg = <0 0x000a4000 0 0x741>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			s9: s9@3dc {
+				reg = <0x3dc 0x1>;
+				bits = <4 4>;
+			};
+
+			s10: s10@3dd {
+				reg = <0x3dd 0x1>;
+				bits = <0 4>;
+			};
+
+			s11: s11@3dd {
+				reg = <0x3dd 0x1>;
+				bits = <4 4>;
+			};
+
+			s12: s12@3de {
+				reg = <0x3de 0x1>;
+				bits = <0 4>;
+			};
+
+			s13: s13@3de {
+				reg = <0x3de 0x1>;
+				bits = <4 4>;
+			};
+
+			s14: s14@3e5 {
+				reg = <0x3e5 0x2>;
+				bits = <7 4>;
+			};
+
+			s15: s15@3e6 {
+				reg = <0x3e6 0x1>;
+				bits = <3 4>;
+			};
+
+			tsens_mode: mode@419 {
+				reg = <0x419 0x1>;
+				bits = <0 3>;
+			};
+
+			tsens_base0: base0@419 {
+				reg = <0x419 0x2>;
+				bits = <3 10>;
+			};
+
+			tsens_base1: base1@41a {
+				reg = <0x41a 0x2>;
+				bits = <5 10>;
+			};
+		};
+
+		tsens: thermal-sensor@4a9000 {
+			compatible = "qcom,ipq5424-tsens";
+			reg = <0 0x004a9000 0 0x1000>,
+			      <0 0x004a8000 0 0x1000>;
+			nvmem-cells = <&tsens_mode>,
+				      <&tsens_base0>,
+				      <&tsens_base1>,
+				      <&s9>,
+				      <&s10>,
+				      <&s11>,
+				      <&s12>,
+				      <&s13>,
+				      <&s14>,
+				      <&s15>;
+			nvmem-cell-names = "mode",
+					   "base0",
+					   "base1",
+					   "s9",
+					   "s10",
+					   "s11",
+					   "s12",
+					   "s13",
+					   "s14",
+					   "s15";
+			interrupts = <GIC_SPI 105 IRQ_TYPE_EDGE_RISING>;
+			interrupt-names = "combined";
+			#qcom,sensors = <7>;
+			#thermal-sensor-cells = <1>;
+		};
+
 		tlmm: pinctrl@1000000 {
 			compatible = "qcom,ipq5424-tlmm";
 			reg = <0 0x01000000 0 0x300000>;
-- 
2.34.1


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

* [PATCH v6 7/7] arm64: dts: qcom: ipq5424: Add thermal zone nodes
  2024-11-04 12:44 [PATCH v6 0/7] Add TSENS support for IPQ5332, IPQ5424 Manikanta Mylavarapu
                   ` (5 preceding siblings ...)
  2024-11-04 12:44 ` [PATCH v6 6/7] arm64: dts: qcom: ipq5424: Add tsens node Manikanta Mylavarapu
@ 2024-11-04 12:44 ` Manikanta Mylavarapu
  2024-11-04 13:51   ` Konrad Dybcio
  6 siblings, 1 reply; 23+ messages in thread
From: Manikanta Mylavarapu @ 2024-11-04 12:44 UTC (permalink / raw)
  To: srinivas.kandagatla, robh, krzk+dt, conor+dt, amitk,
	thara.gopinath, rafael, daniel.lezcano, rui.zhang, lukasz.luba,
	andersson, konradybcio, linux-arm-msm, devicetree, linux-kernel,
	linux-pm
  Cc: quic_srichara, quic_varada

Add thermal zone nodes for sensors present in IPQ5424.

Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
---
 arch/arm64/boot/dts/qcom/ipq5424.dtsi | 124 ++++++++++++++++++++++++++
 1 file changed, 124 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/ipq5424.dtsi b/arch/arm64/boot/dts/qcom/ipq5424.dtsi
index e97cf6529dd7..568f61c33fb5 100644
--- a/arch/arm64/boot/dts/qcom/ipq5424.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq5424.dtsi
@@ -375,4 +375,128 @@ timer {
 			     <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>,
 			     <GIC_PPI 12 IRQ_TYPE_LEVEL_LOW>;
 	};
+
+	thermal_zones: thermal-zones {
+		cpu0-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsens 14>;
+
+			trips {
+				cpu-critical {
+					temperature = <120000>;
+					hysteresis = <9000>;
+					type = "critical";
+				};
+
+				cpu-passive {
+					temperature = <110000>;
+					hysteresis = <9000>;
+					type = "passive";
+				};
+			};
+		};
+
+		cpu1-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsens 12>;
+
+			trips {
+				cpu-critical {
+					temperature = <120000>;
+					hysteresis = <9000>;
+					type = "critical";
+				};
+
+				cpu-passive {
+					temperature = <110000>;
+					hysteresis = <9000>;
+					type = "passive";
+				};
+			};
+		};
+
+		cpu2-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsens 11>;
+
+			trips {
+				cpu-critical {
+					temperature = <120000>;
+					hysteresis = <9000>;
+					type = "critical";
+				};
+
+				cpu-passive {
+					temperature = <110000>;
+					hysteresis = <9000>;
+					type = "passive";
+				};
+			};
+		};
+
+		cpu3-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsens 13>;
+
+			trips {
+				cpu-critical {
+					temperature = <120000>;
+					hysteresis = <9000>;
+					type = "critical";
+				};
+
+				cpu-passive {
+					temperature = <110000>;
+					hysteresis = <9000>;
+					type = "passive";
+				};
+			};
+		};
+
+		wcss-tile2-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsens 9>;
+
+			trips {
+				wcss_tile2-critical {
+					temperature = <125000>;
+					hysteresis = <9000>;
+					type = "critical";
+				};
+			};
+		};
+
+		wcss-tile3-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsens 10>;
+
+			trips {
+				wcss_tile3-critical {
+					temperature = <125000>;
+					hysteresis = <9000>;
+					type = "critical";
+				};
+			};
+		};
+
+		top-glue-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tsens 15>;
+
+			trips {
+				top-glue-critical {
+					temperature = <125000>;
+					hysteresis = <9000>;
+					type = "critical";
+				};
+			};
+		};
+	};
 };
-- 
2.34.1


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

* Re: [PATCH v6 7/7] arm64: dts: qcom: ipq5424: Add thermal zone nodes
  2024-11-04 12:44 ` [PATCH v6 7/7] arm64: dts: qcom: ipq5424: Add thermal zone nodes Manikanta Mylavarapu
@ 2024-11-04 13:51   ` Konrad Dybcio
  2024-11-06  8:47     ` Manikanta Mylavarapu
  0 siblings, 1 reply; 23+ messages in thread
From: Konrad Dybcio @ 2024-11-04 13:51 UTC (permalink / raw)
  To: Manikanta Mylavarapu, srinivas.kandagatla, robh, krzk+dt,
	conor+dt, amitk, thara.gopinath, rafael, daniel.lezcano,
	rui.zhang, lukasz.luba, andersson, konradybcio, linux-arm-msm,
	devicetree, linux-kernel, linux-pm
  Cc: quic_srichara, quic_varada

On 4.11.2024 1:44 PM, Manikanta Mylavarapu wrote:
> Add thermal zone nodes for sensors present in IPQ5424.
> 
> Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
> ---
[...]

> +
> +		cpu3-thermal {
> +			polling-delay-passive = <0>;
> +			polling-delay = <0>;
> +			thermal-sensors = <&tsens 13>;
> +
> +			trips {
> +				cpu-critical {
> +					temperature = <120000>;
> +					hysteresis = <9000>;
> +					type = "critical";
> +				};
> +
> +				cpu-passive {
> +					temperature = <110000>;
> +					hysteresis = <9000>;
> +					type = "passive";

You have a passive trip point without passive polling

> +				};
> +			};
> +		};
> +
> +		wcss-tile2-thermal {
> +			polling-delay-passive = <0>;
> +			polling-delay = <0>;

These are the defaults

> +			thermal-sensors = <&tsens 9>;
> +
> +			trips {
> +				wcss_tile2-critical {

Node names must not contain underscores

Konrad

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

* Re: [PATCH v6 3/7] thermal/drivers/tsens: Add TSENS enable and calibration support for V2
  2024-11-04 12:44 ` [PATCH v6 3/7] thermal/drivers/tsens: Add TSENS enable and calibration support for V2 Manikanta Mylavarapu
@ 2024-11-04 19:42   ` Dmitry Baryshkov
  2024-11-06  6:16     ` Manikanta Mylavarapu
  0 siblings, 1 reply; 23+ messages in thread
From: Dmitry Baryshkov @ 2024-11-04 19:42 UTC (permalink / raw)
  To: Manikanta Mylavarapu
  Cc: srinivas.kandagatla, robh, krzk+dt, conor+dt, amitk,
	thara.gopinath, rafael, daniel.lezcano, rui.zhang, lukasz.luba,
	andersson, konradybcio, linux-arm-msm, devicetree, linux-kernel,
	linux-pm, quic_srichara, quic_varada

On Mon, Nov 04, 2024 at 06:14:09PM +0530, Manikanta Mylavarapu wrote:
> From: Praveenkumar I <quic_ipkumar@quicinc.com>
> 
> SoCs without RPM need to enable sensors and calibrate them from the kernel.
> The IPQ5332 and IPQ5424 use the tsens v2.3.3 IP and do not have RPM.
> Therefore, add a new calibration function for V2, as the tsens.c calib
> function only supports V1. Also add new feature_config, ops and data for
> IPQ5332, IPQ5424.
> 
> Although the TSENS IP supports 16 sensors, not all are used. The hw_id
> is used to enable the relevant sensors.
> 
> Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
> Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
> ---
> Changes in V6:
> 	- Add IPQ5424 support
> 	- Patch #1 and Patch #5 from V5 have been merged and
> 	  incorporated into Patch #3 in V6 to resolve below
> 	  compilation warnings.
> drivers/thermal/qcom/tsens-v2.c:216:19: warning: ‘init_tsens_v2_no_rpm’
> defined but not used [-Wunused-function]
>  static int __init init_tsens_v2_no_rpm(struct tsens_priv *priv)
> drivers/thermal/qcom/tsens-v2.c:180:12: warning: ‘tsens_v2_calibration’
> defined but not used [-Wunused-function]
>  static int tsens_v2_calibration(struct tsens_priv *priv)
> 
>  drivers/thermal/qcom/tsens-v2.c | 182 ++++++++++++++++++++++++++++++++
>  drivers/thermal/qcom/tsens.c    |   8 +-
>  drivers/thermal/qcom/tsens.h    |   4 +-
>  3 files changed, 192 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/thermal/qcom/tsens-v2.c b/drivers/thermal/qcom/tsens-v2.c
> index 0cb7301eca6e..90b6915607ea 100644
> --- a/drivers/thermal/qcom/tsens-v2.c
> +++ b/drivers/thermal/qcom/tsens-v2.c
> @@ -4,13 +4,32 @@
>   * Copyright (c) 2018, Linaro Limited
>   */
>  
> +#include <linux/bitfield.h>
>  #include <linux/bitops.h>
>  #include <linux/regmap.h>
> +#include <linux/nvmem-consumer.h>
>  #include "tsens.h"
>  
>  /* ----- SROT ------ */
>  #define SROT_HW_VER_OFF	0x0000
>  #define SROT_CTRL_OFF		0x0004
> +#define SROT_MEASURE_PERIOD	0x0008
> +#define SROT_Sn_CONVERSION	0x0060
> +#define V2_SHIFT_DEFAULT	0x0003
> +#define V2_SLOPE_DEFAULT	0x0cd0
> +#define V2_CZERO_DEFAULT	0x016a
> +#define ONE_PT_SLOPE		0x0cd0
> +#define TWO_PT_SHIFTED_GAIN	921600
> +#define ONE_PT_CZERO_CONST	94
> +#define SW_RST_DEASSERT		0x0
> +#define SW_RST_ASSERT		0x1
> +#define MEASURE_PERIOD_2mSEC	0x1
> +#define RSEULT_FORMAT_TEMP	0x1
> +#define TSENS_ENABLE		0x1
> +#define SENSOR_CONVERSION(n)	(((n) * 4) + SROT_Sn_CONVERSION)
> +#define CONVERSION_SHIFT_MASK	GENMASK(24, 23)
> +#define CONVERSION_SLOPE_MASK	GENMASK(22, 10)
> +#define CONVERSION_CZERO_MASK	GENMASK(9, 0)
>  
>  /* ----- TM ------ */
>  #define TM_INT_EN_OFF			0x0004
> @@ -50,6 +69,17 @@ static struct tsens_features ipq8074_feat = {
>  	.trip_max_temp	= 204000,
>  };
>  
> +static struct tsens_features ipq5332_feat = {
> +	.ver_major	= VER_2_X_NO_RPM,
> +	.crit_int	= 1,
> +	.combo_int	= 1,
> +	.adc		= 0,
> +	.srot_split	= 1,
> +	.max_sensors	= 16,
> +	.trip_min_temp	= 0,
> +	.trip_max_temp	= 204000,
> +};
> +
>  static const struct reg_field tsens_v2_regfields[MAX_REGFIELDS] = {
>  	/* ----- SROT ------ */
>  	/* VERSION */
> @@ -59,6 +89,11 @@ static const struct reg_field tsens_v2_regfields[MAX_REGFIELDS] = {
>  	/* CTRL_OFF */
>  	[TSENS_EN]     = REG_FIELD(SROT_CTRL_OFF,    0,  0),
>  	[TSENS_SW_RST] = REG_FIELD(SROT_CTRL_OFF,    1,  1),
> +	[SENSOR_EN]    = REG_FIELD(SROT_CTRL_OFF,    3,  18),
> +	[CODE_OR_TEMP] = REG_FIELD(SROT_CTRL_OFF,    21, 21),
> +
> +	/* MAIN_MEASURE_PERIOD */
> +	[MAIN_MEASURE_PERIOD] = REG_FIELD(SROT_MEASURE_PERIOD, 0, 7),
>  
>  	/* ----- TM ------ */
>  	/* INTERRUPT ENABLE */
> @@ -104,6 +139,131 @@ static const struct reg_field tsens_v2_regfields[MAX_REGFIELDS] = {
>  	[TRDY] = REG_FIELD(TM_TRDY_OFF, 0, 0),
>  };
>  
> +static int tsens_v2_calibrate_sensor(struct device *dev, struct tsens_sensor *sensor,
> +				     struct regmap *map,  u32 mode, u32 base0, u32 base1)
> +{
> +	u32 slope, czero, val;
> +	char name[8];
> +	int ret;
> +
> +	/* Read offset value */
> +	ret = snprintf(name, sizeof(name), "s%d", sensor->hw_id);
> +	if (ret < 0)
> +		return ret;
> +
> +	ret = nvmem_cell_read_variable_le_u32(dev, name, &sensor->offset);
> +	if (ret)
> +		return ret;
> +
> +	/* Based on calib mode, program SHIFT, SLOPE and CZERO */
> +	switch (mode) {
> +	case TWO_PT_CALIB:
> +		slope = (TWO_PT_SHIFTED_GAIN / (base1 - base0));
> +
> +		czero = (base0 + sensor->offset - ((base1 - base0) / 3));
> +
> +		val = FIELD_PREP(CONVERSION_SHIFT_MASK, V2_SHIFT_DEFAULT) |
> +		      FIELD_PREP(CONVERSION_SLOPE_MASK, slope) |
> +		      FIELD_PREP(CONVERSION_CZERO_MASK, czero);
> +
> +		fallthrough;
> +	case ONE_PT_CALIB2:
> +		czero = base0 + sensor->offset - ONE_PT_CZERO_CONST;
> +
> +		val = FIELD_PREP(CONVERSION_SHIFT_MASK, V2_SHIFT_DEFAULT) |
> +		      FIELD_PREP(CONVERSION_SLOPE_MASK, ONE_PT_SLOPE) |
> +		      FIELD_PREP(CONVERSION_CZERO_MASK, czero);
> +
> +		break;
> +	default:
> +		dev_dbg(dev, "calibrationless mode\n");
> +
> +		val = FIELD_PREP(CONVERSION_SHIFT_MASK, V2_SHIFT_DEFAULT) |
> +		      FIELD_PREP(CONVERSION_SLOPE_MASK, V2_SLOPE_DEFAULT) |
> +		      FIELD_PREP(CONVERSION_CZERO_MASK, V2_CZERO_DEFAULT);

Move val calculation out of switch-case, assign default values to shift,
slope and czero and then change them under switch-case.

> +	}
> +
> +	regmap_write(map, SENSOR_CONVERSION(sensor->hw_id), val);
> +
> +	return 0;
> +}
> +
> +static int tsens_v2_calibration(struct tsens_priv *priv)
> +{
> +	struct device *dev = priv->dev;
> +	u32 mode, base0, base1;
> +	int i, ret;
> +
> +	if (priv->num_sensors > MAX_SENSORS)
> +		return -EINVAL;
> +
> +	ret = nvmem_cell_read_variable_le_u32(priv->dev, "mode", &mode);
> +	if (ret == -ENOENT)
> +		dev_warn(priv->dev, "Calibration data not present in DT\n");
> +	if (ret < 0)
> +		return ret;
> +
> +	dev_dbg(priv->dev, "calibration mode is %d\n", mode);
> +
> +	ret = nvmem_cell_read_variable_le_u32(priv->dev, "base0", &base0);
> +	if (ret < 0)
> +		return ret;
> +
> +	ret = nvmem_cell_read_variable_le_u32(priv->dev, "base1", &base1);

Is this actually base0 / base1 or rather base1 / base2 as used by the
tsens v0.1 / v1 ?

> +	if (ret < 0)
> +		return ret;
> +
> +	/* Calibrate each sensor */
> +	for (i = 0; i < priv->num_sensors; i++) {
> +		ret = tsens_v2_calibrate_sensor(dev, &priv->sensor[i], priv->srot_map,
> +						mode, base0, base1);
> +		if (ret < 0)
> +			return ret;
> +	}
> +
> +	return 0;
> +}
> +
> +static int __init init_tsens_v2_no_rpm(struct tsens_priv *priv)
> +{
> +	struct device *dev = priv->dev;
> +	int i, ret;
> +	u32 val = 0;
> +
> +	ret = init_common(priv);
> +	if (ret < 0)
> +		return ret;
> +
> +	priv->rf[CODE_OR_TEMP] = devm_regmap_field_alloc(dev, priv->srot_map,
> +							 priv->fields[CODE_OR_TEMP]);
> +	if (IS_ERR(priv->rf[CODE_OR_TEMP]))
> +		return PTR_ERR(priv->rf[CODE_OR_TEMP]);
> +
> +	priv->rf[MAIN_MEASURE_PERIOD] = devm_regmap_field_alloc(dev, priv->srot_map,
> +								priv->fields[MAIN_MEASURE_PERIOD]);
> +	if (IS_ERR(priv->rf[MAIN_MEASURE_PERIOD]))
> +		return PTR_ERR(priv->rf[MAIN_MEASURE_PERIOD]);
> +
> +	regmap_field_write(priv->rf[TSENS_SW_RST], SW_RST_ASSERT);
> +
> +	regmap_field_write(priv->rf[MAIN_MEASURE_PERIOD], MEASURE_PERIOD_2mSEC);
> +
> +	/* Enable available sensors */
> +	for (i = 0; i < priv->num_sensors; i++)
> +		val |= 1 << priv->sensor[i].hw_id;
> +
> +	regmap_field_write(priv->rf[SENSOR_EN], val);
> +
> +	/* Select temperature format, unit is deci-Celsius */
> +	regmap_field_write(priv->rf[CODE_OR_TEMP], RSEULT_FORMAT_TEMP);
> +
> +	regmap_field_write(priv->rf[TSENS_SW_RST], SW_RST_DEASSERT);
> +
> +	regmap_field_write(priv->rf[TSENS_EN], TSENS_ENABLE);
> +
> +	return 0;
> +}
> +
>  static const struct tsens_ops ops_generic_v2 = {
>  	.init		= init_common,
>  	.get_temp	= get_temp_tsens_valid,
> @@ -122,6 +282,28 @@ struct tsens_plat_data data_ipq8074 = {
>  	.fields	= tsens_v2_regfields,
>  };
>  
> +static const struct tsens_ops ops_ipq5332 = {
> +	.init		= init_tsens_v2_no_rpm,
> +	.get_temp	= get_temp_tsens_valid,
> +	.calibrate	= tsens_v2_calibration,
> +};
> +
> +struct tsens_plat_data data_ipq5332 = {
> +	.num_sensors	= 5,
> +	.ops		= &ops_ipq5332,
> +	.hw_ids		= (unsigned int []){11, 12, 13, 14, 15},
> +	.feat		= &ipq5332_feat,
> +	.fields		= tsens_v2_regfields,
> +};
> +
> +struct tsens_plat_data data_ipq5424 = {
> +	.num_sensors	= 7,
> +	.ops		= &ops_ipq5332,
> +	.hw_ids		= (unsigned int []){9, 10, 11, 12, 13, 14, 15},
> +	.feat		= &ipq5332_feat,
> +	.fields		= tsens_v2_regfields,
> +};
> +
>  /* Kept around for backward compatibility with old msm8996.dtsi */
>  struct tsens_plat_data data_8996 = {
>  	.num_sensors	= 13,
> diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
> index 0b4421bf4785..c5409225756f 100644
> --- a/drivers/thermal/qcom/tsens.c
> +++ b/drivers/thermal/qcom/tsens.c
> @@ -975,7 +975,7 @@ int __init init_common(struct tsens_priv *priv)
>  	ret = regmap_field_read(priv->rf[TSENS_EN], &enabled);
>  	if (ret)
>  		goto err_put_device;
> -	if (!enabled) {
> +	if (!enabled && (tsens_version(priv) != VER_2_X_NO_RPM)) {
>  		dev_err(dev, "%s: device not enabled\n", __func__);
>  		ret = -ENODEV;
>  		goto err_put_device;
> @@ -1102,6 +1102,12 @@ static SIMPLE_DEV_PM_OPS(tsens_pm_ops, tsens_suspend, tsens_resume);
>  
>  static const struct of_device_id tsens_table[] = {
>  	{
> +		.compatible = "qcom,ipq5332-tsens",
> +		.data = &data_ipq5332,
> +	}, {
> +		.compatible = "qcom,ipq5424-tsens",
> +		.data = &data_ipq5424,
> +	}, {
>  		.compatible = "qcom,ipq8064-tsens",
>  		.data = &data_8960,
>  	}, {
> diff --git a/drivers/thermal/qcom/tsens.h b/drivers/thermal/qcom/tsens.h
> index cab39de045b1..ac5358e48f74 100644
> --- a/drivers/thermal/qcom/tsens.h
> +++ b/drivers/thermal/qcom/tsens.h
> @@ -35,6 +35,7 @@ enum tsens_ver {
>  	VER_0_1,
>  	VER_1_X,
>  	VER_2_X,
> +	VER_2_X_NO_RPM,
>  };
>  
>  enum tsens_irq_type {
> @@ -168,6 +169,7 @@ enum regfield_ids {
>  	TSENS_SW_RST,
>  	SENSOR_EN,
>  	CODE_OR_TEMP,
> +	MAIN_MEASURE_PERIOD,
>  
>  	/* ----- TM ------ */
>  	/* TRDY */
> @@ -650,6 +652,6 @@ extern struct tsens_plat_data data_8226, data_8909, data_8916, data_8939, data_8
>  extern struct tsens_plat_data data_tsens_v1, data_8976, data_8956;
>  
>  /* TSENS v2 targets */
> -extern struct tsens_plat_data data_8996, data_ipq8074, data_tsens_v2;
> +extern struct tsens_plat_data data_8996, data_ipq8074, data_ipq5332, data_ipq5424, data_tsens_v2;
>  
>  #endif /* __QCOM_TSENS_H__ */
> -- 
> 2.34.1
> 

-- 
With best wishes
Dmitry

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

* Re: [PATCH v6 2/7] dt-bindings: nvmem: Add compatible for IPQ5424
  2024-11-04 12:44 ` [PATCH v6 2/7] dt-bindings: nvmem: Add compatible for IPQ5424 Manikanta Mylavarapu
@ 2024-11-05  8:43   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 23+ messages in thread
From: Krzysztof Kozlowski @ 2024-11-05  8:43 UTC (permalink / raw)
  To: Manikanta Mylavarapu
  Cc: srinivas.kandagatla, robh, krzk+dt, conor+dt, amitk,
	thara.gopinath, rafael, daniel.lezcano, rui.zhang, lukasz.luba,
	andersson, konradybcio, linux-arm-msm, devicetree, linux-kernel,
	linux-pm, quic_srichara, quic_varada

On Mon, Nov 04, 2024 at 06:14:08PM +0530, Manikanta Mylavarapu wrote:
> Document the QFPROM block found on IPQ5424
> 
> Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
> ---
>  Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml | 1 +
>  1 file changed, 1 insertion(+)

Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

Best regards,
Krzysztof


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

* Re: [PATCH v6 1/7] dt-bindings: thermal: tsens: Add ipq5332, ipq5424 compatible
  2024-11-04 12:44 ` [PATCH v6 1/7] dt-bindings: thermal: tsens: Add ipq5332, ipq5424 compatible Manikanta Mylavarapu
@ 2024-11-05  8:45   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 23+ messages in thread
From: Krzysztof Kozlowski @ 2024-11-05  8:45 UTC (permalink / raw)
  To: Manikanta Mylavarapu
  Cc: srinivas.kandagatla, robh, krzk+dt, conor+dt, amitk,
	thara.gopinath, rafael, daniel.lezcano, rui.zhang, lukasz.luba,
	andersson, konradybcio, linux-arm-msm, devicetree, linux-kernel,
	linux-pm, quic_srichara, quic_varada

On Mon, Nov 04, 2024 at 06:14:07PM +0530, Manikanta Mylavarapu wrote:
> From: Praveenkumar I <quic_ipkumar@quicinc.com>
> 
> The IPQ5332 and IPQ5424 use TSENS v2.3.3 IP with combined interrupt.
> RPM is not available in these SoCs, hence adding new compatible
> to have the sensor enablement and calibration function. Also add
> nvmem-cell-names.
> 
> Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
> Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
> ---
> Changes in V6:
> 	- Remove the R-b tag because support for IPQ5424 has been added
> 

I wish we rather finish with this patchset and add ipq5424 later, so we
won't have to re-review.

Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

Best regards,
Krzysztof


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

* Re: [PATCH v6 3/7] thermal/drivers/tsens: Add TSENS enable and calibration support for V2
  2024-11-04 19:42   ` Dmitry Baryshkov
@ 2024-11-06  6:16     ` Manikanta Mylavarapu
  2024-11-06  6:24       ` Dmitry Baryshkov
  0 siblings, 1 reply; 23+ messages in thread
From: Manikanta Mylavarapu @ 2024-11-06  6:16 UTC (permalink / raw)
  To: Dmitry Baryshkov
  Cc: srinivas.kandagatla, robh, krzk+dt, conor+dt, amitk,
	thara.gopinath, rafael, daniel.lezcano, rui.zhang, lukasz.luba,
	andersson, konradybcio, linux-arm-msm, devicetree, linux-kernel,
	linux-pm, quic_srichara, quic_varada



On 11/5/2024 1:12 AM, Dmitry Baryshkov wrote:
> On Mon, Nov 04, 2024 at 06:14:09PM +0530, Manikanta Mylavarapu wrote:
>> From: Praveenkumar I <quic_ipkumar@quicinc.com>
>>
>> SoCs without RPM need to enable sensors and calibrate them from the kernel.
>> The IPQ5332 and IPQ5424 use the tsens v2.3.3 IP and do not have RPM.
>> Therefore, add a new calibration function for V2, as the tsens.c calib
>> function only supports V1. Also add new feature_config, ops and data for
>> IPQ5332, IPQ5424.
>>
>> Although the TSENS IP supports 16 sensors, not all are used. The hw_id
>> is used to enable the relevant sensors.
>>
>> Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
>> Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
>> ---
>> Changes in V6:
>> 	- Add IPQ5424 support
>> 	- Patch #1 and Patch #5 from V5 have been merged and
>> 	  incorporated into Patch #3 in V6 to resolve below
>> 	  compilation warnings.
>> drivers/thermal/qcom/tsens-v2.c:216:19: warning: ‘init_tsens_v2_no_rpm’
>> defined but not used [-Wunused-function]
>>  static int __init init_tsens_v2_no_rpm(struct tsens_priv *priv)
>> drivers/thermal/qcom/tsens-v2.c:180:12: warning: ‘tsens_v2_calibration’
>> defined but not used [-Wunused-function]
>>  static int tsens_v2_calibration(struct tsens_priv *priv)
>>
>>  drivers/thermal/qcom/tsens-v2.c | 182 ++++++++++++++++++++++++++++++++
>>  drivers/thermal/qcom/tsens.c    |   8 +-
>>  drivers/thermal/qcom/tsens.h    |   4 +-
>>  3 files changed, 192 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/thermal/qcom/tsens-v2.c b/drivers/thermal/qcom/tsens-v2.c
>> index 0cb7301eca6e..90b6915607ea 100644
>> --- a/drivers/thermal/qcom/tsens-v2.c
>> +++ b/drivers/thermal/qcom/tsens-v2.c
>> @@ -4,13 +4,32 @@
>>   * Copyright (c) 2018, Linaro Limited
>>   */
>>  
>> +#include <linux/bitfield.h>
>>  #include <linux/bitops.h>
>>  #include <linux/regmap.h>
>> +#include <linux/nvmem-consumer.h>
>>  #include "tsens.h"
>>  
>>  /* ----- SROT ------ */
>>  #define SROT_HW_VER_OFF	0x0000
>>  #define SROT_CTRL_OFF		0x0004
>> +#define SROT_MEASURE_PERIOD	0x0008
>> +#define SROT_Sn_CONVERSION	0x0060
>> +#define V2_SHIFT_DEFAULT	0x0003
>> +#define V2_SLOPE_DEFAULT	0x0cd0
>> +#define V2_CZERO_DEFAULT	0x016a
>> +#define ONE_PT_SLOPE		0x0cd0
>> +#define TWO_PT_SHIFTED_GAIN	921600
>> +#define ONE_PT_CZERO_CONST	94
>> +#define SW_RST_DEASSERT		0x0
>> +#define SW_RST_ASSERT		0x1
>> +#define MEASURE_PERIOD_2mSEC	0x1
>> +#define RSEULT_FORMAT_TEMP	0x1
>> +#define TSENS_ENABLE		0x1
>> +#define SENSOR_CONVERSION(n)	(((n) * 4) + SROT_Sn_CONVERSION)
>> +#define CONVERSION_SHIFT_MASK	GENMASK(24, 23)
>> +#define CONVERSION_SLOPE_MASK	GENMASK(22, 10)
>> +#define CONVERSION_CZERO_MASK	GENMASK(9, 0)
>>  
>>  /* ----- TM ------ */
>>  #define TM_INT_EN_OFF			0x0004
>> @@ -50,6 +69,17 @@ static struct tsens_features ipq8074_feat = {
>>  	.trip_max_temp	= 204000,
>>  };
>>  
>> +static struct tsens_features ipq5332_feat = {
>> +	.ver_major	= VER_2_X_NO_RPM,
>> +	.crit_int	= 1,
>> +	.combo_int	= 1,
>> +	.adc		= 0,
>> +	.srot_split	= 1,
>> +	.max_sensors	= 16,
>> +	.trip_min_temp	= 0,
>> +	.trip_max_temp	= 204000,
>> +};
>> +
>>  static const struct reg_field tsens_v2_regfields[MAX_REGFIELDS] = {
>>  	/* ----- SROT ------ */
>>  	/* VERSION */
>> @@ -59,6 +89,11 @@ static const struct reg_field tsens_v2_regfields[MAX_REGFIELDS] = {
>>  	/* CTRL_OFF */
>>  	[TSENS_EN]     = REG_FIELD(SROT_CTRL_OFF,    0,  0),
>>  	[TSENS_SW_RST] = REG_FIELD(SROT_CTRL_OFF,    1,  1),
>> +	[SENSOR_EN]    = REG_FIELD(SROT_CTRL_OFF,    3,  18),
>> +	[CODE_OR_TEMP] = REG_FIELD(SROT_CTRL_OFF,    21, 21),
>> +
>> +	/* MAIN_MEASURE_PERIOD */
>> +	[MAIN_MEASURE_PERIOD] = REG_FIELD(SROT_MEASURE_PERIOD, 0, 7),
>>  
>>  	/* ----- TM ------ */
>>  	/* INTERRUPT ENABLE */
>> @@ -104,6 +139,131 @@ static const struct reg_field tsens_v2_regfields[MAX_REGFIELDS] = {
>>  	[TRDY] = REG_FIELD(TM_TRDY_OFF, 0, 0),
>>  };
>>  
>> +static int tsens_v2_calibrate_sensor(struct device *dev, struct tsens_sensor *sensor,
>> +				     struct regmap *map,  u32 mode, u32 base0, u32 base1)
>> +{
>> +	u32 slope, czero, val;
>> +	char name[8];
>> +	int ret;
>> +
>> +	/* Read offset value */
>> +	ret = snprintf(name, sizeof(name), "s%d", sensor->hw_id);
>> +	if (ret < 0)
>> +		return ret;
>> +
>> +	ret = nvmem_cell_read_variable_le_u32(dev, name, &sensor->offset);
>> +	if (ret)
>> +		return ret;
>> +
>> +	/* Based on calib mode, program SHIFT, SLOPE and CZERO */
>> +	switch (mode) {
>> +	case TWO_PT_CALIB:
>> +		slope = (TWO_PT_SHIFTED_GAIN / (base1 - base0));
>> +
>> +		czero = (base0 + sensor->offset - ((base1 - base0) / 3));
>> +
>> +		val = FIELD_PREP(CONVERSION_SHIFT_MASK, V2_SHIFT_DEFAULT) |
>> +		      FIELD_PREP(CONVERSION_SLOPE_MASK, slope) |
>> +		      FIELD_PREP(CONVERSION_CZERO_MASK, czero);
>> +
>> +		fallthrough;
>> +	case ONE_PT_CALIB2:
>> +		czero = base0 + sensor->offset - ONE_PT_CZERO_CONST;
>> +
>> +		val = FIELD_PREP(CONVERSION_SHIFT_MASK, V2_SHIFT_DEFAULT) |
>> +		      FIELD_PREP(CONVERSION_SLOPE_MASK, ONE_PT_SLOPE) |
>> +		      FIELD_PREP(CONVERSION_CZERO_MASK, czero);
>> +
>> +		break;
>> +	default:
>> +		dev_dbg(dev, "calibrationless mode\n");
>> +
>> +		val = FIELD_PREP(CONVERSION_SHIFT_MASK, V2_SHIFT_DEFAULT) |
>> +		      FIELD_PREP(CONVERSION_SLOPE_MASK, V2_SLOPE_DEFAULT) |
>> +		      FIELD_PREP(CONVERSION_CZERO_MASK, V2_CZERO_DEFAULT);
> 
> Move val calculation out of switch-case, assign default values to shift,
> slope and czero and then change them under switch-case.
> 

Sure. I will update.

>> +	}
>> +
>> +	regmap_write(map, SENSOR_CONVERSION(sensor->hw_id), val);
>> +
>> +	return 0;
>> +}
>> +
>> +static int tsens_v2_calibration(struct tsens_priv *priv)
>> +{
>> +	struct device *dev = priv->dev;
>> +	u32 mode, base0, base1;
>> +	int i, ret;
>> +
>> +	if (priv->num_sensors > MAX_SENSORS)
>> +		return -EINVAL;
>> +
>> +	ret = nvmem_cell_read_variable_le_u32(priv->dev, "mode", &mode);
>> +	if (ret == -ENOENT)
>> +		dev_warn(priv->dev, "Calibration data not present in DT\n");
>> +	if (ret < 0)
>> +		return ret;
>> +
>> +	dev_dbg(priv->dev, "calibration mode is %d\n", mode);
>> +
>> +	ret = nvmem_cell_read_variable_le_u32(priv->dev, "base0", &base0);
>> +	if (ret < 0)
>> +		return ret;
>> +
>> +	ret = nvmem_cell_read_variable_le_u32(priv->dev, "base1", &base1);
> 
> Is this actually base0 / base1 or rather base1 / base2 as used by the
> tsens v0.1 / v1 ?
> 

As per qualcomm internal register guide, these registers are named as base0 and base1.

Thanks & Regards,
Manikanta.

>> +	if (ret < 0)
>> +		return ret;
>> +
>> +	/* Calibrate each sensor */
>> +	for (i = 0; i < priv->num_sensors; i++) {
>> +		ret = tsens_v2_calibrate_sensor(dev, &priv->sensor[i], priv->srot_map,
>> +						mode, base0, base1);
>> +		if (ret < 0)
>> +			return ret;
>> +	}
>> +
>> +	return 0;
>> +}
>> +
>> +static int __init init_tsens_v2_no_rpm(struct tsens_priv *priv)
>> +{
>> +	struct device *dev = priv->dev;
>> +	int i, ret;
>> +	u32 val = 0;
>> +
>> +	ret = init_common(priv);
>> +	if (ret < 0)
>> +		return ret;
>> +
>> +	priv->rf[CODE_OR_TEMP] = devm_regmap_field_alloc(dev, priv->srot_map,
>> +							 priv->fields[CODE_OR_TEMP]);
>> +	if (IS_ERR(priv->rf[CODE_OR_TEMP]))
>> +		return PTR_ERR(priv->rf[CODE_OR_TEMP]);
>> +
>> +	priv->rf[MAIN_MEASURE_PERIOD] = devm_regmap_field_alloc(dev, priv->srot_map,
>> +								priv->fields[MAIN_MEASURE_PERIOD]);
>> +	if (IS_ERR(priv->rf[MAIN_MEASURE_PERIOD]))
>> +		return PTR_ERR(priv->rf[MAIN_MEASURE_PERIOD]);
>> +
>> +	regmap_field_write(priv->rf[TSENS_SW_RST], SW_RST_ASSERT);
>> +
>> +	regmap_field_write(priv->rf[MAIN_MEASURE_PERIOD], MEASURE_PERIOD_2mSEC);
>> +
>> +	/* Enable available sensors */
>> +	for (i = 0; i < priv->num_sensors; i++)
>> +		val |= 1 << priv->sensor[i].hw_id;
>> +
>> +	regmap_field_write(priv->rf[SENSOR_EN], val);
>> +
>> +	/* Select temperature format, unit is deci-Celsius */
>> +	regmap_field_write(priv->rf[CODE_OR_TEMP], RSEULT_FORMAT_TEMP);
>> +
>> +	regmap_field_write(priv->rf[TSENS_SW_RST], SW_RST_DEASSERT);
>> +
>> +	regmap_field_write(priv->rf[TSENS_EN], TSENS_ENABLE);
>> +
>> +	return 0;
>> +}
>> +
>>  static const struct tsens_ops ops_generic_v2 = {
>>  	.init		= init_common,
>>  	.get_temp	= get_temp_tsens_valid,
>> @@ -122,6 +282,28 @@ struct tsens_plat_data data_ipq8074 = {
>>  	.fields	= tsens_v2_regfields,
>>  };
>>  
>> +static const struct tsens_ops ops_ipq5332 = {
>> +	.init		= init_tsens_v2_no_rpm,
>> +	.get_temp	= get_temp_tsens_valid,
>> +	.calibrate	= tsens_v2_calibration,
>> +};
>> +
>> +struct tsens_plat_data data_ipq5332 = {
>> +	.num_sensors	= 5,
>> +	.ops		= &ops_ipq5332,
>> +	.hw_ids		= (unsigned int []){11, 12, 13, 14, 15},
>> +	.feat		= &ipq5332_feat,
>> +	.fields		= tsens_v2_regfields,
>> +};
>> +
>> +struct tsens_plat_data data_ipq5424 = {
>> +	.num_sensors	= 7,
>> +	.ops		= &ops_ipq5332,
>> +	.hw_ids		= (unsigned int []){9, 10, 11, 12, 13, 14, 15},
>> +	.feat		= &ipq5332_feat,
>> +	.fields		= tsens_v2_regfields,
>> +};
>> +
>>  /* Kept around for backward compatibility with old msm8996.dtsi */
>>  struct tsens_plat_data data_8996 = {
>>  	.num_sensors	= 13,
>> diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
>> index 0b4421bf4785..c5409225756f 100644
>> --- a/drivers/thermal/qcom/tsens.c
>> +++ b/drivers/thermal/qcom/tsens.c
>> @@ -975,7 +975,7 @@ int __init init_common(struct tsens_priv *priv)
>>  	ret = regmap_field_read(priv->rf[TSENS_EN], &enabled);
>>  	if (ret)
>>  		goto err_put_device;
>> -	if (!enabled) {
>> +	if (!enabled && (tsens_version(priv) != VER_2_X_NO_RPM)) {
>>  		dev_err(dev, "%s: device not enabled\n", __func__);
>>  		ret = -ENODEV;
>>  		goto err_put_device;
>> @@ -1102,6 +1102,12 @@ static SIMPLE_DEV_PM_OPS(tsens_pm_ops, tsens_suspend, tsens_resume);
>>  
>>  static const struct of_device_id tsens_table[] = {
>>  	{
>> +		.compatible = "qcom,ipq5332-tsens",
>> +		.data = &data_ipq5332,
>> +	}, {
>> +		.compatible = "qcom,ipq5424-tsens",
>> +		.data = &data_ipq5424,
>> +	}, {
>>  		.compatible = "qcom,ipq8064-tsens",
>>  		.data = &data_8960,
>>  	}, {
>> diff --git a/drivers/thermal/qcom/tsens.h b/drivers/thermal/qcom/tsens.h
>> index cab39de045b1..ac5358e48f74 100644
>> --- a/drivers/thermal/qcom/tsens.h
>> +++ b/drivers/thermal/qcom/tsens.h
>> @@ -35,6 +35,7 @@ enum tsens_ver {
>>  	VER_0_1,
>>  	VER_1_X,
>>  	VER_2_X,
>> +	VER_2_X_NO_RPM,
>>  };
>>  
>>  enum tsens_irq_type {
>> @@ -168,6 +169,7 @@ enum regfield_ids {
>>  	TSENS_SW_RST,
>>  	SENSOR_EN,
>>  	CODE_OR_TEMP,
>> +	MAIN_MEASURE_PERIOD,
>>  
>>  	/* ----- TM ------ */
>>  	/* TRDY */
>> @@ -650,6 +652,6 @@ extern struct tsens_plat_data data_8226, data_8909, data_8916, data_8939, data_8
>>  extern struct tsens_plat_data data_tsens_v1, data_8976, data_8956;
>>  
>>  /* TSENS v2 targets */
>> -extern struct tsens_plat_data data_8996, data_ipq8074, data_tsens_v2;
>> +extern struct tsens_plat_data data_8996, data_ipq8074, data_ipq5332, data_ipq5424, data_tsens_v2;
>>  
>>  #endif /* __QCOM_TSENS_H__ */
>> -- 
>> 2.34.1
>>
> 


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

* Re: [PATCH v6 3/7] thermal/drivers/tsens: Add TSENS enable and calibration support for V2
  2024-11-06  6:16     ` Manikanta Mylavarapu
@ 2024-11-06  6:24       ` Dmitry Baryshkov
  0 siblings, 0 replies; 23+ messages in thread
From: Dmitry Baryshkov @ 2024-11-06  6:24 UTC (permalink / raw)
  To: Manikanta Mylavarapu
  Cc: srinivas.kandagatla, robh, krzk+dt, conor+dt, amitk,
	thara.gopinath, rafael, daniel.lezcano, rui.zhang, lukasz.luba,
	andersson, konradybcio, linux-arm-msm, devicetree, linux-kernel,
	linux-pm, quic_srichara, quic_varada

On Wed, Nov 06, 2024 at 11:46:26AM +0530, Manikanta Mylavarapu wrote:
> 
> 
> On 11/5/2024 1:12 AM, Dmitry Baryshkov wrote:
> > On Mon, Nov 04, 2024 at 06:14:09PM +0530, Manikanta Mylavarapu wrote:

> >> +static int tsens_v2_calibration(struct tsens_priv *priv)
> >> +{
> >> +	struct device *dev = priv->dev;
> >> +	u32 mode, base0, base1;
> >> +	int i, ret;
> >> +
> >> +	if (priv->num_sensors > MAX_SENSORS)
> >> +		return -EINVAL;
> >> +
> >> +	ret = nvmem_cell_read_variable_le_u32(priv->dev, "mode", &mode);
> >> +	if (ret == -ENOENT)
> >> +		dev_warn(priv->dev, "Calibration data not present in DT\n");
> >> +	if (ret < 0)
> >> +		return ret;
> >> +
> >> +	dev_dbg(priv->dev, "calibration mode is %d\n", mode);
> >> +
> >> +	ret = nvmem_cell_read_variable_le_u32(priv->dev, "base0", &base0);
> >> +	if (ret < 0)
> >> +		return ret;
> >> +
> >> +	ret = nvmem_cell_read_variable_le_u32(priv->dev, "base1", &base1);
> > 
> > Is this actually base0 / base1 or rather base1 / base2 as used by the
> > tsens v0.1 / v1 ?
> > 
> 
> As per qualcomm internal register guide, these registers are named as base0 and base1.

Ack

> 
> Thanks & Regards,
> Manikanta.

-- 
With best wishes
Dmitry

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

* Re: [PATCH v6 7/7] arm64: dts: qcom: ipq5424: Add thermal zone nodes
  2024-11-04 13:51   ` Konrad Dybcio
@ 2024-11-06  8:47     ` Manikanta Mylavarapu
  2024-11-06  9:12       ` Konrad Dybcio
  0 siblings, 1 reply; 23+ messages in thread
From: Manikanta Mylavarapu @ 2024-11-06  8:47 UTC (permalink / raw)
  To: Konrad Dybcio, srinivas.kandagatla, robh, krzk+dt, conor+dt,
	amitk, thara.gopinath, rafael, daniel.lezcano, rui.zhang,
	lukasz.luba, andersson, konradybcio, linux-arm-msm, devicetree,
	linux-kernel, linux-pm
  Cc: quic_srichara, quic_varada



On 11/4/2024 7:21 PM, Konrad Dybcio wrote:
> On 4.11.2024 1:44 PM, Manikanta Mylavarapu wrote:
>> Add thermal zone nodes for sensors present in IPQ5424.
>>
>> Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
>> ---
> [...]
> 
>> +
>> +		cpu3-thermal {
>> +			polling-delay-passive = <0>;
>> +			polling-delay = <0>;
>> +			thermal-sensors = <&tsens 13>;
>> +
>> +			trips {
>> +				cpu-critical {
>> +					temperature = <120000>;
>> +					hysteresis = <9000>;
>> +					type = "critical";
>> +				};
>> +
>> +				cpu-passive {
>> +					temperature = <110000>;
>> +					hysteresis = <9000>;
>> +					type = "passive";
> 
> You have a passive trip point without passive polling
> 

Okay, will remove this.

>> +				};
>> +			};
>> +		};
>> +
>> +		wcss-tile2-thermal {
>> +			polling-delay-passive = <0>;
>> +			polling-delay = <0>;
> 
> These are the defaults
> 

Okay, sure. I will remove.

>> +			thermal-sensors = <&tsens 9>;
>> +
>> +			trips {
>> +				wcss_tile2-critical {
> 
> Node names must not contain underscores
> 

Okay, sure. I will remove.

Thanks & Regards,
Manikanta.




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

* Re: [PATCH v6 7/7] arm64: dts: qcom: ipq5424: Add thermal zone nodes
  2024-11-06  8:47     ` Manikanta Mylavarapu
@ 2024-11-06  9:12       ` Konrad Dybcio
  2024-11-06 10:25         ` Manikanta Mylavarapu
  0 siblings, 1 reply; 23+ messages in thread
From: Konrad Dybcio @ 2024-11-06  9:12 UTC (permalink / raw)
  To: Manikanta Mylavarapu, Konrad Dybcio, srinivas.kandagatla, robh,
	krzk+dt, conor+dt, amitk, thara.gopinath, rafael, daniel.lezcano,
	rui.zhang, lukasz.luba, andersson, konradybcio, linux-arm-msm,
	devicetree, linux-kernel, linux-pm
  Cc: quic_srichara, quic_varada



On 11/6/24 09:47, Manikanta Mylavarapu wrote:
> 
> 
> On 11/4/2024 7:21 PM, Konrad Dybcio wrote:
>> On 4.11.2024 1:44 PM, Manikanta Mylavarapu wrote:
>>> Add thermal zone nodes for sensors present in IPQ5424.
>>>
>>> Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
>>> ---
>> [...]
>>
>>> +
>>> +		cpu3-thermal {
>>> +			polling-delay-passive = <0>;
>>> +			polling-delay = <0>;
>>> +			thermal-sensors = <&tsens 13>;
>>> +
>>> +			trips {
>>> +				cpu-critical {
>>> +					temperature = <120000>;
>>> +					hysteresis = <9000>;
>>> +					type = "critical";
>>> +				};
>>> +
>>> +				cpu-passive {
>>> +					temperature = <110000>;
>>> +					hysteresis = <9000>;
>>> +					type = "passive";
>>
>> You have a passive trip point without passive polling
>>
> 
> Okay, will remove this.

You most likely want to preserve it, while keeping a sensible
polling frequency, so that userspace will be aware of the current
CPU temperature. <100> sounds like a sensible value here.

Konrad

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

* Re: [PATCH v6 7/7] arm64: dts: qcom: ipq5424: Add thermal zone nodes
  2024-11-06  9:12       ` Konrad Dybcio
@ 2024-11-06 10:25         ` Manikanta Mylavarapu
  2024-11-07 14:47           ` Konrad Dybcio
  0 siblings, 1 reply; 23+ messages in thread
From: Manikanta Mylavarapu @ 2024-11-06 10:25 UTC (permalink / raw)
  To: Konrad Dybcio, Konrad Dybcio, srinivas.kandagatla, robh, krzk+dt,
	conor+dt, amitk, thara.gopinath, rafael, daniel.lezcano,
	rui.zhang, lukasz.luba, andersson, konradybcio, linux-arm-msm,
	devicetree, linux-kernel, linux-pm
  Cc: quic_srichara, quic_varada



On 11/6/2024 2:42 PM, Konrad Dybcio wrote:
> 
> 
> On 11/6/24 09:47, Manikanta Mylavarapu wrote:
>>
>>
>> On 11/4/2024 7:21 PM, Konrad Dybcio wrote:
>>> On 4.11.2024 1:44 PM, Manikanta Mylavarapu wrote:
>>>> Add thermal zone nodes for sensors present in IPQ5424.
>>>>
>>>> Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
>>>> ---
>>> [...]
>>>
>>>> +
>>>> +        cpu3-thermal {
>>>> +            polling-delay-passive = <0>;
>>>> +            polling-delay = <0>;
>>>> +            thermal-sensors = <&tsens 13>;
>>>> +
>>>> +            trips {
>>>> +                cpu-critical {
>>>> +                    temperature = <120000>;
>>>> +                    hysteresis = <9000>;
>>>> +                    type = "critical";
>>>> +                };
>>>> +
>>>> +                cpu-passive {
>>>> +                    temperature = <110000>;
>>>> +                    hysteresis = <9000>;
>>>> +                    type = "passive";
>>>
>>> You have a passive trip point without passive polling
>>>
>>
>> Okay, will remove this.
> 
> You most likely want to preserve it, while keeping a sensible
> polling frequency, so that userspace will be aware of the current
> CPU temperature. <100> sounds like a sensible value here.
> 
> Konrad

Temperature sensor's present in IPQ5424 supports interrupts.
Hence no need to configure polling frequency.
I will remove polling-delay-passive/polling-delay.

Thanks & Regards,
Manikanta.

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

* Re: [PATCH v6 7/7] arm64: dts: qcom: ipq5424: Add thermal zone nodes
  2024-11-06 10:25         ` Manikanta Mylavarapu
@ 2024-11-07 14:47           ` Konrad Dybcio
  2024-11-11 11:51             ` Manikanta Mylavarapu
  0 siblings, 1 reply; 23+ messages in thread
From: Konrad Dybcio @ 2024-11-07 14:47 UTC (permalink / raw)
  To: Manikanta Mylavarapu, Konrad Dybcio, srinivas.kandagatla, robh,
	krzk+dt, conor+dt, amitk, thara.gopinath, rafael, daniel.lezcano,
	rui.zhang, lukasz.luba, andersson, konradybcio, linux-arm-msm,
	devicetree, linux-kernel, linux-pm
  Cc: quic_srichara, quic_varada

On 6.11.2024 11:25 AM, Manikanta Mylavarapu wrote:
> 
> 
> On 11/6/2024 2:42 PM, Konrad Dybcio wrote:
>>
>>
>> On 11/6/24 09:47, Manikanta Mylavarapu wrote:
>>>
>>>
>>> On 11/4/2024 7:21 PM, Konrad Dybcio wrote:
>>>> On 4.11.2024 1:44 PM, Manikanta Mylavarapu wrote:
>>>>> Add thermal zone nodes for sensors present in IPQ5424.
>>>>>
>>>>> Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
>>>>> ---
>>>> [...]
>>>>
>>>>> +
>>>>> +        cpu3-thermal {
>>>>> +            polling-delay-passive = <0>;
>>>>> +            polling-delay = <0>;
>>>>> +            thermal-sensors = <&tsens 13>;
>>>>> +
>>>>> +            trips {
>>>>> +                cpu-critical {
>>>>> +                    temperature = <120000>;
>>>>> +                    hysteresis = <9000>;
>>>>> +                    type = "critical";
>>>>> +                };
>>>>> +
>>>>> +                cpu-passive {
>>>>> +                    temperature = <110000>;
>>>>> +                    hysteresis = <9000>;
>>>>> +                    type = "passive";
>>>>
>>>> You have a passive trip point without passive polling
>>>>
>>>
>>> Okay, will remove this.
>>
>> You most likely want to preserve it, while keeping a sensible
>> polling frequency, so that userspace will be aware of the current
>> CPU temperature. <100> sounds like a sensible value here.
>>
>> Konrad
> 
> Temperature sensor's present in IPQ5424 supports interrupts.

Correct.

> Hence no need to configure polling frequency.

No, that interrupt firing signifies crossing the temp threshold (meaning
no updates beyond that) or the tsens watchdog barking.

Konrad

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

* Re: [PATCH v6 4/7] arm64: dts: qcom: ipq5332: Add tsens node
  2024-11-04 12:44 ` [PATCH v6 4/7] arm64: dts: qcom: ipq5332: Add tsens node Manikanta Mylavarapu
@ 2024-11-07 14:50   ` Konrad Dybcio
  2024-11-11 11:42     ` Manikanta Mylavarapu
  0 siblings, 1 reply; 23+ messages in thread
From: Konrad Dybcio @ 2024-11-07 14:50 UTC (permalink / raw)
  To: Manikanta Mylavarapu, srinivas.kandagatla, robh, krzk+dt,
	conor+dt, amitk, thara.gopinath, rafael, daniel.lezcano,
	rui.zhang, lukasz.luba, andersson, konradybcio, linux-arm-msm,
	devicetree, linux-kernel, linux-pm
  Cc: quic_srichara, quic_varada

On 4.11.2024 1:44 PM, Manikanta Mylavarapu wrote:
> From: Praveenkumar I <quic_ipkumar@quicinc.com>
> 
> IPQ5332 has tsens v2.3.3 peripheral. This patch adds the tsense
> node with nvmem cells for calibration data.
> 
> Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
> Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
> ---
> Changes in V6:
> 	- No change
> 
>  arch/arm64/boot/dts/qcom/ipq5332.dtsi | 66 +++++++++++++++++++++++++++
>  1 file changed, 66 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/ipq5332.dtsi b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
> index d3c3e215a15c..94dca05fdc2a 100644
> --- a/arch/arm64/boot/dts/qcom/ipq5332.dtsi
> +++ b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
> @@ -177,6 +177,46 @@ cpu_speed_bin: cpu-speed-bin@1d {
>  				reg = <0x1d 0x2>;
>  				bits = <7 2>;
>  			};
> +
> +			s11: s11@3a5 {

You're adding 's11' etc. to the global label namespace. Please make
the names more specific, like tsens_sens11_off

[...]

> +		tsens: thermal-sensor@4a9000 {
> +			compatible = "qcom,ipq5332-tsens";
> +			reg = <0x4a9000 0x1000>,
> +			      <0x4a8000 0x1000>;

Please pad the address part to 8 hex digits with leading zeroes.

Konrad

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

* Re: [PATCH v6 4/7] arm64: dts: qcom: ipq5332: Add tsens node
  2024-11-07 14:50   ` Konrad Dybcio
@ 2024-11-11 11:42     ` Manikanta Mylavarapu
  0 siblings, 0 replies; 23+ messages in thread
From: Manikanta Mylavarapu @ 2024-11-11 11:42 UTC (permalink / raw)
  To: Konrad Dybcio, srinivas.kandagatla, robh, krzk+dt, conor+dt,
	amitk, thara.gopinath, rafael, daniel.lezcano, rui.zhang,
	lukasz.luba, andersson, konradybcio, linux-arm-msm, devicetree,
	linux-kernel, linux-pm
  Cc: quic_srichara, quic_varada



On 11/7/2024 8:20 PM, Konrad Dybcio wrote:
> On 4.11.2024 1:44 PM, Manikanta Mylavarapu wrote:
>> From: Praveenkumar I <quic_ipkumar@quicinc.com>
>>
>> IPQ5332 has tsens v2.3.3 peripheral. This patch adds the tsense
>> node with nvmem cells for calibration data.
>>
>> Signed-off-by: Praveenkumar I <quic_ipkumar@quicinc.com>
>> Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
>> ---
>> Changes in V6:
>> 	- No change
>>
>>  arch/arm64/boot/dts/qcom/ipq5332.dtsi | 66 +++++++++++++++++++++++++++
>>  1 file changed, 66 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/qcom/ipq5332.dtsi b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
>> index d3c3e215a15c..94dca05fdc2a 100644
>> --- a/arch/arm64/boot/dts/qcom/ipq5332.dtsi
>> +++ b/arch/arm64/boot/dts/qcom/ipq5332.dtsi
>> @@ -177,6 +177,46 @@ cpu_speed_bin: cpu-speed-bin@1d {
>>  				reg = <0x1d 0x2>;
>>  				bits = <7 2>;
>>  			};
>> +
>> +			s11: s11@3a5 {
> 
> You're adding 's11' etc. to the global label namespace. Please make
> the names more specific, like tsens_sens11_off
> 
> [...]
> 

Okay, sure. I will update.

>> +		tsens: thermal-sensor@4a9000 {
>> +			compatible = "qcom,ipq5332-tsens";
>> +			reg = <0x4a9000 0x1000>,
>> +			      <0x4a8000 0x1000>;
> 
> Please pad the address part to 8 hex digits with leading zeroes.
> 

Leading zeros are already padded in V7 series.

Thanks & Regards,
Manikanta.

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

* Re: [PATCH v6 7/7] arm64: dts: qcom: ipq5424: Add thermal zone nodes
  2024-11-07 14:47           ` Konrad Dybcio
@ 2024-11-11 11:51             ` Manikanta Mylavarapu
  2024-11-12 11:02               ` Konrad Dybcio
  0 siblings, 1 reply; 23+ messages in thread
From: Manikanta Mylavarapu @ 2024-11-11 11:51 UTC (permalink / raw)
  To: Konrad Dybcio, Konrad Dybcio, srinivas.kandagatla, robh, krzk+dt,
	conor+dt, amitk, thara.gopinath, rafael, daniel.lezcano,
	rui.zhang, lukasz.luba, andersson, konradybcio, linux-arm-msm,
	devicetree, linux-kernel, linux-pm
  Cc: quic_srichara, quic_varada



On 11/7/2024 8:17 PM, Konrad Dybcio wrote:
> On 6.11.2024 11:25 AM, Manikanta Mylavarapu wrote:
>>
>>
>> On 11/6/2024 2:42 PM, Konrad Dybcio wrote:
>>>
>>>
>>> On 11/6/24 09:47, Manikanta Mylavarapu wrote:
>>>>
>>>>
>>>> On 11/4/2024 7:21 PM, Konrad Dybcio wrote:
>>>>> On 4.11.2024 1:44 PM, Manikanta Mylavarapu wrote:
>>>>>> Add thermal zone nodes for sensors present in IPQ5424.
>>>>>>
>>>>>> Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
>>>>>> ---
>>>>> [...]
>>>>>
>>>>>> +
>>>>>> +        cpu3-thermal {
>>>>>> +            polling-delay-passive = <0>;
>>>>>> +            polling-delay = <0>;
>>>>>> +            thermal-sensors = <&tsens 13>;
>>>>>> +
>>>>>> +            trips {
>>>>>> +                cpu-critical {
>>>>>> +                    temperature = <120000>;
>>>>>> +                    hysteresis = <9000>;
>>>>>> +                    type = "critical";
>>>>>> +                };
>>>>>> +
>>>>>> +                cpu-passive {
>>>>>> +                    temperature = <110000>;
>>>>>> +                    hysteresis = <9000>;
>>>>>> +                    type = "passive";
>>>>>
>>>>> You have a passive trip point without passive polling
>>>>>
>>>>
>>>> Okay, will remove this.
>>>
>>> You most likely want to preserve it, while keeping a sensible
>>> polling frequency, so that userspace will be aware of the current
>>> CPU temperature. <100> sounds like a sensible value here.
>>>
>>> Konrad
>>
>> Temperature sensor's present in IPQ5424 supports interrupts.
> 
> Correct.
> 
>> Hence no need to configure polling frequency.
> 
> No, that interrupt firing signifies crossing the temp threshold (meaning
> no updates beyond that) or the tsens watchdog barking.
> 
> Konrad

An interrupt fires when the temperature crosses a threshold.

Thanks & Regards,
Manikanta.

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

* Re: [PATCH v6 7/7] arm64: dts: qcom: ipq5424: Add thermal zone nodes
  2024-11-11 11:51             ` Manikanta Mylavarapu
@ 2024-11-12 11:02               ` Konrad Dybcio
  2024-11-15 10:38                 ` Manikanta Mylavarapu
  0 siblings, 1 reply; 23+ messages in thread
From: Konrad Dybcio @ 2024-11-12 11:02 UTC (permalink / raw)
  To: Manikanta Mylavarapu, Konrad Dybcio, srinivas.kandagatla, robh,
	krzk+dt, conor+dt, amitk, thara.gopinath, rafael, daniel.lezcano,
	rui.zhang, lukasz.luba, andersson, konradybcio, linux-arm-msm,
	devicetree, linux-kernel, linux-pm
  Cc: quic_srichara, quic_varada



On 11-Nov-24 12:51, Manikanta Mylavarapu wrote:
> 
> 
> On 11/7/2024 8:17 PM, Konrad Dybcio wrote:
>> On 6.11.2024 11:25 AM, Manikanta Mylavarapu wrote:
>>>
>>>
>>> On 11/6/2024 2:42 PM, Konrad Dybcio wrote:
>>>>
>>>>
>>>> On 11/6/24 09:47, Manikanta Mylavarapu wrote:
>>>>>
>>>>>
>>>>> On 11/4/2024 7:21 PM, Konrad Dybcio wrote:
>>>>>> On 4.11.2024 1:44 PM, Manikanta Mylavarapu wrote:
>>>>>>> Add thermal zone nodes for sensors present in IPQ5424.
>>>>>>>
>>>>>>> Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
>>>>>>> ---
>>>>>> [...]
>>>>>>
>>>>>>> +
>>>>>>> +        cpu3-thermal {
>>>>>>> +            polling-delay-passive = <0>;
>>>>>>> +            polling-delay = <0>;
>>>>>>> +            thermal-sensors = <&tsens 13>;
>>>>>>> +
>>>>>>> +            trips {
>>>>>>> +                cpu-critical {
>>>>>>> +                    temperature = <120000>;
>>>>>>> +                    hysteresis = <9000>;
>>>>>>> +                    type = "critical";
>>>>>>> +                };
>>>>>>> +
>>>>>>> +                cpu-passive {
>>>>>>> +                    temperature = <110000>;
>>>>>>> +                    hysteresis = <9000>;
>>>>>>> +                    type = "passive";
>>>>>>
>>>>>> You have a passive trip point without passive polling
>>>>>>
>>>>>
>>>>> Okay, will remove this.
>>>>
>>>> You most likely want to preserve it, while keeping a sensible
>>>> polling frequency, so that userspace will be aware of the current
>>>> CPU temperature. <100> sounds like a sensible value here.
>>>>
>>>> Konrad
>>>
>>> Temperature sensor's present in IPQ5424 supports interrupts.
>>
>> Correct.
>>
>>> Hence no need to configure polling frequency.
>>
>> No, that interrupt firing signifies crossing the temp threshold (meaning
>> no updates beyond that) or the tsens watchdog barking.
>>
>> Konrad
> 
> An interrupt fires when the temperature crosses a threshold.

Which means you can't monitor the temperature at runtime
without polling..

Konrad

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

* Re: [PATCH v6 7/7] arm64: dts: qcom: ipq5424: Add thermal zone nodes
  2024-11-12 11:02               ` Konrad Dybcio
@ 2024-11-15 10:38                 ` Manikanta Mylavarapu
  0 siblings, 0 replies; 23+ messages in thread
From: Manikanta Mylavarapu @ 2024-11-15 10:38 UTC (permalink / raw)
  To: Konrad Dybcio, Konrad Dybcio, srinivas.kandagatla, robh, krzk+dt,
	conor+dt, amitk, thara.gopinath, rafael, daniel.lezcano,
	rui.zhang, lukasz.luba, andersson, konradybcio, linux-arm-msm,
	devicetree, linux-kernel, linux-pm
  Cc: quic_srichara, quic_varada



On 11/12/2024 4:32 PM, Konrad Dybcio wrote:
> 
> 
> On 11-Nov-24 12:51, Manikanta Mylavarapu wrote:
>>
>>
>> On 11/7/2024 8:17 PM, Konrad Dybcio wrote:
>>> On 6.11.2024 11:25 AM, Manikanta Mylavarapu wrote:
>>>>
>>>>
>>>> On 11/6/2024 2:42 PM, Konrad Dybcio wrote:
>>>>>
>>>>>
>>>>> On 11/6/24 09:47, Manikanta Mylavarapu wrote:
>>>>>>
>>>>>>
>>>>>> On 11/4/2024 7:21 PM, Konrad Dybcio wrote:
>>>>>>> On 4.11.2024 1:44 PM, Manikanta Mylavarapu wrote:
>>>>>>>> Add thermal zone nodes for sensors present in IPQ5424.
>>>>>>>>
>>>>>>>> Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
>>>>>>>> ---
>>>>>>> [...]
>>>>>>>
>>>>>>>> +
>>>>>>>> +        cpu3-thermal {
>>>>>>>> +            polling-delay-passive = <0>;
>>>>>>>> +            polling-delay = <0>;
>>>>>>>> +            thermal-sensors = <&tsens 13>;
>>>>>>>> +
>>>>>>>> +            trips {
>>>>>>>> +                cpu-critical {
>>>>>>>> +                    temperature = <120000>;
>>>>>>>> +                    hysteresis = <9000>;
>>>>>>>> +                    type = "critical";
>>>>>>>> +                };
>>>>>>>> +
>>>>>>>> +                cpu-passive {
>>>>>>>> +                    temperature = <110000>;
>>>>>>>> +                    hysteresis = <9000>;
>>>>>>>> +                    type = "passive";
>>>>>>>
>>>>>>> You have a passive trip point without passive polling
>>>>>>>
>>>>>>
>>>>>> Okay, will remove this.
>>>>>
>>>>> You most likely want to preserve it, while keeping a sensible
>>>>> polling frequency, so that userspace will be aware of the current
>>>>> CPU temperature. <100> sounds like a sensible value here.
>>>>>
>>>>> Konrad
>>>>
>>>> Temperature sensor's present in IPQ5424 supports interrupts.
>>>
>>> Correct.
>>>
>>>> Hence no need to configure polling frequency.
>>>
>>> No, that interrupt firing signifies crossing the temp threshold (meaning
>>> no updates beyond that) or the tsens watchdog barking.
>>>
>>> Konrad
>>
>> An interrupt fires when the temperature crosses a threshold.
> 
> Which means you can't monitor the temperature at runtime
> without polling..
> 
> Konrad

Hi Konrad,

I got the point. Will configure polling-delay-passive with 100.

Thanks & Regards,
Manikanta.

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

end of thread, other threads:[~2024-11-15 10:38 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-04 12:44 [PATCH v6 0/7] Add TSENS support for IPQ5332, IPQ5424 Manikanta Mylavarapu
2024-11-04 12:44 ` [PATCH v6 1/7] dt-bindings: thermal: tsens: Add ipq5332, ipq5424 compatible Manikanta Mylavarapu
2024-11-05  8:45   ` Krzysztof Kozlowski
2024-11-04 12:44 ` [PATCH v6 2/7] dt-bindings: nvmem: Add compatible for IPQ5424 Manikanta Mylavarapu
2024-11-05  8:43   ` Krzysztof Kozlowski
2024-11-04 12:44 ` [PATCH v6 3/7] thermal/drivers/tsens: Add TSENS enable and calibration support for V2 Manikanta Mylavarapu
2024-11-04 19:42   ` Dmitry Baryshkov
2024-11-06  6:16     ` Manikanta Mylavarapu
2024-11-06  6:24       ` Dmitry Baryshkov
2024-11-04 12:44 ` [PATCH v6 4/7] arm64: dts: qcom: ipq5332: Add tsens node Manikanta Mylavarapu
2024-11-07 14:50   ` Konrad Dybcio
2024-11-11 11:42     ` Manikanta Mylavarapu
2024-11-04 12:44 ` [PATCH v6 5/7] arm64: dts: qcom: ipq5332: Add thermal zone nodes Manikanta Mylavarapu
2024-11-04 12:44 ` [PATCH v6 6/7] arm64: dts: qcom: ipq5424: Add tsens node Manikanta Mylavarapu
2024-11-04 12:44 ` [PATCH v6 7/7] arm64: dts: qcom: ipq5424: Add thermal zone nodes Manikanta Mylavarapu
2024-11-04 13:51   ` Konrad Dybcio
2024-11-06  8:47     ` Manikanta Mylavarapu
2024-11-06  9:12       ` Konrad Dybcio
2024-11-06 10:25         ` Manikanta Mylavarapu
2024-11-07 14:47           ` Konrad Dybcio
2024-11-11 11:51             ` Manikanta Mylavarapu
2024-11-12 11:02               ` Konrad Dybcio
2024-11-15 10:38                 ` Manikanta Mylavarapu

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