If the critical trip point of the thermal zone is higher than
the max threshold of the PMIC log the actual max threshold of the
chip, not the gen1 max threshold of 140°C.
Reported-by: Luca Weiss <[email protected]>
Signed-off-by: Matthias Kaehlcke <[email protected]>
---
drivers/thermal/qcom/qcom-spmi-temp-alarm.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/thermal/qcom/qcom-spmi-temp-alarm.c b/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
index be785ab37e53..bdfe2129c357 100644
--- a/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
+++ b/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
@@ -252,7 +252,8 @@ static int qpnp_tm_update_critical_trip_temp(struct qpnp_tm_chip *chip,
disable_s2_shutdown = true;
else
dev_warn(chip->dev,
- "No ADC is configured and critical temperature is above the maximum stage 2 threshold of 140 C! Configuring stage 2 shutdown at 140 C.\n");
+ "No ADC is configured and critical temperature is above the maximum stage 2 threshold of %d C! Configuring stage 2 shutdown at %d C.\n",
+ stage2_threshold_max / 1000, stage2_threshold_max / 1000);
}
skip:
--
2.38.0.135.g90850a2211-goog
Hi Matthias,
I love your patch! Perhaps something to improve:
[auto build test WARNING on rafael-pm/thermal]
[also build test WARNING on linus/master v6.1-rc2 next-20221025]
[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#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Matthias-Kaehlcke/thermal-qcom-spmi-temp-alarm-Log-the-actual-max-stage-2-threshold/20221026-011708
base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git thermal
patch link: https://lore.kernel.org/r/20221025171453.1.I13c2a23f276fb63bfc225aeab0bf0db9560a90e0%40changeid
patch subject: [PATCH] thermal: qcom-spmi-temp-alarm: Log the actual max stage 2 threshold
config: ia64-allyesconfig (attached as .config)
compiler: ia64-linux-gcc (GCC) 12.1.0
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/86a0353247304d74e41de39b136e1772550048bf
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Matthias-Kaehlcke/thermal-qcom-spmi-temp-alarm-Log-the-actual-max-stage-2-threshold/20221026-011708
git checkout 86a0353247304d74e41de39b136e1772550048bf
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=ia64 SHELL=/bin/bash drivers/thermal/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <[email protected]>
All warnings (new ones prefixed by >>):
In file included from include/linux/device.h:15,
from include/linux/node.h:18,
from include/linux/cpu.h:17,
from include/linux/of_device.h:5,
from drivers/thermal/qcom/qcom-spmi-temp-alarm.c:13:
drivers/thermal/qcom/qcom-spmi-temp-alarm.c: In function 'qpnp_tm_update_critical_trip_temp':
>> drivers/thermal/qcom/qcom-spmi-temp-alarm.c:255:34: warning: format '%d' expects argument of type 'int', but argument 3 has type 'long int' [-Wformat=]
255 | "No ADC is configured and critical temperature is above the maximum stage 2 threshold of %d C! Configuring stage 2 shutdown at %d C.\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:110:30: note: in definition of macro 'dev_printk_index_wrap'
110 | _p_func(dev, fmt, ##__VA_ARGS__); \
| ^~~
include/linux/dev_printk.h:146:61: note: in expansion of macro 'dev_fmt'
146 | dev_printk_index_wrap(_dev_warn, KERN_WARNING, dev, dev_fmt(fmt), ##__VA_ARGS__)
| ^~~~~~~
drivers/thermal/qcom/qcom-spmi-temp-alarm.c:254:25: note: in expansion of macro 'dev_warn'
254 | dev_warn(chip->dev,
| ^~~~~~~~
drivers/thermal/qcom/qcom-spmi-temp-alarm.c:255:117: note: format string is defined here
255 | "No ADC is configured and critical temperature is above the maximum stage 2 threshold of %d C! Configuring stage 2 shutdown at %d C.\n",
| ~^
| |
| int
| old
drivers/thermal/qcom/qcom-spmi-temp-alarm.c:255:34: warning: format '%d' expects argument of type 'int', but argument 4 has type 'long int' [-Wformat=]
255 | "No ADC is configured and critical temperature is above the maximum stage 2 threshold of %d C! Configuring stage 2 shutdown at %d C.\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:110:30: note: in definition of macro 'dev_printk_index_wrap'
110 | _p_func(dev, fmt, ##__VA_ARGS__); \
| ^~~
include/linux/dev_printk.h:146:61: note: in expansion of macro 'dev_fmt'
146 | dev_printk_index_wrap(_dev_warn, KERN_WARNING, dev, dev_fmt(fmt), ##__VA_ARGS__)
| ^~~~~~~
drivers/thermal/qcom/qcom-spmi-temp-alarm.c:254:25: note: in expansion of macro 'dev_warn'
254 | dev_warn(chip->dev,
| ^~~~~~~~
drivers/thermal/qcom/qcom-spmi-temp-alarm.c:255:155: note: format string is defined here
255 | "No ADC is configured and critical temperature is above the maximum stage 2 threshold of %d C! Configuring stage 2 shutdown at %d C.\n",
| ~^
| |
| int
| old
vim +255 drivers/thermal/qcom/qcom-spmi-temp-alarm.c
220
221 static int qpnp_tm_update_critical_trip_temp(struct qpnp_tm_chip *chip,
222 int temp)
223 {
224 long stage2_threshold_min = (*chip->temp_map)[THRESH_MIN][1];
225 long stage2_threshold_max = (*chip->temp_map)[THRESH_MAX][1];
226 bool disable_s2_shutdown = false;
227 u8 reg;
228
229 WARN_ON(!mutex_is_locked(&chip->lock));
230
231 /*
232 * Default: S2 and S3 shutdown enabled, thresholds at
233 * lowest threshold set, monitoring at 25Hz
234 */
235 reg = SHUTDOWN_CTRL1_RATE_25HZ;
236
237 if (temp == THERMAL_TEMP_INVALID ||
238 temp < stage2_threshold_min) {
239 chip->thresh = THRESH_MIN;
240 goto skip;
241 }
242
243 if (temp <= stage2_threshold_max) {
244 chip->thresh = THRESH_MAX -
245 ((stage2_threshold_max - temp) /
246 TEMP_THRESH_STEP);
247 disable_s2_shutdown = true;
248 } else {
249 chip->thresh = THRESH_MAX;
250
251 if (chip->adc)
252 disable_s2_shutdown = true;
253 else
254 dev_warn(chip->dev,
> 255 "No ADC is configured and critical temperature is above the maximum stage 2 threshold of %d C! Configuring stage 2 shutdown at %d C.\n",
256 stage2_threshold_max / 1000, stage2_threshold_max / 1000);
257 }
258
259 skip:
260 reg |= chip->thresh;
261 if (disable_s2_shutdown)
262 reg |= SHUTDOWN_CTRL1_OVERRIDE_S2;
263
264 return qpnp_tm_write(chip, QPNP_TM_REG_SHUTDOWN_CTRL1, reg);
265 }
266
--
0-DAY CI Kernel Test Service
https://01.org/lkp
I just saw that Luca already posted a similar patch:
https://lore.kernel.org/lkml/CAHLCerN+-5qKsRmpuF55RdeUMZJZuiZJ-7O4LnM8+QuHJfs0mQ@mail.gmail.com/T/
Please disregard this one.
On Tue, Oct 25, 2022 at 05:15:08PM +0000, Matthias Kaehlcke wrote:
> If the critical trip point of the thermal zone is higher than
> the max threshold of the PMIC log the actual max threshold of the
> chip, not the gen1 max threshold of 140°C.
>
> Reported-by: Luca Weiss <[email protected]>
> Signed-off-by: Matthias Kaehlcke <[email protected]>
> ---
>
> drivers/thermal/qcom/qcom-spmi-temp-alarm.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/thermal/qcom/qcom-spmi-temp-alarm.c b/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
> index be785ab37e53..bdfe2129c357 100644
> --- a/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
> +++ b/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
> @@ -252,7 +252,8 @@ static int qpnp_tm_update_critical_trip_temp(struct qpnp_tm_chip *chip,
> disable_s2_shutdown = true;
> else
> dev_warn(chip->dev,
> - "No ADC is configured and critical temperature is above the maximum stage 2 threshold of 140 C! Configuring stage 2 shutdown at 140 C.\n");
> + "No ADC is configured and critical temperature is above the maximum stage 2 threshold of %d C! Configuring stage 2 shutdown at %d C.\n",
> + stage2_threshold_max / 1000, stage2_threshold_max / 1000);
> }
>
> skip:
> --
> 2.38.0.135.g90850a2211-goog
>
Hi Matthias,
I love your patch! Perhaps something to improve:
[auto build test WARNING on rafael-pm/thermal]
[also build test WARNING on linus/master v6.1-rc2 next-20221027]
[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#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Matthias-Kaehlcke/thermal-qcom-spmi-temp-alarm-Log-the-actual-max-stage-2-threshold/20221026-011708
base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git thermal
patch link: https://lore.kernel.org/r/20221025171453.1.I13c2a23f276fb63bfc225aeab0bf0db9560a90e0%40changeid
patch subject: [PATCH] thermal: qcom-spmi-temp-alarm: Log the actual max stage 2 threshold
config: arm64-randconfig-r015-20221027
compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 791a7ae1ba3efd6bca96338e10ffde557ba83920)
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
# install arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# https://github.com/intel-lab-lkp/linux/commit/86a0353247304d74e41de39b136e1772550048bf
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Matthias-Kaehlcke/thermal-qcom-spmi-temp-alarm-Log-the-actual-max-stage-2-threshold/20221026-011708
git checkout 86a0353247304d74e41de39b136e1772550048bf
# 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=arm64 SHELL=/bin/bash drivers/hid/ drivers/thermal/qcom/ fs/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <[email protected]>
All warnings (new ones prefixed by >>):
>> drivers/thermal/qcom/qcom-spmi-temp-alarm.c:256:6: warning: format specifies type 'int' but the argument has type 'long' [-Wformat]
stage2_threshold_max / 1000, stage2_threshold_max / 1000);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:146:70: note: expanded from macro 'dev_warn'
dev_printk_index_wrap(_dev_warn, KERN_WARNING, dev, dev_fmt(fmt), ##__VA_ARGS__)
~~~ ^~~~~~~~~~~
include/linux/dev_printk.h:110:23: note: expanded from macro 'dev_printk_index_wrap'
_p_func(dev, fmt, ##__VA_ARGS__); \
~~~ ^~~~~~~~~~~
drivers/thermal/qcom/qcom-spmi-temp-alarm.c:256:35: warning: format specifies type 'int' but the argument has type 'long' [-Wformat]
stage2_threshold_max / 1000, stage2_threshold_max / 1000);
^~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dev_printk.h:146:70: note: expanded from macro 'dev_warn'
dev_printk_index_wrap(_dev_warn, KERN_WARNING, dev, dev_fmt(fmt), ##__VA_ARGS__)
~~~ ^~~~~~~~~~~
include/linux/dev_printk.h:110:23: note: expanded from macro 'dev_printk_index_wrap'
_p_func(dev, fmt, ##__VA_ARGS__); \
~~~ ^~~~~~~~~~~
2 warnings generated.
vim +256 drivers/thermal/qcom/qcom-spmi-temp-alarm.c
220
221 static int qpnp_tm_update_critical_trip_temp(struct qpnp_tm_chip *chip,
222 int temp)
223 {
224 long stage2_threshold_min = (*chip->temp_map)[THRESH_MIN][1];
225 long stage2_threshold_max = (*chip->temp_map)[THRESH_MAX][1];
226 bool disable_s2_shutdown = false;
227 u8 reg;
228
229 WARN_ON(!mutex_is_locked(&chip->lock));
230
231 /*
232 * Default: S2 and S3 shutdown enabled, thresholds at
233 * lowest threshold set, monitoring at 25Hz
234 */
235 reg = SHUTDOWN_CTRL1_RATE_25HZ;
236
237 if (temp == THERMAL_TEMP_INVALID ||
238 temp < stage2_threshold_min) {
239 chip->thresh = THRESH_MIN;
240 goto skip;
241 }
242
243 if (temp <= stage2_threshold_max) {
244 chip->thresh = THRESH_MAX -
245 ((stage2_threshold_max - temp) /
246 TEMP_THRESH_STEP);
247 disable_s2_shutdown = true;
248 } else {
249 chip->thresh = THRESH_MAX;
250
251 if (chip->adc)
252 disable_s2_shutdown = true;
253 else
254 dev_warn(chip->dev,
255 "No ADC is configured and critical temperature is above the maximum stage 2 threshold of %d C! Configuring stage 2 shutdown at %d C.\n",
> 256 stage2_threshold_max / 1000, stage2_threshold_max / 1000);
257 }
258
259 skip:
260 reg |= chip->thresh;
261 if (disable_s2_shutdown)
262 reg |= SHUTDOWN_CTRL1_OVERRIDE_S2;
263
264 return qpnp_tm_write(chip, QPNP_TM_REG_SHUTDOWN_CTRL1, reg);
265 }
266
--
0-DAY CI Kernel Test Service
https://01.org/lkp