public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [RESEND][PATCH v1 0/8] thermal: Use trip pointers in thermal driver interface
@ 2024-07-29 15:50 Rafael J. Wysocki
  2024-07-29 15:53 ` [RESEND][PATCH v1 1/8] thermal: broadcom: Use thermal_zone_get_crit_temp() in bcm2835_thermal_probe() Rafael J. Wysocki
                   ` (7 more replies)
  0 siblings, 8 replies; 20+ messages in thread
From: Rafael J. Wysocki @ 2024-07-29 15:50 UTC (permalink / raw)
  To: Linux PM; +Cc: Daniel Lezcano, LKML, Lukasz Luba

Hi Everyone,

This material has been sent already:

https://lore.kernel.org/linux-pm/8409966.T7Z3S40VBb@kreacher/

but it has not got any traction, so resending it and I will assume no concerns
if there is still no response.

This series modifies a few drivers to stop using trip IDs in its
interactions with the core, which requires making assumptions
regarding trip ordering that may not be met in the future, and
there are other ways to do so that are preferred.

Having done that, it removes a few core functions that have no more users.

Thanks!






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

* [RESEND][PATCH v1 1/8] thermal: broadcom: Use thermal_zone_get_crit_temp() in bcm2835_thermal_probe()
  2024-07-29 15:50 [RESEND][PATCH v1 0/8] thermal: Use trip pointers in thermal driver interface Rafael J. Wysocki
@ 2024-07-29 15:53 ` Rafael J. Wysocki
  2024-07-29 21:54   ` Florian Fainelli
  2024-08-02  9:36   ` Lukasz Luba
  2024-07-29 15:56 ` [RESEND][PATCH v1 2/8] thermal: hisi: Use thermal_zone_for_each_trip() in hisi_thermal_register_sensor() Rafael J. Wysocki
                   ` (6 subsequent siblings)
  7 siblings, 2 replies; 20+ messages in thread
From: Rafael J. Wysocki @ 2024-07-29 15:53 UTC (permalink / raw)
  To: Linux PM
  Cc: Daniel Lezcano, LKML, Lukasz Luba, Florian Fainelli,
	Broadcom internal kernel review list, Ray Jui, Scott Branden

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Modify the bcm2835 thermal driver to use thermal_zone_get_crit_temp() in
bcm2835_thermal_probe() instead of relying on the assumption that the
critical trip index will always be 0.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/thermal/broadcom/bcm2835_thermal.c |    7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

Index: linux-pm/drivers/thermal/broadcom/bcm2835_thermal.c
===================================================================
--- linux-pm.orig/drivers/thermal/broadcom/bcm2835_thermal.c
+++ linux-pm/drivers/thermal/broadcom/bcm2835_thermal.c
@@ -208,8 +208,7 @@ static int bcm2835_thermal_probe(struct
 	 */
 	val = readl(data->regs + BCM2835_TS_TSENSCTL);
 	if (!(val & BCM2835_TS_TSENSCTL_RSTB)) {
-		struct thermal_trip trip;
-		int offset, slope;
+		int offset, slope, crit_temp;
 
 		slope = thermal_zone_get_slope(tz);
 		offset = thermal_zone_get_offset(tz);
@@ -217,7 +216,7 @@ static int bcm2835_thermal_probe(struct
 		 * For now we deal only with critical, otherwise
 		 * would need to iterate
 		 */
-		err = thermal_zone_get_trip(tz, 0, &trip);
+		err = thermal_zone_get_crit_temp(tz, &crit_temp);
 		if (err < 0) {
 			dev_err(dev, "Not able to read trip_temp: %d\n", err);
 			return err;
@@ -232,7 +231,7 @@ static int bcm2835_thermal_probe(struct
 		val |= (0xFE << BCM2835_TS_TSENSCTL_RSTDELAY_SHIFT);
 
 		/*  trip_adc value from info */
-		val |= bcm2835_thermal_temp2adc(trip.temperature,
+		val |= bcm2835_thermal_temp2adc(crit_temp,
 						offset,
 						slope)
 			<< BCM2835_TS_TSENSCTL_THOLD_SHIFT;




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

* [RESEND][PATCH v1 2/8] thermal: hisi: Use thermal_zone_for_each_trip() in hisi_thermal_register_sensor()
  2024-07-29 15:50 [RESEND][PATCH v1 0/8] thermal: Use trip pointers in thermal driver interface Rafael J. Wysocki
  2024-07-29 15:53 ` [RESEND][PATCH v1 1/8] thermal: broadcom: Use thermal_zone_get_crit_temp() in bcm2835_thermal_probe() Rafael J. Wysocki
@ 2024-07-29 15:56 ` Rafael J. Wysocki
  2024-08-02  9:35   ` Lukasz Luba
  2024-07-29 15:58 ` [RESEND][PATCH v1 3/8] thermal: qcom: Use thermal_zone_get_crit_temp() in qpnp_tm_init() Rafael J. Wysocki
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 20+ messages in thread
From: Rafael J. Wysocki @ 2024-07-29 15:56 UTC (permalink / raw)
  To: Linux PM; +Cc: Daniel Lezcano, LKML, Lukasz Luba

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Modify hisi_thermal_register_sensor() to use thermal_zone_for_each_trip()
for walking trip points instead of iterating over trip indices and using
thermal_zone_get_trip() to get a struct thermal_trip pointer from a trip
index.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---

This patch does not depend on the previous patch(es) in the series.

---
 drivers/thermal/hisi_thermal.c |   22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

Index: linux-pm/drivers/thermal/hisi_thermal.c
===================================================================
--- linux-pm.orig/drivers/thermal/hisi_thermal.c
+++ linux-pm/drivers/thermal/hisi_thermal.c
@@ -465,6 +465,18 @@ static irqreturn_t hisi_thermal_alarm_ir
 	return IRQ_HANDLED;
 }
 
+static int hisi_trip_walk_cb(struct thermal_trip *trip, void *arg)
+{
+	struct hisi_thermal_sensor *sensor = arg;
+
+	if (trip->type != THERMAL_TRIP_PASSIVE)
+		return 0;
+
+	sensor->thres_temp = trip->temperature;
+	/* Return nonzero to terminate the search. */
+	return 1;
+}
+
 static int hisi_thermal_register_sensor(struct platform_device *pdev,
 					struct hisi_thermal_sensor *sensor)
 {
@@ -482,15 +494,7 @@ static int hisi_thermal_register_sensor(
 		return ret;
 	}
 
-	for (i = 0; i < thermal_zone_get_num_trips(sensor->tzd); i++) {
-
-		thermal_zone_get_trip(sensor->tzd, i, &trip);
-
-		if (trip.type == THERMAL_TRIP_PASSIVE) {
-			sensor->thres_temp = trip.temperature;
-			break;
-		}
-	}
+	thermal_zone_for_each_trip(sensor->tzd, hisi_trip_walk_cb, sensor);
 
 	return 0;
 }




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

* [RESEND][PATCH v1 3/8] thermal: qcom: Use thermal_zone_get_crit_temp() in qpnp_tm_init()
  2024-07-29 15:50 [RESEND][PATCH v1 0/8] thermal: Use trip pointers in thermal driver interface Rafael J. Wysocki
  2024-07-29 15:53 ` [RESEND][PATCH v1 1/8] thermal: broadcom: Use thermal_zone_get_crit_temp() in bcm2835_thermal_probe() Rafael J. Wysocki
  2024-07-29 15:56 ` [RESEND][PATCH v1 2/8] thermal: hisi: Use thermal_zone_for_each_trip() in hisi_thermal_register_sensor() Rafael J. Wysocki
@ 2024-07-29 15:58 ` Rafael J. Wysocki
  2024-08-02  9:37   ` Lukasz Luba
  2024-08-14  5:09   ` Amit Kucheria
  2024-07-29 16:02 ` [RESEND][PATCH v1 4/8] thermal: tegra: Introduce struct trip_temps for critical and hot trips Rafael J. Wysocki
                   ` (4 subsequent siblings)
  7 siblings, 2 replies; 20+ messages in thread
From: Rafael J. Wysocki @ 2024-07-29 15:58 UTC (permalink / raw)
  To: Linux PM
  Cc: Daniel Lezcano, LKML, Lukasz Luba, Amit Kucheria, Thara Gopinath,
	linux-arm-msm

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Modify qpnp_tm_init() to use thermal_zone_get_crit_temp() to get the
critical trip temperature instead of iterating over trip indices and
using thermal_zone_get_trip() to get a struct thermal_trip pointer
from a trip index until it finds the critical one.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---

This patch does not depend on the previous patch(es) in the series.

---
 drivers/thermal/qcom/qcom-spmi-temp-alarm.c |   22 +++-------------------
 1 file changed, 3 insertions(+), 19 deletions(-)

Index: linux-pm/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
===================================================================
--- linux-pm.orig/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
+++ linux-pm/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
@@ -291,24 +291,6 @@ static irqreturn_t qpnp_tm_isr(int irq,
 	return IRQ_HANDLED;
 }
 
-static int qpnp_tm_get_critical_trip_temp(struct qpnp_tm_chip *chip)
-{
-	struct thermal_trip trip;
-	int i, ret;
-
-	for (i = 0; i < thermal_zone_get_num_trips(chip->tz_dev); i++) {
-
-		ret = thermal_zone_get_trip(chip->tz_dev, i, &trip);
-		if (ret)
-			continue;
-
-		if (trip.type == THERMAL_TRIP_CRITICAL)
-			return trip.temperature;
-	}
-
-	return THERMAL_TEMP_INVALID;
-}
-
 /*
  * This function initializes the internal temp value based on only the
  * current thermal stage and threshold. Setup threshold control and
@@ -343,7 +325,9 @@ static int qpnp_tm_init(struct qpnp_tm_c
 
 	mutex_unlock(&chip->lock);
 
-	crit_temp = qpnp_tm_get_critical_trip_temp(chip);
+	ret = thermal_zone_get_crit_temp(chip->tz_dev, &crit_temp);
+	if (ret)
+		crit_temp = THERMAL_TEMP_INVALID;
 
 	mutex_lock(&chip->lock);
 




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

* [RESEND][PATCH v1 4/8] thermal: tegra: Introduce struct trip_temps for critical and hot trips
  2024-07-29 15:50 [RESEND][PATCH v1 0/8] thermal: Use trip pointers in thermal driver interface Rafael J. Wysocki
                   ` (2 preceding siblings ...)
  2024-07-29 15:58 ` [RESEND][PATCH v1 3/8] thermal: qcom: Use thermal_zone_get_crit_temp() in qpnp_tm_init() Rafael J. Wysocki
@ 2024-07-29 16:02 ` Rafael J. Wysocki
  2024-08-02  9:40   ` Lukasz Luba
  2024-07-29 16:05 ` [RESEND][PATCH v1 5/8] thermal: tegra: Use thermal_zone_for_each_trip() for walking trip points Rafael J. Wysocki
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 20+ messages in thread
From: Rafael J. Wysocki @ 2024-07-29 16:02 UTC (permalink / raw)
  To: Linux PM
  Cc: Daniel Lezcano, LKML, Lukasz Luba, Thierry Reding,
	Jonathan Hunter, linux-tegra

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Introduce a helper structure, struct trip_temps, for storing the
temperatures of the critical and hot trip points.

This helps to make the code in tegra_tsensor_get_hw_channel_trips()
somewhat cleaner and will be useful subsequently in eliminating
iteration over trip indices from the driver.

No intentional functional impact.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---

This patch does not depend on the previous patch(es) in the series.

---
 drivers/thermal/tegra/tegra30-tsensor.c |   34 ++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 14 deletions(-)

Index: linux-pm/drivers/thermal/tegra/tegra30-tsensor.c
===================================================================
--- linux-pm.orig/drivers/thermal/tegra/tegra30-tsensor.c
+++ linux-pm/drivers/thermal/tegra/tegra30-tsensor.c
@@ -303,8 +303,13 @@ stop_channel:
 	return 0;
 }
 
+struct trip_temps {
+	int hot_trip;
+	int crit_trip;
+};
+
 static void tegra_tsensor_get_hw_channel_trips(struct thermal_zone_device *tzd,
-					       int *hot_trip, int *crit_trip)
+					       struct trip_temps *temps)
 {
 	unsigned int i;
 
@@ -312,8 +317,8 @@ static void tegra_tsensor_get_hw_channel
 	 * 90C is the maximal critical temperature of all Tegra30 SoC variants,
 	 * use it for the default trip if unspecified in a device-tree.
 	 */
-	*hot_trip  = 85000;
-	*crit_trip = 90000;
+	temps->hot_trip  = 85000;
+	temps->crit_trip = 90000;
 
 	for (i = 0; i < thermal_zone_get_num_trips(tzd); i++) {
 
@@ -322,14 +327,14 @@ static void tegra_tsensor_get_hw_channel
 		thermal_zone_get_trip(tzd, i, &trip);
 
 		if (trip.type == THERMAL_TRIP_HOT)
-			*hot_trip = trip.temperature;
+			temps->hot_trip = trip.temperature;
 
 		if (trip.type == THERMAL_TRIP_CRITICAL)
-			*crit_trip = trip.temperature;
+			temps->crit_trip = trip.temperature;
 	}
 
 	/* clamp hardware trips to the calibration limits */
-	*hot_trip = clamp(*hot_trip, 25000, 90000);
+	temps->hot_trip = clamp(temps->hot_trip, 25000, 90000);
 
 	/*
 	 * Kernel will perform a normal system shut down if it will
@@ -338,7 +343,7 @@ static void tegra_tsensor_get_hw_channel
 	 * shut down gracefully before sending signal to the Power
 	 * Management controller.
 	 */
-	*crit_trip = clamp(*crit_trip + 5000, 25000, 90000);
+	temps->crit_trip = clamp(temps->crit_trip + 5000, 25000, 90000);
 }
 
 static int tegra_tsensor_enable_hw_channel(const struct tegra_tsensor *ts,
@@ -346,7 +351,8 @@ static int tegra_tsensor_enable_hw_chann
 {
 	const struct tegra_tsensor_channel *tsc = &ts->ch[id];
 	struct thermal_zone_device *tzd = tsc->tzd;
-	int err, hot_trip = 0, crit_trip = 0;
+	struct trip_temps temps = { 0 };
+	int err;
 	u32 val;
 
 	if (!tzd) {
@@ -357,24 +363,24 @@ static int tegra_tsensor_enable_hw_chann
 		return 0;
 	}
 
-	tegra_tsensor_get_hw_channel_trips(tzd, &hot_trip, &crit_trip);
+	tegra_tsensor_get_hw_channel_trips(tzd, &temps);
 
 	dev_info_once(ts->dev, "ch%u: PMC emergency shutdown trip set to %dC\n",
-		      id, DIV_ROUND_CLOSEST(crit_trip, 1000));
+		      id, DIV_ROUND_CLOSEST(temps.crit_trip, 1000));
 
-	hot_trip  = tegra_tsensor_temp_to_counter(ts, hot_trip);
-	crit_trip = tegra_tsensor_temp_to_counter(ts, crit_trip);
+	temps.hot_trip  = tegra_tsensor_temp_to_counter(ts, temps.hot_trip);
+	temps.crit_trip = tegra_tsensor_temp_to_counter(ts, temps.crit_trip);
 
 	/* program LEVEL2 counter threshold */
 	val = readl_relaxed(tsc->regs + TSENSOR_SENSOR0_CONFIG1);
 	val &= ~TSENSOR_SENSOR0_CONFIG1_TH2;
-	val |= FIELD_PREP(TSENSOR_SENSOR0_CONFIG1_TH2, hot_trip);
+	val |= FIELD_PREP(TSENSOR_SENSOR0_CONFIG1_TH2, temps.hot_trip);
 	writel_relaxed(val, tsc->regs + TSENSOR_SENSOR0_CONFIG1);
 
 	/* program LEVEL3 counter threshold */
 	val = readl_relaxed(tsc->regs + TSENSOR_SENSOR0_CONFIG2);
 	val &= ~TSENSOR_SENSOR0_CONFIG2_TH3;
-	val |= FIELD_PREP(TSENSOR_SENSOR0_CONFIG2_TH3, crit_trip);
+	val |= FIELD_PREP(TSENSOR_SENSOR0_CONFIG2_TH3, temps.crit_trip);
 	writel_relaxed(val, tsc->regs + TSENSOR_SENSOR0_CONFIG2);
 
 	/*




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

* [RESEND][PATCH v1 5/8] thermal: tegra: Use thermal_zone_for_each_trip() for walking trip points
  2024-07-29 15:50 [RESEND][PATCH v1 0/8] thermal: Use trip pointers in thermal driver interface Rafael J. Wysocki
                   ` (3 preceding siblings ...)
  2024-07-29 16:02 ` [RESEND][PATCH v1 4/8] thermal: tegra: Introduce struct trip_temps for critical and hot trips Rafael J. Wysocki
@ 2024-07-29 16:05 ` Rafael J. Wysocki
  2024-08-02  9:47   ` Lukasz Luba
  2024-07-29 16:06 ` [RESEND][PATCH v1 6/8] thermal: helpers: Drop get_thermal_instance() Rafael J. Wysocki
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 20+ messages in thread
From: Rafael J. Wysocki @ 2024-07-29 16:05 UTC (permalink / raw)
  To: Linux PM
  Cc: Daniel Lezcano, LKML, Lukasz Luba, Thierry Reding,
	Jonathan Hunter, linux-tegra

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

It is generally inefficient to iterate over trip indices and call
thermal_zone_get_trip() every time to get the struct thermal_trip
corresponding to the given trip index, so modify the Tegra thermal
drivers to use thermal_zone_for_each_trip() for walking trips.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---

This patch does not depend on patches [1-3/8].

---
 drivers/thermal/tegra/soctherm.c        |   38 ++++++++++++++++----------------
 drivers/thermal/tegra/tegra30-tsensor.c |   25 ++++++++++-----------
 2 files changed, 33 insertions(+), 30 deletions(-)

Index: linux-pm/drivers/thermal/tegra/soctherm.c
===================================================================
--- linux-pm.orig/drivers/thermal/tegra/soctherm.c
+++ linux-pm/drivers/thermal/tegra/soctherm.c
@@ -682,24 +682,25 @@ static const struct thermal_zone_device_
 	.set_trips = tegra_thermctl_set_trips,
 };
 
-static int get_hot_temp(struct thermal_zone_device *tz, int *trip_id, int *temp)
+static int get_hot_trip_cb(struct thermal_trip *trip, void *arg)
 {
-	int i, ret;
-	struct thermal_trip trip;
+	const struct thermal_trip **trip_ret = arg;
 
-	for (i = 0; i < thermal_zone_get_num_trips(tz); i++) {
+	if (trip->type != THERMAL_TRIP_HOT)
+		return 0;
 
-		ret = thermal_zone_get_trip(tz, i, &trip);
-		if (ret)
-			return -EINVAL;
-
-		if (trip.type == THERMAL_TRIP_HOT) {
-			*trip_id = i;
-			return 0;
-		}
-	}
+	*trip_ret = trip;
+	/* Return nonzero to terminate the search. */
+	return 1;
+}
 
