All of lore.kernel.org
 help / color / mirror / Atom feed
From: Miquel RAYNAL <miquel.raynal@free-electrons.com>
To: Baruch Siach <baruch@tkos.co.il>
Cc: Zhang Rui <rui.zhang@intel.com>,
	Eduardo Valentin <edubezval@gmail.com>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	linux-pm@vger.kernel.org, devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
	Gregory Clement <gregory.clement@free-electrons.com>,
	Antoine Tenart <antoine.tenart@free-electrons.com>,
	Nadav Haklai <nadavh@marvell.com>,
	David Sniatkiwicz <davidsn@marvell.com>
Subject: Re: [PATCH v6 06/11] thermal: armada: Add support for Armada AP806
Date: Fri, 22 Dec 2017 11:49:48 +0100	[thread overview]
Message-ID: <20171222114948.32c36369@xps13> (raw)
In-Reply-To: <20171222101426.yujvg2xbca3ghpyc@tarshish>

Hi Baruch,

On Fri, 22 Dec 2017 12:14:26 +0200
Baruch Siach <baruch@tkos.co.il> wrote:

> Hi Miquèl,
> 
> On Fri, Dec 22, 2017 at 10:32:21AM +0100, Miquel Raynal wrote:
> > From: Baruch Siach <baruch@tkos.co.il>
> > 
> > The AP806 component is integrated in the Armada 8K and 7K lines of
> > processors.
> > 
> > The thermal sensor sample field on the status register is a signed
> > value. Extend armada_get_temp() and the driver structure to handle
> > signed values.
> > 
> > Signed-off-by: Baruch Siach <baruch@tkos.co.il>
> > [<miquel.raynal@free-electrons.com>: Changes when applying over the
> > previous patches, including the register names changes, also
> > switched the coefficients values to s64 instead of unsigned long to
> > deal with negative values and used do_div instead of the
> > traditionnal '/'] Signed-off-by: Miquel Raynal
> > <miquel.raynal@free-electrons.com> Reviewed-by: Gregory CLEMENT
> > <gregory.clement@free-electrons.com> Tested-by: Gregory CLEMENT
> > <gregory.clement@free-electrons.com> ---  
> 
> [..]
> 
> >  static int armada_get_temp(struct thermal_zone_device *thermal,
> > -			  int *temp)
> > +			   int *temperature)
> >  {
> >  	struct armada_thermal_priv *priv = thermal->devdata;
> > -	unsigned long reg;
> > -	unsigned long m, b, div;
> > +	u32 reg, div;
> > +	s64 sample, b, m;
> > +	u64 tmp;
> >  
> >  	/* Valid check */
> >  	if (priv->data->is_valid && !priv->data->is_valid(priv)) {
> > @@ -178,6 +197,11 @@ static int armada_get_temp(struct
> > thermal_zone_device *thermal, 
> >  	reg = readl_relaxed(priv->status);
> >  	reg = (reg >> priv->data->temp_shift) &
> > priv->data->temp_mask;
> > +	if (priv->data->signed_sample)
> > +		/* The most significant bit is the sign bit */
> > +		sample = sign_extend32(reg,
> > fls(priv->data->temp_mask) - 1);
> > +	else
> > +		sample = reg;
> >  
> >  	/* Get formula coeficients */
> >  	b = priv->data->coef_b;
> > @@ -185,9 +209,13 @@ static int armada_get_temp(struct
> > thermal_zone_device *thermal, div = priv->data->coef_div;
> >  
> >  	if (priv->data->inverted)
> > -		*temp = ((m * reg) - b) / div;
> > +		tmp = (m * sample) - b;
> >  	else
> > -		*temp = (b - (m * reg)) / div;
> > +		tmp = b - (m * sample);
> > +
> > +	do_div(tmp, div);
> > +	*temperature = (int)tmp;  
> 
> Nitpick: why not (untested)
> 
> #include <linux/math64.h>
> 
>   if (priv->data->inverted)
>     *temp = div_s64((m * sample) - b, div);
>   else
>     *temp = div_s64(b - (m * sample), div);

Indeed I could also use div_s64, but the result must be unsigned anyway.

But this does all the operations on the same line, maybe this is more
readable, I will update it and send (hopefully) the last version :)

Cheers,
Miquèl

> 
> baruch
> 
> > +
> >  	return 0;
> >  }  
> 



-- 
Miquel Raynal, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

WARNING: multiple messages have this Message-ID (diff)
From: miquel.raynal@free-electrons.com (Miquel RAYNAL)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v6 06/11] thermal: armada: Add support for Armada AP806
Date: Fri, 22 Dec 2017 11:49:48 +0100	[thread overview]
Message-ID: <20171222114948.32c36369@xps13> (raw)
In-Reply-To: <20171222101426.yujvg2xbca3ghpyc@tarshish>

Hi Baruch,

On Fri, 22 Dec 2017 12:14:26 +0200
Baruch Siach <baruch@tkos.co.il> wrote:

> Hi Miqu?l,
> 
> On Fri, Dec 22, 2017 at 10:32:21AM +0100, Miquel Raynal wrote:
> > From: Baruch Siach <baruch@tkos.co.il>
> > 
> > The AP806 component is integrated in the Armada 8K and 7K lines of
> > processors.
> > 
> > The thermal sensor sample field on the status register is a signed
> > value. Extend armada_get_temp() and the driver structure to handle
> > signed values.
> > 
> > Signed-off-by: Baruch Siach <baruch@tkos.co.il>
> > [<miquel.raynal@free-electrons.com>: Changes when applying over the
> > previous patches, including the register names changes, also
> > switched the coefficients values to s64 instead of unsigned long to
> > deal with negative values and used do_div instead of the
> > traditionnal '/'] Signed-off-by: Miquel Raynal
> > <miquel.raynal@free-electrons.com> Reviewed-by: Gregory CLEMENT
> > <gregory.clement@free-electrons.com> Tested-by: Gregory CLEMENT
> > <gregory.clement@free-electrons.com> ---  
> 
> [..]
> 
> >  static int armada_get_temp(struct thermal_zone_device *thermal,
> > -			  int *temp)
> > +			   int *temperature)
> >  {
> >  	struct armada_thermal_priv *priv = thermal->devdata;
> > -	unsigned long reg;
> > -	unsigned long m, b, div;
> > +	u32 reg, div;
> > +	s64 sample, b, m;
> > +	u64 tmp;
> >  
> >  	/* Valid check */
> >  	if (priv->data->is_valid && !priv->data->is_valid(priv)) {
> > @@ -178,6 +197,11 @@ static int armada_get_temp(struct
> > thermal_zone_device *thermal, 
> >  	reg = readl_relaxed(priv->status);
> >  	reg = (reg >> priv->data->temp_shift) &
> > priv->data->temp_mask;
> > +	if (priv->data->signed_sample)
> > +		/* The most significant bit is the sign bit */
> > +		sample = sign_extend32(reg,
> > fls(priv->data->temp_mask) - 1);
> > +	else
> > +		sample = reg;
> >  
> >  	/* Get formula coeficients */
> >  	b = priv->data->coef_b;
> > @@ -185,9 +209,13 @@ static int armada_get_temp(struct
> > thermal_zone_device *thermal, div = priv->data->coef_div;
> >  
> >  	if (priv->data->inverted)
> > -		*temp = ((m * reg) - b) / div;
> > +		tmp = (m * sample) - b;
> >  	else
> > -		*temp = (b - (m * reg)) / div;
> > +		tmp = b - (m * sample);
> > +
> > +	do_div(tmp, div);
> > +	*temperature = (int)tmp;  
> 
> Nitpick: why not (untested)
> 
> #include <linux/math64.h>
> 
>   if (priv->data->inverted)
>     *temp = div_s64((m * sample) - b, div);
>   else
>     *temp = div_s64(b - (m * sample), div);

Indeed I could also use div_s64, but the result must be unsigned anyway.

But this does all the operations on the same line, maybe this is more
readable, I will update it and send (hopefully) the last version :)

Cheers,
Miqu?l

> 
> baruch
> 
> > +
> >  	return 0;
> >  }  
> 



-- 
Miquel Raynal, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

  reply	other threads:[~2017-12-22 10:50 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-22  9:32 [PATCH v6 00/11] Armada thermal: improvements and A7K/A8K SoCs support Miquel Raynal
2017-12-22  9:32 ` Miquel Raynal
2017-12-22  9:32 ` [PATCH v6 02/11] thermal: armada: Use msleep for long delays Miquel Raynal
2017-12-22  9:32   ` Miquel Raynal
2017-12-22  9:32 ` [PATCH v6 04/11] thermal: armada: Clarify control registers accesses Miquel Raynal
2017-12-22  9:32   ` Miquel Raynal
     [not found]   ` <20171222093226.23456-5-miquel.raynal-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2017-12-22 15:33     ` Gregory CLEMENT
2017-12-22 15:33       ` Gregory CLEMENT
2017-12-22  9:32 ` [PATCH v6 05/11] thermal: armada: Use real status register name Miquel Raynal
2017-12-22  9:32   ` Miquel Raynal
2017-12-22  9:32 ` [PATCH v6 06/11] thermal: armada: Add support for Armada AP806 Miquel Raynal
2017-12-22  9:32   ` Miquel Raynal
     [not found]   ` <20171222093226.23456-7-miquel.raynal-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2017-12-22 10:14     ` Baruch Siach
2017-12-22 10:14       ` Baruch Siach
2017-12-22 10:49       ` Miquel RAYNAL [this message]
2017-12-22 10:49         ` Miquel RAYNAL
2017-12-22 11:03         ` Baruch Siach
2017-12-22 11:03           ` Baruch Siach
2017-12-22  9:32 ` [PATCH v6 07/11] thermal: armada: Add support for Armada CP110 Miquel Raynal
2017-12-22  9:32   ` Miquel Raynal
     [not found] ` <20171222093226.23456-1-miquel.raynal-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2017-12-22  9:32   ` [PATCH v6 01/11] dt-bindings: thermal: Describe Armada AP806 and CP110 Miquel Raynal
2017-12-22  9:32     ` Miquel Raynal
     [not found]     ` <20171222093226.23456-2-miquel.raynal-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2017-12-22  9:43       ` Miquel RAYNAL
2017-12-22  9:43         ` Miquel RAYNAL
2017-12-22  9:32   ` [PATCH v6 03/11] thermal: armada: Simplify the check of the validity bit Miquel Raynal
2017-12-22  9:32     ` Miquel Raynal
2017-12-22  9:32   ` [PATCH v6 08/11] thermal: armada: Update Kconfig and module description Miquel Raynal
2017-12-22  9:32     ` Miquel Raynal
2017-12-22  9:32   ` [PATCH v6 09/11] thermal: armada: Change sensors trim default value Miquel Raynal
2017-12-22  9:32     ` Miquel Raynal
2017-12-22  9:32   ` [PATCH v6 11/11] thermal: armada: Give meaningful names to the thermal zones Miquel Raynal
2017-12-22  9:32     ` Miquel Raynal
2017-12-22 15:36     ` Gregory CLEMENT
2017-12-22 15:36       ` Gregory CLEMENT
     [not found]       ` <873742epwb.fsf-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2017-12-22 15:51         ` Miquel RAYNAL
2017-12-22 15:51           ` Miquel RAYNAL
2017-12-22  9:32 ` [PATCH v6 10/11] thermal: armada: Wait sensors validity before exiting the init callback Miquel Raynal
2017-12-22  9:32   ` Miquel Raynal

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171222114948.32c36369@xps13 \
    --to=miquel.raynal@free-electrons.com \
    --cc=antoine.tenart@free-electrons.com \
    --cc=baruch@tkos.co.il \
    --cc=davidsn@marvell.com \
    --cc=devicetree@vger.kernel.org \
    --cc=edubezval@gmail.com \
    --cc=gregory.clement@free-electrons.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=nadavh@marvell.com \
    --cc=robh+dt@kernel.org \
    --cc=rui.zhang@intel.com \
    --cc=thomas.petazzoni@free-electrons.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.