All of lore.kernel.org
 help / color / mirror / Atom feed
* [thermal:next 43/50] drivers/thermal/qcom/tsens.c:385:13: warning: no previous prototype for function 'tsens_critical_irq_thread'
@ 2020-05-27 18:59 kbuild test robot
  0 siblings, 0 replies; only message in thread
From: kbuild test robot @ 2020-05-27 18:59 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 10520 bytes --]

tree:   thermal/next
head:   4d14235baa2b4aa64aed40805dd3db47dbc6f3b3
commit: a7ff82976122eb6d1fd286dc34f09b6ecd756b60 [43/50] drivers: thermal: tsens: Merge tsens-common.c into tsens.c
config: x86_64-allyesconfig (attached as .config)
compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project 3393cc4cebf9969db94dc424b7a2b6195589c33b)
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 x86_64 cross compiling tool for clang build
        # apt-get install binutils-x86-64-linux-gnu
        git checkout a7ff82976122eb6d1fd286dc34f09b6ecd756b60
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>

All warnings (new ones prefixed by >>, old ones prefixed by <<):

>> drivers/thermal/qcom/tsens.c:385:13: warning: no previous prototype for function 'tsens_critical_irq_thread' [-Wmissing-prototypes]
irqreturn_t tsens_critical_irq_thread(int irq, void *data)
^
drivers/thermal/qcom/tsens.c:385:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
irqreturn_t tsens_critical_irq_thread(int irq, void *data)
^
static
>> drivers/thermal/qcom/tsens.c:455:13: warning: no previous prototype for function 'tsens_irq_thread' [-Wmissing-prototypes]
irqreturn_t tsens_irq_thread(int irq, void *data)
^
drivers/thermal/qcom/tsens.c:455:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
irqreturn_t tsens_irq_thread(int irq, void *data)
^
static
>> drivers/thermal/qcom/tsens.c:523:5: warning: no previous prototype for function 'tsens_set_trips' [-Wmissing-prototypes]
int tsens_set_trips(void *_sensor, int low, int high)
^
drivers/thermal/qcom/tsens.c:523:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int tsens_set_trips(void *_sensor, int low, int high)
^
static
>> drivers/thermal/qcom/tsens.c:560:5: warning: no previous prototype for function 'tsens_enable_irq' [-Wmissing-prototypes]
int tsens_enable_irq(struct tsens_priv *priv)
^
drivers/thermal/qcom/tsens.c:560:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int tsens_enable_irq(struct tsens_priv *priv)
^
static
>> drivers/thermal/qcom/tsens.c:573:6: warning: no previous prototype for function 'tsens_disable_irq' [-Wmissing-prototypes]
void tsens_disable_irq(struct tsens_priv *priv)
^
drivers/thermal/qcom/tsens.c:573:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
void tsens_disable_irq(struct tsens_priv *priv)
^
static
5 warnings generated.