-	return -EINVAL;
+static const struct thermal_trip *get_hot_trip(struct thermal_zone_device *tz)
+{
+	const struct thermal_trip *trip = NULL;
+
+	thermal_zone_for_each_trip(tz, get_hot_trip_cb, &trip);
+
+	return trip;
 }
 
 /**
@@ -731,8 +732,9 @@ static int tegra_soctherm_set_hwtrips(st
 				      struct thermal_zone_device *tz)
 {
 	struct tegra_soctherm *ts = dev_get_drvdata(dev);
+	const struct thermal_trip *hot_trip;
 	struct soctherm_throt_cfg *stc;
-	int i, trip, temperature, ret;
+	int i, temperature, ret;
 
 	/* Get thermtrips. If missing, try to get critical trips. */
 	temperature = tsensor_group_thermtrip_get(ts, sg->id);
@@ -749,8 +751,8 @@ static int tegra_soctherm_set_hwtrips(st
 	dev_info(dev, "thermtrip: will shut down when %s reaches %d mC\n",
 		 sg->name, temperature);
 
-	ret = get_hot_temp(tz, &trip, &temperature);
-	if (ret) {
+	hot_trip = get_hot_trip(tz);
+	if (!hot_trip) {
 		dev_info(dev, "throttrip: %s: missing hot temperature\n",
 			 sg->name);
 		return 0;
@@ -763,7 +765,7 @@ static int tegra_soctherm_set_hwtrips(st
 			continue;
 
 		cdev = ts->throt_cfgs[i].cdev;
-		if (get_thermal_instance(tz, cdev, trip))
+		if (thermal_trip_is_bound_to_cdev(tz, hot_trip, cdev))
 			stc = find_throttle_cfg_by_name(ts, cdev->type);
 		else
 			continue;
Index: linux-pm/drivers/thermal/tegra/tegra30-tsensor.c
===================================================================
--- linux-pm.orig/drivers/thermal/tegra/tegra30-tsensor.c
+++ linux-pm/drivers/thermal/tegra/tegra30-tsensor.c
@@ -308,6 +308,18 @@ struct trip_temps {
 	int crit_trip;
 };
 
+static int tegra_tsensor_get_trips_cb(struct thermal_trip *trip, void *arg)
+{
+	struct trip_temps *temps = arg;
+
+	if (trip->type == THERMAL_TRIP_HOT)
+		temps->hot_trip = trip->temperature;
+	else if (trip->type == THERMAL_TRIP_CRITICAL)
+		temps->crit_trip = trip->temperature;
+
+	return 0;
+}
+
 static void tegra_tsensor_get_hw_channel_trips(struct thermal_zone_device *tzd,
 					       struct trip_temps *temps)
 {
@@ -320,18 +332,7 @@ static void tegra_tsensor_get_hw_channel
 	temps->hot_trip  = 85000;
 	temps->crit_trip = 90000;
 
-	for (i = 0; i < thermal_zone_get_num_trips(tzd); i++) {
-
-		struct thermal_trip trip;
-
-		thermal_zone_get_trip(tzd, i, &trip);
-
-		if (trip.type == THERMAL_TRIP_HOT)
-			temps->hot_trip = trip.temperature;
-
-		if (trip.type == THERMAL_TRIP_CRITICAL)
-			temps->crit_trip = trip.temperature;
-	}
+	thermal_zone_for_each_trip(tzd, tegra_tsensor_get_trips_cb, temps);
 
 	/* clamp hardware trips to the calibration limits */
 	temps->hot_trip = clamp(temps->hot_trip, 25000, 90000);




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

* [RESEND][PATCH v1 6/8] thermal: helpers: Drop get_thermal_instance()
  2024-07-29 15:50 [RESEND][PATCH v1 0/8] thermal: Use trip pointers in thermal driver interface Rafael J. Wysocki
                   ` (4 preceding siblings ...)
  2024-07-29 16:05 ` [RESEND][PATCH v1 5/8] thermal: tegra: Use thermal_zone_for_each_trip() for walking trip points Rafael J. Wysocki
@ 2024-07-29 16:06 ` Rafael J. Wysocki
  2024-08-02  9:53   ` Lukasz Luba
  2024-07-29 16:11 ` [PATCH v2 7/8] thermal: trip: Get rid of thermal_zone_get_num_trips() Rafael J. Wysocki
  2024-07-29 16:12 ` [RESEND][PATCH v1 8/8] thermal: trip: Drop thermal_zone_get_trip() Rafael J. Wysocki
  7 siblings, 1 reply; 20+ messages in thread
From: Rafael J. Wysocki @ 2024-07-29 16:06 UTC (permalink / raw)
  To: Linux PM; +Cc: Daniel Lezcano, LKML, Lukasz Luba

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

There are no more users of get_thermal_instance(), so drop it.

While at it, replace get_instance() returning a pointer to struct
thermal_instance with thermal_instance_present() returning a bool
which is more straightforward.

No functional impact.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/thermal/thermal_core.h    |    5 -----
 drivers/thermal/thermal_helpers.c |   30 ++++++------------------------
 2 files changed, 6 insertions(+), 29 deletions(-)

Index: linux-pm/drivers/thermal/thermal_core.h
===================================================================
--- linux-pm.orig/drivers/thermal/thermal_core.h
+++ linux-pm/drivers/thermal/thermal_core.h
@@ -204,11 +204,6 @@ void __thermal_cdev_update(struct therma
 
 int get_tz_trend(struct thermal_zone_device *tz, const struct thermal_trip *trip);
 
-struct thermal_instance *
-get_thermal_instance(struct thermal_zone_device *tz,
-		     struct thermal_cooling_device *cdev,
-		     int trip);
-
 /*
  * This structure is used to describe the behavior of
  * a certain cooling device on a certain trip point
Index: linux-pm/drivers/thermal/thermal_helpers.c
===================================================================
--- linux-pm.orig/drivers/thermal/thermal_helpers.c
+++ linux-pm/drivers/thermal/thermal_helpers.c
@@ -39,18 +39,18 @@ int get_tz_trend(struct thermal_zone_dev
 	return trend;
 }
 
-static struct thermal_instance *get_instance(struct thermal_zone_device *tz,
-					     struct thermal_cooling_device *cdev,
-					     const struct thermal_trip *trip)
+static bool thermal_instance_present(struct thermal_zone_device *tz,
+				     struct thermal_cooling_device *cdev,
+				     const struct thermal_trip *trip)
 {
 	struct thermal_instance *ti;
 
 	list_for_each_entry(ti, &tz->thermal_instances, tz_node) {
 		if (ti->trip == trip && ti->cdev == cdev)
-			return ti;
+			return true;
 	}
 
-	return NULL;
+	return false;
 }
 
 bool thermal_trip_is_bound_to_cdev(struct thermal_zone_device *tz,
@@ -62,7 +62,7 @@ bool thermal_trip_is_bound_to_cdev(struc
 	mutex_lock(&tz->lock);
 	mutex_lock(&cdev->lock);
 
-	ret = !!get_instance(tz, cdev, trip);
+	ret = thermal_instance_present(tz, cdev, trip);
 
 	mutex_unlock(&cdev->lock);
 	mutex_unlock(&tz->lock);
@@ -71,24 +71,6 @@ bool thermal_trip_is_bound_to_cdev(struc
 }
 EXPORT_SYMBOL_GPL(thermal_trip_is_bound_to_cdev);
 
-struct thermal_instance *
-get_thermal_instance(struct thermal_zone_device *tz,
-		     struct thermal_cooling_device *cdev, int trip_index)
-{
-	struct thermal_instance *ti;
-
-	mutex_lock(&tz->lock);
-	mutex_lock(&cdev->lock);
-
-	ti = get_instance(tz, cdev, &tz->trips[trip_index].trip);
-
-	mutex_unlock(&cdev->lock);
-	mutex_unlock(&tz->lock);
-
-	return ti;
-}
-EXPORT_SYMBOL(get_thermal_instance);
-
 /**
  * __thermal_zone_get_temp() - returns the temperature of a thermal zone
  * @tz: a valid pointer to a struct thermal_zone_device




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

* [PATCH v2 7/8] thermal: trip: Get rid of thermal_zone_get_num_trips()
  2024-07-29 15:50 [RESEND][PATCH v1 0/8] thermal: Use trip pointers in thermal driver interface Rafael J. Wysocki
                   ` (5 preceding siblings ...)
  2024-07-29 16:06 ` [RESEND][PATCH v1 6/8] thermal: helpers: Drop get_thermal_instance() Rafael J. Wysocki
@ 2024-07-29 16:11 ` Rafael J. Wysocki
  2024-07-30 10:37   ` Niklas Söderlund
  2024-08-02  9:55   ` Lukasz Luba
  2024-07-29 16:12 ` [RESEND][PATCH v1 8/8] thermal: trip: Drop thermal_zone_get_trip() Rafael J. Wysocki
  7 siblings, 2 replies; 20+ messages in thread
From: Rafael J. Wysocki @ 2024-07-29 16:11 UTC (permalink / raw)
  To: Linux PM
  Cc: Daniel Lezcano, LKML, Lukasz Luba, Niklas Söderlund,
	linux-renesas-soc

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

The only existing caller of thermal_zone_get_num_trips(), which is
rcar_gen3_thermal_probe(), uses this function to put the number of
trip points into a kernel log message, but this information is also
available from the thermal sysfs interface.

For this reason, remove the thermal_zone_get_num_trips() call from
rcar_gen3_thermal_probe() and drop the former altogether.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---

A new version, based on the discussion following the v1:

https://lore.kernel.org/linux-pm/20240617183949.GO382677@ragnatech.se/

The Renesas driver change does not depend on the previous patches
in the series.

---
 drivers/thermal/renesas/rcar_gen3_thermal.c |    6 +-----
 drivers/thermal/thermal_trip.c              |    6 ------
 include/linux/thermal.h                     |    1 -
 3 files changed, 1 insertion(+), 12 deletions(-)

Index: linux-pm/drivers/thermal/renesas/rcar_gen3_thermal.c
===================================================================
--- linux-pm.orig/drivers/thermal/renesas/rcar_gen3_thermal.c
+++ linux-pm/drivers/thermal/renesas/rcar_gen3_thermal.c
@@ -563,11 +563,7 @@ static int rcar_gen3_thermal_probe(struc
 		if (ret)
 			goto error_unregister;
 
-		ret = thermal_zone_get_num_trips(tsc->zone);
-		if (ret < 0)
-			goto error_unregister;
-
-		dev_info(dev, "Sensor %u: Loaded %d trip points\n", i, ret);
+		dev_info(dev, "Sensor %u: Loaded\n", i);
 	}
 
 	if (!priv->num_tscs) {
Index: linux-pm/drivers/thermal/thermal_trip.c
===================================================================
--- linux-pm.orig/drivers/thermal/thermal_trip.c
+++ linux-pm/drivers/thermal/thermal_trip.c
@@ -55,12 +55,6 @@ int thermal_zone_for_each_trip(struct th
 }
 EXPORT_SYMBOL_GPL(thermal_zone_for_each_trip);
 
-int thermal_zone_get_num_trips(struct thermal_zone_device *tz)
-{
-	return tz->num_trips;
-}
-EXPORT_SYMBOL_GPL(thermal_zone_get_num_trips);
-
 /**
  * thermal_zone_set_trips - Computes the next trip points for the driver
  * @tz: a pointer to a thermal zone device structure
Index: linux-pm/include/linux/thermal.h
===================================================================
--- linux-pm.orig/include/linux/thermal.h
+++ linux-pm/include/linux/thermal.h
@@ -210,7 +210,6 @@ int for_each_thermal_trip(struct thermal
 int thermal_zone_for_each_trip(struct thermal_zone_device *tz,
 			       int (*cb)(struct thermal_trip *, void *),
 			       void *data);
-int thermal_zone_get_num_trips(struct thermal_zone_device *tz);
 void thermal_zone_set_trip_temp(struct thermal_zone_device *tz,
 				struct thermal_trip *trip, int temp);
 




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

* [RESEND][PATCH v1 8/8] thermal: trip: Drop thermal_zone_get_trip()
  2024-07-29 15:50 [RESEND][PATCH v1 0/8] thermal: Use trip pointers in thermal driver interface Rafael J. Wysocki
                   ` (6 preceding siblings ...)
  2024-07-29 16:11 ` [PATCH v2 7/8] thermal: trip: Get rid of thermal_zone_get_num_trips() Rafael J. Wysocki
@ 2024-07-29 16:12 ` Rafael J. Wysocki
  2024-08-02  9:56   ` Lukasz Luba
  7 siblings, 1 reply; 20+ messages in thread
From: Rafael J. Wysocki @ 2024-07-29 16:12 UTC (permalink / raw)
  To: Linux PM; +Cc: Daniel Lezcano, LKML, Lukasz Luba

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

There are no more callers of thermal_zone_get_trip() in the tree, so
drop it.

No functional impact.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/thermal/thermal_trip.c |   14 --------------
 include/linux/thermal.h        |    2 --
 2 files changed, 16 deletions(-)

Index: linux-pm/drivers/thermal/thermal_trip.c
===================================================================
--- linux-pm.orig/drivers/thermal/thermal_trip.c
+++ linux-pm/drivers/thermal/thermal_trip.c
@@ -108,20 +108,6 @@ void thermal_zone_set_trips(struct therm
 		dev_err(&tz->device, "Failed to set trips: %d\n", ret);
 }
 
-int thermal_zone_get_trip(struct thermal_zone_device *tz, int trip_id,
-			  struct thermal_trip *trip)
-{
-	if (!tz || !trip || trip_id < 0 || trip_id >= tz->num_trips)
-		return -EINVAL;
-
-	mutex_lock(&tz->lock);
-	*trip = tz->trips[trip_id].trip;
-	mutex_unlock(&tz->lock);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(thermal_zone_get_trip);
-
 int thermal_zone_trip_id(const struct thermal_zone_device *tz,
 			 const struct thermal_trip *trip)
 {
Index: linux-pm/include/linux/thermal.h
===================================================================
--- linux-pm.orig/include/linux/thermal.h
+++ linux-pm/include/linux/thermal.h
@@ -202,8 +202,6 @@ static inline void devm_thermal_of_zone_
 }
 #endif
 
-int thermal_zone_get_trip(struct thermal_zone_device *tz, int trip_id,
-			  struct thermal_trip *trip);
 int for_each_thermal_trip(struct thermal_zone_device *tz,
 			  int (*cb)(struct thermal_trip *, void *),
 			  void *data);




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

* Re: [RESEND][PATCH v1 1/8] thermal: broadcom: Use thermal_zone_get_crit_temp() in bcm2835_thermal_probe()
  2024-07-29 15:53 ` [RESEND][PATCH v1 1/8] thermal: broadcom: Use thermal_zone_get_crit_temp() in bcm2835_thermal_probe() Rafael J. Wysocki
@ 2024-07-29 21:54   ` Florian Fainelli
  2024-08-02  9:36   ` Lukasz Luba
  1 sibling, 0 replies; 20+ messages in thread
From: Florian Fainelli @ 2024-07-29 21:54 UTC (permalink / raw)
  To: Rafael J. Wysocki, Linux PM
  Cc: Daniel Lezcano, LKML, Lukasz Luba,
	Broadcom internal kernel review list, Ray Jui, Scott Branden

On 7/29/24 08:53, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> Modify the bcm2835 thermal driver to use thermal_zone_get_crit_temp() in
> bcm2835_thermal_probe() instead of relying on the assumption that the
> critical trip index will always be 0.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
-- 
Florian


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

* Re: [PATCH v2 7/8] thermal: trip: Get rid of thermal_zone_get_num_trips()
  2024-07-29 16:11 ` [PATCH v2 7/8] thermal: trip: Get rid of thermal_zone_get_num_trips() Rafael J. Wysocki
@ 2024-07-30 10:37   ` Niklas Söderlund
  2024-08-02  9:55   ` Lukasz Luba
  1 sibling, 0 replies; 20+ messages in thread
From: Niklas Söderlund @ 2024-07-30 10:37 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Linux PM, Daniel Lezcano, LKML, Lukasz Luba, linux-renesas-soc

Hi Rafael,

Thanks for your work.

On 2024-07-29 18:11:29 +0200, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> The only existing caller of thermal_zone_get_num_trips(), which is
> rcar_gen3_thermal_probe(), uses this function to put the number of
> trip points into a kernel log message, but this information is also
> available from the thermal sysfs interface.
> 
> For this reason, remove the thermal_zone_get_num_trips() call from
> rcar_gen3_thermal_probe() and drop the former altogether.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>

> ---
> 
> A new version, based on the discussion following the v1:
> 
> https://lore.kernel.org/linux-pm/20240617183949.GO382677@ragnatech.se/
> 
> The Renesas driver change does not depend on the previous patches
> in the series.
> 
> ---
>  drivers/thermal/renesas/rcar_gen3_thermal.c |    6 +-----
>  drivers/thermal/thermal_trip.c              |    6 ------
>  include/linux/thermal.h                     |    1 -
>  3 files changed, 1 insertion(+), 12 deletions(-)
> 
> Index: linux-pm/drivers/thermal/renesas/rcar_gen3_thermal.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/renesas/rcar_gen3_thermal.c
> +++ linux-pm/drivers/thermal/renesas/rcar_gen3_thermal.c
> @@ -563,11 +563,7 @@ static int rcar_gen3_thermal_probe(struc
>  		if (ret)
>  			goto error_unregister;
>  
> -		ret = thermal_zone_get_num_trips(tsc->zone);
> -		if (ret < 0)
> -			goto error_unregister;
> -
> -		dev_info(dev, "Sensor %u: Loaded %d trip points\n", i, ret);
> +		dev_info(dev, "Sensor %u: Loaded\n", i);
>  	}
>  
>  	if (!priv->num_tscs) {
> Index: linux-pm/drivers/thermal/thermal_trip.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/thermal_trip.c
> +++ linux-pm/drivers/thermal/thermal_trip.c
> @@ -55,12 +55,6 @@ int thermal_zone_for_each_trip(struct th
>  }
>  EXPORT_SYMBOL_GPL(thermal_zone_for_each_trip);
>  
> -int thermal_zone_get_num_trips(struct thermal_zone_device *tz)
> -{
> -	return tz->num_trips;
> -}
> -EXPORT_SYMBOL_GPL(thermal_zone_get_num_trips);
> -
>  /**
>   * thermal_zone_set_trips - Computes the next trip points for the driver
>   * @tz: a pointer to a thermal zone device structure
> Index: linux-pm/include/linux/thermal.h
> ===================================================================
> --- linux-pm.orig/include/linux/thermal.h
> +++ linux-pm/include/linux/thermal.h
> @@ -210,7 +210,6 @@ int for_each_thermal_trip(struct thermal
>  int thermal_zone_for_each_trip(struct thermal_zone_device *tz,
>  			       int (*cb)(struct thermal_trip *, void *),
>  			       void *data);
> -int thermal_zone_get_num_trips(struct thermal_zone_device *tz);
>  void thermal_zone_set_trip_temp(struct thermal_zone_device *tz,
>  				struct thermal_trip *trip, int temp);
>  
> 
> 
> 

-- 
Kind Regards,
Niklas Söderlund

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

* Re: [RESEND][PATCH v1 2/8] thermal: hisi: Use thermal_zone_for_each_trip() in hisi_thermal_register_sensor()
  2024-07-29 15:56 ` [RESEND][PATCH v1 2/8] thermal: hisi: Use thermal_zone_for_each_trip() in hisi_thermal_register_sensor() Rafael J. Wysocki
@ 2024-08-02  9:35   ` Lukasz Luba
  0 siblings, 0 replies; 20+ messages in thread
From: Lukasz Luba @ 2024-08-02  9:35 UTC (permalink / raw)
  To: Rafael J. Wysocki, Linux PM; +Cc: Daniel Lezcano, LKML



On 7/29/24 16:56, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> Modify hisi_thermal_register_sensor() to use thermal_zone_for_each_trip()
> for walking trip points instead of iterating over trip indices and using
> thermal_zone_get_trip() to get a struct thermal_trip pointer from a trip
> index.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> 
> This patch does not depend on the previous patch(es) in the series.
> 
> ---
>   drivers/thermal/hisi_thermal.c |   22 +++++++++++++---------
>   1 file changed, 13 insertions(+), 9 deletions(-)
> 
> Index: linux-pm/drivers/thermal/hisi_thermal.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/hisi_thermal.c
> +++ linux-pm/drivers/thermal/hisi_thermal.c
> @@ -465,6 +465,18 @@ static irqreturn_t hisi_thermal_alarm_ir
>   	return IRQ_HANDLED;
>   }
>   
> +static int hisi_trip_walk_cb(struct thermal_trip *trip, void *arg)
> +{
> +	struct hisi_thermal_sensor *sensor = arg;
> +
> +	if (trip->type != THERMAL_TRIP_PASSIVE)
> +		return 0;
> +
> +	sensor->thres_temp = trip->temperature;
> +	/* Return nonzero to terminate the search. */
> +	return 1;
> +}
> +
>   static int hisi_thermal_register_sensor(struct platform_device *pdev,
>   					struct hisi_thermal_sensor *sensor)
>   {
> @@ -482,15 +494,7 @@ static int hisi_thermal_register_sensor(
>   		return ret;
>   	}
>   
> -	for (i = 0; i < thermal_zone_get_num_trips(sensor->tzd); i++) {
> -
> -		thermal_zone_get_trip(sensor->tzd, i, &trip);
> -
> -		if (trip.type == THERMAL_TRIP_PASSIVE) {
> -			sensor->thres_temp = trip.temperature;
> -			break;
> -		}
> -	}
> +	thermal_zone_for_each_trip(sensor->tzd, hisi_trip_walk_cb, sensor);
>   
>   	return 0;
>   }
> 
> 
> 



Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>

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

* Re: [RESEND][PATCH v1 1/8] thermal: broadcom: Use thermal_zone_get_crit_temp() in bcm2835_thermal_probe()
  2024-07-29 15:53 ` [RESEND][PATCH v1 1/8] thermal: broadcom: Use thermal_zone_get_crit_temp() in bcm2835_thermal_probe() Rafael J. Wysocki
  2024-07-29 21:54   ` Florian Fainelli
@ 2024-08-02  9:36   ` Lukasz Luba
  1 sibling, 0 replies; 20+ messages in thread
From: Lukasz Luba @ 2024-08-02  9:36 UTC (permalink / raw)
  To: Rafael J. Wysocki, Linux PM
  Cc: Daniel Lezcano, LKML, Florian Fainelli,
	Broadcom internal kernel review list, Ray Jui, Scott Branden



On 7/29/24 16:53, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> Modify the bcm2835 thermal driver to use thermal_zone_get_crit_temp() in
> bcm2835_thermal_probe() instead of relying on the assumption that the
> critical trip index will always be 0.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
>   drivers/thermal/broadcom/bcm2835_thermal.c |    7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
> 
> Index: linux-pm/drivers/thermal/broadcom/bcm2835_thermal.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/broadcom/bcm2835_thermal.c
> +++ linux-pm/drivers/thermal/broadcom/bcm2835_thermal.c
> @@ -208,8 +208,7 @@ static int bcm2835_thermal_probe(struct
>   	 */
>   	val = readl(data->regs + BCM2835_TS_TSENSCTL);
>   	if (!(val & BCM2835_TS_TSENSCTL_RSTB)) {
> -		struct thermal_trip trip;
> -		int offset, slope;
> +		int offset, slope, crit_temp;
>   
>   		slope = thermal_zone_get_slope(tz);
>   		offset = thermal_zone_get_offset(tz);
> @@ -217,7 +216,7 @@ static int bcm2835_thermal_probe(struct
>   		 * For now we deal only with critical, otherwise
>   		 * would need to iterate
>   		 */
> -		err = thermal_zone_get_trip(tz, 0, &trip);
> +		err = thermal_zone_get_crit_temp(tz, &crit_temp);
>   		if (err < 0) {
>   			dev_err(dev, "Not able to read trip_temp: %d\n", err);
>   			return err;
> @@ -232,7 +231,7 @@ static int bcm2835_thermal_probe(struct
>   		val |= (0xFE << BCM2835_TS_TSENSCTL_RSTDELAY_SHIFT);
>   
>   		/*  trip_adc value from info */
> -		val |= bcm2835_thermal_temp2adc(trip.temperature,
> +		val |= bcm2835_thermal_temp2adc(crit_temp,
>   						offset,
>   						slope)
>   			<< BCM2835_TS_TSENSCTL_THOLD_SHIFT;
> 
> 
> 


Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>

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

* Re: [RESEND][PATCH v1 3/8] thermal: qcom: Use thermal_zone_get_crit_temp() in qpnp_tm_init()
  2024-07-29 15:58 ` [RESEND][PATCH v1 3/8] thermal: qcom: Use thermal_zone_get_crit_temp() in qpnp_tm_init() Rafael J. Wysocki
@ 2024-08-02  9:37   ` Lukasz Luba
  2024-08-14  5:09   ` Amit Kucheria
  1 sibling, 0 replies; 20+ messages in thread
From: Lukasz Luba @ 2024-08-02  9:37 UTC (permalink / raw)
  To: Rafael J. Wysocki, Linux PM
  Cc: Daniel Lezcano, LKML, Amit Kucheria, Thara Gopinath,
	linux-arm-msm



On 7/29/24 16:58, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> Modify qpnp_tm_init() to use thermal_zone_get_crit_temp() to get the
> critical trip temperature instead of iterating over trip indices and
> using thermal_zone_get_trip() to get a struct thermal_trip pointer
> from a trip index until it finds the critical one.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> 
> This patch does not depend on the previous patch(es) in the series.
> 
> ---
>   drivers/thermal/qcom/qcom-spmi-temp-alarm.c |   22 +++-------------------
>   1 file changed, 3 insertions(+), 19 deletions(-)
> 
> Index: linux-pm/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
> +++ linux-pm/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
> @@ -291,24 +291,6 @@ static irqreturn_t qpnp_tm_isr(int irq,
>   	return IRQ_HANDLED;
>   }
>   
> -static int qpnp_tm_get_critical_trip_temp(struct qpnp_tm_chip *chip)
> -{
> -	struct thermal_trip trip;
> -	int i, ret;
> -
> -	for (i = 0; i < thermal_zone_get_num_trips(chip->tz_dev); i++) {
> -
> -		ret = thermal_zone_get_trip(chip->tz_dev, i, &trip);
> -		if (ret)
> -			continue;
> -
> -		if (trip.type == THERMAL_TRIP_CRITICAL)
> -			return trip.temperature;
> -	}
> -
> -	return THERMAL_TEMP_INVALID;
> -}
> -
>   /*
>    * This function initializes the internal temp value based on only the
>    * current thermal stage and threshold. Setup threshold control and
> @@ -343,7 +325,9 @@ static int qpnp_tm_init(struct qpnp_tm_c
>   
>   	mutex_unlock(&chip->lock);
>   
> -	crit_temp = qpnp_tm_get_critical_trip_temp(chip);
> +	ret = thermal_zone_get_crit_temp(chip->tz_dev, &crit_temp);
> +	if (ret)
> +		crit_temp = THERMAL_TEMP_INVALID;
>   
>   	mutex_lock(&chip->lock);
>   
> 
> 
> 


Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>

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

* Re: [RESEND][PATCH v1 4/8] thermal: tegra: Introduce struct trip_temps for critical and hot trips
  2024-07-29 16:02 ` [RESEND][PATCH v1 4/8] thermal: tegra: Introduce struct trip_temps for critical and hot trips Rafael J. Wysocki
@ 2024-08-02  9:40   ` Lukasz Luba
  0 siblings, 0 replies; 20+ messages in thread
From: Lukasz Luba @ 2024-08-02  9:40 UTC (permalink / raw)
  To: Rafael J. Wysocki, Linux PM
  Cc: Daniel Lezcano, LKML, Thierry Reding, Jonathan Hunter,
	linux-tegra



On 7/29/24 17:02, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> Introduce a helper structure, struct trip_temps, for storing the
> temperatures of the critical and hot trip points.
> 
> This helps to make the code in tegra_tsensor_get_hw_channel_trips()
> somewhat cleaner and will be useful subsequently in eliminating
> iteration over trip indices from the driver.
> 
> No intentional functional impact.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> 
> This patch does not depend on the previous patch(es) in the series.
> 
> ---
>   drivers/thermal/tegra/tegra30-tsensor.c |   34 ++++++++++++++++++--------------
>   1 file changed, 20 insertions(+), 14 deletions(-)
> 
> Index: linux-pm/drivers/thermal/tegra/tegra30-tsensor.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/tegra/tegra30-tsensor.c
> +++ linux-pm/drivers/thermal/tegra/tegra30-tsensor.c
> @@ -303,8 +303,13 @@ stop_channel:
>   	return 0;
>   }
>   
> +struct trip_temps {
> +	int hot_trip;
> +	int crit_trip;
> +};
> +
>   static void tegra_tsensor_get_hw_channel_trips(struct thermal_zone_device *tzd,
> -					       int *hot_trip, int *crit_trip)
> +					       struct trip_temps *temps)
>   {
>   	unsigned int i;
>   
> @@ -312,8 +317,8 @@ static void tegra_tsensor_get_hw_channel
>   	 * 90C is the maximal critical temperature of all Tegra30 SoC variants,
>   	 * use it for the default trip if unspecified in a device-tree.
>   	 */
> -	*hot_trip  = 85000;
> -	*crit_trip = 90000;
> +	temps->hot_trip  = 85000;
> +	temps->crit_trip = 90000;
>   
>   	for (i = 0; i < thermal_zone_get_num_trips(tzd); i++) {
>   
> @@ -322,14 +327,14 @@ static void tegra_tsensor_get_hw_channel
>   		thermal_zone_get_trip(tzd, i, &trip);
>   
>   		if (trip.type == THERMAL_TRIP_HOT)
> -			*hot_trip = trip.temperature;
> +			temps->hot_trip = trip.temperature;
>   
>   		if (trip.type == THERMAL_TRIP_CRITICAL)
> -			*crit_trip = trip.temperature;
> +			temps->crit_trip = trip.temperature;
>   	}
>   
>   	/* clamp hardware trips to the calibration limits */
> -	*hot_trip = clamp(*hot_trip, 25000, 90000);
> +	temps->hot_trip = clamp(temps->hot_trip, 25000, 90000);
>   
>   	/*
>   	 * Kernel will perform a normal system shut down if it will
> @@ -338,7 +343,7 @@ static void tegra_tsensor_get_hw_channel
>   	 * shut down gracefully before sending signal to the Power
>   	 * Management controller.
>   	 */
> -	*crit_trip = clamp(*crit_trip + 5000, 25000, 90000);
> +	temps->crit_trip = clamp(temps->crit_trip + 5000, 25000, 90000);
>   }
>   
>   static int tegra_tsensor_enable_hw_channel(const struct tegra_tsensor *ts,
> @@ -346,7 +351,8 @@ static int tegra_tsensor_enable_hw_chann
>   {
>   	const struct tegra_tsensor_channel *tsc = &ts->ch[id];
>   	struct thermal_zone_device *tzd = tsc->tzd;
> -	int err, hot_trip = 0, crit_trip = 0;
> +	struct trip_temps temps = { 0 };
> +	int err;
>   	u32 val;
>   
>   	if (!tzd) {
> @@ -357,24 +363,24 @@ static int tegra_tsensor_enable_hw_chann
>   		return 0;
>   	}
>   
> -	tegra_tsensor_get_hw_channel_trips(tzd, &hot_trip, &crit_trip);
> +	tegra_tsensor_get_hw_channel_trips(tzd, &temps);
>   
>   	dev_info_once(ts->dev, "ch%u: PMC emergency shutdown trip set to %dC\n",
> -		      id, DIV_ROUND_CLOSEST(crit_trip, 1000));
> +		      id, DIV_ROUND_CLOSEST(temps.crit_trip, 1000));
>   
> -	hot_trip  = tegra_tsensor_temp_to_counter(ts, hot_trip);
> -	crit_trip = tegra_tsensor_temp_to_counter(ts, crit_trip);
> +	temps.hot_trip  = tegra_tsensor_temp_to_counter(ts, temps.hot_trip);
> +	temps.crit_trip = tegra_tsensor_temp_to_counter(ts, temps.crit_trip);
>   
>   	/* program LEVEL2 counter threshold */
>   	val = readl_relaxed(tsc->regs + TSENSOR_SENSOR0_CONFIG1);
>   	val &= ~TSENSOR_SENSOR0_CONFIG1_TH2;
> -	val |= FIELD_PREP(TSENSOR_SENSOR0_CONFIG1_TH2, hot_trip);
> +	val |= FIELD_PREP(TSENSOR_SENSOR0_CONFIG1_TH2, temps.hot_trip);
>   	writel_relaxed(val, tsc->regs + TSENSOR_SENSOR0_CONFIG1);
>   
>   	/* program LEVEL3 counter threshold */
>   	val = readl_relaxed(tsc->regs + TSENSOR_SENSOR0_CONFIG2);
>   	val &= ~TSENSOR_SENSOR0_CONFIG2_TH3;
> -	val |= FIELD_PREP(TSENSOR_SENSOR0_CONFIG2_TH3, crit_trip);
> +	val |= FIELD_PREP(TSENSOR_SENSOR0_CONFIG2_TH3, temps.crit_trip);
>   	writel_relaxed(val, tsc->regs + TSENSOR_SENSOR0_CONFIG2);
>   
>   	/*
> 
> 
> 

Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>

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

* Re: [RESEND][PATCH v1 5/8] thermal: tegra: Use thermal_zone_for_each_trip() for walking trip points
  2024-07-29 16:05 ` [RESEND][PATCH v1 5/8] thermal: tegra: Use thermal_zone_for_each_trip() for walking trip points Rafael J. Wysocki
@ 2024-08-02  9:47   ` Lukasz Luba
  0 siblings, 0 replies; 20+ messages in thread
From: Lukasz Luba @ 2024-08-02  9:47 UTC (permalink / raw)
  To: Rafael J. Wysocki, Linux PM
  Cc: Daniel Lezcano, LKML, Thierry Reding, Jonathan Hunter,
	linux-tegra



On 7/29/24 17:05, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> It is generally inefficient to iterate over trip indices and call
> thermal_zone_get_trip() every time to get the struct thermal_trip
> corresponding to the given trip index, so modify the Tegra thermal
> drivers to use thermal_zone_for_each_trip() for walking trips.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> 
> This patch does not depend on patches [1-3/8].
> 
> ---
>   drivers/thermal/tegra/soctherm.c        |   38 ++++++++++++++++----------------
>   drivers/thermal/tegra/tegra30-tsensor.c |   25 ++++++++++-----------
>   2 files changed, 33 insertions(+), 30 deletions(-)
> 
> Index: linux-pm/drivers/thermal/tegra/soctherm.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/tegra/soctherm.c
> +++ linux-pm/drivers/thermal/tegra/soctherm.c
> @@ -682,24 +682,25 @@ static const struct thermal_zone_device_
>   	.set_trips = tegra_thermctl_set_trips,
>   };
>   
> -static int get_hot_temp(struct thermal_zone_device *tz, int *trip_id, int *temp)
> +static int get_hot_trip_cb(struct thermal_trip *trip, void *arg)
>   {
> -	int i, ret;
> -	struct thermal_trip trip;
> +	const struct thermal_trip **trip_ret = arg;
>   
> -	for (i = 0; i < thermal_zone_get_num_trips(tz); i++) {
> +	if (trip->type != THERMAL_TRIP_HOT)
> +		return 0;
>   
> -		ret = thermal_zone_get_trip(tz, i, &trip);
> -		if (ret)
> -			return -EINVAL;
> -
> -		if (trip.type == THERMAL_TRIP_HOT) {
> -			*trip_id = i;
> -			return 0;
> -		}
> -	}
> +	*trip_ret = trip;
> +	/* Return nonzero to terminate the search. */
> +	return 1;
> +}
>   
> -	return -EINVAL;
> +static const struct thermal_trip *get_hot_trip(struct thermal_zone_device *tz)
> +{
> +	const struct thermal_trip *trip = NULL;
> +
> +	thermal_zone_for_each_trip(tz, get_hot_trip_cb, &trip);
> +
> +	return trip;
>   }
>   
>   /**
> @@ -731,8 +732,9 @@ static int tegra_soctherm_set_hwtrips(st
>   				      struct thermal_zone_device *tz)
>   {
>   	struct tegra_soctherm *ts = dev_get_drvdata(dev);
> +	const struct thermal_trip *hot_trip;
>   	struct soctherm_throt_cfg *stc;
> -	int i, trip, temperature, ret;
> +	int i, temperature, ret;
>   
>   	/* Get thermtrips. If missing, try to get critical trips. */
>   	temperature = tsensor_group_thermtrip_get(ts, sg->id);
> @@ -749,8 +751,8 @@ static int tegra_soctherm_set_hwtrips(st
>   	dev_info(dev, "thermtrip: will shut down when %s reaches %d mC\n",
>   		 sg->name, temperature);
>   
> -	ret = get_hot_temp(tz, &trip, &temperature);
> -	if (ret) {
> +	hot_trip = get_hot_trip(tz);
> +	if (!hot_trip) {
>   		dev_info(dev, "throttrip: %s: missing hot temperature\n",
>   			 sg->name);
>   		return 0;
> @@ -763,7 +765,7 @@ static int tegra_soctherm_set_hwtrips(st
>   			continue;
>   
>   		cdev = ts->throt_cfgs[i].cdev;
> -		if (get_thermal_instance(tz, cdev, trip))
> +		if (thermal_trip_is_bound_to_cdev(tz, hot_trip, cdev))
>   			stc = find_throttle_cfg_by_name(ts, cdev->type);
>   		else
>   			continue;
> Index: linux-pm/drivers/thermal/tegra/tegra30-tsensor.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/tegra/tegra30-tsensor.c
> +++ linux-pm/drivers/thermal/tegra/tegra30-tsensor.c
> @@ -308,6 +308,18 @@ struct trip_temps {
>   	int crit_trip;
>   };
>   
> +static int tegra_tsensor_get_trips_cb(struct thermal_trip *trip, void *arg)
> +{
> +	struct trip_temps *temps = arg;
> +
> +	if (trip->type == THERMAL_TRIP_HOT)
> +		temps->hot_trip = trip->temperature;
> +	else if (trip->type == THERMAL_TRIP_CRITICAL)
> +		temps->crit_trip = trip->temperature;
> +
> +	return 0;
> +}
> +
>   static void tegra_tsensor_get_hw_channel_trips(struct thermal_zone_device *tzd,
>   					       struct trip_temps *temps)
>   {
> @@ -320,18 +332,7 @@ static void tegra_tsensor_get_hw_channel
>   	temps->hot_trip  = 85000;
>   	temps->crit_trip = 90000;
>   
> -	for (i = 0; i < thermal_zone_get_num_trips(tzd); i++) {
> -
> -		struct thermal_trip trip;
> -
> -		thermal_zone_get_trip(tzd, i, &trip);
> -
> -		if (trip.type == THERMAL_TRIP_HOT)
> -			temps->hot_trip = trip.temperature;
> -
> -		if (trip.type == THERMAL_TRIP_CRITICAL)
> -			temps->crit_trip = trip.temperature;
> -	}
> +	thermal_zone_for_each_trip(tzd, tegra_tsensor_get_trips_cb, temps);
>   
>   	/* clamp hardware trips to the calibration limits */
>   	temps->hot_trip = clamp(temps->hot_trip, 25000, 90000);
> 
> 
> 

Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>

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

* Re: [RESEND][PATCH v1 6/8] thermal: helpers: Drop get_thermal_instance()
  2024-07-29 16:06 ` [RESEND][PATCH v1 6/8] thermal: helpers: Drop get_thermal_instance() Rafael J. Wysocki
@ 2024-08-02  9:53   ` Lukasz Luba
  0 siblings, 0 replies; 20+ messages in thread
From: Lukasz Luba @ 2024-08-02  9:53 UTC (permalink / raw)
  To: Rafael J. Wysocki, Linux PM; +Cc: Daniel Lezcano, LKML



On 7/29/24 17:06, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> There are no more users of get_thermal_instance(), so drop it.
> 
> While at it, replace get_instance() returning a pointer to struct
> thermal_instance with thermal_instance_present() returning a bool
> which is more straightforward.
> 
> No functional impact.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
>   drivers/thermal/thermal_core.h    |    5 -----
>   drivers/thermal/thermal_helpers.c |   30 ++++++------------------------
>   2 files changed, 6 insertions(+), 29 deletions(-)
> 
> Index: linux-pm/drivers/thermal/thermal_core.h
> ===================================================================
> --- linux-pm.orig/drivers/thermal/thermal_core.h
> +++ linux-pm/drivers/thermal/thermal_core.h
> @@ -204,11 +204,6 @@ void __thermal_cdev_update(struct therma
>   
>   int get_tz_trend(struct thermal_zone_device *tz, const struct thermal_trip *trip);
>   
> -struct thermal_instance *
> -get_thermal_instance(struct thermal_zone_device *tz,
> -		     struct thermal_cooling_device *cdev,
> -		     int trip);
> -
>   /*
>    * This structure is used to describe the behavior of
>    * a certain cooling device on a certain trip point
> Index: linux-pm/drivers/thermal/thermal_helpers.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/thermal_helpers.c
> +++ linux-pm/drivers/thermal/thermal_helpers.c
> @@ -39,18 +39,18 @@ int get_tz_trend(struct thermal_zone_dev
>   	return trend;
>   }
>   
> -static struct thermal_instance *get_instance(struct thermal_zone_device *tz,
> -					     struct thermal_cooling_device *cdev,
> -					     const struct thermal_trip *trip)
> +static bool thermal_instance_present(struct thermal_zone_device *tz,
> +				     struct thermal_cooling_device *cdev,
> +				     const struct thermal_trip *trip)
>   {
>   	struct thermal_instance *ti;
>   
>   	list_for_each_entry(ti, &tz->thermal_instances, tz_node) {
>   		if (ti->trip == trip && ti->cdev == cdev)
> -			return ti;
> +			return true;
>   	}
>   
> -	return NULL;
> +	return false;
>   }
>   
>   bool thermal_trip_is_bound_to_cdev(struct thermal_zone_device *tz,
> @@ -62,7 +62,7 @@ bool thermal_trip_is_bound_to_cdev(struc
>   	mutex_lock(&tz->lock);
>   	mutex_lock(&cdev->lock);
>   
> -	ret = !!get_instance(tz, cdev, trip);
> +	ret = thermal_instance_present(tz, cdev, trip);
>   
>   	mutex_unlock(&cdev->lock);
>   	mutex_unlock(&tz->lock);
> @@ -71,24 +71,6 @@ bool thermal_trip_is_bound_to_cdev(struc
>   }
>   EXPORT_SYMBOL_GPL(thermal_trip_is_bound_to_cdev);
>   
> -struct thermal_instance *
> -get_thermal_instance(struct thermal_zone_device *tz,
> -		     struct thermal_cooling_device *cdev, int trip_index)
> -{
> -	struct thermal_instance *ti;
> -
> -	mutex_lock(&tz->lock);
> -	mutex_lock(&cdev->lock);
> -
> -	ti = get_instance(tz, cdev, &tz->trips[trip_index].trip);
> -
> -	mutex_unlock(&cdev->lock);
> -	mutex_unlock(&tz->lock);
> -
> -	return ti;
> -}
> -EXPORT_SYMBOL(get_thermal_instance);
> -
>   /**
>    * __thermal_zone_get_temp() - returns the temperature of a thermal zone
>    * @tz: a valid pointer to a struct thermal_zone_device
> 
> 
> 

LGTM, small nit: you can also remove the description of that
get_thermal_instance() from
Documentation/driver-api/thermal/sysfs-api.rst
It sneaked in somehow...

Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>


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

* Re: [PATCH v2 7/8] thermal: trip: Get rid of thermal_zone_get_num_trips()
  2024-07-29 16:11 ` [PATCH v2 7/8] thermal: trip: Get rid of thermal_zone_get_num_trips() Rafael J. Wysocki
  2024-07-30 10:37   ` Niklas Söderlund
@ 2024-08-02  9:55   ` Lukasz Luba
  1 sibling, 0 replies; 20+ messages in thread
From: Lukasz Luba @ 2024-08-02  9:55 UTC (permalink / raw)
  To: Rafael J. Wysocki, Linux PM
  Cc: Daniel Lezcano, LKML, Niklas Söderlund, linux-renesas-soc



On 7/29/24 17:11, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> The only existing caller of thermal_zone_get_num_trips(), which is
> rcar_gen3_thermal_probe(), uses this function to put the number of
> trip points into a kernel log message, but this information is also
> available from the thermal sysfs interface.
> 
> For this reason, remove the thermal_zone_get_num_trips() call from
> rcar_gen3_thermal_probe() and drop the former altogether.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
> 
> A new version, based on the discussion following the v1:
> 
> https://lore.kernel.org/linux-pm/20240617183949.GO382677@ragnatech.se/
> 
> The Renesas driver change does not depend on the previous patches
> in the series.
> 
> ---
>   drivers/thermal/renesas/rcar_gen3_thermal.c |    6 +-----
>   drivers/thermal/thermal_trip.c              |    6 ------
>   include/linux/thermal.h                     |    1 -
>   3 files changed, 1 insertion(+), 12 deletions(-)
> 
> Index: linux-pm/drivers/thermal/renesas/rcar_gen3_thermal.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/renesas/rcar_gen3_thermal.c
> +++ linux-pm/drivers/thermal/renesas/rcar_gen3_thermal.c
> @@ -563,11 +563,7 @@ static int rcar_gen3_thermal_probe(struc
>   		if (ret)
>   			goto error_unregister;
>   
> -		ret = thermal_zone_get_num_trips(tsc->zone);
> -		if (ret < 0)
> -			goto error_unregister;
> -
> -		dev_info(dev, "Sensor %u: Loaded %d trip points\n", i, ret);
> +		dev_info(dev, "Sensor %u: Loaded\n", i);
>   	}
>   
>   	if (!priv->num_tscs) {
> Index: linux-pm/drivers/thermal/thermal_trip.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/thermal_trip.c
> +++ linux-pm/drivers/thermal/thermal_trip.c
> @@ -55,12 +55,6 @@ int thermal_zone_for_each_trip(struct th
>   }
>   EXPORT_SYMBOL_GPL(thermal_zone_for_each_trip);
>   
> -int thermal_zone_get_num_trips(struct thermal_zone_device *tz)
> -{
> -	return tz->num_trips;
> -}
> -EXPORT_SYMBOL_GPL(thermal_zone_get_num_trips);
> -
>   /**
>    * thermal_zone_set_trips - Computes the next trip points for the driver
>    * @tz: a pointer to a thermal zone device structure
> Index: linux-pm/include/linux/thermal.h
> ===================================================================
> --- linux-pm.orig/include/linux/thermal.h
> +++ linux-pm/include/linux/thermal.h
> @@ -210,7 +210,6 @@ int for_each_thermal_trip(struct thermal
>   int thermal_zone_for_each_trip(struct thermal_zone_device *tz,
>   			       int (*cb)(struct thermal_trip *, void *),
>   			       void *data);
> -int thermal_zone_get_num_trips(struct thermal_zone_device *tz);
>   void thermal_zone_set_trip_temp(struct thermal_zone_device *tz,
>   				struct thermal_trip *trip, int temp);
>   
> 
> 
> 

Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>

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

* Re: [RESEND][PATCH v1 8/8] thermal: trip: Drop thermal_zone_get_trip()
  2024-07-29 16:12 ` [RESEND][PATCH v1 8/8] thermal: trip: Drop thermal_zone_get_trip() Rafael J. Wysocki
@ 2024-08-02  9:56   ` Lukasz Luba
  0 siblings, 0 replies; 20+ messages in thread
From: Lukasz Luba @ 2024-08-02  9:56 UTC (permalink / raw)
  To: Rafael J. Wysocki, Linux PM; +Cc: Daniel Lezcano, LKML



On 7/29/24 17:12, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> There are no more callers of thermal_zone_get_trip() in the tree, so
> drop it.
> 
> No functional impact.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
>   drivers/thermal/thermal_trip.c |   14 --------------
>   include/linux/thermal.h        |    2 --
>   2 files changed, 16 deletions(-)
> 
> Index: linux-pm/drivers/thermal/thermal_trip.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/thermal_trip.c
> +++ linux-pm/drivers/thermal/thermal_trip.c
> @@ -108,20 +108,6 @@ void thermal_zone_set_trips(struct therm
>   		dev_err(&tz->device, "Failed to set trips: %d\n", ret);
>   }
>   
> -int thermal_zone_get_trip(struct thermal_zone_device *tz, int trip_id,
> -			  struct thermal_trip *trip)
> -{
> -	if (!tz || !trip || trip_id < 0 || trip_id >= tz->num_trips)
> -		return -EINVAL;
> -
> -	mutex_lock(&tz->lock);
> -	*trip = tz->trips[trip_id].trip;
> -	mutex_unlock(&tz->lock);
> -
> -	return 0;
> -}
> -EXPORT_SYMBOL_GPL(thermal_zone_get_trip);
> -
>   int thermal_zone_trip_id(const struct thermal_zone_device *tz,
>   			 const struct thermal_trip *trip)
>   {
> Index: linux-pm/include/linux/thermal.h
> ===================================================================
> --- linux-pm.orig/include/linux/thermal.h
> +++ linux-pm/include/linux/thermal.h
> @@ -202,8 +202,6 @@ static inline void devm_thermal_of_zone_
>   }
>   #endif
>   
> -int thermal_zone_get_trip(struct thermal_zone_device *tz, int trip_id,
> -			  struct thermal_trip *trip);
>   int for_each_thermal_trip(struct thermal_zone_device *tz,
>   			  int (*cb)(struct thermal_trip *, void *),
>   			  void *data);
> 
> 
> 


Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>

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

* Re: [RESEND][PATCH v1 3/8] thermal: qcom: Use thermal_zone_get_crit_temp() in qpnp_tm_init()
  2024-07-29 15:58 ` [RESEND][PATCH v1 3/8] thermal: qcom: Use thermal_zone_get_crit_temp() in qpnp_tm_init() Rafael J. Wysocki
  2024-08-02  9:37   ` Lukasz Luba
@ 2024-08-14  5:09   ` Amit Kucheria
  1 sibling, 0 replies; 20+ messages in thread
From: Amit Kucheria @ 2024-08-14  5:09 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Linux PM, Daniel Lezcano, LKML, Lukasz Luba, Thara Gopinath,
	linux-arm-msm

On Mon, Jul 29, 2024 at 10:43 PM Rafael J. Wysocki <rjw@rjwysocki.net> wrote:
>
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>
> Modify qpnp_tm_init() to use thermal_zone_get_crit_temp() to get the
> critical trip temperature instead of iterating over trip indices and
> using thermal_zone_get_trip() to get a struct thermal_trip pointer
> from a trip index until it finds the critical one.
>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Makes sense.

Reviewed-by: Amit Kucheria <amitk@kernel.org>

> ---
>
> This patch does not depend on the previous patch(es) in the series.
>
> ---
>  drivers/thermal/qcom/qcom-spmi-temp-alarm.c |   22 +++-------------------
>  1 file changed, 3 insertions(+), 19 deletions(-)
>
> Index: linux-pm/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
> ===================================================================
> --- linux-pm.orig/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
> +++ linux-pm/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
> @@ -291,24 +291,6 @@ static irqreturn_t qpnp_tm_isr(int irq,
>         return IRQ_HANDLED;
>  }
>
> -static int qpnp_tm_get_critical_trip_temp(struct qpnp_tm_chip *chip)
> -{
> -       struct thermal_trip trip;
> -       int i, ret;
> -
> -       for (i = 0; i < thermal_zone_get_num_trips(chip->tz_dev); i++) {
> -
> -               ret = thermal_zone_get_trip(chip->tz_dev, i, &trip);
> -               if (ret)
> -                       continue;
> -
> -               if (trip.type == THERMAL_TRIP_CRITICAL)
> -                       return trip.temperature;
> -       }
> -
> -       return THERMAL_TEMP_INVALID;
> -}
> -
>  /*
>   * This function initializes the internal temp value based on only the
>   * current thermal stage and threshold. Setup threshold control and
> @@ -343,7 +325,9 @@ static int qpnp_tm_init(struct qpnp_tm_c
>
>         mutex_unlock(&chip->lock);
>
> -       crit_temp = qpnp_tm_get_critical_trip_temp(chip);
> +       ret = thermal_zone_get_crit_temp(chip->tz_dev, &crit_temp);
> +       if (ret)
> +               crit_temp = THERMAL_TEMP_INVALID;
>
>         mutex_lock(&chip->lock);
>
>
>
>

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

end of thread, other threads:[~2024-08-14  5:09 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-29 15:50 [RESEND][PATCH v1 0/8] thermal: Use trip pointers in thermal driver interface Rafael J. Wysocki
2024-07-29 15:53 ` [RESEND][PATCH v1 1/8] thermal: broadcom: Use thermal_zone_get_crit_temp() in bcm2835_thermal_probe() Rafael J. Wysocki
2024-07-29 21:54   ` Florian Fainelli
2024-08-02  9:36   ` Lukasz Luba
2024-07-29 15:56 ` [RESEND][PATCH v1 2/8] thermal: hisi: Use thermal_zone_for_each_trip() in hisi_thermal_register_sensor() Rafael J. Wysocki
2024-08-02  9:35   ` Lukasz Luba
2024-07-29 15:58 ` [RESEND][PATCH v1 3/8] thermal: qcom: Use thermal_zone_get_crit_temp() in qpnp_tm_init() Rafael J. Wysocki
2024-08-02  9:37   ` Lukasz Luba
2024-08-14  5:09   ` Amit Kucheria
2024-07-29 16:02 ` [RESEND][PATCH v1 4/8] thermal: tegra: Introduce struct trip_temps for critical and hot trips Rafael J. Wysocki
2024-08-02  9:40   ` Lukasz Luba
2024-07-29 16:05 ` [RESEND][PATCH v1 5/8] thermal: tegra: Use thermal_zone_for_each_trip() for walking trip points Rafael J. Wysocki
2024-08-02  9:47   ` Lukasz Luba
2024-07-29 16:06 ` [RESEND][PATCH v1 6/8] thermal: helpers: Drop get_thermal_instance() Rafael J. Wysocki
2024-08-02  9:53   ` Lukasz Luba
2024-07-29 16:11 ` [PATCH v2 7/8] thermal: trip: Get rid of thermal_zone_get_num_trips() Rafael J. Wysocki
2024-07-30 10:37   ` Niklas Söderlund
2024-08-02  9:55   ` Lukasz Luba
2024-07-29 16:12 ` [RESEND][PATCH v1 8/8] thermal: trip: Drop thermal_zone_get_trip() Rafael J. Wysocki
2024-08-02  9:56   ` Lukasz Luba

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