thermal: qcom-spmi-temp-alarm: Log the actual max stage 2 threshold

Message ID 20221025171453.1.I13c2a23f276fb63bfc225aeab0bf0db9560a90e0@changeid
State New
Headers
Series thermal: qcom-spmi-temp-alarm: Log the actual max stage 2 threshold |

Commit Message

Matthias Kaehlcke Oct. 25, 2022, 5:15 p.m. UTC
  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 <luca.weiss@fairphone.com>
Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
---

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

Comments

kernel test robot Oct. 25, 2022, 8:10 p.m. UTC | #1
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 <lkp@intel.com>

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
  
Matthias Kaehlcke Oct. 25, 2022, 9:33 p.m. UTC | #2
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 <luca.weiss@fairphone.com>
> Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
> ---
> 
>  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
>
  
kernel test robot Oct. 28, 2022, 12:52 a.m. UTC | #3
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 <lkp@intel.com>

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
  

Patch

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: