2023-01-10 15:37:57

by Daniel Lezcano

[permalink] [raw]
Subject: [PATCH v4 0/3] Thermal ACPI APIs for generic trip points

Recently sent as a RFC, the thermal ACPI for generic trip points is a set of
functions to fill the generic trip points structure which will become the
standard structure for the thermal framework and its users.

Different Intel drivers and the ACPI thermal driver are using the ACPI tables to
get the thermal zone information. As those are getting the same information,
providing this set of ACPI function with the generic trip points will
consolidate the code.

Also, the Intel PCH and the Intel 34xx drivers are converted to use the generic
trip points relying on the ACPI generic trip point parsing functions.

These changes have been tested on a Thinkpad Lenovo x280 with the PCH and
INT34xx drivers. No regression have been observed, the trip points remain the
same for what is described on this system.

Changelog:
- V4:
- Fixed Kconfig option dependency, select THERMAL_ACPI if ACPI is set
only for the PCH driver

- V3:
- Took into account Rafael's comments
- Used a silence option THERMAL_ACPI in order to stay consistent
with THERMAL_OF. It is up to the API user to select the option.

- V2:
- Fix the thermal ACPI patch where the thermal_acpi.c was not included in
the series
- Provide a couple of users of this API which could have been tested on a
real system

Daniel Lezcano (3):
thermal/acpi: Add ACPI trip point routines
thermal/drivers/intel: Use generic trip points for intel_pch
thermal/drivers/intel: Use generic trip points int340x

drivers/thermal/Kconfig | 4 +
drivers/thermal/Makefile | 1 +
drivers/thermal/intel/Kconfig | 1 +
drivers/thermal/intel/int340x_thermal/Kconfig | 1 +
.../int340x_thermal/int340x_thermal_zone.c | 177 ++++-----------
.../int340x_thermal/int340x_thermal_zone.h | 10 +-
drivers/thermal/intel/intel_pch_thermal.c | 88 ++------
drivers/thermal/thermal_acpi.c | 211 ++++++++++++++++++
include/linux/thermal.h | 8 +
9 files changed, 287 insertions(+), 214 deletions(-)
create mode 100644 drivers/thermal/thermal_acpi.c

--
2.34.1


2023-01-10 15:40:41

by Daniel Lezcano

[permalink] [raw]
Subject: [PATCH 2/3] thermal/drivers/intel: Use generic trip points for intel_pch

The thermal framework gives the possibility to register the trip
points with the thermal zone. When that is done, no get_trip_* ops are
needed and they can be removed.

Convert the ops content logic into generic trip points and register
them with the thermal zone.

In order to consolidate the code, use the ACPI thermal framework API
to fill the generic trip point from the ACPI tables.

It has been tested on a Intel i7-8650U - x280 with the INT3400, the
PCH, ACPITZ, and x86_pkg_temp. No regression observed so far.

Signed-off-by: Daniel Lezcano <[email protected]>
---
V4:
- Changed select THERMAL_ACPI if ACPI in order to prevent
dependency inconsistency

V3:
- The driver Kconfig option selects CONFIG_THERMAL_ACPI

Signed-off-by: Daniel Lezcano <[email protected]>
---
drivers/thermal/intel/Kconfig | 1 +
drivers/thermal/intel/intel_pch_thermal.c | 88 +++++------------------
2 files changed, 20 insertions(+), 69 deletions(-)

diff --git a/drivers/thermal/intel/Kconfig b/drivers/thermal/intel/Kconfig
index f0c845679250..7d68c076c23d 100644
--- a/drivers/thermal/intel/Kconfig
+++ b/drivers/thermal/intel/Kconfig
@@ -75,6 +75,7 @@ config INTEL_BXT_PMIC_THERMAL
config INTEL_PCH_THERMAL
tristate "Intel PCH Thermal Reporting Driver"
depends on X86 && PCI
+ select THERMAL_ACPI if ACPI
help
Enable this to support thermal reporting on certain intel PCHs.
Thermal reporting device will provide temperature reading,
diff --git a/drivers/thermal/intel/intel_pch_thermal.c b/drivers/thermal/intel/intel_pch_thermal.c
index dabf11a687a1..530fe9b38381 100644
--- a/drivers/thermal/intel/intel_pch_thermal.c
+++ b/drivers/thermal/intel/intel_pch_thermal.c
@@ -65,6 +65,8 @@
#define WPT_TEMP_OFFSET (PCH_TEMP_OFFSET * MILLIDEGREE_PER_DEGREE)
#define GET_PCH_TEMP(x) (((x) / 2) + PCH_TEMP_OFFSET)

+#define PCH_MAX_TRIPS 3 /* critical, hot, passive */
+
/* Amount of time for each cooling delay, 100ms by default for now */
static unsigned int delay_timeout = 100;
module_param(delay_timeout, int, 0644);
@@ -82,12 +84,7 @@ struct pch_thermal_device {
const struct pch_dev_ops *ops;
struct pci_dev *pdev;
struct thermal_zone_device *tzd;
- int crt_trip_id;
- unsigned long crt_temp;
- int hot_trip_id;
- unsigned long hot_temp;
- int psv_trip_id;
- unsigned long psv_temp;
+ struct thermal_trip trips[PCH_MAX_TRIPS];
bool bios_enabled;
};

@@ -102,33 +99,22 @@ static void pch_wpt_add_acpi_psv_trip(struct pch_thermal_device *ptd,
int *nr_trips)
{
struct acpi_device *adev;
-
- ptd->psv_trip_id = -1;
+ int ret;

adev = ACPI_COMPANION(&ptd->pdev->dev);
- if (adev) {
- unsigned long long r;
- acpi_status status;
-
- status = acpi_evaluate_integer(adev->handle, "_PSV", NULL,
- &r);
- if (ACPI_SUCCESS(status)) {
- unsigned long trip_temp;
-
- trip_temp = deci_kelvin_to_millicelsius(r);
- if (trip_temp) {
- ptd->psv_temp = trip_temp;
- ptd->psv_trip_id = *nr_trips;
- ++(*nr_trips);
- }
- }
- }
+ if (!adev)
+ return;
+
+ ret = thermal_acpi_trip_psv(adev, &ptd->trips[*nr_trips]);
+ if (ret)
+ return;
+
+ ++(*nr_trips);
}
#else
static void pch_wpt_add_acpi_psv_trip(struct pch_thermal_device *ptd,
int *nr_trips)
{
- ptd->psv_trip_id = -1;

}
#endif
@@ -163,21 +149,19 @@ static int pch_wpt_init(struct pch_thermal_device *ptd, int *nr_trips)
}

read_trips:
- ptd->crt_trip_id = -1;
trip_temp = readw(ptd->hw_base + WPT_CTT);
trip_temp &= 0x1FF;
if (trip_temp) {
- ptd->crt_temp = GET_WPT_TEMP(trip_temp);
- ptd->crt_trip_id = 0;
+ ptd->trips[*nr_trips].temperature = GET_WPT_TEMP(trip_temp);
+ ptd->trips[*nr_trips].type = THERMAL_TRIP_CRITICAL;
++(*nr_trips);
}

- ptd->hot_trip_id = -1;
trip_temp = readw(ptd->hw_base + WPT_PHL);
trip_temp &= 0x1FF;
if (trip_temp) {
- ptd->hot_temp = GET_WPT_TEMP(trip_temp);
- ptd->hot_trip_id = *nr_trips;
+ ptd->trips[*nr_trips].temperature = GET_WPT_TEMP(trip_temp);
+ ptd->trips[*nr_trips].type = THERMAL_TRIP_HOT;
++(*nr_trips);
}

@@ -298,39 +282,6 @@ static int pch_thermal_get_temp(struct thermal_zone_device *tzd, int *temp)
return ptd->ops->get_temp(ptd, temp);
}

-static int pch_get_trip_type(struct thermal_zone_device *tzd, int trip,
- enum thermal_trip_type *type)
-{
- struct pch_thermal_device *ptd = tzd->devdata;
-
- if (ptd->crt_trip_id == trip)
- *type = THERMAL_TRIP_CRITICAL;
- else if (ptd->hot_trip_id == trip)
- *type = THERMAL_TRIP_HOT;
- else if (ptd->psv_trip_id == trip)
- *type = THERMAL_TRIP_PASSIVE;
- else
- return -EINVAL;
-
- return 0;
-}
-
-static int pch_get_trip_temp(struct thermal_zone_device *tzd, int trip, int *temp)
-{
- struct pch_thermal_device *ptd = tzd->devdata;
-
- if (ptd->crt_trip_id == trip)
- *temp = ptd->crt_temp;
- else if (ptd->hot_trip_id == trip)
- *temp = ptd->hot_temp;
- else if (ptd->psv_trip_id == trip)
- *temp = ptd->psv_temp;
- else
- return -EINVAL;
-
- return 0;
-}
-
static void pch_critical(struct thermal_zone_device *tzd)
{
dev_dbg(&tzd->device, "%s: critical temperature reached\n", tzd->type);
@@ -338,8 +289,6 @@ static void pch_critical(struct thermal_zone_device *tzd)

static struct thermal_zone_device_ops tzd_ops = {
.get_temp = pch_thermal_get_temp,
- .get_trip_type = pch_get_trip_type,
- .get_trip_temp = pch_get_trip_temp,
.critical = pch_critical,
};

@@ -423,8 +372,9 @@ static int intel_pch_thermal_probe(struct pci_dev *pdev,
if (err)
goto error_cleanup;

- ptd->tzd = thermal_zone_device_register(bi->name, nr_trips, 0, ptd,
- &tzd_ops, NULL, 0, 0);
+ ptd->tzd = thermal_zone_device_register_with_trips(bi->name, ptd->trips,
+ nr_trips, 0, ptd,
+ &tzd_ops, NULL, 0, 0);
if (IS_ERR(ptd->tzd)) {
dev_err(&pdev->dev, "Failed to register thermal zone %s\n",
bi->name);
--
2.34.1

2023-01-11 12:53:57

by Daniel Lezcano

[permalink] [raw]
Subject: Re: [PATCH v4 0/3] Thermal ACPI APIs for generic trip points


Can I consider these changes ok for thermal/bleeding-edge ?


On 10/01/2023 16:17, Daniel Lezcano wrote:
> Recently sent as a RFC, the thermal ACPI for generic trip points is a set of
> functions to fill the generic trip points structure which will become the
> standard structure for the thermal framework and its users.
>
> Different Intel drivers and the ACPI thermal driver are using the ACPI tables to
> get the thermal zone information. As those are getting the same information,
> providing this set of ACPI function with the generic trip points will
> consolidate the code.
>
> Also, the Intel PCH and the Intel 34xx drivers are converted to use the generic
> trip points relying on the ACPI generic trip point parsing functions.
>
> These changes have been tested on a Thinkpad Lenovo x280 with the PCH and
> INT34xx drivers. No regression have been observed, the trip points remain the
> same for what is described on this system.
>
> Changelog:
> - V4:
> - Fixed Kconfig option dependency, select THERMAL_ACPI if ACPI is set
> only for the PCH driver
>
> - V3:
> - Took into account Rafael's comments
> - Used a silence option THERMAL_ACPI in order to stay consistent
> with THERMAL_OF. It is up to the API user to select the option.
>
> - V2:
> - Fix the thermal ACPI patch where the thermal_acpi.c was not included in
> the series
> - Provide a couple of users of this API which could have been tested on a
> real system
>
> Daniel Lezcano (3):
> thermal/acpi: Add ACPI trip point routines
> thermal/drivers/intel: Use generic trip points for intel_pch
> thermal/drivers/intel: Use generic trip points int340x
>
> drivers/thermal/Kconfig | 4 +
> drivers/thermal/Makefile | 1 +
> drivers/thermal/intel/Kconfig | 1 +
> drivers/thermal/intel/int340x_thermal/Kconfig | 1 +
> .../int340x_thermal/int340x_thermal_zone.c | 177 ++++-----------
> .../int340x_thermal/int340x_thermal_zone.h | 10 +-
> drivers/thermal/intel/intel_pch_thermal.c | 88 ++------
> drivers/thermal/thermal_acpi.c | 211 ++++++++++++++++++
> include/linux/thermal.h | 8 +
> 9 files changed, 287 insertions(+), 214 deletions(-)
> create mode 100644 drivers/thermal/thermal_acpi.c
>

--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

2023-01-11 14:52:43

by Zhang, Rui

[permalink] [raw]
Subject: Re: [PATCH v4 0/3] Thermal ACPI APIs for generic trip points

On Wed, 2023-01-11 at 12:52 +0100, Daniel Lezcano wrote:
> Can I consider these changes ok for thermal/bleeding-edge ?
>
>
Hi, Daniel,

In general, the patch looks good to me.
But can you give me more time so that I can test them on my test box by
this week?

thanks,
rui

> On 10/01/2023 16:17, Daniel Lezcano wrote:
> > Recently sent as a RFC, the thermal ACPI for generic trip points is
> > a set of
> > functions to fill the generic trip points structure which will
> > become the
> > standard structure for the thermal framework and its users.
> >
> > Different Intel drivers and the ACPI thermal driver are using the
> > ACPI tables to
> > get the thermal zone information. As those are getting the same
> > information,
> > providing this set of ACPI function with the generic trip points
> > will
> > consolidate the code.
> >
> > Also, the Intel PCH and the Intel 34xx drivers are converted to use
> > the generic
> > trip points relying on the ACPI generic trip point parsing
> > functions.
> >
> > These changes have been tested on a Thinkpad Lenovo x280 with the
> > PCH and
> > INT34xx drivers. No regression have been observed, the trip points
> > remain the
> > same for what is described on this system.
> >
> > Changelog:
> > - V4:
> > - Fixed Kconfig option dependency, select THERMAL_ACPI if ACPI
> > is set
> > only for the PCH driver
> >
> > - V3:
> > - Took into account Rafael's comments
> > - Used a silence option THERMAL_ACPI in order to stay
> > consistent
> > with THERMAL_OF. It is up to the API user to select the
> > option.
> >
> > - V2:
> > - Fix the thermal ACPI patch where the thermal_acpi.c was not
> > included in
> > the series
> > - Provide a couple of users of this API which could have been
> > tested on a
> > real system
> >
> > Daniel Lezcano (3):
> > thermal/acpi: Add ACPI trip point routines
> > thermal/drivers/intel: Use generic trip points for intel_pch
> > thermal/drivers/intel: Use generic trip points int340x
> >
> > drivers/thermal/Kconfig | 4 +
> > drivers/thermal/Makefile | 1 +
> > drivers/thermal/intel/Kconfig | 1 +
> > drivers/thermal/intel/int340x_thermal/Kconfig | 1 +
> > .../int340x_thermal/int340x_thermal_zone.c | 177 ++++---------
> > --
> > .../int340x_thermal/int340x_thermal_zone.h | 10 +-
> > drivers/thermal/intel/intel_pch_thermal.c | 88 ++------
> > drivers/thermal/thermal_acpi.c | 211
> > ++++++++++++++++++
> > include/linux/thermal.h | 8 +
> > 9 files changed, 287 insertions(+), 214 deletions(-)
> > create mode 100644 drivers/thermal/thermal_acpi.c
> >

2023-01-11 15:31:04

by Daniel Lezcano

[permalink] [raw]
Subject: Re: [PATCH v4 0/3] Thermal ACPI APIs for generic trip points

On 11/01/2023 15:49, Zhang, Rui wrote:
> On Wed, 2023-01-11 at 12:52 +0100, Daniel Lezcano wrote:
>> Can I consider these changes ok for thermal/bleeding-edge ?
>>
>>
> Hi, Daniel,
>
> In general, the patch looks good to me.
> But can you give me more time so that I can test them on my test box by
> this week?

Ah, yes, definitively. If you have a test box for these changes that is
awesome.

Do you have a suggestion for a x86 platform to test quark_dts,
processor_thermal_device_pci and intel_soc_dts_iosf ?


--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

2023-01-12 02:39:52

by Zhang, Rui

[permalink] [raw]
Subject: Re: [PATCH v4 0/3] Thermal ACPI APIs for generic trip points

Hi, Daniel,

On Wed, 2023-01-11 at 16:01 +0100, Daniel Lezcano wrote:
> On 11/01/2023 15:49, Zhang, Rui wrote:
> > On Wed, 2023-01-11 at 12:52 +0100, Daniel Lezcano wrote:
> > > Can I consider these changes ok for thermal/bleeding-edge ?
> > >
> > >
> > Hi, Daniel,
> >
> > In general, the patch looks good to me.
> > But can you give me more time so that I can test them on my test
> > box by
> > this week?
>
> Ah, yes, definitively. If you have a test box for these changes that
> is
> awesome.

Yeah. I have one to test both drivers.

>
> Do you have a suggestion for a x86 platform to test quark_dts,
> processor_thermal_device_pci and intel_soc_dts_iosf ?

intel_soc_dts_iosf is for Baytrail platform. Both Baytrail and Quark
are nearly 10 years old, and I don't have any of them.

For processor_thermal_device_pci, it should be available on Alderlake
platforms. And I have an internal platform which I can help test the
patches.

thanks,
rui

2023-01-13 12:32:41

by Zhang, Rui

[permalink] [raw]
Subject: Re: [PATCH v4 0/3] Thermal ACPI APIs for generic trip points

Hi, Daniel,

Thanks for the patch series.

I got several "trailing whitespace" warnings when applying the patches,
and there are also some other checkpatch.pl warnings.

Besides that, I only have one comment about patch 3/3, and I have
replied to that thread.

thanks,
rui

On Tue, 2023-01-10 at 16:17 +0100, Daniel Lezcano wrote:
> Recently sent as a RFC, the thermal ACPI for generic trip points is a
> set of
> functions to fill the generic trip points structure which will become
> the
> standard structure for the thermal framework and its users.
>
> Different Intel drivers and the ACPI thermal driver are using the
> ACPI tables to
> get the thermal zone information. As those are getting the same
> information,
> providing this set of ACPI function with the generic trip points will
> consolidate the code.
>
> Also, the Intel PCH and the Intel 34xx drivers are converted to use
> the generic
> trip points relying on the ACPI generic trip point parsing functions.
>
> These changes have been tested on a Thinkpad Lenovo x280 with the PCH
> and
> INT34xx drivers. No regression have been observed, the trip points
> remain the
> same for what is described on this system.
>
> Changelog:
> - V4:
> - Fixed Kconfig option dependency, select THERMAL_ACPI if ACPI is
> set
> only for the PCH driver
>
> - V3:
> - Took into account Rafael's comments
> - Used a silence option THERMAL_ACPI in order to stay consistent
> with THERMAL_OF. It is up to the API user to select the option.
>
> - V2:
> - Fix the thermal ACPI patch where the thermal_acpi.c was not
> included in
> the series
> - Provide a couple of users of this API which could have been
> tested on a
> real system
>
> Daniel Lezcano (3):
> thermal/acpi: Add ACPI trip point routines
> thermal/drivers/intel: Use generic trip points for intel_pch
> thermal/drivers/intel: Use generic trip points int340x
>
> drivers/thermal/Kconfig | 4 +
> drivers/thermal/Makefile | 1 +
> drivers/thermal/intel/Kconfig | 1 +
> drivers/thermal/intel/int340x_thermal/Kconfig | 1 +
> .../int340x_thermal/int340x_thermal_zone.c | 177 ++++-----------
> .../int340x_thermal/int340x_thermal_zone.h | 10 +-
> drivers/thermal/intel/intel_pch_thermal.c | 88 ++------
> drivers/thermal/thermal_acpi.c | 211
> ++++++++++++++++++
> include/linux/thermal.h | 8 +
> 9 files changed, 287 insertions(+), 214 deletions(-)
> create mode 100644 drivers/thermal/thermal_acpi.c
>