Re: [PATCH/RFT v2 1/3] thermal: rcar_gen3_thermal: Update value of Tj_1

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Kaneko-san,

On Wed, Apr 17, 2019 at 02:44:13AM +0900, Yoshihiro Kaneko wrote:
> As evaluation of hardware team, temperature calculation formula
> of M3-W is difference from all other SoCs as below:
> - M3-W: Tj_1: 116 (so Tj_1 - Tj_3 = 157)
> - Others: Tj_1: 126 (so Tj_1 - Tj_3 = 167)
> 
> Signed-off-by: Yoshihiro Kaneko <ykaneko0929@xxxxxxxxx>
> ---
>  drivers/thermal/rcar_gen3_thermal.c | 41 +++++++++++++++++++++++++++----------
>  1 file changed, 30 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/thermal/rcar_gen3_thermal.c b/drivers/thermal/rcar_gen3_thermal.c
> index 88fa41c..a2fd0fd 100644
> --- a/drivers/thermal/rcar_gen3_thermal.c
> +++ b/drivers/thermal/rcar_gen3_thermal.c
> @@ -124,11 +124,11 @@ static inline void rcar_gen3_thermal_write(struct rcar_gen3_thermal_tsc *tsc,
>  #define RCAR3_THERMAL_GRAN 500 /* mili Celsius */
>  
>  /* no idea where these constants come from */
> -#define TJ_1 116
>  #define TJ_3 -41
>  
>  static void rcar_gen3_thermal_calc_coefs(struct equation_coefs *coef,
> -					 int *ptat, int *thcode)
> +					 int *ptat, int *thcode,
> +					 unsigned int ths_tj_1)

While testing I found that the type of ths_tj_1 needs to be int
rather than unsigned int, in order for the FIXPT logic to work correctly.

And with that change in place the entire series appears to work correctly.

My suggestion is to change the types of ths_tj_1 here, rcar_gen3_ths_tj_1
in rcar_gen3_thermal_probe(), and rcar_gen3_ths_tj_1 and
rcar_gen3_ths_tj_1_m3_w, which are gloabl to this file accordingly.

>  {
>  	int tj_2;
>  
> @@ -139,15 +139,15 @@ static void rcar_gen3_thermal_calc_coefs(struct equation_coefs *coef,
>  	 * the dividend (4095 * 4095 << 14 > INT_MAX) so keep it unscaled
>  	 */
>  	tj_2 = (FIXPT_INT((ptat[1] - ptat[2]) * 157)
> -		/ (ptat[0] - ptat[2])) - FIXPT_INT(41);
> +		/ (ptat[0] - ptat[2])) + FIXPT_INT(TJ_3);
>  
>  	coef->a1 = FIXPT_DIV(FIXPT_INT(thcode[1] - thcode[2]),
>  			     tj_2 - FIXPT_INT(TJ_3));
>  	coef->b1 = FIXPT_INT(thcode[2]) - coef->a1 * TJ_3;
>  
>  	coef->a2 = FIXPT_DIV(FIXPT_INT(thcode[1] - thcode[0]),
> -			     tj_2 - FIXPT_INT(TJ_1));
> -	coef->b2 = FIXPT_INT(thcode[0]) - coef->a2 * TJ_1;
> +			     tj_2 - FIXPT_INT(ths_tj_1));
> +	coef->b2 = FIXPT_INT(thcode[0]) - coef->a2 * ths_tj_1;
>  }
>  
>  static int rcar_gen3_thermal_round(int temp)
> @@ -318,12 +318,29 @@ static void rcar_gen3_thermal_init(struct rcar_gen3_thermal_tsc *tsc)
>  	usleep_range(1000, 2000);
>  }
>  
> +static const unsigned int rcar_gen3_ths_tj_1 = 126;
> +static const unsigned int rcar_gen3_ths_tj_1_m3_w = 116;
>  static const struct of_device_id rcar_gen3_thermal_dt_ids[] = {
> -	{ .compatible = "renesas,r8a774a1-thermal", },
> -	{ .compatible = "renesas,r8a7795-thermal", },
> -	{ .compatible = "renesas,r8a7796-thermal", },
> -	{ .compatible = "renesas,r8a77965-thermal", },
> -	{ .compatible = "renesas,r8a77980-thermal", },
> +	{
> +		.compatible = "renesas,r8a774a1-thermal",
> +		.data = &rcar_gen3_ths_tj_1_m3_w,
> +	},
> +	{
> +		.compatible = "renesas,r8a7795-thermal",
> +		.data = &rcar_gen3_ths_tj_1,
> +	},
> +	{
> +		.compatible = "renesas,r8a7796-thermal",
> +		.data = &rcar_gen3_ths_tj_1_m3_w,
> +	},
> +	{
> +		.compatible = "renesas,r8a77965-thermal",
> +		.data = &rcar_gen3_ths_tj_1,
> +	},
> +	{
> +		.compatible = "renesas,r8a77980-thermal",
> +		.data = &rcar_gen3_ths_tj_1,
> +	},
>  	{},
>  };
>  MODULE_DEVICE_TABLE(of, rcar_gen3_thermal_dt_ids);
> @@ -349,6 +366,7 @@ static int rcar_gen3_thermal_probe(struct platform_device *pdev)
>  {
>  	struct rcar_gen3_thermal_priv *priv;
>  	struct device *dev = &pdev->dev;
> +	const unsigned int *rcar_gen3_ths_tj_1 = of_device_get_match_data(dev);
>  	struct resource *res;
>  	struct thermal_zone_device *zone;
>  	int ret, irq, i;
> @@ -422,7 +440,8 @@ static int rcar_gen3_thermal_probe(struct platform_device *pdev)
>  		priv->tscs[i] = tsc;
>  
>  		priv->thermal_init(tsc);
> -		rcar_gen3_thermal_calc_coefs(&tsc->coef, ptat, thcode[i]);
> +		rcar_gen3_thermal_calc_coefs(&tsc->coef, ptat, thcode[i],
> +					     *rcar_gen3_ths_tj_1);
>  
>  		zone = devm_thermal_zone_of_sensor_register(dev, i, tsc,
>  							    &rcar_gen3_tz_of_ops);
> -- 
> 1.9.1
> 



[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux