* [PATCH v2] thermal/drivers/mediatek/lvts_thermal: Make readings valid in filtered mode
@ 2023-07-13 15:42 Nícolas F. R. A. Prado
2023-07-14 9:23 ` AngeloGioacchino Del Regno
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Nícolas F. R. A. Prado @ 2023-07-13 15:42 UTC (permalink / raw)
To: Daniel Lezcano
Cc: kernel, AngeloGioacchino Del Regno, Chen-Yu Tsai,
Bernhard Rosenkränzer, Nícolas F. R. A. Prado,
Alexandre Mergnat, Amit Kucheria, Balsam CHIHI, Matthias Brugger,
Rafael J. Wysocki, Yangtao Li, Zhang Rui, linux-arm-kernel,
linux-kernel, linux-mediatek, linux-pm
Currently, when a controller is configured to use filtered mode, thermal
readings are valid only about 30% of the time.
Upon testing, it was noticed that lowering any of the interval settings
resulted in an improved rate of valid data. The same was observed when
decreasing the number of samples for each sensor (which also results in
quicker measurements).
Retrying the read with a timeout longer than the time it takes to
resample (about 344us with these settings and 4 sensors) also improves
the rate.
Lower all timing settings to the minimum, configure the filtering to
single sample, and poll the measurement register for at least one period
to improve the data validity on filtered mode. With these changes in
place, out of 100000 reads, a single one failed, ie 99.999% of the data
was valid.
Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
Tested-by: Chen-Yu Tsai <wenst@chromium.org>
Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
---
Changes in v2:
- Added macros for the wait and timeout times (and in the process made the wait
200us instead of 240us, just to simplify, gives the same result)
- Rebased on thermal/bleeding-edge (since the
"thermal/drivers/mediatek/lvts_thermal: Fixes to the interrupt handling"
series was merged)
drivers/thermal/mediatek/lvts_thermal.c | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
index ea89b29ffe5f..1a3cb118ff32 100644
--- a/drivers/thermal/mediatek/lvts_thermal.c
+++ b/drivers/thermal/mediatek/lvts_thermal.c
@@ -58,11 +58,11 @@
#define LVTS_PROTTC(__base) (__base + 0x00CC)
#define LVTS_CLKEN(__base) (__base + 0x00E4)
-#define LVTS_PERIOD_UNIT ((118 * 1000) / (256 * 38))
-#define LVTS_GROUP_INTERVAL 1
-#define LVTS_FILTER_INTERVAL 1
-#define LVTS_SENSOR_INTERVAL 1
-#define LVTS_HW_FILTER 0x2
+#define LVTS_PERIOD_UNIT 0
+#define LVTS_GROUP_INTERVAL 0
+#define LVTS_FILTER_INTERVAL 0
+#define LVTS_SENSOR_INTERVAL 0
+#define LVTS_HW_FILTER 0x0
#define LVTS_TSSEL_CONF 0x13121110
#define LVTS_CALSCALE_CONF 0x300
#define LVTS_MONINT_CONF 0x8300318C
@@ -86,6 +86,9 @@
#define LVTS_MSR_IMMEDIATE_MODE 0
#define LVTS_MSR_FILTERED_MODE 1
+#define LVTS_MSR_READ_TIMEOUT_US 400
+#define LVTS_MSR_READ_WAIT_US (LVTS_MSR_READ_TIMEOUT_US / 2)
+
#define LVTS_HW_SHUTDOWN_MT8195 105000
#define LVTS_MINIMUM_THRESHOLD 20000
@@ -268,6 +271,7 @@ static int lvts_get_temp(struct thermal_zone_device *tz, int *temp)
struct lvts_sensor *lvts_sensor = thermal_zone_device_priv(tz);
void __iomem *msr = lvts_sensor->msr;
u32 value;
+ int rc;
/*
* Measurement registers:
@@ -280,7 +284,8 @@ static int lvts_get_temp(struct thermal_zone_device *tz, int *temp)
* 16 : Valid temperature
* 15-0 : Raw temperature
*/
- value = readl(msr);
+ rc = readl_poll_timeout(msr, value, value & BIT(16),
+ LVTS_MSR_READ_WAIT_US, LVTS_MSR_READ_TIMEOUT_US);
/*
* As the thermal zone temperature will read before the
@@ -293,7 +298,7 @@ static int lvts_get_temp(struct thermal_zone_device *tz, int *temp)
* functionning temperature and directly jump to a system
* shutdown.
*/
- if (!(value & BIT(16)))
+ if (rc)
return -EAGAIN;
*temp = lvts_raw_to_temp(value & 0xFFFF);
--
2.41.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2] thermal/drivers/mediatek/lvts_thermal: Make readings valid in filtered mode
2023-07-13 15:42 [PATCH v2] thermal/drivers/mediatek/lvts_thermal: Make readings valid in filtered mode Nícolas F. R. A. Prado
@ 2023-07-14 9:23 ` AngeloGioacchino Del Regno
2023-08-10 22:51 ` Nícolas F. R. A. Prado
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-07-14 9:23 UTC (permalink / raw)
To: Nícolas F. R. A. Prado, Daniel Lezcano
Cc: kernel, Chen-Yu Tsai, Bernhard Rosenkränzer,
Alexandre Mergnat, Amit Kucheria, Balsam CHIHI, Matthias Brugger,
Rafael J. Wysocki, Yangtao Li, Zhang Rui, linux-arm-kernel,
linux-kernel, linux-mediatek, linux-pm
Il 13/07/23 17:42, Nícolas F. R. A. Prado ha scritto:
> Currently, when a controller is configured to use filtered mode, thermal
> readings are valid only about 30% of the time.
>
> Upon testing, it was noticed that lowering any of the interval settings
> resulted in an improved rate of valid data. The same was observed when
> decreasing the number of samples for each sensor (which also results in
> quicker measurements).
>
> Retrying the read with a timeout longer than the time it takes to
> resample (about 344us with these settings and 4 sensors) also improves
> the rate.
>
> Lower all timing settings to the minimum, configure the filtering to
> single sample, and poll the measurement register for at least one period
> to improve the data validity on filtered mode. With these changes in
> place, out of 100000 reads, a single one failed, ie 99.999% of the data
> was valid.
>
> Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
> Tested-by: Chen-Yu Tsai <wenst@chromium.org>
> Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
>
Good to go!
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] thermal/drivers/mediatek/lvts_thermal: Make readings valid in filtered mode
2023-07-13 15:42 [PATCH v2] thermal/drivers/mediatek/lvts_thermal: Make readings valid in filtered mode Nícolas F. R. A. Prado
2023-07-14 9:23 ` AngeloGioacchino Del Regno
@ 2023-08-10 22:51 ` Nícolas F. R. A. Prado
2023-08-11 11:01 ` Alexandre Mergnat
2023-08-16 10:21 ` Daniel Lezcano
3 siblings, 0 replies; 5+ messages in thread
From: Nícolas F. R. A. Prado @ 2023-08-10 22:51 UTC (permalink / raw)
To: Daniel Lezcano
Cc: kernel, AngeloGioacchino Del Regno, Chen-Yu Tsai,
Bernhard Rosenkränzer, Alexandre Mergnat, Amit Kucheria,
Balsam CHIHI, Matthias Brugger, Rafael J. Wysocki, Yangtao Li,
Zhang Rui, linux-arm-kernel, linux-kernel, linux-mediatek,
linux-pm
On Thu, Jul 13, 2023 at 11:42:37AM -0400, Nícolas F. R. A. Prado wrote:
> Currently, when a controller is configured to use filtered mode, thermal
> readings are valid only about 30% of the time.
>
> Upon testing, it was noticed that lowering any of the interval settings
> resulted in an improved rate of valid data. The same was observed when
> decreasing the number of samples for each sensor (which also results in
> quicker measurements).
>
> Retrying the read with a timeout longer than the time it takes to
> resample (about 344us with these settings and 4 sensors) also improves
> the rate.
>
> Lower all timing settings to the minimum, configure the filtering to
> single sample, and poll the measurement register for at least one period
> to improve the data validity on filtered mode. With these changes in
> place, out of 100000 reads, a single one failed, ie 99.999% of the data
> was valid.
>
> Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
> Tested-by: Chen-Yu Tsai <wenst@chromium.org>
> Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
Hi Daniel,
gentle ping on this patch.
Thanks,
Nícolas
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] thermal/drivers/mediatek/lvts_thermal: Make readings valid in filtered mode
2023-07-13 15:42 [PATCH v2] thermal/drivers/mediatek/lvts_thermal: Make readings valid in filtered mode Nícolas F. R. A. Prado
2023-07-14 9:23 ` AngeloGioacchino Del Regno
2023-08-10 22:51 ` Nícolas F. R. A. Prado
@ 2023-08-11 11:01 ` Alexandre Mergnat
2023-08-16 10:21 ` Daniel Lezcano
3 siblings, 0 replies; 5+ messages in thread
From: Alexandre Mergnat @ 2023-08-11 11:01 UTC (permalink / raw)
To: Nícolas F. R. A. Prado, Daniel Lezcano
Cc: kernel, AngeloGioacchino Del Regno, Chen-Yu Tsai,
Bernhard Rosenkränzer, Amit Kucheria, Balsam CHIHI,
Matthias Brugger, Rafael J. Wysocki, Yangtao Li, Zhang Rui,
linux-arm-kernel, linux-kernel, linux-mediatek, linux-pm
Reviewed-by: Alexandre Mergnat <amergnat@baylibre.com>
On 13/07/2023 17:42, Nícolas F. R. A. Prado wrote:
> Currently, when a controller is configured to use filtered mode, thermal
> readings are valid only about 30% of the time.
>
> Upon testing, it was noticed that lowering any of the interval settings
> resulted in an improved rate of valid data. The same was observed when
> decreasing the number of samples for each sensor (which also results in
> quicker measurements).
>
> Retrying the read with a timeout longer than the time it takes to
> resample (about 344us with these settings and 4 sensors) also improves
> the rate.
>
> Lower all timing settings to the minimum, configure the filtering to
> single sample, and poll the measurement register for at least one period
> to improve the data validity on filtered mode. With these changes in
> place, out of 100000 reads, a single one failed, ie 99.999% of the data
> was valid.
--
Regards,
Alexandre
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] thermal/drivers/mediatek/lvts_thermal: Make readings valid in filtered mode
2023-07-13 15:42 [PATCH v2] thermal/drivers/mediatek/lvts_thermal: Make readings valid in filtered mode Nícolas F. R. A. Prado
` (2 preceding siblings ...)
2023-08-11 11:01 ` Alexandre Mergnat
@ 2023-08-16 10:21 ` Daniel Lezcano
3 siblings, 0 replies; 5+ messages in thread
From: Daniel Lezcano @ 2023-08-16 10:21 UTC (permalink / raw)
To: Nícolas F. R. A. Prado
Cc: kernel, AngeloGioacchino Del Regno, Chen-Yu Tsai,
Bernhard Rosenkränzer, Alexandre Mergnat, Amit Kucheria,
Balsam CHIHI, Matthias Brugger, Rafael J. Wysocki, Yangtao Li,
Zhang Rui, linux-arm-kernel, linux-kernel, linux-mediatek,
linux-pm
On 13/07/2023 17:42, Nícolas F. R. A. Prado wrote:
> Currently, when a controller is configured to use filtered mode, thermal
> readings are valid only about 30% of the time.
>
> Upon testing, it was noticed that lowering any of the interval settings
> resulted in an improved rate of valid data. The same was observed when
> decreasing the number of samples for each sensor (which also results in
> quicker measurements).
>
> Retrying the read with a timeout longer than the time it takes to
> resample (about 344us with these settings and 4 sensors) also improves
> the rate.
>
> Lower all timing settings to the minimum, configure the filtering to
> single sample, and poll the measurement register for at least one period
> to improve the data validity on filtered mode. With these changes in
> place, out of 100000 reads, a single one failed, ie 99.999% of the data
> was valid.
>
> Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
> Tested-by: Chen-Yu Tsai <wenst@chromium.org>
> Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
>
> ---
Applied, thanks
--
<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
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-08-16 10:22 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-13 15:42 [PATCH v2] thermal/drivers/mediatek/lvts_thermal: Make readings valid in filtered mode Nícolas F. R. A. Prado
2023-07-14 9:23 ` AngeloGioacchino Del Regno
2023-08-10 22:51 ` Nícolas F. R. A. Prado
2023-08-11 11:01 ` Alexandre Mergnat
2023-08-16 10:21 ` Daniel Lezcano
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).