vim +/tsens_critical_irq_thread +385 drivers/thermal/qcom/tsens.c

   369	
   370	/**
   371	 * tsens_critical_irq_thread() - Threaded handler for critical interrupts
   372	 * @irq: irq number
   373	 * @data: tsens controller private data
   374	 *
   375	 * Check FSM watchdog bark status and clear if needed.
   376	 * Check all sensors to find ones that violated their critical threshold limits.
   377	 * Clear and then re-enable the interrupt.
   378	 *
   379	 * The level-triggered interrupt might deassert if the temperature returned to
   380	 * within the threshold limits by the time the handler got scheduled. We
   381	 * consider the irq to have been handled in that case.
   382	 *
   383	 * Return: IRQ_HANDLED
   384	 */
 > 385	irqreturn_t tsens_critical_irq_thread(int irq, void *data)
   386	{
   387		struct tsens_priv *priv = data;
   388		struct tsens_irq_data d;
   389		int temp, ret, i;
   390		u32 wdog_status, wdog_count;
   391	
   392		if (priv->feat->has_watchdog) {
   393			ret = regmap_field_read(priv->rf[WDOG_BARK_STATUS],
   394						&wdog_status);
   395			if (ret)
   396				return ret;
   397	
   398			if (wdog_status) {
   399				/* Clear WDOG interrupt */
   400				regmap_field_write(priv->rf[WDOG_BARK_CLEAR], 1);
   401				regmap_field_write(priv->rf[WDOG_BARK_CLEAR], 0);
   402				ret = regmap_field_read(priv->rf[WDOG_BARK_COUNT],
   403							&wdog_count);
   404				if (ret)
   405					return ret;
   406				if (wdog_count)
   407					dev_dbg(priv->dev, "%s: watchdog count: %d\n",
   408						__func__, wdog_count);
   409	
   410				/* Fall through to handle critical interrupts if any */
   411			}
   412		}
   413	
   414		for (i = 0; i < priv->num_sensors; i++) {
   415			const struct tsens_sensor *s = &priv->sensor[i];
   416			u32 hw_id = s->hw_id;
   417	
   418			if (IS_ERR(s->tzd))
   419				continue;
   420			if (!tsens_threshold_violated(priv, hw_id, &d))
   421				continue;
   422			ret = get_temp_tsens_valid(s, &temp);
   423			if (ret) {
   424				dev_err(priv->dev, "[%u] %s: error reading sensor\n",
   425					hw_id, __func__);
   426				continue;
   427			}
   428	
   429			tsens_read_irq_state(priv, hw_id, s, &d);
   430			if (d.crit_viol &&
   431			    !masked_irq(hw_id, d.crit_irq_mask, tsens_version(priv))) {
   432				/* Mask critical interrupts, unused on Linux */
   433				tsens_set_interrupt(priv, hw_id, CRITICAL, false);
   434			}
   435		}
   436	
   437		return IRQ_HANDLED;
   438	}
   439	
   440	/**
   441	 * tsens_irq_thread - Threaded interrupt handler for uplow interrupts
   442	 * @irq: irq number
   443	 * @data: tsens controller private data
   444	 *
   445	 * Check all sensors to find ones that violated their threshold limits. If the
   446	 * temperature is still outside the limits, call thermal_zone_device_update() to
   447	 * update the thresholds, else re-enable the interrupts.
   448	 *
   449	 * The level-triggered interrupt might deassert if the temperature returned to
   450	 * within the threshold limits by the time the handler got scheduled. We
   451	 * consider the irq to have been handled in that case.
   452	 *
   453	 * Return: IRQ_HANDLED
   454	 */
 > 455	irqreturn_t tsens_irq_thread(int irq, void *data)
   456	{
   457		struct tsens_priv *priv = data;
   458		struct tsens_irq_data d;
   459		bool enable = true, disable = false;
   460		unsigned long flags;
   461		int temp, ret, i;
   462	
   463		for (i = 0; i < priv->num_sensors; i++) {
   464			bool trigger = false;
   465			const struct tsens_sensor *s = &priv->sensor[i];
   466			u32 hw_id = s->hw_id;
   467	
   468			if (IS_ERR(s->tzd))
   469				continue;
   470			if (!tsens_threshold_violated(priv, hw_id, &d))
   471				continue;
   472			ret = get_temp_tsens_valid(s, &temp);
   473			if (ret) {
   474				dev_err(priv->dev, "[%u] %s: error reading sensor\n",
   475					hw_id, __func__);
   476				continue;
   477			}
   478	
   479			spin_lock_irqsave(&priv->ul_lock, flags);
   480	
   481			tsens_read_irq_state(priv, hw_id, s, &d);
   482	
   483			if (d.up_viol &&
   484			    !masked_irq(hw_id, d.up_irq_mask, tsens_version(priv))) {
   485				tsens_set_interrupt(priv, hw_id, UPPER, disable);
   486				if (d.up_thresh > temp) {
   487					dev_dbg(priv->dev, "[%u] %s: re-arm upper\n",
   488						hw_id, __func__);
   489					tsens_set_interrupt(priv, hw_id, UPPER, enable);
   490				} else {
   491					trigger = true;
   492					/* Keep irq masked */
   493				}
   494			} else if (d.low_viol &&
   495				   !masked_irq(hw_id, d.low_irq_mask, tsens_version(priv))) {
   496				tsens_set_interrupt(priv, hw_id, LOWER, disable);
   497				if (d.low_thresh < temp) {
   498					dev_dbg(priv->dev, "[%u] %s: re-arm low\n",
   499						hw_id, __func__);
   500					tsens_set_interrupt(priv, hw_id, LOWER, enable);
   501				} else {
   502					trigger = true;
   503					/* Keep irq masked */
   504				}
   505			}
   506	
   507			spin_unlock_irqrestore(&priv->ul_lock, flags);
   508	
   509			if (trigger) {
   510				dev_dbg(priv->dev, "[%u] %s: TZ update trigger (%d mC)\n",
   511					hw_id, __func__, temp);
   512				thermal_zone_device_update(s->tzd,
   513							   THERMAL_EVENT_UNSPECIFIED);
   514			} else {
   515				dev_dbg(priv->dev, "[%u] %s: no violation:  %d\n",
   516					hw_id, __func__, temp);
   517			}
   518		}
   519	
   520		return IRQ_HANDLED;
   521	}
   522	
 > 523	int tsens_set_trips(void *_sensor, int low, int high)
   524	{
   525		struct tsens_sensor *s = _sensor;
   526		struct tsens_priv *priv = s->priv;
   527		struct device *dev = priv->dev;
   528		struct tsens_irq_data d;
   529		unsigned long flags;
   530		int high_val, low_val, cl_high, cl_low;
   531		u32 hw_id = s->hw_id;
   532	
   533		dev_dbg(dev, "[%u] %s: proposed thresholds: (%d:%d)\n",
   534			hw_id, __func__, low, high);
   535	
   536		cl_high = clamp_val(high, -40000, 120000);
   537		cl_low  = clamp_val(low, -40000, 120000);
   538	
   539		high_val = tsens_mC_to_hw(s, cl_high);
   540		low_val  = tsens_mC_to_hw(s, cl_low);
   541	
   542		spin_lock_irqsave(&priv->ul_lock, flags);
   543	
   544		tsens_read_irq_state(priv, hw_id, s, &d);
   545	
   546		/* Write the new thresholds and clear the status */
   547		regmap_field_write(priv->rf[LOW_THRESH_0 + hw_id], low_val);
   548		regmap_field_write(priv->rf[UP_THRESH_0 + hw_id], high_val);
   549		tsens_set_interrupt(priv, hw_id, LOWER, true);
   550		tsens_set_interrupt(priv, hw_id, UPPER, true);
   551	
   552		spin_unlock_irqrestore(&priv->ul_lock, flags);
   553	
   554		dev_dbg(dev, "[%u] %s: (%d:%d)->(%d:%d)\n",
   555			hw_id, __func__, d.low_thresh, d.up_thresh, cl_low, cl_high);
   556	
   557		return 0;
   558	}
   559	
 > 560	int tsens_enable_irq(struct tsens_priv *priv)
   561	{
   562		int ret;
   563		int val = tsens_version(priv) > VER_1_X ? 7 : 1;
   564	
   565		ret = regmap_field_write(priv->rf[INT_EN], val);
   566		if (ret < 0)
   567			dev_err(priv->dev, "%s: failed to enable interrupts\n",
   568				__func__);
   569	
   570		return ret;
   571	}
   572	
 > 573	void tsens_disable_irq(struct tsens_priv *priv)
   574	{
   575		regmap_field_write(priv->rf[INT_EN], 0);
   576	}
   577	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 73453 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-05-27 18:59 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-27 18:59 [thermal:next 43/50] drivers/thermal/qcom/tsens.c:385:13: warning: no previous prototype for function 'tsens_critical_irq_thread' kbuild test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.