* [PATCH 00/15] thermal OF rework
@ 2022-04-26 22:15 Daniel Lezcano
2022-04-26 22:15 ` [PATCH 02/15] thermal/core: Change thermal_zone_ops to thermal_sensor_ops Daniel Lezcano
` (14 more replies)
0 siblings, 15 replies; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
The thermal framework initialization with the device tree appears to
be complicated and hard to make it to evolve.
It contains duplication of almost the same thermal generic structures
and has an assymetric initialization making hard any kind of serious
changes for more complex features. One of them is the multiple sensors
support per thermal zone.
In order to set the scene for the aforementioned feature with generic
code, we need to cleanup and rework the device tree initialization.
However this rework is not obvious because of the multiple components
entering in the composition of a thermal zone and being initialized at
different moments. For instance, a cooling device can be initialized
before a sensor, so the thermal zones must exist before the cooling
device as well as the sensor. This asynchonous initialization forces
the thermal zone to be created with fake ops because they are
mandotory and build a list of cooling devices which is used to lookup
afterwards when the cooling device driver is registering itself.
Actually, the correct behavior IMHO, would be having a sensor
registration resulting in the thermal zone creation. If the cooling
device is registered before, it won't find the thermal zone and should
return -EPROBE_DEFER.
As there could be a large number of changes, this first series provide
some steps forward for a simpler device tree initialization.
The first patch could appear scary as it touches a big number of files
but it is actually just renaming a structure name
Daniel Lezcano (15):
thermal/core: Rename thermal_zone_device to thermal_zone
thermal/core: Change thermal_zone_ops to thermal_sensor_ops
thermal/core: Add a thermal sensor structure in the thermal zone
thermal/core: Remove duplicate information when an error occurs
thermal/of: Replace device node match with device node search
thermal/of: Remove the device node pointer for thermal_trip
thermal/of: Move thermal_trip structure to thermal.h
thermal/core: Remove unneeded EXPORT_SYMBOLS
thermal/core: Move thermal_set_delay_jiffies to static
thermal/core: Rename trips to ntrips
thermal/core: Add thermal_trip in thermal_zone
thermal/core: Register with the trip points
thermal/of: Store the trips in the thermal zone
thermal/of: Use thermal trips stored in the thermal zone
thermal/of: Initialize trip points separately
.../driver-api/thermal/power_allocator.rst | 10 +-
.../driver-api/thermal/sysfs-api.rst | 28 +-
drivers/acpi/thermal.c | 46 +--
drivers/gpu/drm/tiny/repaper.c | 2 +-
drivers/hwmon/hwmon.c | 6 +-
drivers/hwmon/scpi-hwmon.c | 2 +-
drivers/iio/adc/sun4i-gpadc-iio.c | 2 +-
drivers/input/touchscreen/sun4i-ts.c | 2 +-
drivers/mmc/host/sdhci-omap.c | 2 +-
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 2 +-
.../ethernet/chelsio/cxgb4/cxgb4_thermal.c | 16 +-
.../ethernet/mellanox/mlxsw/core_thermal.c | 78 ++---
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 2 +-
drivers/net/wireless/intel/iwlwifi/mvm/tt.c | 20 +-
drivers/platform/x86/acerhdf.c | 30 +-
drivers/platform/x86/gpd-pocket-fan.c | 4 +-
drivers/power/supply/power_supply_core.c | 12 +-
drivers/regulator/max8973-regulator.c | 6 +-
drivers/thermal/amlogic_thermal.c | 2 +-
drivers/thermal/armada_thermal.c | 24 +-
drivers/thermal/broadcom/bcm2711_thermal.c | 4 +-
drivers/thermal/broadcom/bcm2835_thermal.c | 8 +-
drivers/thermal/broadcom/brcmstb_thermal.c | 6 +-
drivers/thermal/broadcom/ns-thermal.c | 2 +-
drivers/thermal/broadcom/sr-thermal.c | 2 +-
drivers/thermal/da9062-thermal.c | 22 +-
drivers/thermal/db8500_thermal.c | 6 +-
drivers/thermal/dove_thermal.c | 16 +-
drivers/thermal/gov_bang_bang.c | 12 +-
drivers/thermal/gov_fair_share.c | 18 +-
drivers/thermal/gov_power_allocator.c | 44 +--
drivers/thermal/gov_step_wise.c | 12 +-
drivers/thermal/gov_user_space.c | 6 +-
drivers/thermal/hisi_thermal.c | 10 +-
drivers/thermal/imx8mm_thermal.c | 2 +-
drivers/thermal/imx_sc_thermal.c | 2 +-
drivers/thermal/imx_thermal.c | 36 +--
.../intel/int340x_thermal/int3400_thermal.c | 14 +-
.../intel/int340x_thermal/int3402_thermal.c | 2 +-
.../intel/int340x_thermal/int3403_thermal.c | 4 +-
.../int340x_thermal/int340x_thermal_zone.c | 26 +-
.../int340x_thermal/int340x_thermal_zone.h | 10 +-
.../processor_thermal_device.c | 8 +-
.../processor_thermal_device_pci.c | 26 +-
.../thermal/intel/intel_bxt_pmic_thermal.c | 4 +-
drivers/thermal/intel/intel_menlow.c | 2 +-
drivers/thermal/intel/intel_pch_thermal.c | 20 +-
.../thermal/intel/intel_quark_dts_thermal.c | 28 +-
drivers/thermal/intel/intel_soc_dts_iosf.c | 20 +-
drivers/thermal/intel/intel_soc_dts_iosf.h | 2 +-
drivers/thermal/intel/x86_pkg_temp_thermal.c | 26 +-
drivers/thermal/k3_bandgap.c | 2 +-
drivers/thermal/kirkwood_thermal.c | 16 +-
drivers/thermal/max77620_thermal.c | 4 +-
drivers/thermal/mtk_thermal.c | 2 +-
drivers/thermal/qcom/qcom-spmi-adc-tm5.c | 6 +-
drivers/thermal/qcom/qcom-spmi-temp-alarm.c | 6 +-
drivers/thermal/qcom/tsens.c | 6 +-
drivers/thermal/qcom/tsens.h | 2 +-
drivers/thermal/qoriq_thermal.c | 2 +-
drivers/thermal/rcar_gen3_thermal.c | 16 +-
drivers/thermal/rcar_thermal.c | 22 +-
drivers/thermal/rockchip_thermal.c | 10 +-
drivers/thermal/rzg2l_thermal.c | 4 +-
drivers/thermal/samsung/exynos_tmu.c | 22 +-
drivers/thermal/spear_thermal.c | 20 +-
drivers/thermal/sprd_thermal.c | 8 +-
drivers/thermal/st/st_thermal.c | 16 +-
drivers/thermal/st/st_thermal.h | 2 +-
drivers/thermal/st/st_thermal_memmap.c | 2 +-
drivers/thermal/st/stm_thermal.c | 6 +-
drivers/thermal/sun8i_thermal.c | 4 +-
drivers/thermal/tegra/soctherm.c | 38 +--
drivers/thermal/tegra/tegra-bpmp-thermal.c | 6 +-
drivers/thermal/tegra/tegra30-tsensor.c | 20 +-
drivers/thermal/thermal-generic-adc.c | 2 +-
drivers/thermal/thermal_core.c | 246 ++++++++-------
drivers/thermal/thermal_core.h | 59 ++--
drivers/thermal/thermal_helpers.c | 51 ++--
drivers/thermal/thermal_hwmon.c | 26 +-
drivers/thermal/thermal_hwmon.h | 12 +-
drivers/thermal/thermal_mmio.c | 2 +-
drivers/thermal/thermal_netlink.c | 18 +-
drivers/thermal/thermal_of.c | 286 ++++++++++--------
drivers/thermal/thermal_sysfs.c | 116 +++----
.../ti-soc-thermal/ti-thermal-common.c | 10 +-
drivers/thermal/uniphier_thermal.c | 4 +-
include/linux/power/charger-manager.h | 2 +-
include/linux/power_supply.h | 2 +-
include/linux/thermal.h | 144 +++++----
include/trace/events/thermal.h | 4 +-
.../trace/events/thermal_power_allocator.h | 4 +-
92 files changed, 988 insertions(+), 938 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 02/15] thermal/core: Change thermal_zone_ops to thermal_sensor_ops
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
@ 2022-04-26 22:15 ` Daniel Lezcano
2022-04-26 22:15 ` [PATCH 03/15] thermal/core: Add a thermal sensor structure in the thermal zone Daniel Lezcano
` (13 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
A thermal zone is software abstraction of a sensor associated with
properties and cooling devices if any.
The fact that we have thermal_zone and thermal_zone_ops mixed is
confusing and does not clearly identify the different components
entering in the thermal management process. A thermal zone appears to
be a sensor while it is not.
In order to set the scene for multiple thermal sensors aggregated into
a single thermal zone. Rename the thermal_zone_ops to
thermal_sensor_ops, that will appear clearyl the thermal zone is not a
sensor but an abstraction of one [or multiple] sensor(s).
Cc: Alexandre Bailon <abailon@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc; Eduardo Valentin <eduval@amazon.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
---
Documentation/driver-api/thermal/sysfs-api.rst | 2 +-
drivers/acpi/thermal.c | 6 +++---
drivers/net/ethernet/chelsio/cxgb4/cxgb4_thermal.c | 2 +-
drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | 6 +++---
drivers/net/wireless/intel/iwlwifi/mvm/tt.c | 2 +-
drivers/platform/x86/acerhdf.c | 2 +-
drivers/power/supply/power_supply_core.c | 2 +-
drivers/thermal/armada_thermal.c | 2 +-
drivers/thermal/da9062-thermal.c | 2 +-
drivers/thermal/dove_thermal.c | 2 +-
drivers/thermal/imx_thermal.c | 2 +-
drivers/thermal/intel/int340x_thermal/int3400_thermal.c | 2 +-
.../thermal/intel/int340x_thermal/int340x_thermal_zone.c | 6 +++---
.../thermal/intel/int340x_thermal/int340x_thermal_zone.h | 4 ++--
.../intel/int340x_thermal/processor_thermal_device.c | 4 ++--
.../intel/int340x_thermal/processor_thermal_device_pci.c | 2 +-
drivers/thermal/intel/intel_pch_thermal.c | 2 +-
drivers/thermal/intel/intel_quark_dts_thermal.c | 2 +-
drivers/thermal/intel/intel_soc_dts_iosf.c | 2 +-
drivers/thermal/intel/x86_pkg_temp_thermal.c | 2 +-
drivers/thermal/kirkwood_thermal.c | 2 +-
drivers/thermal/rcar_thermal.c | 4 ++--
drivers/thermal/spear_thermal.c | 2 +-
drivers/thermal/st/st_thermal.c | 2 +-
drivers/thermal/thermal_core.c | 2 +-
drivers/thermal/thermal_of.c | 4 ++--
include/linux/thermal.h | 8 ++++----
27 files changed, 40 insertions(+), 40 deletions(-)
diff --git a/Documentation/driver-api/thermal/sysfs-api.rst b/Documentation/driver-api/thermal/sysfs-api.rst
index 113afc8c5479..6d207d89f736 100644
--- a/Documentation/driver-api/thermal/sysfs-api.rst
+++ b/Documentation/driver-api/thermal/sysfs-api.rst
@@ -41,7 +41,7 @@ temperature) and throttle appropriate devices.
struct thermal_zone
*thermal_zone_register(char *type,
int trips, int mask, void *devdata,
- struct thermal_zone_ops *ops,
+ struct thermal_sensor_ops *ops,
const struct thermal_zone_params *tzp,
int passive_delay, int polling_delay))
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index 23373af58565..253089214185 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -774,7 +774,7 @@ acpi_thermal_unbind_cooling_device(struct thermal_zone *thermal,
return acpi_thermal_cooling_device_cb(thermal, cdev, false);
}
-static struct thermal_zone_ops acpi_thermal_zone_ops = {
+static struct thermal_sensor_ops acpi_thermal_sensor_ops = {
.bind = acpi_thermal_bind_cooling_device,
.unbind = acpi_thermal_unbind_cooling_device,
.get_temp = thermal_get_temp,
@@ -808,13 +808,13 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
if (tz->trips.passive.flags.valid)
tz->thermal_zone =
thermal_zone_register("acpitz", trips, 0, tz,
- &acpi_thermal_zone_ops, NULL,
+ &acpi_thermal_sensor_ops, NULL,
tz->trips.passive.tsp*100,
tz->polling_frequency*100);
else
tz->thermal_zone =
thermal_zone_register("acpitz", trips, 0, tz,
- &acpi_thermal_zone_ops, NULL,
+ &acpi_thermal_sensor_ops, NULL,
0, tz->polling_frequency*100);
if (IS_ERR(tz->thermal_zone))
return -ENODEV;
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_thermal.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_thermal.c
index 460a26699f68..92d8a63e48a9 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_thermal.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_thermal.c
@@ -53,7 +53,7 @@ static int cxgb4_thermal_get_trip_temp(struct thermal_zone *tzdev,
return 0;
}
-static struct thermal_zone_ops cxgb4_thermal_ops = {
+static struct thermal_sensor_ops cxgb4_thermal_ops = {
.get_temp = cxgb4_thermal_get_temp,
.get_trip_type = cxgb4_thermal_get_trip_type,
.get_trip_temp = cxgb4_thermal_get_trip_temp,
diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
index f70ca5525202..5c8d79103e76 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
@@ -361,7 +361,7 @@ static struct thermal_zone_params mlxsw_thermal_params = {
.no_hwmon = true,
};
-static struct thermal_zone_ops mlxsw_thermal_ops = {
+static struct thermal_sensor_ops mlxsw_thermal_ops = {
.bind = mlxsw_thermal_bind,
.unbind = mlxsw_thermal_unbind,
.get_temp = mlxsw_thermal_get_temp,
@@ -553,7 +553,7 @@ static int mlxsw_thermal_module_trend_get(struct thermal_zone *tzdev,
return 0;
}
-static struct thermal_zone_ops mlxsw_thermal_module_ops = {
+static struct thermal_sensor_ops mlxsw_thermal_module_ops = {
.bind = mlxsw_thermal_module_bind,
.unbind = mlxsw_thermal_module_unbind,
.get_temp = mlxsw_thermal_module_temp_get,
@@ -590,7 +590,7 @@ static int mlxsw_thermal_gearbox_temp_get(struct thermal_zone *tzdev,
return 0;
}
-static struct thermal_zone_ops mlxsw_thermal_gearbox_ops = {
+static struct thermal_sensor_ops mlxsw_thermal_gearbox_ops = {
.bind = mlxsw_thermal_module_bind,
.unbind = mlxsw_thermal_module_unbind,
.get_temp = mlxsw_thermal_gearbox_temp_get,
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
index e20e5e46d342..09c691efd08a 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
@@ -718,7 +718,7 @@ static int iwl_mvm_tzone_set_trip_temp(struct thermal_zone *device,
return ret;
}
-static struct thermal_zone_ops tzone_ops = {
+static struct thermal_sensor_ops tzone_ops = {
.get_temp = iwl_mvm_tzone_get_temp,
.get_trip_temp = iwl_mvm_tzone_get_trip_temp,
.get_trip_type = iwl_mvm_tzone_get_trip_type,
diff --git a/drivers/platform/x86/acerhdf.c b/drivers/platform/x86/acerhdf.c
index f6be06d1e723..a2b081f8013f 100644
--- a/drivers/platform/x86/acerhdf.c
+++ b/drivers/platform/x86/acerhdf.c
@@ -469,7 +469,7 @@ static int acerhdf_get_crit_temp(struct thermal_zone *thermal,
}
/* bind callback functions to thermalzone */
-static struct thermal_zone_ops acerhdf_dev_ops = {
+static struct thermal_sensor_ops acerhdf_dev_ops = {
.bind = acerhdf_bind,
.unbind = acerhdf_unbind,
.get_temp = acerhdf_get_ec_temp,
diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c
index 51b052774478..4af288168837 100644
--- a/drivers/power/supply/power_supply_core.c
+++ b/drivers/power/supply/power_supply_core.c
@@ -1149,7 +1149,7 @@ static int power_supply_read_temp(struct thermal_zone *tzd,
return ret;
}
-static struct thermal_zone_ops psy_tzd_ops = {
+static struct thermal_sensor_ops psy_tzd_ops = {
.get_temp = power_supply_read_temp,
};
diff --git a/drivers/thermal/armada_thermal.c b/drivers/thermal/armada_thermal.c
index 18707f34df1b..4ec5ebd8bc09 100644
--- a/drivers/thermal/armada_thermal.c
+++ b/drivers/thermal/armada_thermal.c
@@ -416,7 +416,7 @@ static int armada_get_temp_legacy(struct thermal_zone *thermal,
return ret;
}
-static struct thermal_zone_ops legacy_ops = {
+static struct thermal_sensor_ops legacy_ops = {
.get_temp = armada_get_temp_legacy,
};
diff --git a/drivers/thermal/da9062-thermal.c b/drivers/thermal/da9062-thermal.c
index acabb93a5140..77862f8222cd 100644
--- a/drivers/thermal/da9062-thermal.c
+++ b/drivers/thermal/da9062-thermal.c
@@ -170,7 +170,7 @@ static int da9062_thermal_get_temp(struct thermal_zone *z,
return 0;
}
-static struct thermal_zone_ops da9062_thermal_ops = {
+static struct thermal_sensor_ops da9062_thermal_ops = {
.get_temp = da9062_thermal_get_temp,
.get_trip_type = da9062_thermal_get_trip_type,
.get_trip_temp = da9062_thermal_get_trip_temp,
diff --git a/drivers/thermal/dove_thermal.c b/drivers/thermal/dove_thermal.c
index 59a6adefde2f..f0e94e7a4292 100644
--- a/drivers/thermal/dove_thermal.c
+++ b/drivers/thermal/dove_thermal.c
@@ -109,7 +109,7 @@ static int dove_get_temp(struct thermal_zone *thermal,
return 0;
}
-static struct thermal_zone_ops ops = {
+static struct thermal_sensor_ops ops = {
.get_temp = dove_get_temp,
};
diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c
index f0cf4a6c6bc0..835cb99ddd78 100644
--- a/drivers/thermal/imx_thermal.c
+++ b/drivers/thermal/imx_thermal.c
@@ -418,7 +418,7 @@ static int imx_unbind(struct thermal_zone *tz,
return 0;
}
-static struct thermal_zone_ops imx_tz_ops = {
+static struct thermal_sensor_ops imx_tz_ops = {
.bind = imx_bind,
.unbind = imx_unbind,
.get_temp = imx_get_temp,
diff --git a/drivers/thermal/intel/int340x_thermal/int3400_thermal.c b/drivers/thermal/intel/int340x_thermal/int3400_thermal.c
index 12b0452b3142..135b59e15399 100644
--- a/drivers/thermal/intel/int340x_thermal/int3400_thermal.c
+++ b/drivers/thermal/intel/int340x_thermal/int3400_thermal.c
@@ -485,7 +485,7 @@ static int int3400_thermal_change_mode(struct thermal_zone *thermal,
return result;
}
-static struct thermal_zone_ops int3400_thermal_ops = {
+static struct thermal_sensor_ops int3400_thermal_ops = {
.get_temp = int3400_thermal_get_temp,
.change_mode = int3400_thermal_change_mode,
};
diff --git a/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c b/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c
index 90c060c0e97f..d726fb7c846f 100644
--- a/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c
+++ b/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c
@@ -151,7 +151,7 @@ static void int340x_thermal_critical(struct thermal_zone *zone)
dev_dbg(&zone->device, "%s: critical temperature reached\n", zone->type);
}
-static struct thermal_zone_ops int340x_thermal_zone_ops = {
+static struct thermal_sensor_ops int340x_thermal_sensor_ops = {
.get_temp = int340x_thermal_get_zone_temp,
.get_trip_temp = int340x_thermal_get_trip_temp,
.get_trip_type = int340x_thermal_get_trip_type,
@@ -217,7 +217,7 @@ static struct thermal_zone_params int340x_thermal_params = {
};
struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev,
- struct thermal_zone_ops *override_ops)
+ struct thermal_sensor_ops *override_ops)
{
struct int34x_thermal_zone *int34x_thermal_zone;
acpi_status status;
@@ -262,7 +262,7 @@ struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *adev,
acpi_device_bid(adev),
trip_cnt,
trip_mask, int34x_thermal_zone,
- &int340x_thermal_zone_ops,
+ &int340x_thermal_sensor_ops,
&int340x_thermal_params,
0, 0);
if (IS_ERR(int34x_thermal_zone->zone)) {
diff --git a/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h b/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h
index f6be7d8f59d5..01ce3415d4fd 100644
--- a/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h
+++ b/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h
@@ -29,13 +29,13 @@ struct int34x_thermal_zone {
int hot_temp;
int hot_trip_id;
struct thermal_zone *zone;
- struct thermal_zone_ops *override_ops;
+ struct thermal_sensor_ops *override_ops;
void *priv_data;
struct acpi_lpat_conversion_table *lpat_table;
};
struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *,
- struct thermal_zone_ops *override_ops);
+ struct thermal_sensor_ops *override_ops);
void int340x_thermal_zone_remove(struct int34x_thermal_zone *);
int int340x_thermal_read_trips(struct int34x_thermal_zone *int34x_zone);
diff --git a/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c b/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
index 1da96d5f30c3..c60e466809ef 100644
--- a/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
+++ b/drivers/thermal/intel/int340x_thermal/processor_thermal_device.c
@@ -207,7 +207,7 @@ static int proc_thermal_get_zone_temp(struct thermal_zone *zone,
return ret;
}
-static struct thermal_zone_ops proc_thermal_local_ops = {
+static struct thermal_sensor_ops proc_thermal_local_ops = {
.get_temp = proc_thermal_get_zone_temp,
};
@@ -285,7 +285,7 @@ int proc_thermal_add(struct device *dev, struct proc_thermal_device *proc_priv)
struct acpi_device *adev;
acpi_status status;
unsigned long long tmp;
- struct thermal_zone_ops *ops = NULL;
+ struct thermal_sensor_ops *ops = NULL;
int ret;
adev = ACPI_COMPANION(dev);
diff --git a/drivers/thermal/intel/int340x_thermal/processor_thermal_device_pci.c b/drivers/thermal/intel/int340x_thermal/processor_thermal_device_pci.c
index 55f1c23d1235..f70f85ad752a 100644
--- a/drivers/thermal/intel/int340x_thermal/processor_thermal_device_pci.c
+++ b/drivers/thermal/intel/int340x_thermal/processor_thermal_device_pci.c
@@ -200,7 +200,7 @@ static int sys_set_trip_temp(struct thermal_zone *tzd, int trip, int temp)
return 0;
}
-static struct thermal_zone_ops tzone_ops = {
+static struct thermal_sensor_ops tzone_ops = {
.get_temp = sys_get_curr_temp,
.get_trip_temp = sys_get_trip_temp,
.get_trip_type = sys_get_trip_type,
diff --git a/drivers/thermal/intel/intel_pch_thermal.c b/drivers/thermal/intel/intel_pch_thermal.c
index 596949da0e7e..7f0118c23251 100644
--- a/drivers/thermal/intel/intel_pch_thermal.c
+++ b/drivers/thermal/intel/intel_pch_thermal.c
@@ -331,7 +331,7 @@ static void pch_critical(struct thermal_zone *tzd)
dev_dbg(&tzd->device, "%s: critical temperature reached\n", tzd->type);
}
-static struct thermal_zone_ops tzd_ops = {
+static struct thermal_sensor_ops tzd_ops = {
.get_temp = pch_thermal_get_temp,
.get_trip_type = pch_get_trip_type,
.get_trip_temp = pch_get_trip_temp,
diff --git a/drivers/thermal/intel/intel_quark_dts_thermal.c b/drivers/thermal/intel/intel_quark_dts_thermal.c
index ad992fabb6ba..1744f81caf8b 100644
--- a/drivers/thermal/intel/intel_quark_dts_thermal.c
+++ b/drivers/thermal/intel/intel_quark_dts_thermal.c
@@ -313,7 +313,7 @@ static int sys_change_mode(struct thermal_zone *tzd,
return ret;
}
-static struct thermal_zone_ops tzone_ops = {
+static struct thermal_sensor_ops tzone_ops = {
.get_temp = sys_get_curr_temp,
.get_trip_temp = sys_get_trip_temp,
.get_trip_type = sys_get_trip_type,
diff --git a/drivers/thermal/intel/intel_soc_dts_iosf.c b/drivers/thermal/intel/intel_soc_dts_iosf.c
index c395bafd4fef..5e6d8d92f1bb 100644
--- a/drivers/thermal/intel/intel_soc_dts_iosf.c
+++ b/drivers/thermal/intel/intel_soc_dts_iosf.c
@@ -243,7 +243,7 @@ static int sys_get_curr_temp(struct thermal_zone *tzd,
return 0;
}
-static struct thermal_zone_ops tzone_ops = {
+static struct thermal_sensor_ops tzone_ops = {
.get_temp = sys_get_curr_temp,
.get_trip_temp = sys_get_trip_temp,
.get_trip_type = sys_get_trip_type,
diff --git a/drivers/thermal/intel/x86_pkg_temp_thermal.c b/drivers/thermal/intel/x86_pkg_temp_thermal.c
index 418e99a0f999..ab695aed96a5 100644
--- a/drivers/thermal/intel/x86_pkg_temp_thermal.c
+++ b/drivers/thermal/intel/x86_pkg_temp_thermal.c
@@ -220,7 +220,7 @@ static int sys_get_trip_type(struct thermal_zone *thermal, int trip,
}
/* Thermal zone callback registry */
-static struct thermal_zone_ops tzone_ops = {
+static struct thermal_sensor_ops tzone_ops = {
.get_temp = sys_get_curr_temp,
.get_trip_temp = sys_get_trip_temp,
.get_trip_type = sys_get_trip_type,
diff --git a/drivers/thermal/kirkwood_thermal.c b/drivers/thermal/kirkwood_thermal.c
index e4133fb20f1b..4da621d7bcb9 100644
--- a/drivers/thermal/kirkwood_thermal.c
+++ b/drivers/thermal/kirkwood_thermal.c
@@ -51,7 +51,7 @@ static int kirkwood_get_temp(struct thermal_zone *thermal,
return 0;
}
-static struct thermal_zone_ops ops = {
+static struct thermal_sensor_ops ops = {
.get_temp = kirkwood_get_temp,
};
diff --git a/drivers/thermal/rcar_thermal.c b/drivers/thermal/rcar_thermal.c
index ea296b0b02f3..a60a16b7be06 100644
--- a/drivers/thermal/rcar_thermal.c
+++ b/drivers/thermal/rcar_thermal.c
@@ -327,7 +327,7 @@ static const struct thermal_zone_of_device_ops rcar_thermal_zone_of_ops = {
.get_temp = rcar_thermal_of_get_temp,
};
-static struct thermal_zone_ops rcar_thermal_zone_ops = {
+static struct thermal_sensor_ops rcar_thermal_sensor_ops = {
.get_temp = rcar_thermal_get_temp,
.get_trip_type = rcar_thermal_get_trip_type,
.get_trip_temp = rcar_thermal_get_trip_temp,
@@ -534,7 +534,7 @@ static int rcar_thermal_probe(struct platform_device *pdev)
priv->zone = thermal_zone_register(
"rcar_thermal",
1, 0, priv,
- &rcar_thermal_zone_ops, NULL, 0,
+ &rcar_thermal_sensor_ops, NULL, 0,
idle);
ret = thermal_zone_enable(priv->zone);
diff --git a/drivers/thermal/spear_thermal.c b/drivers/thermal/spear_thermal.c
index 0f4492ab927c..d32b3b0976df 100644
--- a/drivers/thermal/spear_thermal.c
+++ b/drivers/thermal/spear_thermal.c
@@ -41,7 +41,7 @@ static inline int thermal_get_temp(struct thermal_zone *thermal,
return 0;
}
-static struct thermal_zone_ops ops = {
+static struct thermal_sensor_ops ops = {
.get_temp = thermal_get_temp,
};
diff --git a/drivers/thermal/st/st_thermal.c b/drivers/thermal/st/st_thermal.c
index 97f2d8c3493a..1a09c7d24d82 100644
--- a/drivers/thermal/st/st_thermal.c
+++ b/drivers/thermal/st/st_thermal.c
@@ -170,7 +170,7 @@ static int st_thermal_get_trip_temp(struct thermal_zone *th,
return 0;
}
-static struct thermal_zone_ops st_tz_ops = {
+static struct thermal_sensor_ops st_tz_ops = {
.get_temp = st_thermal_get_temp,
.get_trip_type = st_thermal_get_trip_type,
.get_trip_temp = st_thermal_get_trip_temp,
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 64f736b9e877..d0eef7297c99 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -1184,7 +1184,7 @@ static void bind_tz(struct thermal_zone *tz)
*/
struct thermal_zone *
thermal_zone_register(const char *type, int trips, int mask,
- void *devdata, struct thermal_zone_ops *ops,
+ void *devdata, struct thermal_sensor_ops *ops,
struct thermal_zone_params *tzp, int passive_delay,
int polling_delay)
{
diff --git a/drivers/thermal/thermal_of.c b/drivers/thermal/thermal_of.c
index f29d4f99522a..8d958bec69d9 100644
--- a/drivers/thermal/thermal_of.c
+++ b/drivers/thermal/thermal_of.c
@@ -360,7 +360,7 @@ static int of_thermal_get_crit_temp(struct thermal_zone *tz,
return -EINVAL;
}
-static struct thermal_zone_ops of_thermal_ops = {
+static struct thermal_sensor_ops of_thermal_ops = {
.get_trip_type = of_thermal_get_trip_type,
.get_trip_temp = of_thermal_get_trip_temp,
.set_trip_temp = of_thermal_set_trip_temp,
@@ -1046,7 +1046,7 @@ int __init of_parse_thermal_zones(void)
{
struct device_node *np, *child;
struct __thermal_zone *tz;
- struct thermal_zone_ops *ops;
+ struct thermal_sensor_ops *ops;
np = of_find_node_by_name(NULL, "thermal-zones");
if (!np) {
diff --git a/include/linux/thermal.h b/include/linux/thermal.h
index c599b7f8c9c5..06b6b743d5c4 100644
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
@@ -57,7 +57,7 @@ enum thermal_notify_event {
THERMAL_EVENT_KEEP_ALIVE, /* Request for user space handler to respond */
};
-struct thermal_zone_ops {
+struct thermal_sensor_ops {
int (*bind) (struct thermal_zone *,
struct thermal_cooling_device *);
int (*unbind) (struct thermal_zone *,
@@ -164,7 +164,7 @@ struct thermal_zone {
int prev_low_trip;
int prev_high_trip;
atomic_t need_update;
- struct thermal_zone_ops *ops;
+ struct thermal_sensor_ops *ops;
struct thermal_zone_params *tzp;
struct thermal_governor *governor;
void *governor_data;
@@ -361,7 +361,7 @@ void devm_thermal_zone_of_sensor_unregister(struct device *dev,
#ifdef CONFIG_THERMAL
struct thermal_zone *thermal_zone_register(const char *, int, int,
- void *, struct thermal_zone_ops *,
+ void *, struct thermal_sensor_ops *,
struct thermal_zone_params *, int, int);
void thermal_zone_unregister(struct thermal_zone *);
@@ -396,7 +396,7 @@ void thermal_zone_critical(struct thermal_zone *tz);
#else
static inline struct thermal_zone *thermal_zone_register(
const char *type, int trips, int mask, void *devdata,
- struct thermal_zone_ops *ops,
+ struct thermal_sensor_ops *ops,
struct thermal_zone_params *tzp,
int passive_delay, int polling_delay)
{ return ERR_PTR(-ENODEV); }
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 03/15] thermal/core: Add a thermal sensor structure in the thermal zone
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
2022-04-26 22:15 ` [PATCH 02/15] thermal/core: Change thermal_zone_ops to thermal_sensor_ops Daniel Lezcano
@ 2022-04-26 22:15 ` Daniel Lezcano
2022-04-26 22:15 ` [PATCH 04/15] thermal/core: Remove duplicate information when an error occurs Daniel Lezcano
` (12 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
The thermal sensor ops is directly defined in the thermal zone but
still its data structuration makes the sensor ops and the thermal zone
too much interconnected for multiple sensors per thermal zone.
Create a dedicated structure for the thermal sensor to be included in
the thermal zone structure so these components are clearly separated.
Cc: Alexandre Bailon <abailon@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc; Eduardo Valentin <eduval@amazon.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
---
drivers/thermal/broadcom/bcm2835_thermal.c | 2 +-
drivers/thermal/gov_bang_bang.c | 6 +--
drivers/thermal/gov_fair_share.c | 6 +--
drivers/thermal/gov_power_allocator.c | 18 ++++----
drivers/thermal/gov_step_wise.c | 4 +-
drivers/thermal/rcar_gen3_thermal.c | 6 +--
drivers/thermal/samsung/exynos_tmu.c | 6 +--
drivers/thermal/tegra/soctherm.c | 10 ++---
drivers/thermal/tegra/tegra30-tsensor.c | 4 +-
drivers/thermal/thermal_core.c | 48 +++++++++++-----------
drivers/thermal/thermal_helpers.c | 22 +++++-----
drivers/thermal/thermal_hwmon.c | 4 +-
drivers/thermal/thermal_netlink.c | 8 ++--
drivers/thermal/thermal_of.c | 16 ++++----
drivers/thermal/thermal_sysfs.c | 40 +++++++++---------
include/linux/thermal.h | 7 +++-
16 files changed, 106 insertions(+), 101 deletions(-)
diff --git a/drivers/thermal/broadcom/bcm2835_thermal.c b/drivers/thermal/broadcom/bcm2835_thermal.c
index b057d7a921da..9f274a017d32 100644
--- a/drivers/thermal/broadcom/bcm2835_thermal.c
+++ b/drivers/thermal/broadcom/bcm2835_thermal.c
@@ -232,7 +232,7 @@ static int bcm2835_thermal_probe(struct platform_device *pdev)
* For now we deal only with critical, otherwise
* would need to iterate
*/
- err = tz->ops->get_trip_temp(tz, 0, &trip_temp);
+ err = tz->sensor.ops->get_trip_temp(tz, 0, &trip_temp);
if (err < 0) {
dev_err(&pdev->dev,
"Not able to read trip_temp: %d\n",
diff --git a/drivers/thermal/gov_bang_bang.c b/drivers/thermal/gov_bang_bang.c
index c899d16c23a0..02ef6a9b03eb 100644
--- a/drivers/thermal/gov_bang_bang.c
+++ b/drivers/thermal/gov_bang_bang.c
@@ -18,14 +18,14 @@ static void thermal_zone_trip_update(struct thermal_zone *tz, int trip)
int trip_temp, trip_hyst;
struct thermal_instance *instance;
- tz->ops->get_trip_temp(tz, trip, &trip_temp);
+ tz->sensor.ops->get_trip_temp(tz, trip, &trip_temp);
- if (!tz->ops->get_trip_hyst) {
+ if (!tz->sensor.ops->get_trip_hyst) {
pr_warn_once("Undefined get_trip_hyst for thermal zone %s - "
"running with default hysteresis zero\n", tz->type);
trip_hyst = 0;
} else
- tz->ops->get_trip_hyst(tz, trip, &trip_hyst);
+ tz->sensor.ops->get_trip_hyst(tz, trip, &trip_hyst);
dev_dbg(&tz->device, "Trip%d[temp=%d]:temp=%d:hyst=%d\n",
trip, trip_temp, tz->temperature,
diff --git a/drivers/thermal/gov_fair_share.c b/drivers/thermal/gov_fair_share.c
index b039df7ab506..3ce42a8e9dbd 100644
--- a/drivers/thermal/gov_fair_share.c
+++ b/drivers/thermal/gov_fair_share.c
@@ -25,11 +25,11 @@ static int get_trip_level(struct thermal_zone *tz)
int trip_temp;
enum thermal_trip_type trip_type;
- if (tz->trips == 0 || !tz->ops->get_trip_temp)
+ if (tz->trips == 0 || !tz->sensor.ops->get_trip_temp)
return 0;
for (count = 0; count < tz->trips; count++) {
- tz->ops->get_trip_temp(tz, count, &trip_temp);
+ tz->sensor.ops->get_trip_temp(tz, count, &trip_temp);
if (tz->temperature < trip_temp)
break;
}
@@ -39,7 +39,7 @@ static int get_trip_level(struct thermal_zone *tz)
* point, in which case, trip_point = count - 1
*/
if (count > 0) {
- tz->ops->get_trip_type(tz, count - 1, &trip_type);
+ tz->sensor.ops->get_trip_type(tz, count - 1, &trip_type);
trace_thermal_zone_trip(tz, count - 1, trip_type);
}
diff --git a/drivers/thermal/gov_power_allocator.c b/drivers/thermal/gov_power_allocator.c
index dbb4c263eaaf..448baaa642a5 100644
--- a/drivers/thermal/gov_power_allocator.c
+++ b/drivers/thermal/gov_power_allocator.c
@@ -130,7 +130,7 @@ static void estimate_pid_constants(struct thermal_zone *tz,
u32 temperature_threshold;
s32 k_i;
- ret = tz->ops->get_trip_temp(tz, trip_switch_on, &switch_on_temp);
+ ret = tz->sensor.ops->get_trip_temp(tz, trip_switch_on, &switch_on_temp);
if (ret)
switch_on_temp = 0;
@@ -531,7 +531,7 @@ static void get_governor_trips(struct thermal_zone *tz,
enum thermal_trip_type type;
int ret;
- ret = tz->ops->get_trip_type(tz, i, &type);
+ ret = tz->sensor.ops->get_trip_type(tz, i, &type);
if (ret) {
dev_warn(&tz->device,
"Failed to get trip point %d type: %d\n", i,
@@ -669,9 +669,9 @@ static int power_allocator_bind(struct thermal_zone *tz)
get_governor_trips(tz, params);
if (tz->trips > 0) {
- ret = tz->ops->get_trip_temp(tz,
- params->trip_max_desired_temperature,
- &control_temp);
+ ret = tz->sensor.ops->get_trip_temp(tz,
+ params->trip_max_desired_temperature,
+ &control_temp);
if (!ret)
estimate_pid_constants(tz, tz->tzp->sustainable_power,
params->trip_switch_on,
@@ -719,8 +719,8 @@ static int power_allocator_throttle(struct thermal_zone *tz, int trip)
if (trip != params->trip_max_desired_temperature)
return 0;
- ret = tz->ops->get_trip_temp(tz, params->trip_switch_on,
- &switch_on_temp);
+ ret = tz->sensor.ops->get_trip_temp(tz, params->trip_switch_on,
+ &switch_on_temp);
if (!ret && (tz->temperature < switch_on_temp)) {
update = (tz->last_temperature >= switch_on_temp);
tz->passive = 0;
@@ -731,8 +731,8 @@ static int power_allocator_throttle(struct thermal_zone *tz, int trip)
tz->passive = 1;
- ret = tz->ops->get_trip_temp(tz, params->trip_max_desired_temperature,
- &control_temp);
+ ret = tz->sensor.ops->get_trip_temp(tz, params->trip_max_desired_temperature,
+ &control_temp);
if (ret) {
dev_warn(&tz->device,
"Failed to get the maximum desired temperature: %d\n",
diff --git a/drivers/thermal/gov_step_wise.c b/drivers/thermal/gov_step_wise.c
index de6997fba8eb..88bc16d69f98 100644
--- a/drivers/thermal/gov_step_wise.c
+++ b/drivers/thermal/gov_step_wise.c
@@ -122,8 +122,8 @@ static void thermal_zone_trip_update(struct thermal_zone *tz, int trip)
bool throttle = false;
int old_target;
- tz->ops->get_trip_temp(tz, trip, &trip_temp);
- tz->ops->get_trip_type(tz, trip, &trip_type);
+ tz->sensor.ops->get_trip_temp(tz, trip, &trip_temp);
+ tz->sensor.ops->get_trip_type(tz, trip, &trip_type);
trend = get_tz_trend(tz, trip);
diff --git a/drivers/thermal/rcar_gen3_thermal.c b/drivers/thermal/rcar_gen3_thermal.c
index 0b03c2d48495..c2d71b1631b2 100644
--- a/drivers/thermal/rcar_gen3_thermal.c
+++ b/drivers/thermal/rcar_gen3_thermal.c
@@ -321,7 +321,7 @@ static void rcar_gen3_thermal_init_r8a7795es1(struct rcar_gen3_thermal_tsc *tsc)
rcar_gen3_thermal_write(tsc, REG_GEN3_IRQCTL, 0x3F);
rcar_gen3_thermal_write(tsc, REG_GEN3_IRQMSK, 0);
- if (tsc->zone->ops->set_trips)
+ if (tsc->zone->sensor.ops->set_trips)
rcar_gen3_thermal_write(tsc, REG_GEN3_IRQEN,
IRQ_TEMPD1 | IRQ_TEMP2);
@@ -349,7 +349,7 @@ static void rcar_gen3_thermal_init(struct rcar_gen3_thermal_tsc *tsc)
rcar_gen3_thermal_write(tsc, REG_GEN3_IRQCTL, 0);
rcar_gen3_thermal_write(tsc, REG_GEN3_IRQMSK, 0);
- if (tsc->zone->ops->set_trips)
+ if (tsc->zone->sensor.ops->set_trips)
rcar_gen3_thermal_write(tsc, REG_GEN3_IRQEN,
IRQ_TEMPD1 | IRQ_TEMP2);
@@ -555,7 +555,7 @@ static int __maybe_unused rcar_gen3_thermal_resume(struct device *dev)
struct thermal_zone *zone = tsc->zone;
priv->thermal_init(tsc);
- if (zone->ops->set_trips)
+ if (zone->sensor.ops->set_trips)
rcar_gen3_thermal_set_trips(tsc, zone->prev_low_trip,
zone->prev_high_trip);
}
diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c
index 02ba99395cd1..3260f0717299 100644
--- a/drivers/thermal/samsung/exynos_tmu.c
+++ b/drivers/thermal/samsung/exynos_tmu.c
@@ -272,7 +272,7 @@ static int exynos_tmu_initialize(struct platform_device *pdev)
}
if (data->soc != SOC_ARCH_EXYNOS5433) /* FIXME */
- ret = tzd->ops->get_crit_temp(tzd, &temp);
+ ret = tzd->sensor.ops->get_crit_temp(tzd, &temp);
if (ret) {
dev_err(&pdev->dev,
"No CRITICAL trip point defined in device tree!\n");
@@ -304,14 +304,14 @@ static int exynos_tmu_initialize(struct platform_device *pdev)
/* Write temperature code for rising and falling threshold */
for (i = 0; i < ntrips; i++) {
/* Write temperature code for rising threshold */
- ret = tzd->ops->get_trip_temp(tzd, i, &temp);
+ ret = tzd->sensor.ops->get_trip_temp(tzd, i, &temp);
if (ret)
goto err;
temp /= MCELSIUS;
data->tmu_set_trip_temp(data, i, temp);
/* Write temperature code for falling threshold */
- ret = tzd->ops->get_trip_hyst(tzd, i, &hyst);
+ ret = tzd->sensor.ops->get_trip_hyst(tzd, i, &hyst);
if (ret)
goto err;
hyst /= MCELSIUS;
diff --git a/drivers/thermal/tegra/soctherm.c b/drivers/thermal/tegra/soctherm.c
index 43435e3892dd..6d9dff7cedd1 100644
--- a/drivers/thermal/tegra/soctherm.c
+++ b/drivers/thermal/tegra/soctherm.c
@@ -595,7 +595,7 @@ static int tegra_thermctl_set_trip_temp(void *data, int trip, int temp)
if (!tz)
return -EINVAL;
- ret = tz->ops->get_trip_type(tz, trip, &type);
+ ret = tz->sensor.ops->get_trip_type(tz, trip, &type);
if (ret)
return ret;
@@ -643,7 +643,7 @@ static int tegra_thermctl_get_trend(void *data, int trip,
if (!tz)
return -EINVAL;
- ret = tz->ops->get_trip_temp(zone->tz, trip, &trip_temp);
+ ret = tz->sensor.ops->get_trip_temp(zone->tz, trip, &trip_temp);
if (ret)
return ret;
@@ -730,11 +730,11 @@ static int get_hot_temp(struct thermal_zone *tz, int *trip, int *temp)
return -EINVAL;
for (i = 0; i < ntrips; i++) {
- ret = tz->ops->get_trip_type(tz, i, &type);
+ ret = tz->sensor.ops->get_trip_type(tz, i, &type);
if (ret)
return -EINVAL;
if (type == THERMAL_TRIP_HOT) {
- ret = tz->ops->get_trip_temp(tz, i, temp);
+ ret = tz->sensor.ops->get_trip_temp(tz, i, temp);
if (!ret)
*trip = i;
@@ -780,7 +780,7 @@ static int tegra_soctherm_set_hwtrips(struct device *dev,
/* Get thermtrips. If missing, try to get critical trips. */
temperature = tsensor_group_thermtrip_get(ts, sg->id);
if (min_low_temp == temperature)
- if (tz->ops->get_crit_temp(tz, &temperature))
+ if (tz->sensor.ops->get_crit_temp(tz, &temperature))
temperature = max_high_temp;
ret = thermtrip_program(dev, sg, temperature);
diff --git a/drivers/thermal/tegra/tegra30-tsensor.c b/drivers/thermal/tegra/tegra30-tsensor.c
index 80053571c53a..ad35a9694845 100644
--- a/drivers/thermal/tegra/tegra30-tsensor.c
+++ b/drivers/thermal/tegra/tegra30-tsensor.c
@@ -320,8 +320,8 @@ static void tegra_tsensor_get_hw_channel_trips(struct thermal_zone *tzd,
enum thermal_trip_type type;
int trip_temp;
- tzd->ops->get_trip_temp(tzd, i, &trip_temp);
- tzd->ops->get_trip_type(tzd, i, &type);
+ tzd->sensor.ops->get_trip_temp(tzd, i, &trip_temp);
+ tzd->sensor.ops->get_trip_type(tzd, i, &type);
if (type == THERMAL_TRIP_HOT)
*hot_trip = trip_temp;
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index d0eef7297c99..b1d20c8ba3d1 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -344,7 +344,7 @@ static void handle_critical_trips(struct thermal_zone *tz,
{
int trip_temp;
- tz->ops->get_trip_temp(tz, trip, &trip_temp);
+ tz->sensor.ops->get_trip_temp(tz, trip, &trip_temp);
/* If we have not crossed the trip_temp, we do not care. */
if (trip_temp <= 0 || tz->temperature < trip_temp)
@@ -352,10 +352,10 @@ static void handle_critical_trips(struct thermal_zone *tz,
trace_thermal_zone_trip(tz, trip, trip_type);
- if (trip_type == THERMAL_TRIP_HOT && tz->ops->hot)
- tz->ops->hot(tz);
+ if (trip_type == THERMAL_TRIP_HOT && tz->sensor.ops->hot)
+ tz->sensor.ops->hot(tz);
else if (trip_type == THERMAL_TRIP_CRITICAL)
- tz->ops->critical(tz);
+ tz->sensor.ops->critical(tz);
}
static void handle_thermal_trip(struct thermal_zone *tz, int trip)
@@ -367,10 +367,10 @@ static void handle_thermal_trip(struct thermal_zone *tz, int trip)
if (test_bit(trip, &tz->trips_disabled))
return;
- tz->ops->get_trip_temp(tz, trip, &trip_temp);
- tz->ops->get_trip_type(tz, trip, &type);
- if (tz->ops->get_trip_hyst)
- tz->ops->get_trip_hyst(tz, trip, &hyst);
+ tz->sensor.ops->get_trip_temp(tz, trip, &trip_temp);
+ tz->sensor.ops->get_trip_type(tz, trip, &type);
+ if (tz->sensor.ops->get_trip_hyst)
+ tz->sensor.ops->get_trip_hyst(tz, trip, &hyst);
if (tz->last_temperature != THERMAL_TEMP_INVALID) {
if (tz->last_temperature < trip_temp &&
@@ -441,8 +441,8 @@ static int thermal_zone_set_mode(struct thermal_zone *tz,
return ret;
}
- if (tz->ops->change_mode)
- ret = tz->ops->change_mode(tz, mode);
+ if (tz->sensor.ops->change_mode)
+ ret = tz->sensor.ops->change_mode(tz, mode);
if (!ret)
tz->mode = mode;
@@ -495,7 +495,7 @@ void thermal_zone_update(struct thermal_zone *tz,
if (atomic_read(&in_suspend))
return;
- if (WARN_ONCE(!tz->ops->get_temp, "'%s' must not be called without "
+ if (WARN_ONCE(!tz->sensor.ops->get_temp, "'%s' must not be called without "
"'get_temp' ops set\n", __func__))
return;
@@ -839,11 +839,11 @@ static void bind_cdev(struct thermal_cooling_device *cdev)
mutex_lock(&thermal_list_lock);
list_for_each_entry(pos, &thermal_tz_list, node) {
- if (!pos->tzp && !pos->ops->bind)
+ if (!pos->tzp && !pos->sensor.ops->bind)
continue;
- if (pos->ops->bind) {
- ret = pos->ops->bind(pos, cdev);
+ if (pos->sensor.ops->bind) {
+ ret = pos->sensor.ops->bind(pos, cdev);
if (ret)
print_bind_err_msg(pos, cdev, ret);
continue;
@@ -1091,8 +1091,8 @@ void thermal_cooling_device_unregister(struct thermal_cooling_device *cdev)
/* Unbind all thermal zones associated with 'this' cdev */
list_for_each_entry(tz, &thermal_tz_list, node) {
- if (tz->ops->unbind) {
- tz->ops->unbind(tz, cdev);
+ if (tz->sensor.ops->unbind) {
+ tz->sensor.ops->unbind(tz, cdev);
continue;
}
@@ -1124,15 +1124,15 @@ static void bind_tz(struct thermal_zone *tz)
struct thermal_cooling_device *pos = NULL;
const struct thermal_zone_params *tzp = tz->tzp;
- if (!tzp && !tz->ops->bind)
+ if (!tzp && !tz->sensor.ops->bind)
return;
mutex_lock(&thermal_list_lock);
/* If there is ops->bind, try to use ops->bind */
- if (tz->ops->bind) {
+ if (tz->sensor.ops->bind) {
list_for_each_entry(pos, &thermal_cdev_list, node) {
- ret = tz->ops->bind(tz, pos);
+ ret = tz->sensor.ops->bind(tz, pos);
if (ret)
print_bind_err_msg(tz, pos, ret);
}
@@ -1243,7 +1243,7 @@ thermal_zone_register(const char *type, int trips, int mask,
if (!ops->critical)
ops->critical = thermal_zone_critical;
- tz->ops = ops;
+ tz->sensor.ops = ops;
tz->tzp = tzp;
tz->device.class = &thermal_class;
tz->devdata = devdata;
@@ -1266,8 +1266,8 @@ thermal_zone_register(const char *type, int trips, int mask,
goto release_device;
for (count = 0; count < trips; count++) {
- if (tz->ops->get_trip_type(tz, count, &trip_type) ||
- tz->ops->get_trip_temp(tz, count, &trip_temp) ||
+ if (tz->sensor.ops->get_trip_type(tz, count, &trip_type) ||
+ tz->sensor.ops->get_trip_temp(tz, count, &trip_temp) ||
!trip_temp)
set_bit(count, &tz->trips_disabled);
}
@@ -1355,8 +1355,8 @@ void thermal_zone_unregister(struct thermal_zone *tz)
/* Unbind all cdevs associated with 'this' thermal zone */
list_for_each_entry(cdev, &thermal_cdev_list, node) {
- if (tz->ops->unbind) {
- tz->ops->unbind(tz, cdev);
+ if (tz->sensor.ops->unbind) {
+ tz->sensor.ops->unbind(tz, cdev);
continue;
}
diff --git a/drivers/thermal/thermal_helpers.c b/drivers/thermal/thermal_helpers.c
index 841cb3f43036..41d6898ec5b3 100644
--- a/drivers/thermal/thermal_helpers.c
+++ b/drivers/thermal/thermal_helpers.c
@@ -27,8 +27,8 @@ int get_tz_trend(struct thermal_zone *tz, int trip)
{
enum thermal_trend trend;
- if (tz->emul_temperature || !tz->ops->get_trend ||
- tz->ops->get_trend(tz, trip, &trend)) {
+ if (tz->emul_temperature || !tz->sensor.ops->get_trend ||
+ tz->sensor.ops->get_trend(tz, trip, &trend)) {
if (tz->temperature > tz->last_temperature)
trend = THERMAL_TREND_RAISING;
else if (tz->temperature < tz->last_temperature)
@@ -82,19 +82,19 @@ int thermal_zone_get_temp(struct thermal_zone *tz, int *temp)
int crit_temp = INT_MAX;
enum thermal_trip_type type;
- if (!tz || IS_ERR(tz) || !tz->ops->get_temp)
+ if (!tz || IS_ERR(tz) || !tz->sensor.ops->get_temp)
goto exit;
mutex_lock(&tz->lock);
- ret = tz->ops->get_temp(tz, temp);
+ ret = tz->sensor.ops->get_temp(tz, temp);
if (IS_ENABLED(CONFIG_THERMAL_EMULATION) && tz->emul_temperature) {
for (count = 0; count < tz->trips; count++) {
- ret = tz->ops->get_trip_type(tz, count, &type);
+ ret = tz->sensor.ops->get_trip_type(tz, count, &type);
if (!ret && type == THERMAL_TRIP_CRITICAL) {
- ret = tz->ops->get_trip_temp(tz, count,
- &crit_temp);
+ ret = tz->sensor.ops->get_trip_temp(tz, count,
+ &crit_temp);
break;
}
}
@@ -135,14 +135,14 @@ void thermal_zone_set_trips(struct thermal_zone *tz)
mutex_lock(&tz->lock);
- if (!tz->ops->set_trips || !tz->ops->get_trip_hyst)
+ if (!tz->sensor.ops->set_trips || !tz->sensor.ops->get_trip_hyst)
goto exit;
for (i = 0; i < tz->trips; i++) {
int trip_low;
- tz->ops->get_trip_temp(tz, i, &trip_temp);
- tz->ops->get_trip_hyst(tz, i, &hysteresis);
+ tz->sensor.ops->get_trip_temp(tz, i, &trip_temp);
+ tz->sensor.ops->get_trip_hyst(tz, i, &hysteresis);
trip_low = trip_temp - hysteresis;
@@ -167,7 +167,7 @@ void thermal_zone_set_trips(struct thermal_zone *tz)
* Set a temperature window. When this window is left the driver
* must inform the thermal core via thermal_zone_update.
*/
- ret = tz->ops->set_trips(tz, low, high);
+ ret = tz->sensor.ops->set_trips(tz, low, high);
if (ret)
dev_err(&tz->device, "Failed to set trips: %d\n", ret);
diff --git a/drivers/thermal/thermal_hwmon.c b/drivers/thermal/thermal_hwmon.c
index bdf5639fe214..c0900750735f 100644
--- a/drivers/thermal/thermal_hwmon.c
+++ b/drivers/thermal/thermal_hwmon.c
@@ -77,7 +77,7 @@ temp_crit_show(struct device *dev, struct device_attribute *attr, char *buf)
int temperature;
int ret;
- ret = tz->ops->get_crit_temp(tz, &temperature);
+ ret = tz->sensor.ops->get_crit_temp(tz, &temperature);
if (ret)
return ret;
@@ -126,7 +126,7 @@ thermal_hwmon_lookup_temp(const struct thermal_hwmon_device *hwmon,
static bool thermal_zone_crit_temp_valid(struct thermal_zone *tz)
{
int temp;
- return tz->ops->get_crit_temp && !tz->ops->get_crit_temp(tz, &temp);
+ return tz->sensor.ops->get_crit_temp && !tz->sensor.ops->get_crit_temp(tz, &temp);
}
int thermal_add_hwmon_sysfs(struct thermal_zone *tz)
diff --git a/drivers/thermal/thermal_netlink.c b/drivers/thermal/thermal_netlink.c
index 88c28c5205b8..0e95f113d525 100644
--- a/drivers/thermal/thermal_netlink.c
+++ b/drivers/thermal/thermal_netlink.c
@@ -474,10 +474,10 @@ static int thermal_genl_cmd_tz_get_trip(struct param *p)
enum thermal_trip_type type;
int temp, hyst = 0;
- tz->ops->get_trip_type(tz, i, &type);
- tz->ops->get_trip_temp(tz, i, &temp);
- if (tz->ops->get_trip_hyst)
- tz->ops->get_trip_hyst(tz, i, &hyst);
+ tz->sensor.ops->get_trip_type(tz, i, &type);
+ tz->sensor.ops->get_trip_temp(tz, i, &temp);
+ if (tz->sensor.ops->get_trip_hyst)
+ tz->sensor.ops->get_trip_hyst(tz, i, &hyst);
if (nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_TRIP_ID, i) ||
nla_put_u32(msg, THERMAL_GENL_ATTR_TZ_TRIP_TYPE, type) ||
diff --git a/drivers/thermal/thermal_of.c b/drivers/thermal/thermal_of.c
index 8d958bec69d9..932b6450eac4 100644
--- a/drivers/thermal/thermal_of.c
+++ b/drivers/thermal/thermal_of.c
@@ -395,18 +395,18 @@ thermal_zone_of_add_sensor(struct device_node *zone,
tz->ops = ops;
tz->sensor_data = data;
- tzd->ops->get_temp = of_thermal_get_temp;
- tzd->ops->get_trend = of_thermal_get_trend;
+ tzd->sensor.ops->get_temp = of_thermal_get_temp;
+ tzd->sensor.ops->get_trend = of_thermal_get_trend;
/*
* The thermal zone core will calculate the window if they have set the
* optional set_trips pointer.
*/
if (ops->set_trips)
- tzd->ops->set_trips = of_thermal_set_trips;
+ tzd->sensor.ops->set_trips = of_thermal_set_trips;
if (ops->set_emul_temp)
- tzd->ops->set_emul_temp = of_thermal_set_emul_temp;
+ tzd->sensor.ops->set_emul_temp = of_thermal_set_emul_temp;
mutex_unlock(&tzd->lock);
@@ -566,9 +566,9 @@ void thermal_zone_of_sensor_unregister(struct device *dev,
thermal_zone_disable(tzd);
mutex_lock(&tzd->lock);
- tzd->ops->get_temp = NULL;
- tzd->ops->get_trend = NULL;
- tzd->ops->set_emul_temp = NULL;
+ tzd->sensor.ops->get_temp = NULL;
+ tzd->sensor.ops->get_trend = NULL;
+ tzd->sensor.ops->set_emul_temp = NULL;
tz->ops = NULL;
tz->sensor_data = NULL;
@@ -1024,7 +1024,7 @@ static __init void of_thermal_destroy_zones(void)
thermal_zone_unregister(zone);
kfree(zone->tzp);
- kfree(zone->ops);
+ kfree(zone->sensor.ops);
of_thermal_free_zone(zone->devdata);
}
of_node_put(np);
diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c
index 083578e736cc..33d8c9f47990 100644
--- a/drivers/thermal/thermal_sysfs.c
+++ b/drivers/thermal/thermal_sysfs.c
@@ -82,13 +82,13 @@ trip_point_type_show(struct device *dev, struct device_attribute *attr,
enum thermal_trip_type type;
int trip, result;
- if (!tz->ops->get_trip_type)
+ if (!tz->sensor.ops->get_trip_type)
return -EPERM;
if (sscanf(attr->attr.name, "trip_point_%d_type", &trip) != 1)
return -EINVAL;
- result = tz->ops->get_trip_type(tz, trip, &type);
+ result = tz->sensor.ops->get_trip_type(tz, trip, &type);
if (result)
return result;
@@ -115,7 +115,7 @@ trip_point_temp_store(struct device *dev, struct device_attribute *attr,
int temperature, hyst = 0;
enum thermal_trip_type type;
- if (!tz->ops->set_trip_temp)
+ if (!tz->sensor.ops->set_trip_temp)
return -EPERM;
if (sscanf(attr->attr.name, "trip_point_%d_temp", &trip) != 1)
@@ -124,17 +124,17 @@ trip_point_temp_store(struct device *dev, struct device_attribute *attr,
if (kstrtoint(buf, 10, &temperature))
return -EINVAL;
- ret = tz->ops->set_trip_temp(tz, trip, temperature);
+ ret = tz->sensor.ops->set_trip_temp(tz, trip, temperature);
if (ret)
return ret;
- if (tz->ops->get_trip_hyst) {
- ret = tz->ops->get_trip_hyst(tz, trip, &hyst);
+ if (tz->sensor.ops->get_trip_hyst) {
+ ret = tz->sensor.ops->get_trip_hyst(tz, trip, &hyst);
if (ret)
return ret;
}
- ret = tz->ops->get_trip_type(tz, trip, &type);
+ ret = tz->sensor.ops->get_trip_type(tz, trip, &type);
if (ret)
return ret;
@@ -153,13 +153,13 @@ trip_point_temp_show(struct device *dev, struct device_attribute *attr,
int trip, ret;
int temperature;
- if (!tz->ops->get_trip_temp)
+ if (!tz->sensor.ops->get_trip_temp)
return -EPERM;
if (sscanf(attr->attr.name, "trip_point_%d_temp", &trip) != 1)
return -EINVAL;
- ret = tz->ops->get_trip_temp(tz, trip, &temperature);
+ ret = tz->sensor.ops->get_trip_temp(tz, trip, &temperature);
if (ret)
return ret;
@@ -175,7 +175,7 @@ trip_point_hyst_store(struct device *dev, struct device_attribute *attr,
int trip, ret;
int temperature;
- if (!tz->ops->set_trip_hyst)
+ if (!tz->sensor.ops->set_trip_hyst)
return -EPERM;
if (sscanf(attr->attr.name, "trip_point_%d_hyst", &trip) != 1)
@@ -189,7 +189,7 @@ trip_point_hyst_store(struct device *dev, struct device_attribute *attr,
* here. The driver implementing 'set_trip_hyst' has to
* take care of this.
*/
- ret = tz->ops->set_trip_hyst(tz, trip, temperature);
+ ret = tz->sensor.ops->set_trip_hyst(tz, trip, temperature);
if (!ret)
thermal_zone_set_trips(tz);
@@ -205,13 +205,13 @@ trip_point_hyst_show(struct device *dev, struct device_attribute *attr,
int trip, ret;
int temperature;
- if (!tz->ops->get_trip_hyst)
+ if (!tz->sensor.ops->get_trip_hyst)
return -EPERM;
if (sscanf(attr->attr.name, "trip_point_%d_hyst", &trip) != 1)
return -EINVAL;
- ret = tz->ops->get_trip_hyst(tz, trip, &temperature);
+ ret = tz->sensor.ops->get_trip_hyst(tz, trip, &temperature);
return ret ? ret : sprintf(buf, "%d\n", temperature);
}
@@ -260,12 +260,12 @@ emul_temp_store(struct device *dev, struct device_attribute *attr,
if (kstrtoint(buf, 10, &temperature))
return -EINVAL;
- if (!tz->ops->set_emul_temp) {
+ if (!tz->sensor.ops->set_emul_temp) {
mutex_lock(&tz->lock);
tz->emul_temperature = temperature;
mutex_unlock(&tz->lock);
} else {
- ret = tz->ops->set_emul_temp(tz, temperature);
+ ret = tz->sensor.ops->set_emul_temp(tz, temperature);
}
if (!ret)
@@ -431,7 +431,7 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
return -ENOMEM;
}
- if (tz->ops->get_trip_hyst) {
+ if (tz->sensor.ops->get_trip_hyst) {
tz->trip_hyst_attrs = kcalloc(tz->trips,
sizeof(*tz->trip_hyst_attrs),
GFP_KERNEL);
@@ -446,7 +446,7 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
if (!attrs) {
kfree(tz->trip_type_attrs);
kfree(tz->trip_temp_attrs);
- if (tz->ops->get_trip_hyst)
+ if (tz->sensor.ops->get_trip_hyst)
kfree(tz->trip_hyst_attrs);
return -ENOMEM;
}
@@ -481,7 +481,7 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
attrs[indx + tz->trips] = &tz->trip_temp_attrs[indx].attr.attr;
/* create Optional trip hyst attribute */
- if (!tz->ops->get_trip_hyst)
+ if (!tz->sensor.ops->get_trip_hyst)
continue;
snprintf(tz->trip_hyst_attrs[indx].name, THERMAL_NAME_LENGTH,
"trip_point_%d_hyst", indx);
@@ -491,7 +491,7 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
tz->trip_hyst_attrs[indx].name;
tz->trip_hyst_attrs[indx].attr.attr.mode = S_IRUGO;
tz->trip_hyst_attrs[indx].attr.show = trip_point_hyst_show;
- if (tz->ops->set_trip_hyst) {
+ if (tz->sensor.ops->set_trip_hyst) {
tz->trip_hyst_attrs[indx].attr.attr.mode |= S_IWUSR;
tz->trip_hyst_attrs[indx].attr.store =
trip_point_hyst_store;
@@ -519,7 +519,7 @@ static void destroy_trip_attrs(struct thermal_zone *tz)
kfree(tz->trip_type_attrs);
kfree(tz->trip_temp_attrs);
- if (tz->ops->get_trip_hyst)
+ if (tz->sensor.ops->get_trip_hyst)
kfree(tz->trip_hyst_attrs);
kfree(tz->trips_attribute_group.attrs);
}
diff --git a/include/linux/thermal.h b/include/linux/thermal.h
index 06b6b743d5c4..b3e8244af510 100644
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
@@ -80,6 +80,11 @@ struct thermal_sensor_ops {
void (*critical)(struct thermal_zone *);
};
+struct thermal_sensor {
+ struct thermal_sensor_ops *ops;
+ struct device *dev;
+};
+
struct thermal_cooling_device_ops {
int (*get_max_state) (struct thermal_cooling_device *, unsigned long *);
int (*get_cur_state) (struct thermal_cooling_device *, unsigned long *);
@@ -164,7 +169,7 @@ struct thermal_zone {
int prev_low_trip;
int prev_high_trip;
atomic_t need_update;
- struct thermal_sensor_ops *ops;
+ struct thermal_sensor sensor;
struct thermal_zone_params *tzp;
struct thermal_governor *governor;
void *governor_data;
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 04/15] thermal/core: Remove duplicate information when an error occurs
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
2022-04-26 22:15 ` [PATCH 02/15] thermal/core: Change thermal_zone_ops to thermal_sensor_ops Daniel Lezcano
2022-04-26 22:15 ` [PATCH 03/15] thermal/core: Add a thermal sensor structure in the thermal zone Daniel Lezcano
@ 2022-04-26 22:15 ` Daniel Lezcano
2022-04-26 22:15 ` [PATCH 05/15] thermal/of: Replace device node match with device node search Daniel Lezcano
` (11 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
The pr_err already tells it is an error, it is pointless to add the
'Error:' string in the messages. Remove them.
Cc: Alexandre Bailon <abailon@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc; Eduardo Valentin <eduval@amazon.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
---
drivers/thermal/thermal_core.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index b1d20c8ba3d1..a34c8cb31e91 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -1197,23 +1197,23 @@ thermal_zone_register(const char *type, int trips, int mask,
struct thermal_governor *governor;
if (!type || strlen(type) == 0) {
- pr_err("Error: No thermal zone type defined\n");
+ pr_err("No thermal zone type defined\n");
return ERR_PTR(-EINVAL);
}
if (type && strlen(type) >= THERMAL_NAME_LENGTH) {
- pr_err("Error: Thermal zone name (%s) too long, should be under %d chars\n",
+ pr_err("Thermal zone name (%s) too long, should be under %d chars\n",
type, THERMAL_NAME_LENGTH);
return ERR_PTR(-EINVAL);
}
if (trips > THERMAL_MAX_TRIPS || trips < 0 || mask >> trips) {
- pr_err("Error: Incorrect number of thermal trips\n");
+ pr_err("Incorrect number of thermal trips\n");
return ERR_PTR(-EINVAL);
}
if (!ops) {
- pr_err("Error: Thermal zone device ops not defined\n");
+ pr_err("Thermal zone device ops not defined\n");
return ERR_PTR(-EINVAL);
}
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 05/15] thermal/of: Replace device node match with device node search
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
` (2 preceding siblings ...)
2022-04-26 22:15 ` [PATCH 04/15] thermal/core: Remove duplicate information when an error occurs Daniel Lezcano
@ 2022-04-26 22:15 ` Daniel Lezcano
2022-04-26 22:15 ` [PATCH 06/15] thermal/of: Remove the device node pointer for thermal_trip Daniel Lezcano
` (10 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
The thermal_of code builds a trip array associated with the node
pointer in order to compare the trip point phandle with the list.
The thermal trip is a thermal zone property and should be moved
there. If some sensors have hardcoded trip points, they should use the
exported structure instead of redefining again and again their own
structure and data to describe exactly the same things.
In order to move this to the thermal.h header and allow more cleanup,
we need to remove the node pointer from the structure.
Instead of building storing the device node, we search directly in the
device tree the corresponding node. That results in a simplification
of the code and allows to move the structure to thermal.h
Cc: Alexandre Bailon <abailon@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc; Eduardo Valentin <eduval@amazon.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
---
drivers/thermal/thermal_of.c | 62 ++++++++++++++++++++++++------------
1 file changed, 42 insertions(+), 20 deletions(-)
diff --git a/drivers/thermal/thermal_of.c b/drivers/thermal/thermal_of.c
index 932b6450eac4..84c37493e27f 100644
--- a/drivers/thermal/thermal_of.c
+++ b/drivers/thermal/thermal_of.c
@@ -659,6 +659,35 @@ EXPORT_SYMBOL_GPL(devm_thermal_zone_of_sensor_unregister);
/*** functions parsing device tree nodes ***/
+static int of_find_trip_id(struct device_node *np, struct device_node *trip)
+{
+ struct device_node *trips;
+ struct device_node *t;
+ int i = 0;
+
+ trips = of_get_child_by_name(np, "trips");
+ if (!trips) {
+ pr_err("Failed to find 'trips' node\n");
+ return -EINVAL;
+ }
+
+ /*
+ * Find the trip id point associated with the cooling device map
+ */
+ for_each_child_of_node(trips, t) {
+
+ if (t == trip)
+ goto out;
+ i++;
+ }
+
+ i = -ENXIO;
+out:
+ of_node_put(trips);
+
+ return i;
+}
+
/**
* thermal_of_populate_bind_params - parse and fill cooling map data
* @np: DT node containing a cooling-map node
@@ -674,14 +703,13 @@ EXPORT_SYMBOL_GPL(devm_thermal_zone_of_sensor_unregister);
* Return: 0 on success, proper error code otherwise
*/
static int thermal_of_populate_bind_params(struct device_node *np,
- struct __thermal_bind_params *__tbp,
- struct thermal_trip *trips,
- int ntrips)
+ struct __thermal_bind_params *__tbp)
{
struct of_phandle_args cooling_spec;
struct __thermal_cooling_bind_param *__tcbp;
struct device_node *trip;
int ret, i, count;
+ int trip_id;
u32 prop;
/* Default weight. Usage is optional */
@@ -696,18 +724,14 @@ static int thermal_of_populate_bind_params(struct device_node *np,
return -ENODEV;
}
- /* match using device_node */
- for (i = 0; i < ntrips; i++)
- if (trip == trips[i].np) {
- __tbp->trip_id = i;
- break;
- }
-
- if (i == ntrips) {
- ret = -ENODEV;
+ trip_id = of_find_trip_id(np, trip);
+ if (trip_id < 0) {
+ ret = trip_id;
goto end;
}
+ __tbp->trip_id = trip_id;
+
count = of_count_phandle_with_args(np, "cooling-device",
"#cooling-cells");
if (count <= 0) {
@@ -856,6 +880,7 @@ static struct __thermal_zone
__init *thermal_of_build_thermal_zone(struct device_node *np)
{
struct device_node *child = NULL, *gchild;
+ struct device_node *trips;
struct __thermal_zone *tz;
int ret, i;
u32 prop, coef[2];
@@ -898,13 +923,13 @@ __init *thermal_of_build_thermal_zone(struct device_node *np)
}
/* trips */
- child = of_get_child_by_name(np, "trips");
+ trips = of_get_child_by_name(np, "trips");
/* No trips provided */
- if (!child)
+ if (!trips)
goto finish;
- tz->ntrips = of_get_child_count(child);
+ tz->ntrips = of_get_child_count(trips);
if (tz->ntrips == 0) /* must have at least one child */
goto finish;
@@ -915,14 +940,12 @@ __init *thermal_of_build_thermal_zone(struct device_node *np)
}
i = 0;
- for_each_child_of_node(child, gchild) {
+ for_each_child_of_node(trips, gchild) {
ret = thermal_of_populate_trip(gchild, &tz->trips[i++]);
if (ret)
goto free_trips;
}
- of_node_put(child);
-
/* cooling-maps */
child = of_get_child_by_name(np, "cooling-maps");
@@ -942,8 +965,7 @@ __init *thermal_of_build_thermal_zone(struct device_node *np)
i = 0;
for_each_child_of_node(child, gchild) {
- ret = thermal_of_populate_bind_params(gchild, &tz->tbps[i++],
- tz->trips, tz->ntrips);
+ ret = thermal_of_populate_bind_params(gchild, &tz->tbps[i++]);
if (ret)
goto free_tbps;
}
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 06/15] thermal/of: Remove the device node pointer for thermal_trip
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
` (3 preceding siblings ...)
2022-04-26 22:15 ` [PATCH 05/15] thermal/of: Replace device node match with device node search Daniel Lezcano
@ 2022-04-26 22:15 ` Daniel Lezcano
2022-04-26 22:15 ` [PATCH 07/15] thermal/of: Move thermal_trip structure to thermal.h Daniel Lezcano
` (9 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
The device node pointer is no longer needed in the thermal trip
structure, remove it.
Cc: Alexandre Bailon <abailon@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc; Eduardo Valentin <eduval@amazon.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
---
drivers/thermal/thermal_core.h | 2 --
drivers/thermal/thermal_of.c | 8 --------
2 files changed, 10 deletions(-)
diff --git a/drivers/thermal/thermal_core.h b/drivers/thermal/thermal_core.h
index a1e4e000f461..aca491086561 100644
--- a/drivers/thermal/thermal_core.h
+++ b/drivers/thermal/thermal_core.h
@@ -70,13 +70,11 @@ void __thermal_cdev_update(struct thermal_cooling_device *cdev);
/**
* struct thermal_trip - representation of a point in temperature domain
- * @np: pointer to struct device_node that this trip point was created from
* @temperature: temperature value in miliCelsius
* @hysteresis: relative hysteresis in miliCelsius
* @type: trip point type
*/
struct thermal_trip {
- struct device_node *np;
int temperature;
int hysteresis;
enum thermal_trip_type type;
diff --git a/drivers/thermal/thermal_of.c b/drivers/thermal/thermal_of.c
index 84c37493e27f..25ec70c8b7ed 100644
--- a/drivers/thermal/thermal_of.c
+++ b/drivers/thermal/thermal_of.c
@@ -855,10 +855,6 @@ static int thermal_of_populate_trip(struct device_node *np,
return ret;
}
- /* Required for cooling map matching */
- trip->np = np;
- of_node_get(np);
-
return 0;
}
@@ -988,8 +984,6 @@ __init *thermal_of_build_thermal_zone(struct device_node *np)
kfree(tz->tbps);
free_trips:
- for (i = 0; i < tz->ntrips; i++)
- of_node_put(tz->trips[i].np);
kfree(tz->trips);
of_node_put(gchild);
free_tz:
@@ -1014,8 +1008,6 @@ static __init void of_thermal_free_zone(struct __thermal_zone *tz)
}
kfree(tz->tbps);
- for (i = 0; i < tz->ntrips; i++)
- of_node_put(tz->trips[i].np);
kfree(tz->trips);
kfree(tz);
}
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 07/15] thermal/of: Move thermal_trip structure to thermal.h
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
` (4 preceding siblings ...)
2022-04-26 22:15 ` [PATCH 06/15] thermal/of: Remove the device node pointer for thermal_trip Daniel Lezcano
@ 2022-04-26 22:15 ` Daniel Lezcano
2022-04-26 22:15 ` [PATCH 08/15] thermal/core: Remove unneeded EXPORT_SYMBOLS Daniel Lezcano
` (8 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
The structure thermal_trip is now generic and will be usable by the
different sensor drivers in place of their own structure.
Move its definition to thermal.h to make it accessible.
Cc: Alexandre Bailon <abailon@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc; Eduardo Valentin <eduval@amazon.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
---
drivers/thermal/thermal_core.h | 12 ------------
include/linux/thermal.h | 12 ++++++++++++
2 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/drivers/thermal/thermal_core.h b/drivers/thermal/thermal_core.h
index aca491086561..9ecd12e8ef9b 100644
--- a/drivers/thermal/thermal_core.h
+++ b/drivers/thermal/thermal_core.h
@@ -68,18 +68,6 @@ static inline bool cdev_is_power_actor(struct thermal_cooling_device *cdev)
void thermal_cdev_update(struct thermal_cooling_device *);
void __thermal_cdev_update(struct thermal_cooling_device *cdev);
-/**
- * struct thermal_trip - representation of a point in temperature domain
- * @temperature: temperature value in miliCelsius
- * @hysteresis: relative hysteresis in miliCelsius
- * @type: trip point type
- */
-struct thermal_trip {
- int temperature;
- int hysteresis;
- enum thermal_trip_type type;
-};
-
int get_tz_trend(struct thermal_zone *tz, int trip);
struct thermal_instance *
diff --git a/include/linux/thermal.h b/include/linux/thermal.h
index b3e8244af510..c3bd01ac4cb0 100644
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
@@ -80,6 +80,18 @@ struct thermal_sensor_ops {
void (*critical)(struct thermal_zone *);
};
+/**
+ * struct thermal_trip - representation of a point in temperature domain
+ * @temperature: temperature value in miliCelsius
+ * @hysteresis: relative hysteresis in miliCelsius
+ * @type: trip point type
+ */
+struct thermal_trip {
+ int temperature;
+ int hysteresis;
+ enum thermal_trip_type type;
+};
+
struct thermal_sensor {
struct thermal_sensor_ops *ops;
struct device *dev;
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 08/15] thermal/core: Remove unneeded EXPORT_SYMBOLS
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
` (5 preceding siblings ...)
2022-04-26 22:15 ` [PATCH 07/15] thermal/of: Move thermal_trip structure to thermal.h Daniel Lezcano
@ 2022-04-26 22:15 ` Daniel Lezcano
2022-04-26 22:15 ` [PATCH 09/15] thermal/core: Move thermal_set_delay_jiffies to static Daniel Lezcano
` (7 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
Different functions are exporting the symbols but are actually only
used by the thermal framework internals. Remove these EXPORT_SYMBOLS.
Cc: Alexandre Bailon <abailon@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc; Eduardo Valentin <eduval@amazon.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
---
drivers/thermal/thermal_helpers.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/thermal/thermal_helpers.c b/drivers/thermal/thermal_helpers.c
index 41d6898ec5b3..76b831d9e0e9 100644
--- a/drivers/thermal/thermal_helpers.c
+++ b/drivers/thermal/thermal_helpers.c
@@ -39,7 +39,6 @@ int get_tz_trend(struct thermal_zone *tz, int trip)
return trend;
}
-EXPORT_SYMBOL(get_tz_trend);
struct thermal_instance *
get_thermal_instance(struct thermal_zone *tz,
@@ -228,7 +227,6 @@ void thermal_cdev_update(struct thermal_cooling_device *cdev)
}
mutex_unlock(&cdev->lock);
}
-EXPORT_SYMBOL(thermal_cdev_update);
/**
* thermal_zone_get_slope - return the slope attribute of the thermal zone
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 09/15] thermal/core: Move thermal_set_delay_jiffies to static
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
` (6 preceding siblings ...)
2022-04-26 22:15 ` [PATCH 08/15] thermal/core: Remove unneeded EXPORT_SYMBOLS Daniel Lezcano
@ 2022-04-26 22:15 ` Daniel Lezcano
2022-04-26 22:15 ` [PATCH 10/15] thermal/core: Rename trips to ntrips Daniel Lezcano
` (6 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
The function 'thermal_set_delay_jiffies' is only used in
thermal_core.c but it is defined and implemented in a separate
file. Move the function to thermal_core.c and make it static.
Cc: Alexandre Bailon <abailon@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc; Eduardo Valentin <eduval@amazon.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
---
drivers/thermal/thermal_core.c | 7 +++++++
drivers/thermal/thermal_core.h | 1 -
drivers/thermal/thermal_helpers.c | 7 -------
3 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index a34c8cb31e91..e741c932236e 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -1158,6 +1158,13 @@ static void bind_tz(struct thermal_zone *tz)
mutex_unlock(&thermal_list_lock);
}
+static void thermal_set_delay_jiffies(unsigned long *delay_jiffies, int delay_ms)
+{
+ *delay_jiffies = msecs_to_jiffies(delay_ms);
+ if (delay_ms > 1000)
+ *delay_jiffies = round_jiffies(*delay_jiffies);
+}
+
/**
* thermal_zone_register() - register a new thermal zone device
* @type: the thermal zone device type
diff --git a/drivers/thermal/thermal_core.h b/drivers/thermal/thermal_core.h
index 9ecd12e8ef9b..ea92a959ad59 100644
--- a/drivers/thermal/thermal_core.h
+++ b/drivers/thermal/thermal_core.h
@@ -112,7 +112,6 @@ int thermal_build_list_of_policies(char *buf);
/* Helpers */
void thermal_zone_set_trips(struct thermal_zone *tz);
-void thermal_set_delay_jiffies(unsigned long *delay_jiffies, int delay_ms);
/* sysfs I/F */
int thermal_zone_create_device_groups(struct thermal_zone *, int);
diff --git a/drivers/thermal/thermal_helpers.c b/drivers/thermal/thermal_helpers.c
index 76b831d9e0e9..aa687dee4d64 100644
--- a/drivers/thermal/thermal_helpers.c
+++ b/drivers/thermal/thermal_helpers.c
@@ -174,13 +174,6 @@ void thermal_zone_set_trips(struct thermal_zone *tz)
mutex_unlock(&tz->lock);
}
-void thermal_set_delay_jiffies(unsigned long *delay_jiffies, int delay_ms)
-{
- *delay_jiffies = msecs_to_jiffies(delay_ms);
- if (delay_ms > 1000)
- *delay_jiffies = round_jiffies(*delay_jiffies);
-}
-
static void thermal_cdev_set_cur_state(struct thermal_cooling_device *cdev,
int target)
{
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 10/15] thermal/core: Rename trips to ntrips
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
` (7 preceding siblings ...)
2022-04-26 22:15 ` [PATCH 09/15] thermal/core: Move thermal_set_delay_jiffies to static Daniel Lezcano
@ 2022-04-26 22:15 ` Daniel Lezcano
2022-05-17 15:49 ` Rafael J. Wysocki
2022-04-26 22:15 ` [PATCH 11/15] thermal/core: Add thermal_trip in thermal_zone Daniel Lezcano
` (5 subsequent siblings)
14 siblings, 1 reply; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
In order to use thermal trips defined in the thermal structure, rename
the 'trips' field to 'ntrips' to have the 'trips' field containing the
thermal trip points.
Cc: Alexandre Bailon <abailon@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc; Eduardo Valentin <eduval@amazon.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
---
drivers/thermal/gov_fair_share.c | 6 +++---
drivers/thermal/gov_power_allocator.c | 4 ++--
drivers/thermal/tegra/tegra30-tsensor.c | 2 +-
drivers/thermal/thermal_core.c | 20 ++++++++++----------
drivers/thermal/thermal_helpers.c | 4 ++--
drivers/thermal/thermal_netlink.c | 2 +-
drivers/thermal/thermal_sysfs.c | 22 +++++++++++-----------
include/linux/thermal.h | 2 +-
8 files changed, 31 insertions(+), 31 deletions(-)
diff --git a/drivers/thermal/gov_fair_share.c b/drivers/thermal/gov_fair_share.c
index 3ce42a8e9dbd..82a89465a614 100644
--- a/drivers/thermal/gov_fair_share.c
+++ b/drivers/thermal/gov_fair_share.c
@@ -25,10 +25,10 @@ static int get_trip_level(struct thermal_zone *tz)
int trip_temp;
enum thermal_trip_type trip_type;
- if (tz->trips == 0 || !tz->sensor.ops->get_trip_temp)
+ if (tz->ntrips == 0 || !tz->sensor.ops->get_trip_temp)
return 0;
- for (count = 0; count < tz->trips; count++) {
+ for (count = 0; count < tz->ntrips; count++) {
tz->sensor.ops->get_trip_temp(tz, count, &trip_temp);
if (tz->temperature < trip_temp)
break;
@@ -53,7 +53,7 @@ static long get_target_state(struct thermal_zone *tz,
cdev->ops->get_max_state(cdev, &max_state);
- return (long)(percentage * level * max_state) / (100 * tz->trips);
+ return (long)(percentage * level * max_state) / (100 * tz->ntrips);
}
/**
diff --git a/drivers/thermal/gov_power_allocator.c b/drivers/thermal/gov_power_allocator.c
index 448baaa642a5..3385e8345f73 100644
--- a/drivers/thermal/gov_power_allocator.c
+++ b/drivers/thermal/gov_power_allocator.c
@@ -527,7 +527,7 @@ static void get_governor_trips(struct thermal_zone *tz,
last_active = INVALID_TRIP;
last_passive = INVALID_TRIP;
- for (i = 0; i < tz->trips; i++) {
+ for (i = 0; i < tz->ntrips; i++) {
enum thermal_trip_type type;
int ret;
@@ -668,7 +668,7 @@ static int power_allocator_bind(struct thermal_zone *tz)
get_governor_trips(tz, params);
- if (tz->trips > 0) {
+ if (tz->ntrips > 0) {
ret = tz->sensor.ops->get_trip_temp(tz,
params->trip_max_desired_temperature,
&control_temp);
diff --git a/drivers/thermal/tegra/tegra30-tsensor.c b/drivers/thermal/tegra/tegra30-tsensor.c
index ad35a9694845..2678f2111070 100644
--- a/drivers/thermal/tegra/tegra30-tsensor.c
+++ b/drivers/thermal/tegra/tegra30-tsensor.c
@@ -316,7 +316,7 @@ static void tegra_tsensor_get_hw_channel_trips(struct thermal_zone *tzd,
*hot_trip = 85000;
*crit_trip = 90000;
- for (i = 0; i < tzd->trips; i++) {
+ for (i = 0; i < tzd->ntrips; i++) {
enum thermal_trip_type type;
int trip_temp;
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index e741c932236e..79cb9e0a7229 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -505,7 +505,7 @@ void thermal_zone_update(struct thermal_zone *tz,
tz->notify_event = event;
- for (count = 0; count < tz->trips; count++)
+ for (count = 0; count < tz->ntrips; count++)
handle_thermal_trip(tz, count);
}
EXPORT_SYMBOL_GPL(thermal_zone_update);
@@ -630,7 +630,7 @@ int thermal_zone_bind_cooling_device(struct thermal_zone *tz,
unsigned long max_state;
int result, ret;
- if (trip >= tz->trips || trip < 0)
+ if (trip >= tz->ntrips || trip < 0)
return -EINVAL;
list_for_each_entry(pos1, &thermal_tz_list, node) {
@@ -811,7 +811,7 @@ static void __bind(struct thermal_zone *tz, int mask,
{
int i, ret;
- for (i = 0; i < tz->trips; i++) {
+ for (i = 0; i < tz->ntrips; i++) {
if (mask & (1 << i)) {
unsigned long upper, lower;
@@ -1056,7 +1056,7 @@ static void __unbind(struct thermal_zone *tz, int mask,
{
int i;
- for (i = 0; i < tz->trips; i++)
+ for (i = 0; i < tz->ntrips; i++)
if (mask & (1 << i))
thermal_zone_unbind_cooling_device(tz, i, cdev);
}
@@ -1168,7 +1168,7 @@ static void thermal_set_delay_jiffies(unsigned long *delay_jiffies, int delay_ms
/**
* thermal_zone_register() - register a new thermal zone device
* @type: the thermal zone device type
- * @trips: the number of trip points the thermal zone support
+ * @ntrips: the number of trip points the thermal zone support
* @mask: a bit string indicating the writeablility of trip points
* @devdata: private device data
* @ops: standard thermal zone device callbacks
@@ -1190,7 +1190,7 @@ static void thermal_set_delay_jiffies(unsigned long *delay_jiffies, int delay_ms
* IS_ERR*() helpers.
*/
struct thermal_zone *
-thermal_zone_register(const char *type, int trips, int mask,
+thermal_zone_register(const char *type, int ntrips, int mask,
void *devdata, struct thermal_sensor_ops *ops,
struct thermal_zone_params *tzp, int passive_delay,
int polling_delay)
@@ -1214,7 +1214,7 @@ thermal_zone_register(const char *type, int trips, int mask,
return ERR_PTR(-EINVAL);
}
- if (trips > THERMAL_MAX_TRIPS || trips < 0 || mask >> trips) {
+ if (ntrips > THERMAL_MAX_TRIPS || ntrips < 0 || mask >> ntrips) {
pr_err("Incorrect number of thermal trips\n");
return ERR_PTR(-EINVAL);
}
@@ -1224,7 +1224,7 @@ thermal_zone_register(const char *type, int trips, int mask,
return ERR_PTR(-EINVAL);
}
- if (trips > 0 && (!ops->get_trip_type || !ops->get_trip_temp))
+ if (ntrips > 0 && (!ops->get_trip_type || !ops->get_trip_temp))
return ERR_PTR(-EINVAL);
tz = kzalloc(sizeof(*tz), GFP_KERNEL);
@@ -1254,7 +1254,7 @@ thermal_zone_register(const char *type, int trips, int mask,
tz->tzp = tzp;
tz->device.class = &thermal_class;
tz->devdata = devdata;
- tz->trips = trips;
+ tz->ntrips = ntrips;
thermal_set_delay_jiffies(&tz->passive_delay_jiffies, passive_delay);
thermal_set_delay_jiffies(&tz->polling_delay_jiffies, polling_delay);
@@ -1272,7 +1272,7 @@ thermal_zone_register(const char *type, int trips, int mask,
if (result)
goto release_device;
- for (count = 0; count < trips; count++) {
+ for (count = 0; count < ntrips; count++) {
if (tz->sensor.ops->get_trip_type(tz, count, &trip_type) ||
tz->sensor.ops->get_trip_temp(tz, count, &trip_temp) ||
!trip_temp)
diff --git a/drivers/thermal/thermal_helpers.c b/drivers/thermal/thermal_helpers.c
index aa687dee4d64..183bbec4d492 100644
--- a/drivers/thermal/thermal_helpers.c
+++ b/drivers/thermal/thermal_helpers.c
@@ -89,7 +89,7 @@ int thermal_zone_get_temp(struct thermal_zone *tz, int *temp)
ret = tz->sensor.ops->get_temp(tz, temp);
if (IS_ENABLED(CONFIG_THERMAL_EMULATION) && tz->emul_temperature) {
- for (count = 0; count < tz->trips; count++) {
+ for (count = 0; count < tz->ntrips; count++) {
ret = tz->sensor.ops->get_trip_type(tz, count, &type);
if (!ret && type == THERMAL_TRIP_CRITICAL) {
ret = tz->sensor.ops->get_trip_temp(tz, count,
@@ -137,7 +137,7 @@ void thermal_zone_set_trips(struct thermal_zone *tz)
if (!tz->sensor.ops->set_trips || !tz->sensor.ops->get_trip_hyst)
goto exit;
- for (i = 0; i < tz->trips; i++) {
+ for (i = 0; i < tz->ntrips; i++) {
int trip_low;
tz->sensor.ops->get_trip_temp(tz, i, &trip_temp);
diff --git a/drivers/thermal/thermal_netlink.c b/drivers/thermal/thermal_netlink.c
index 0e95f113d525..0b770af9aab3 100644
--- a/drivers/thermal/thermal_netlink.c
+++ b/drivers/thermal/thermal_netlink.c
@@ -469,7 +469,7 @@ static int thermal_genl_cmd_tz_get_trip(struct param *p)
mutex_lock(&tz->lock);
- for (i = 0; i < tz->trips; i++) {
+ for (i = 0; i < tz->ntrips; i++) {
enum thermal_trip_type type;
int temp, hyst = 0;
diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c
index 33d8c9f47990..63ea7aad3217 100644
--- a/drivers/thermal/thermal_sysfs.c
+++ b/drivers/thermal/thermal_sysfs.c
@@ -416,15 +416,15 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
int indx;
/* This function works only for zones with at least one trip */
- if (tz->trips <= 0)
+ if (tz->ntrips <= 0)
return -EINVAL;
- tz->trip_type_attrs = kcalloc(tz->trips, sizeof(*tz->trip_type_attrs),
+ tz->trip_type_attrs = kcalloc(tz->ntrips, sizeof(*tz->trip_type_attrs),
GFP_KERNEL);
if (!tz->trip_type_attrs)
return -ENOMEM;
- tz->trip_temp_attrs = kcalloc(tz->trips, sizeof(*tz->trip_temp_attrs),
+ tz->trip_temp_attrs = kcalloc(tz->ntrips, sizeof(*tz->trip_temp_attrs),
GFP_KERNEL);
if (!tz->trip_temp_attrs) {
kfree(tz->trip_type_attrs);
@@ -432,7 +432,7 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
}
if (tz->sensor.ops->get_trip_hyst) {
- tz->trip_hyst_attrs = kcalloc(tz->trips,
+ tz->trip_hyst_attrs = kcalloc(tz->ntrips,
sizeof(*tz->trip_hyst_attrs),
GFP_KERNEL);
if (!tz->trip_hyst_attrs) {
@@ -442,7 +442,7 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
}
}
- attrs = kcalloc(tz->trips * 3 + 1, sizeof(*attrs), GFP_KERNEL);
+ attrs = kcalloc(tz->ntrips * 3 + 1, sizeof(*attrs), GFP_KERNEL);
if (!attrs) {
kfree(tz->trip_type_attrs);
kfree(tz->trip_temp_attrs);
@@ -451,7 +451,7 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
return -ENOMEM;
}
- for (indx = 0; indx < tz->trips; indx++) {
+ for (indx = 0; indx < tz->ntrips; indx++) {
/* create trip type attribute */
snprintf(tz->trip_type_attrs[indx].name, THERMAL_NAME_LENGTH,
"trip_point_%d_type", indx);
@@ -478,7 +478,7 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
tz->trip_temp_attrs[indx].attr.store =
trip_point_temp_store;
}
- attrs[indx + tz->trips] = &tz->trip_temp_attrs[indx].attr.attr;
+ attrs[indx + tz->ntrips] = &tz->trip_temp_attrs[indx].attr.attr;
/* create Optional trip hyst attribute */
if (!tz->sensor.ops->get_trip_hyst)
@@ -496,10 +496,10 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
tz->trip_hyst_attrs[indx].attr.store =
trip_point_hyst_store;
}
- attrs[indx + tz->trips * 2] =
+ attrs[indx + tz->ntrips * 2] =
&tz->trip_hyst_attrs[indx].attr.attr;
}
- attrs[tz->trips * 3] = NULL;
+ attrs[tz->ntrips * 3] = NULL;
tz->trips_attribute_group.attrs = attrs;
@@ -540,7 +540,7 @@ int thermal_zone_create_device_groups(struct thermal_zone *tz,
for (i = 0; i < size - 2; i++)
groups[i] = thermal_zone_attribute_groups[i];
- if (tz->trips) {
+ if (tz->ntrips) {
result = create_trip_attrs(tz, mask);
if (result) {
kfree(groups);
@@ -561,7 +561,7 @@ void thermal_zone_destroy_device_groups(struct thermal_zone *tz)
if (!tz)
return;
- if (tz->trips)
+ if (tz->ntrips)
destroy_trip_attrs(tz);
kfree(tz->device.groups);
diff --git a/include/linux/thermal.h b/include/linux/thermal.h
index c3bd01ac4cb0..e58a2f053e1c 100644
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
@@ -170,7 +170,7 @@ struct thermal_zone {
struct thermal_attr *trip_hyst_attrs;
enum thermal_device_mode mode;
void *devdata;
- int trips;
+ int ntrips;
unsigned long trips_disabled; /* bitmap for disabled trips */
unsigned long passive_delay_jiffies;
unsigned long polling_delay_jiffies;
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 11/15] thermal/core: Add thermal_trip in thermal_zone
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
` (8 preceding siblings ...)
2022-04-26 22:15 ` [PATCH 10/15] thermal/core: Rename trips to ntrips Daniel Lezcano
@ 2022-04-26 22:15 ` Daniel Lezcano
2022-04-26 22:15 ` [PATCH 12/15] thermal/core: Register with the trip points Daniel Lezcano
` (4 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
The thermal trip points are properties of a thermal zone and the
different sub systems should be able to save them in the thermal zone
structure instead of having their own definition.
Give the opportunity to the drivers to create a thermal zone with
thermal trips which will be accessible directly from the thermal core
framework.
Cc: Alexandre Bailon <abailon@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc; Eduardo Valentin <eduval@amazon.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
---
drivers/thermal/thermal_core.h | 10 ++++++++++
include/linux/thermal.h | 1 +
2 files changed, 11 insertions(+)
diff --git a/drivers/thermal/thermal_core.h b/drivers/thermal/thermal_core.h
index ea92a959ad59..04f3d9f80db2 100644
--- a/drivers/thermal/thermal_core.h
+++ b/drivers/thermal/thermal_core.h
@@ -113,6 +113,16 @@ int thermal_build_list_of_policies(char *buf);
/* Helpers */
void thermal_zone_set_trips(struct thermal_zone *tz);
+static inline struct thermal_trip *thermal_zone_get_trips(struct thermal_zone *tz)
+{
+ return tz->trips;
+}
+
+static inline int thermal_zone_get_ntrips(struct thermal_zone *tz)
+{
+ return tz->ntrips;
+}
+
/* sysfs I/F */
int thermal_zone_create_device_groups(struct thermal_zone *, int);
void thermal_zone_destroy_device_groups(struct thermal_zone *);
diff --git a/include/linux/thermal.h b/include/linux/thermal.h
index e58a2f053e1c..9c75afff517a 100644
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
@@ -184,6 +184,7 @@ struct thermal_zone {
struct thermal_sensor sensor;
struct thermal_zone_params *tzp;
struct thermal_governor *governor;
+ struct thermal_trip *trips;
void *governor_data;
struct list_head thermal_instances;
struct ida ida;
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 12/15] thermal/core: Register with the trip points
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
` (9 preceding siblings ...)
2022-04-26 22:15 ` [PATCH 11/15] thermal/core: Add thermal_trip in thermal_zone Daniel Lezcano
@ 2022-04-26 22:15 ` Daniel Lezcano
2022-04-26 22:15 ` [PATCH 13/15] thermal/of: Store the trips in the thermal zone Daniel Lezcano
` (3 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
As we added the thermal trip points structure in the thermal zone,
let's extend the thermal zone register function to have the thermal
trip structures as a parameter and store it in the 'trips' field of
the thermal zone structure.
Cc: Alexandre Bailon <abailon@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc; Eduardo Valentin <eduval@amazon.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
---
drivers/thermal/thermal_core.c | 17 +++++++++++++++--
include/linux/thermal.h | 6 ++++++
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 79cb9e0a7229..822f97bc471f 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -1166,8 +1166,9 @@ static void thermal_set_delay_jiffies(unsigned long *delay_jiffies, int delay_ms
}
/**
- * thermal_zone_register() - register a new thermal zone device
+ * thermal_zone_register_with_trips() - register a new thermal zone device
* @type: the thermal zone device type
+ * @trips: a pointer to an array of thermal trips
* @ntrips: the number of trip points the thermal zone support
* @mask: a bit string indicating the writeablility of trip points
* @devdata: private device data
@@ -1190,7 +1191,8 @@ static void thermal_set_delay_jiffies(unsigned long *delay_jiffies, int delay_ms
* IS_ERR*() helpers.
*/
struct thermal_zone *
-thermal_zone_register(const char *type, int ntrips, int mask,
+thermal_zone_register_with_trips(const char *type,
+ struct thermal_trip *trips, int ntrips, int mask,
void *devdata, struct thermal_sensor_ops *ops,
struct thermal_zone_params *tzp, int passive_delay,
int polling_delay)
@@ -1255,6 +1257,7 @@ thermal_zone_register(const char *type, int ntrips, int mask,
tz->device.class = &thermal_class;
tz->devdata = devdata;
tz->ntrips = ntrips;
+ tz->trips = trips;
thermal_set_delay_jiffies(&tz->passive_delay_jiffies, passive_delay);
thermal_set_delay_jiffies(&tz->polling_delay_jiffies, polling_delay);
@@ -1332,6 +1335,16 @@ thermal_zone_register(const char *type, int ntrips, int mask,
}
EXPORT_SYMBOL_GPL(thermal_zone_register);
+struct thermal_zone *thermal_zone_register(const char *type, int ntrips, int mask,
+ void *devdata, struct thermal_sensor_ops *ops,
+ struct thermal_zone_params *tzp, int passive_delay,
+ int polling_delay)
+{
+ return thermal_zone_register_with_trips(type, NULL, ntrips, mask,
+ devdata, ops, tzp,
+ passive_delay, polling_delay);
+}
+
/**
* thermal_zone_unregister - removes the registered thermal zone device
* @tz: the thermal zone device to remove
diff --git a/include/linux/thermal.h b/include/linux/thermal.h
index 9c75afff517a..0c3b549601d3 100644
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
@@ -381,6 +381,12 @@ void devm_thermal_zone_of_sensor_unregister(struct device *dev,
struct thermal_zone *thermal_zone_register(const char *, int, int,
void *, struct thermal_sensor_ops *,
struct thermal_zone_params *, int, int);
+
+struct thermal_zone *
+thermal_zone_register_with_trips(const char *, struct thermal_trip *, int, int,
+ void *, struct thermal_sensor_ops *,
+ struct thermal_zone_params *, int, int);
+
void thermal_zone_unregister(struct thermal_zone *);
int thermal_zone_bind_cooling_device(struct thermal_zone *, int,
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 13/15] thermal/of: Store the trips in the thermal zone
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
` (10 preceding siblings ...)
2022-04-26 22:15 ` [PATCH 12/15] thermal/core: Register with the trip points Daniel Lezcano
@ 2022-04-26 22:15 ` Daniel Lezcano
2022-04-26 22:15 ` [PATCH 14/15] thermal/of: Use thermal trips stored " Daniel Lezcano
` (2 subsequent siblings)
14 siblings, 0 replies; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
As the thermal zone contains the trip point, we can store them
directly in the when registering the thermal zone. That will allow
another step forward to remove the duplicate thermal zone structure we
find in the thermal_of code.
Cc: Alexandre Bailon <abailon@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc; Eduardo Valentin <eduval@amazon.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
---
drivers/thermal/thermal_of.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/thermal/thermal_of.c b/drivers/thermal/thermal_of.c
index 25ec70c8b7ed..069b421a54ae 100644
--- a/drivers/thermal/thermal_of.c
+++ b/drivers/thermal/thermal_of.c
@@ -1105,11 +1105,9 @@ int __init of_parse_thermal_zones(void)
tzp->slope = tz->slope;
tzp->offset = tz->offset;
- zone = thermal_zone_register(child->name, tz->ntrips,
- mask, tz,
- ops, tzp,
- tz->passive_delay,
- tz->polling_delay);
+ zone = thermal_zone_register_with_trips(child->name, tz->trips, tz->ntrips,
+ mask, tz, ops, tzp, tz->passive_delay,
+ tz->polling_delay);
if (IS_ERR(zone)) {
pr_err("Failed to build %pOFn zone %ld\n", child,
PTR_ERR(zone));
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 14/15] thermal/of: Use thermal trips stored in the thermal zone
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
` (11 preceding siblings ...)
2022-04-26 22:15 ` [PATCH 13/15] thermal/of: Store the trips in the thermal zone Daniel Lezcano
@ 2022-04-26 22:15 ` Daniel Lezcano
2022-04-26 22:15 ` [PATCH 15/15] thermal/of: Initialize trip points separately Daniel Lezcano
2022-05-17 16:02 ` [PATCH 00/15] thermal OF rework Rafael J. Wysocki
14 siblings, 0 replies; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
Now that we have the thermal trip stored in the thermal zone in a
generic way, we can rely on them and remove one indirection we found
in the thermal_of code and do one more step forward the removal of the
duplicated structures.
Cc: Alexandre Bailon <abailon@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc; Eduardo Valentin <eduval@amazon.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
---
drivers/thermal/thermal_of.c | 53 +++++++++++-------------------------
1 file changed, 16 insertions(+), 37 deletions(-)
diff --git a/drivers/thermal/thermal_of.c b/drivers/thermal/thermal_of.c
index 069b421a54ae..a356a7b2d73d 100644
--- a/drivers/thermal/thermal_of.c
+++ b/drivers/thermal/thermal_of.c
@@ -118,12 +118,7 @@ static int of_thermal_set_trips(struct thermal_zone *tz,
*/
int of_thermal_get_ntrips(struct thermal_zone *tz)
{
- struct __thermal_zone *data = tz->devdata;
-
- if (!data || IS_ERR(data))
- return -ENODEV;
-
- return data->ntrips;
+ return tz->ntrips;
}
EXPORT_SYMBOL_GPL(of_thermal_get_ntrips);
@@ -139,9 +134,7 @@ EXPORT_SYMBOL_GPL(of_thermal_get_ntrips);
*/
bool of_thermal_is_trip_valid(struct thermal_zone *tz, int trip)
{
- struct __thermal_zone *data = tz->devdata;
-
- if (!data || trip >= data->ntrips || trip < 0)
+ if (trip >= tz->ntrips || trip < 0)
return false;
return true;
@@ -161,12 +154,7 @@ EXPORT_SYMBOL_GPL(of_thermal_is_trip_valid);
const struct thermal_trip *
of_thermal_get_trip_points(struct thermal_zone *tz)
{
- struct __thermal_zone *data = tz->devdata;
-
- if (!data)
- return NULL;
-
- return data->trips;
+ return tz->trips;
}
EXPORT_SYMBOL_GPL(of_thermal_get_trip_points);
@@ -273,12 +261,10 @@ static int of_thermal_unbind(struct thermal_zone *thermal,
static int of_thermal_get_trip_type(struct thermal_zone *tz, int trip,
enum thermal_trip_type *type)
{
- struct __thermal_zone *data = tz->devdata;
-
- if (trip >= data->ntrips || trip < 0)
+ if (trip >= tz->ntrips || trip < 0)
return -EDOM;
- *type = data->trips[trip].type;
+ *type = tz->trips[trip].type;
return 0;
}
@@ -286,12 +272,10 @@ static int of_thermal_get_trip_type(struct thermal_zone *tz, int trip,
static int of_thermal_get_trip_temp(struct thermal_zone *tz, int trip,
int *temp)
{
- struct __thermal_zone *data = tz->devdata;
-
- if (trip >= data->ntrips || trip < 0)
+ if (trip >= tz->ntrips || trip < 0)
return -EDOM;
- *temp = data->trips[trip].temperature;
+ *temp = tz->trips[trip].temperature;
return 0;
}
@@ -301,7 +285,7 @@ static int of_thermal_set_trip_temp(struct thermal_zone *tz, int trip,
{
struct __thermal_zone *data = tz->devdata;
- if (trip >= data->ntrips || trip < 0)
+ if (trip >= tz->ntrips || trip < 0)
return -EDOM;
if (data->ops && data->ops->set_trip_temp) {
@@ -313,7 +297,7 @@ static int of_thermal_set_trip_temp(struct thermal_zone *tz, int trip,
}
/* thermal framework should take care of data->mask & (1 << trip) */
- data->trips[trip].temperature = temp;
+ tz->trips[trip].temperature = temp;
return 0;
}
@@ -321,12 +305,10 @@ static int of_thermal_set_trip_temp(struct thermal_zone *tz, int trip,
static int of_thermal_get_trip_hyst(struct thermal_zone *tz, int trip,
int *hyst)
{
- struct __thermal_zone *data = tz->devdata;
-
- if (trip >= data->ntrips || trip < 0)
+ if (trip >= tz->ntrips || trip < 0)
return -EDOM;
- *hyst = data->trips[trip].hysteresis;
+ *hyst = tz->trips[trip].hysteresis;
return 0;
}
@@ -334,13 +316,11 @@ static int of_thermal_get_trip_hyst(struct thermal_zone *tz, int trip,
static int of_thermal_set_trip_hyst(struct thermal_zone *tz, int trip,
int hyst)
{
- struct __thermal_zone *data = tz->devdata;
-
- if (trip >= data->ntrips || trip < 0)
+ if (trip >= tz->ntrips || trip < 0)
return -EDOM;
/* thermal framework should take care of data->mask & (1 << trip) */
- data->trips[trip].hysteresis = hyst;
+ tz->trips[trip].hysteresis = hyst;
return 0;
}
@@ -348,12 +328,11 @@ static int of_thermal_set_trip_hyst(struct thermal_zone *tz, int trip,
static int of_thermal_get_crit_temp(struct thermal_zone *tz,
int *temp)
{
- struct __thermal_zone *data = tz->devdata;
int i;
- for (i = 0; i < data->ntrips; i++)
- if (data->trips[i].type == THERMAL_TRIP_CRITICAL) {
- *temp = data->trips[i].temperature;
+ for (i = 0; i < tz->ntrips; i++)
+ if (tz->trips[i].type == THERMAL_TRIP_CRITICAL) {
+ *temp = tz->trips[i].temperature;
return 0;
}
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 15/15] thermal/of: Initialize trip points separately
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
` (12 preceding siblings ...)
2022-04-26 22:15 ` [PATCH 14/15] thermal/of: Use thermal trips stored " Daniel Lezcano
@ 2022-04-26 22:15 ` Daniel Lezcano
2022-04-27 9:01 ` kernel test robot
2022-05-04 8:18 ` Dan Carpenter
2022-05-17 16:02 ` [PATCH 00/15] thermal OF rework Rafael J. Wysocki
14 siblings, 2 replies; 19+ messages in thread
From: Daniel Lezcano @ 2022-04-26 22:15 UTC (permalink / raw)
To: rafael, daniel.lezcano; +Cc: khilman, abailon, linux-pm, linux-kernel
Self contain the trip initialization from the device tree in a single
function for the sake of making the code flow more clear.
Cc: Alexandre Bailon <abailon@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc; Eduardo Valentin <eduval@amazon.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
---
drivers/thermal/thermal_of.c | 79 ++++++++++++++++++++++++------------
1 file changed, 54 insertions(+), 25 deletions(-)
diff --git a/drivers/thermal/thermal_of.c b/drivers/thermal/thermal_of.c
index a356a7b2d73d..ef9c2e7f1af4 100644
--- a/drivers/thermal/thermal_of.c
+++ b/drivers/thermal/thermal_of.c
@@ -681,7 +681,8 @@ static int of_find_trip_id(struct device_node *np, struct device_node *trip)
*
* Return: 0 on success, proper error code otherwise
*/
-static int thermal_of_populate_bind_params(struct device_node *np,
+static int thermal_of_populate_bind_params(struct device_node *tz_np,
+ struct device_node *np,
struct __thermal_bind_params *__tbp)
{
struct of_phandle_args cooling_spec;
@@ -703,7 +704,7 @@ static int thermal_of_populate_bind_params(struct device_node *np,
return -ENODEV;
}
- trip_id = of_find_trip_id(np, trip);
+ trip_id = of_find_trip_id(tz_np, trip);
if (trip_id < 0) {
ret = trip_id;
goto end;
@@ -837,6 +838,53 @@ static int thermal_of_populate_trip(struct device_node *np,
return 0;
}
+static struct thermal_trip *thermal_of_trips_init(struct device_node *np, int *ntrips)
+{
+ struct thermal_trip *tt;
+ struct device_node *trips, *trip;
+ int ret, count;
+
+ trips = of_get_child_by_name(np, "trips");
+ if (!trips) {
+ pr_err("Failed to find 'trips' node\n");
+ return ERR_PTR(-EINVAL);
+ }
+
+ count = of_get_child_count(trips);
+ if (!count) {
+ pr_err("No trip point defined\n");
+ ret = -EINVAL;
+ goto out_of_node_put;
+ }
+
+ tt = kzalloc(sizeof(*tt) * count, GFP_KERNEL);
+ if (!tt) {
+ ret = -ENOMEM;
+ goto out_of_node_put;
+ }
+
+ *ntrips = count;
+
+ count = 0;
+ for_each_child_of_node(trips, trip) {
+ ret = thermal_of_populate_trip(trip, &tt[count++]);
+ if (ret)
+ goto out_kfree;
+ }
+
+ of_node_put(trips);
+
+ return tt;
+
+out_kfree:
+ kfree(tt);
+ *ntrips = 0;
+out_of_node_put:
+ of_node_put(trips);
+
+ return ERR_PTR(ret);
+}
+
/**
* thermal_of_build_thermal_zone - parse and fill one thermal zone data
* @np: DT node containing a thermal zone node
@@ -855,7 +903,6 @@ static struct __thermal_zone
__init *thermal_of_build_thermal_zone(struct device_node *np)
{
struct device_node *child = NULL, *gchild;
- struct device_node *trips;
struct __thermal_zone *tz;
int ret, i;
u32 prop, coef[2];
@@ -897,28 +944,10 @@ __init *thermal_of_build_thermal_zone(struct device_node *np)
tz->offset = 0;
}
- /* trips */
- trips = of_get_child_by_name(np, "trips");
-
- /* No trips provided */
- if (!trips)
+ tz->trips = thermal_of_trips_init(np, &tz->ntrips);
+ if (IS_ERR(tz->trips)) {
+ ret = PTR_ERR(tz->trips);
goto finish;
-
- tz->ntrips = of_get_child_count(trips);
- if (tz->ntrips == 0) /* must have at least one child */
- goto finish;
-
- tz->trips = kcalloc(tz->ntrips, sizeof(*tz->trips), GFP_KERNEL);
- if (!tz->trips) {
- ret = -ENOMEM;
- goto free_tz;
- }
-
- i = 0;
- for_each_child_of_node(trips, gchild) {
- ret = thermal_of_populate_trip(gchild, &tz->trips[i++]);
- if (ret)
- goto free_trips;
}
/* cooling-maps */
@@ -940,7 +969,7 @@ __init *thermal_of_build_thermal_zone(struct device_node *np)
i = 0;
for_each_child_of_node(child, gchild) {
- ret = thermal_of_populate_bind_params(gchild, &tz->tbps[i++]);
+ ret = thermal_of_populate_bind_params(np, gchild, &tz->tbps[i++]);
if (ret)
goto free_tbps;
}
--
2.25.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 15/15] thermal/of: Initialize trip points separately
2022-04-26 22:15 ` [PATCH 15/15] thermal/of: Initialize trip points separately Daniel Lezcano
@ 2022-04-27 9:01 ` kernel test robot
2022-05-04 8:18 ` Dan Carpenter
1 sibling, 0 replies; 19+ messages in thread
From: kernel test robot @ 2022-04-27 9:01 UTC (permalink / raw)
To: Daniel Lezcano, rafael, daniel.lezcano
Cc: llvm, kbuild-all, khilman, abailon, linux-pm, linux-kernel
Hi Daniel,
I love your patch! Perhaps something to improve:
[auto build test WARNING on tegra/for-next]
[also build test WARNING on sre-power-supply/for-next linus/master v5.18-rc4]
[cannot apply to rafael-pm/thermal next-20220427]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/intel-lab-lkp/linux/commits/Daniel-Lezcano/thermal-OF-rework/20220427-061937
base: https://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux.git for-next
config: i386-randconfig-a004-20220425 (https://download.01.org/0day-ci/archive/20220427/202204271620.h0RD5aZy-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 1cddcfdc3c683b393df1a5c9063252eb60e52818)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/b446fa392d1d9fa791ca672608b0860fe37e040f
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Daniel-Lezcano/thermal-OF-rework/20220427-061937
git checkout b446fa392d1d9fa791ca672608b0860fe37e040f
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/thermal/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> drivers/thermal/thermal_of.c:965:2: warning: variable 'gchild' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
if (!tz->tbps) {
^~~~~~~~~~~~~~
include/linux/compiler.h:56:28: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/compiler.h:58:30: note: expanded from macro '__trace_if_var'
#define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : __trace_if_value(cond))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/thermal/thermal_of.c:996:14: note: uninitialized use occurs here
of_node_put(gchild);
^~~~~~
drivers/thermal/thermal_of.c:965:2: note: remove the 'if' if its condition is always false
if (!tz->tbps) {
^~~~~~~~~~~~~~~~
include/linux/compiler.h:56:23: note: expanded from macro 'if'
#define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
^
drivers/thermal/thermal_of.c:905:43: note: initialize the variable 'gchild' to silence this warning
struct device_node *child = NULL, *gchild;
^
= NULL
1 warning generated.
vim +965 drivers/thermal/thermal_of.c
b446fa392d1d9f drivers/thermal/thermal_of.c Daniel Lezcano 2022-04-27 887
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 888 /**
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 889 * thermal_of_build_thermal_zone - parse and fill one thermal zone data
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 890 * @np: DT node containing a thermal zone node
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 891 *
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 892 * This function parses a thermal zone type of node represented by
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 893 * @np parameter and fills the read data into a __thermal_zone data structure
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 894 * and return this pointer.
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 895 *
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 896 * TODO: Missing properties to parse: thermal-sensor-names
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 897 *
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 898 * Return: On success returns a valid struct __thermal_zone,
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 899 * otherwise, it returns a corresponding ERR_PTR(). Caller must
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 900 * check the return value with help of IS_ERR() helper.
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 901 */
c0ff8aaae36955 drivers/thermal/of-thermal.c Julia Lawall 2016-04-19 902 static struct __thermal_zone
c0ff8aaae36955 drivers/thermal/of-thermal.c Julia Lawall 2016-04-19 903 __init *thermal_of_build_thermal_zone(struct device_node *np)
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 904 {
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 905 struct device_node *child = NULL, *gchild;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 906 struct __thermal_zone *tz;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 907 int ret, i;
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 908 u32 prop, coef[2];
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 909
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 910 if (!np) {
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 911 pr_err("no thermal zone np\n");
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 912 return ERR_PTR(-EINVAL);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 913 }
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 914
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 915 tz = kzalloc(sizeof(*tz), GFP_KERNEL);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 916 if (!tz)
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 917 return ERR_PTR(-ENOMEM);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 918
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 919 ret = of_property_read_u32(np, "polling-delay-passive", &prop);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 920 if (ret < 0) {
3079f340caa72a drivers/thermal/of-thermal.c Amit Kucheria 2019-01-21 921 pr_err("%pOFn: missing polling-delay-passive property\n", np);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 922 goto free_tz;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 923 }
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 924 tz->passive_delay = prop;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 925
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 926 ret = of_property_read_u32(np, "polling-delay", &prop);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 927 if (ret < 0) {
3079f340caa72a drivers/thermal/of-thermal.c Amit Kucheria 2019-01-21 928 pr_err("%pOFn: missing polling-delay property\n", np);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 929 goto free_tz;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 930 }
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 931 tz->polling_delay = prop;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 932
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 933 /*
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 934 * REVIST: for now, the thermal framework supports only
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 935 * one sensor per thermal zone. Thus, we are considering
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 936 * only the first two values as slope and offset.
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 937 */
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 938 ret = of_property_read_u32_array(np, "coefficients", coef, 2);
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 939 if (ret == 0) {
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 940 tz->slope = coef[0];
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 941 tz->offset = coef[1];
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 942 } else {
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 943 tz->slope = 1;
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 944 tz->offset = 0;
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 945 }
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 946
b446fa392d1d9f drivers/thermal/thermal_of.c Daniel Lezcano 2022-04-27 947 tz->trips = thermal_of_trips_init(np, &tz->ntrips);
b446fa392d1d9f drivers/thermal/thermal_of.c Daniel Lezcano 2022-04-27 948 if (IS_ERR(tz->trips)) {
b446fa392d1d9f drivers/thermal/thermal_of.c Daniel Lezcano 2022-04-27 949 ret = PTR_ERR(tz->trips);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 950 goto finish;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 951 }
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 952
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 953 /* cooling-maps */
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 954 child = of_get_child_by_name(np, "cooling-maps");
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 955
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 956 /* cooling-maps not provided */
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 957 if (!child)
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 958 goto finish;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 959
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 960 tz->num_tbps = of_get_child_count(child);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 961 if (tz->num_tbps == 0)
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 962 goto finish;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 963
6396bb221514d2 drivers/thermal/of-thermal.c Kees Cook 2018-06-12 964 tz->tbps = kcalloc(tz->num_tbps, sizeof(*tz->tbps), GFP_KERNEL);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 @965 if (!tz->tbps) {
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 966 ret = -ENOMEM;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 967 goto free_trips;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 968 }
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 969
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 970 i = 0;
ca9521b770c988 drivers/thermal/of-thermal.c Stephen Boyd 2014-06-18 971 for_each_child_of_node(child, gchild) {
b446fa392d1d9f drivers/thermal/thermal_of.c Daniel Lezcano 2022-04-27 972 ret = thermal_of_populate_bind_params(np, gchild, &tz->tbps[i++]);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 973 if (ret)
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 974 goto free_tbps;
ca9521b770c988 drivers/thermal/of-thermal.c Stephen Boyd 2014-06-18 975 }
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 976
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 977 finish:
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 978 of_node_put(child);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 979
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 980 return tz;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 981
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 982 free_tbps:
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 983 for (i = i - 1; i >= 0; i--) {
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 984 struct __thermal_bind_params *tbp = tz->tbps + i;
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 985 int j;
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 986
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 987 for (j = 0; j < tbp->count; j++)
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 988 of_node_put(tbp->tcbp[j].cooling_device);
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 989
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 990 kfree(tbp->tcbp);
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 991 }
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 992
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 993 kfree(tz->tbps);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 994 free_trips:
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 995 kfree(tz->trips);
c2aad93c7edd5e drivers/thermal/of-thermal.c Vladimir Zapolskiy 2014-09-29 996 of_node_put(gchild);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 997 free_tz:
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 998 kfree(tz);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 999 of_node_put(child);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 1000
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 1001 return ERR_PTR(ret);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 1002 }
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 1003
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 15/15] thermal/of: Initialize trip points separately
2022-04-26 22:15 ` [PATCH 15/15] thermal/of: Initialize trip points separately Daniel Lezcano
2022-04-27 9:01 ` kernel test robot
@ 2022-05-04 8:18 ` Dan Carpenter
1 sibling, 0 replies; 19+ messages in thread
From: Dan Carpenter @ 2022-05-04 8:18 UTC (permalink / raw)
To: kbuild, Daniel Lezcano, rafael, daniel.lezcano
Cc: lkp, kbuild-all, khilman, abailon, linux-pm, linux-kernel
Hi Daniel,
url: https://github.com/intel-lab-lkp/linux/commits/Daniel-Lezcano/thermal-OF-rework/20220427-061937
base: https://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux.git for-next
config: i386-randconfig-m021 (https://download.01.org/0day-ci/archive/20220503/202205031504.J62WedEw-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.2.0-20) 11.2.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
drivers/thermal/thermal_of.c:996 thermal_of_build_thermal_zone() error: uninitialized symbol 'gchild'.
vim +/gchild +996 drivers/thermal/thermal_of.c
c0ff8aaae36955 drivers/thermal/of-thermal.c Julia Lawall 2016-04-19 902 static struct __thermal_zone
c0ff8aaae36955 drivers/thermal/of-thermal.c Julia Lawall 2016-04-19 903 __init *thermal_of_build_thermal_zone(struct device_node *np)
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 904 {
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 905 struct device_node *child = NULL, *gchild;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 906 struct __thermal_zone *tz;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 907 int ret, i;
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 908 u32 prop, coef[2];
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 909
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 910 if (!np) {
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 911 pr_err("no thermal zone np\n");
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 912 return ERR_PTR(-EINVAL);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 913 }
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 914
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 915 tz = kzalloc(sizeof(*tz), GFP_KERNEL);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 916 if (!tz)
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 917 return ERR_PTR(-ENOMEM);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 918
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 919 ret = of_property_read_u32(np, "polling-delay-passive", &prop);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 920 if (ret < 0) {
3079f340caa72a drivers/thermal/of-thermal.c Amit Kucheria 2019-01-21 921 pr_err("%pOFn: missing polling-delay-passive property\n", np);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 922 goto free_tz;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 923 }
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 924 tz->passive_delay = prop;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 925
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 926 ret = of_property_read_u32(np, "polling-delay", &prop);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 927 if (ret < 0) {
3079f340caa72a drivers/thermal/of-thermal.c Amit Kucheria 2019-01-21 928 pr_err("%pOFn: missing polling-delay property\n", np);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 929 goto free_tz;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 930 }
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 931 tz->polling_delay = prop;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 932
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 933 /*
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 934 * REVIST: for now, the thermal framework supports only
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 935 * one sensor per thermal zone. Thus, we are considering
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 936 * only the first two values as slope and offset.
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 937 */
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 938 ret = of_property_read_u32_array(np, "coefficients", coef, 2);
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 939 if (ret == 0) {
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 940 tz->slope = coef[0];
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 941 tz->offset = coef[1];
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 942 } else {
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 943 tz->slope = 1;
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 944 tz->offset = 0;
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 945 }
a46dbae8abe5cd drivers/thermal/of-thermal.c Eduardo Valentin 2015-05-11 946
b446fa392d1d9f drivers/thermal/thermal_of.c Daniel Lezcano 2022-04-27 947 tz->trips = thermal_of_trips_init(np, &tz->ntrips);
b446fa392d1d9f drivers/thermal/thermal_of.c Daniel Lezcano 2022-04-27 948 if (IS_ERR(tz->trips)) {
b446fa392d1d9f drivers/thermal/thermal_of.c Daniel Lezcano 2022-04-27 949 ret = PTR_ERR(tz->trips);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 950 goto finish;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 951 }
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 952
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 953 /* cooling-maps */
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 954 child = of_get_child_by_name(np, "cooling-maps");
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 955
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 956 /* cooling-maps not provided */
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 957 if (!child)
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 958 goto finish;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 959
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 960 tz->num_tbps = of_get_child_count(child);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 961 if (tz->num_tbps == 0)
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 962 goto finish;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 963
6396bb221514d2 drivers/thermal/of-thermal.c Kees Cook 2018-06-12 964 tz->tbps = kcalloc(tz->num_tbps, sizeof(*tz->tbps), GFP_KERNEL);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 965 if (!tz->tbps) {
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 966 ret = -ENOMEM;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 967 goto free_trips;
"gchild" not initialized on this path.
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 968 }
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 969
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 970 i = 0;
ca9521b770c988 drivers/thermal/of-thermal.c Stephen Boyd 2014-06-18 971 for_each_child_of_node(child, gchild) {
b446fa392d1d9f drivers/thermal/thermal_of.c Daniel Lezcano 2022-04-27 972 ret = thermal_of_populate_bind_params(np, gchild, &tz->tbps[i++]);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 973 if (ret)
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 974 goto free_tbps;
Better to do the of_node_put(gchild); before the goto anyway.
ca9521b770c988 drivers/thermal/of-thermal.c Stephen Boyd 2014-06-18 975 }
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 976
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 977 finish:
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 978 of_node_put(child);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 979
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 980 return tz;
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 981
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 982 free_tbps:
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 983 for (i = i - 1; i >= 0; i--) {
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 984 struct __thermal_bind_params *tbp = tz->tbps + i;
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 985 int j;
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 986
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 987 for (j = 0; j < tbp->count; j++)
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 988 of_node_put(tbp->tcbp[j].cooling_device);
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 989
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 990 kfree(tbp->tcbp);
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 991 }
a92bab8919e3fb drivers/thermal/of-thermal.c Viresh Kumar 2018-08-08 992
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 993 kfree(tz->tbps);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 994 free_trips:
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 995 kfree(tz->trips);
c2aad93c7edd5e drivers/thermal/of-thermal.c Vladimir Zapolskiy 2014-09-29 @996 of_node_put(gchild);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 997 free_tz:
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 998 kfree(tz);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 999 of_node_put(child);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 1000
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 1001 return ERR_PTR(ret);
4e5e4705bf69ea drivers/thermal/of-thermal.c Eduardo Valentin 2013-07-03 1002 }
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 10/15] thermal/core: Rename trips to ntrips
2022-04-26 22:15 ` [PATCH 10/15] thermal/core: Rename trips to ntrips Daniel Lezcano
@ 2022-05-17 15:49 ` Rafael J. Wysocki
0 siblings, 0 replies; 19+ messages in thread
From: Rafael J. Wysocki @ 2022-05-17 15:49 UTC (permalink / raw)
To: Daniel Lezcano
Cc: Rafael J. Wysocki, Daniel Lezcano, Kevin Hilman, Alexandre Bailon,
Linux PM, Linux Kernel Mailing List
On Wed, Apr 27, 2022 at 12:15 AM Daniel Lezcano
<daniel.lezcano@linexp.org> wrote:
>
> In order to use thermal trips defined in the thermal structure, rename
> the 'trips' field to 'ntrips' to have the 'trips' field containing the
> thermal trip points.
So I would call this trips_count.
>
> Cc: Alexandre Bailon <abailon@baylibre.com>
> Cc: Kevin Hilman <khilman@baylibre.com>
> Cc; Eduardo Valentin <eduval@amazon.com>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org>
> ---
> drivers/thermal/gov_fair_share.c | 6 +++---
> drivers/thermal/gov_power_allocator.c | 4 ++--
> drivers/thermal/tegra/tegra30-tsensor.c | 2 +-
> drivers/thermal/thermal_core.c | 20 ++++++++++----------
> drivers/thermal/thermal_helpers.c | 4 ++--
> drivers/thermal/thermal_netlink.c | 2 +-
> drivers/thermal/thermal_sysfs.c | 22 +++++++++++-----------
> include/linux/thermal.h | 2 +-
> 8 files changed, 31 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/thermal/gov_fair_share.c b/drivers/thermal/gov_fair_share.c
> index 3ce42a8e9dbd..82a89465a614 100644
> --- a/drivers/thermal/gov_fair_share.c
> +++ b/drivers/thermal/gov_fair_share.c
> @@ -25,10 +25,10 @@ static int get_trip_level(struct thermal_zone *tz)
> int trip_temp;
> enum thermal_trip_type trip_type;
>
> - if (tz->trips == 0 || !tz->sensor.ops->get_trip_temp)
> + if (tz->ntrips == 0 || !tz->sensor.ops->get_trip_temp)
> return 0;
>
> - for (count = 0; count < tz->trips; count++) {
> + for (count = 0; count < tz->ntrips; count++) {
> tz->sensor.ops->get_trip_temp(tz, count, &trip_temp);
> if (tz->temperature < trip_temp)
> break;
> @@ -53,7 +53,7 @@ static long get_target_state(struct thermal_zone *tz,
>
> cdev->ops->get_max_state(cdev, &max_state);
>
> - return (long)(percentage * level * max_state) / (100 * tz->trips);
> + return (long)(percentage * level * max_state) / (100 * tz->ntrips);
> }
>
> /**
> diff --git a/drivers/thermal/gov_power_allocator.c b/drivers/thermal/gov_power_allocator.c
> index 448baaa642a5..3385e8345f73 100644
> --- a/drivers/thermal/gov_power_allocator.c
> +++ b/drivers/thermal/gov_power_allocator.c
> @@ -527,7 +527,7 @@ static void get_governor_trips(struct thermal_zone *tz,
> last_active = INVALID_TRIP;
> last_passive = INVALID_TRIP;
>
> - for (i = 0; i < tz->trips; i++) {
> + for (i = 0; i < tz->ntrips; i++) {
> enum thermal_trip_type type;
> int ret;
>
> @@ -668,7 +668,7 @@ static int power_allocator_bind(struct thermal_zone *tz)
>
> get_governor_trips(tz, params);
>
> - if (tz->trips > 0) {
> + if (tz->ntrips > 0) {
> ret = tz->sensor.ops->get_trip_temp(tz,
> params->trip_max_desired_temperature,
> &control_temp);
> diff --git a/drivers/thermal/tegra/tegra30-tsensor.c b/drivers/thermal/tegra/tegra30-tsensor.c
> index ad35a9694845..2678f2111070 100644
> --- a/drivers/thermal/tegra/tegra30-tsensor.c
> +++ b/drivers/thermal/tegra/tegra30-tsensor.c
> @@ -316,7 +316,7 @@ static void tegra_tsensor_get_hw_channel_trips(struct thermal_zone *tzd,
> *hot_trip = 85000;
> *crit_trip = 90000;
>
> - for (i = 0; i < tzd->trips; i++) {
> + for (i = 0; i < tzd->ntrips; i++) {
> enum thermal_trip_type type;
> int trip_temp;
>
> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> index e741c932236e..79cb9e0a7229 100644
> --- a/drivers/thermal/thermal_core.c
> +++ b/drivers/thermal/thermal_core.c
> @@ -505,7 +505,7 @@ void thermal_zone_update(struct thermal_zone *tz,
>
> tz->notify_event = event;
>
> - for (count = 0; count < tz->trips; count++)
> + for (count = 0; count < tz->ntrips; count++)
> handle_thermal_trip(tz, count);
> }
> EXPORT_SYMBOL_GPL(thermal_zone_update);
> @@ -630,7 +630,7 @@ int thermal_zone_bind_cooling_device(struct thermal_zone *tz,
> unsigned long max_state;
> int result, ret;
>
> - if (trip >= tz->trips || trip < 0)
> + if (trip >= tz->ntrips || trip < 0)
> return -EINVAL;
>
> list_for_each_entry(pos1, &thermal_tz_list, node) {
> @@ -811,7 +811,7 @@ static void __bind(struct thermal_zone *tz, int mask,
> {
> int i, ret;
>
> - for (i = 0; i < tz->trips; i++) {
> + for (i = 0; i < tz->ntrips; i++) {
> if (mask & (1 << i)) {
> unsigned long upper, lower;
>
> @@ -1056,7 +1056,7 @@ static void __unbind(struct thermal_zone *tz, int mask,
> {
> int i;
>
> - for (i = 0; i < tz->trips; i++)
> + for (i = 0; i < tz->ntrips; i++)
> if (mask & (1 << i))
> thermal_zone_unbind_cooling_device(tz, i, cdev);
> }
> @@ -1168,7 +1168,7 @@ static void thermal_set_delay_jiffies(unsigned long *delay_jiffies, int delay_ms
> /**
> * thermal_zone_register() - register a new thermal zone device
> * @type: the thermal zone device type
> - * @trips: the number of trip points the thermal zone support
> + * @ntrips: the number of trip points the thermal zone support
> * @mask: a bit string indicating the writeablility of trip points
> * @devdata: private device data
> * @ops: standard thermal zone device callbacks
> @@ -1190,7 +1190,7 @@ static void thermal_set_delay_jiffies(unsigned long *delay_jiffies, int delay_ms
> * IS_ERR*() helpers.
> */
> struct thermal_zone *
> -thermal_zone_register(const char *type, int trips, int mask,
> +thermal_zone_register(const char *type, int ntrips, int mask,
> void *devdata, struct thermal_sensor_ops *ops,
> struct thermal_zone_params *tzp, int passive_delay,
> int polling_delay)
> @@ -1214,7 +1214,7 @@ thermal_zone_register(const char *type, int trips, int mask,
> return ERR_PTR(-EINVAL);
> }
>
> - if (trips > THERMAL_MAX_TRIPS || trips < 0 || mask >> trips) {
> + if (ntrips > THERMAL_MAX_TRIPS || ntrips < 0 || mask >> ntrips) {
> pr_err("Incorrect number of thermal trips\n");
> return ERR_PTR(-EINVAL);
> }
> @@ -1224,7 +1224,7 @@ thermal_zone_register(const char *type, int trips, int mask,
> return ERR_PTR(-EINVAL);
> }
>
> - if (trips > 0 && (!ops->get_trip_type || !ops->get_trip_temp))
> + if (ntrips > 0 && (!ops->get_trip_type || !ops->get_trip_temp))
> return ERR_PTR(-EINVAL);
>
> tz = kzalloc(sizeof(*tz), GFP_KERNEL);
> @@ -1254,7 +1254,7 @@ thermal_zone_register(const char *type, int trips, int mask,
> tz->tzp = tzp;
> tz->device.class = &thermal_class;
> tz->devdata = devdata;
> - tz->trips = trips;
> + tz->ntrips = ntrips;
>
> thermal_set_delay_jiffies(&tz->passive_delay_jiffies, passive_delay);
> thermal_set_delay_jiffies(&tz->polling_delay_jiffies, polling_delay);
> @@ -1272,7 +1272,7 @@ thermal_zone_register(const char *type, int trips, int mask,
> if (result)
> goto release_device;
>
> - for (count = 0; count < trips; count++) {
> + for (count = 0; count < ntrips; count++) {
> if (tz->sensor.ops->get_trip_type(tz, count, &trip_type) ||
> tz->sensor.ops->get_trip_temp(tz, count, &trip_temp) ||
> !trip_temp)
> diff --git a/drivers/thermal/thermal_helpers.c b/drivers/thermal/thermal_helpers.c
> index aa687dee4d64..183bbec4d492 100644
> --- a/drivers/thermal/thermal_helpers.c
> +++ b/drivers/thermal/thermal_helpers.c
> @@ -89,7 +89,7 @@ int thermal_zone_get_temp(struct thermal_zone *tz, int *temp)
> ret = tz->sensor.ops->get_temp(tz, temp);
>
> if (IS_ENABLED(CONFIG_THERMAL_EMULATION) && tz->emul_temperature) {
> - for (count = 0; count < tz->trips; count++) {
> + for (count = 0; count < tz->ntrips; count++) {
> ret = tz->sensor.ops->get_trip_type(tz, count, &type);
> if (!ret && type == THERMAL_TRIP_CRITICAL) {
> ret = tz->sensor.ops->get_trip_temp(tz, count,
> @@ -137,7 +137,7 @@ void thermal_zone_set_trips(struct thermal_zone *tz)
> if (!tz->sensor.ops->set_trips || !tz->sensor.ops->get_trip_hyst)
> goto exit;
>
> - for (i = 0; i < tz->trips; i++) {
> + for (i = 0; i < tz->ntrips; i++) {
> int trip_low;
>
> tz->sensor.ops->get_trip_temp(tz, i, &trip_temp);
> diff --git a/drivers/thermal/thermal_netlink.c b/drivers/thermal/thermal_netlink.c
> index 0e95f113d525..0b770af9aab3 100644
> --- a/drivers/thermal/thermal_netlink.c
> +++ b/drivers/thermal/thermal_netlink.c
> @@ -469,7 +469,7 @@ static int thermal_genl_cmd_tz_get_trip(struct param *p)
>
> mutex_lock(&tz->lock);
>
> - for (i = 0; i < tz->trips; i++) {
> + for (i = 0; i < tz->ntrips; i++) {
>
> enum thermal_trip_type type;
> int temp, hyst = 0;
> diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c
> index 33d8c9f47990..63ea7aad3217 100644
> --- a/drivers/thermal/thermal_sysfs.c
> +++ b/drivers/thermal/thermal_sysfs.c
> @@ -416,15 +416,15 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
> int indx;
>
> /* This function works only for zones with at least one trip */
> - if (tz->trips <= 0)
> + if (tz->ntrips <= 0)
> return -EINVAL;
>
> - tz->trip_type_attrs = kcalloc(tz->trips, sizeof(*tz->trip_type_attrs),
> + tz->trip_type_attrs = kcalloc(tz->ntrips, sizeof(*tz->trip_type_attrs),
> GFP_KERNEL);
> if (!tz->trip_type_attrs)
> return -ENOMEM;
>
> - tz->trip_temp_attrs = kcalloc(tz->trips, sizeof(*tz->trip_temp_attrs),
> + tz->trip_temp_attrs = kcalloc(tz->ntrips, sizeof(*tz->trip_temp_attrs),
> GFP_KERNEL);
> if (!tz->trip_temp_attrs) {
> kfree(tz->trip_type_attrs);
> @@ -432,7 +432,7 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
> }
>
> if (tz->sensor.ops->get_trip_hyst) {
> - tz->trip_hyst_attrs = kcalloc(tz->trips,
> + tz->trip_hyst_attrs = kcalloc(tz->ntrips,
> sizeof(*tz->trip_hyst_attrs),
> GFP_KERNEL);
> if (!tz->trip_hyst_attrs) {
> @@ -442,7 +442,7 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
> }
> }
>
> - attrs = kcalloc(tz->trips * 3 + 1, sizeof(*attrs), GFP_KERNEL);
> + attrs = kcalloc(tz->ntrips * 3 + 1, sizeof(*attrs), GFP_KERNEL);
> if (!attrs) {
> kfree(tz->trip_type_attrs);
> kfree(tz->trip_temp_attrs);
> @@ -451,7 +451,7 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
> return -ENOMEM;
> }
>
> - for (indx = 0; indx < tz->trips; indx++) {
> + for (indx = 0; indx < tz->ntrips; indx++) {
> /* create trip type attribute */
> snprintf(tz->trip_type_attrs[indx].name, THERMAL_NAME_LENGTH,
> "trip_point_%d_type", indx);
> @@ -478,7 +478,7 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
> tz->trip_temp_attrs[indx].attr.store =
> trip_point_temp_store;
> }
> - attrs[indx + tz->trips] = &tz->trip_temp_attrs[indx].attr.attr;
> + attrs[indx + tz->ntrips] = &tz->trip_temp_attrs[indx].attr.attr;
>
> /* create Optional trip hyst attribute */
> if (!tz->sensor.ops->get_trip_hyst)
> @@ -496,10 +496,10 @@ static int create_trip_attrs(struct thermal_zone *tz, int mask)
> tz->trip_hyst_attrs[indx].attr.store =
> trip_point_hyst_store;
> }
> - attrs[indx + tz->trips * 2] =
> + attrs[indx + tz->ntrips * 2] =
> &tz->trip_hyst_attrs[indx].attr.attr;
> }
> - attrs[tz->trips * 3] = NULL;
> + attrs[tz->ntrips * 3] = NULL;
>
> tz->trips_attribute_group.attrs = attrs;
>
> @@ -540,7 +540,7 @@ int thermal_zone_create_device_groups(struct thermal_zone *tz,
> for (i = 0; i < size - 2; i++)
> groups[i] = thermal_zone_attribute_groups[i];
>
> - if (tz->trips) {
> + if (tz->ntrips) {
> result = create_trip_attrs(tz, mask);
> if (result) {
> kfree(groups);
> @@ -561,7 +561,7 @@ void thermal_zone_destroy_device_groups(struct thermal_zone *tz)
> if (!tz)
> return;
>
> - if (tz->trips)
> + if (tz->ntrips)
> destroy_trip_attrs(tz);
>
> kfree(tz->device.groups);
> diff --git a/include/linux/thermal.h b/include/linux/thermal.h
> index c3bd01ac4cb0..e58a2f053e1c 100644
> --- a/include/linux/thermal.h
> +++ b/include/linux/thermal.h
> @@ -170,7 +170,7 @@ struct thermal_zone {
> struct thermal_attr *trip_hyst_attrs;
> enum thermal_device_mode mode;
> void *devdata;
> - int trips;
> + int ntrips;
> unsigned long trips_disabled; /* bitmap for disabled trips */
> unsigned long passive_delay_jiffies;
> unsigned long polling_delay_jiffies;
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 00/15] thermal OF rework
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
` (13 preceding siblings ...)
2022-04-26 22:15 ` [PATCH 15/15] thermal/of: Initialize trip points separately Daniel Lezcano
@ 2022-05-17 16:02 ` Rafael J. Wysocki
14 siblings, 0 replies; 19+ messages in thread
From: Rafael J. Wysocki @ 2022-05-17 16:02 UTC (permalink / raw)
To: Daniel Lezcano
Cc: Rafael J. Wysocki, Daniel Lezcano, Kevin Hilman, Alexandre Bailon,
Linux PM, Linux Kernel Mailing List, Srinivas Pandruvada
On Wed, Apr 27, 2022 at 12:15 AM Daniel Lezcano
<daniel.lezcano@linexp.org> wrote:
>
> The thermal framework initialization with the device tree appears to
> be complicated and hard to make it to evolve.
>
> It contains duplication of almost the same thermal generic structures
> and has an assymetric initialization making hard any kind of serious
> changes for more complex features. One of them is the multiple sensors
> support per thermal zone.
>
> In order to set the scene for the aforementioned feature with generic
> code, we need to cleanup and rework the device tree initialization.
>
> However this rework is not obvious because of the multiple components
> entering in the composition of a thermal zone and being initialized at
> different moments. For instance, a cooling device can be initialized
> before a sensor, so the thermal zones must exist before the cooling
> device as well as the sensor. This asynchonous initialization forces
> the thermal zone to be created with fake ops because they are
> mandotory and build a list of cooling devices which is used to lookup
> afterwards when the cooling device driver is registering itself.
>
> Actually, the correct behavior IMHO, would be having a sensor
> registration resulting in the thermal zone creation. If the cooling
> device is registered before, it won't find the thermal zone and should
> return -EPROBE_DEFER.
>
> As there could be a large number of changes, this first series provide
> some steps forward for a simpler device tree initialization.
>
> The first patch could appear scary as it touches a big number of files
> but it is actually just renaming a structure name
>
> Daniel Lezcano (15):
> thermal/core: Rename thermal_zone_device to thermal_zone
> thermal/core: Change thermal_zone_ops to thermal_sensor_ops
> thermal/core: Add a thermal sensor structure in the thermal zone
> thermal/core: Remove duplicate information when an error occurs
> thermal/of: Replace device node match with device node search
> thermal/of: Remove the device node pointer for thermal_trip
> thermal/of: Move thermal_trip structure to thermal.h
> thermal/core: Remove unneeded EXPORT_SYMBOLS
> thermal/core: Move thermal_set_delay_jiffies to static
> thermal/core: Rename trips to ntrips
> thermal/core: Add thermal_trip in thermal_zone
> thermal/core: Register with the trip points
> thermal/of: Store the trips in the thermal zone
> thermal/of: Use thermal trips stored in the thermal zone
> thermal/of: Initialize trip points separately
Generally, the series looks reasonable to me, but I'm not convinced
about the first patch.
It looks like a decision needs to be made regarding how exactly a
"thermal zone" is going to be defined now and how it is going to be
related to thermal sensors.
My basic question is this: If trip points are associated with thermal
sensors, then what a thermal zone really is and what is it useful for?
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2022-05-17 16:02 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-26 22:15 [PATCH 00/15] thermal OF rework Daniel Lezcano
2022-04-26 22:15 ` [PATCH 02/15] thermal/core: Change thermal_zone_ops to thermal_sensor_ops Daniel Lezcano
2022-04-26 22:15 ` [PATCH 03/15] thermal/core: Add a thermal sensor structure in the thermal zone Daniel Lezcano
2022-04-26 22:15 ` [PATCH 04/15] thermal/core: Remove duplicate information when an error occurs Daniel Lezcano
2022-04-26 22:15 ` [PATCH 05/15] thermal/of: Replace device node match with device node search Daniel Lezcano
2022-04-26 22:15 ` [PATCH 06/15] thermal/of: Remove the device node pointer for thermal_trip Daniel Lezcano
2022-04-26 22:15 ` [PATCH 07/15] thermal/of: Move thermal_trip structure to thermal.h Daniel Lezcano
2022-04-26 22:15 ` [PATCH 08/15] thermal/core: Remove unneeded EXPORT_SYMBOLS Daniel Lezcano
2022-04-26 22:15 ` [PATCH 09/15] thermal/core: Move thermal_set_delay_jiffies to static Daniel Lezcano
2022-04-26 22:15 ` [PATCH 10/15] thermal/core: Rename trips to ntrips Daniel Lezcano
2022-05-17 15:49 ` Rafael J. Wysocki
2022-04-26 22:15 ` [PATCH 11/15] thermal/core: Add thermal_trip in thermal_zone Daniel Lezcano
2022-04-26 22:15 ` [PATCH 12/15] thermal/core: Register with the trip points Daniel Lezcano
2022-04-26 22:15 ` [PATCH 13/15] thermal/of: Store the trips in the thermal zone Daniel Lezcano
2022-04-26 22:15 ` [PATCH 14/15] thermal/of: Use thermal trips stored " Daniel Lezcano
2022-04-26 22:15 ` [PATCH 15/15] thermal/of: Initialize trip points separately Daniel Lezcano
2022-04-27 9:01 ` kernel test robot
2022-05-04 8:18 ` Dan Carpenter
2022-05-17 16:02 ` [PATCH 00/15] thermal OF rework Rafael J. Wysocki
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).