From: Eduardo Valentin <edubezval@gmail.com>
To: Mason <slash.tmp@free.fr>
Cc: linux-pm <linux-pm@vger.kernel.org>,
Zhang Rui <rui.zhang@intel.com>,
Javi Merino <javi.merino@arm.com>,
Viresh Kumar <viresh.kumar@linaro.org>,
Sebastian Frias <sf84@laposte.net>
Subject: Re: [PATCH v7] thermal: add temperature sensor support for tango SoC
Date: Wed, 6 Apr 2016 08:48:25 -0700 [thread overview]
Message-ID: <20160406154823.GA326@localhost.localdomain> (raw)
In-Reply-To: <5703D28E.4040805@free.fr>
Hello Mason,
On Tue, Apr 05, 2016 at 04:58:22PM +0200, Mason wrote:
> On 04/04/2016 13:49, Mason wrote:
>
> > +static bool temp_above_thresh(void __iomem *base, int thresh_idx)
> > +{
> > + writel(CMD_READ | thresh_idx << 8, base + TEMPSI_CMD);
> > + usleep_range(10, 20);
> > + return readl(base + TEMPSI_RES);
> > +}
>
> A colleague suggested a tweak for temp_above_thresh() which does not
> require messing with TEMPSI_CFG => v8 required.
OK.
>
> > +static int tango_thermal_probe(struct platform_device *pdev)
> > +{
> > + struct resource *res;
> > + struct tango_thermal_priv *priv;
> > +
> > + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
> > + if (!priv)
> > + return -ENOMEM;
> > +
> > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> > + priv->base = devm_ioremap_resource(&pdev->dev, res);
> > + if (IS_ERR(priv->base))
> > + return PTR_ERR(priv->base);
> > +
> > + writel(CMD_ON, priv->base + TEMPSI_CMD);
> > + writel(CYCLE_COUNT, priv->base + TEMPSI_CFG);
> > +
> > + priv->zone = thermal_zone_of_sensor_register(&pdev->dev, 0, priv, &ops);
> > + if (IS_ERR(priv->zone))
> > + return PTR_ERR(priv->zone);
> > +
> > + priv->thresh_idx = IDX_MIN;
> > + platform_set_drvdata(pdev, priv);
> > +
> > + return 0;
> > +}
>
> It seems tango_get_temp() is called (at least once) before the end of tango_thermal_probe()
>
> Does that mean that the device must be fully initialized *BEFORE*
> thermal_zone_of_sensor_register() is called?
> (I assume it's that function that triggers the call to get_temp)
>
> In that case, I need to move priv->thresh_idx = IDX_MIN; earlier.
>
This is correct understanding. The driver is expected to be ready to
answer any of the .ops calls during the registration. Specially if you
have cooling devices that may be bound to the thermal zone, then you
would have more than one calls.
With that said, I would suggest to move the line
+ priv->thresh_idx = IDX_MIN;
up, yes.
>
> Also, can get_temp() be called concurrently?
> For example, from user-space reading /sys/class/thermal/thermal_zone0/temp
> and from the kernel thread polling the sensor?
> Is locking taken care of in higher levels?
Yes, .get_temp() is called under tz->lock, in both cases, sysfs and
thread polling. Of course, if you have extra data used in other context
that thermal core cannot see, than you would need extra locking. But if
you are only using your data in .get_temp(), which seams the case for
you, I would not see a need for an extra lock.
>
>
> For the record, I test the driver with the following script.
> Is it good enough?
>
> TEMP="/sys/class/thermal/thermal_zone0/temp"
>
> echo RUN IDLE
> for ((I=0; I<30; ++I)); do cat $TEMP; sleep 2; done
>
> echo RUN HEAVY LOAD
> cpuburn-a9 &
> cpuburn-a9 &
> for ((I=0; I<60; ++I)); do cat $TEMP; sleep 2; done
>
> echo KILL HEAVY LOAD
> kill $(jobs -p)
> for ((I=0; I<30; ++I)); do cat $TEMP; sleep 2; done
Well, for temperature testing, that should be enough to see if driver is
returning temperature.
As for the temperature value validation, you would
probably need to instrument your setup with either thermal couples or ir
sensing to make sure your driver is reporting correct values.
Apart from temperature testing, do you have any cooling device registered in your system?
Do you see cooling taking action?
>
>
> Regards.
>
next prev parent reply other threads:[~2016-04-06 15:48 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-01 16:49 [RFC] Temperature sensor driver (tango) Mason
2016-03-04 15:52 ` [PATCH v2] thermal: add temperature sensor support for tango SoC Mason
2016-03-08 21:48 ` Eduardo Valentin
2016-03-21 10:31 ` Mason
2016-03-24 12:18 ` [PATCH v3] " Mason
2016-03-24 17:56 ` Mason
2016-03-27 20:35 ` [PATCH v4] " Mason
2016-03-28 11:49 ` [PATCH v5] " Mason
2016-03-29 2:00 ` Eduardo Valentin
2016-03-29 18:48 ` Mason
2016-03-30 0:05 ` Eduardo Valentin
2016-03-30 15:18 ` Mason
2016-03-31 20:16 ` [PATCH v6] " Mason
2016-04-01 1:52 ` Eduardo Valentin
2016-04-04 11:48 ` Mason
2016-04-04 11:49 ` [PATCH v7] " Mason
2016-04-05 2:05 ` Eduardo Valentin
2016-04-05 14:58 ` Mason
2016-04-06 15:48 ` Eduardo Valentin [this message]
2016-04-06 15:51 ` Eduardo Valentin
2016-04-13 20:28 ` Mason
2016-04-19 14:21 ` [PATCH v8 1/2] " Mason
2016-04-19 14:49 ` Mason
2016-04-19 14:32 ` [PATCH v8 2/2] ARM: dts: tango4: Initial thermal support Mason
2016-04-20 22:45 ` Eduardo Valentin
2016-04-01 1:48 ` [PATCH v5] thermal: add temperature sensor support for tango SoC Eduardo Valentin
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=20160406154823.GA326@localhost.localdomain \
--to=edubezval@gmail.com \
--cc=javi.merino@arm.com \
--cc=linux-pm@vger.kernel.org \
--cc=rui.zhang@intel.com \
--cc=sf84@laposte.net \
--cc=slash.tmp@free.fr \
--cc=viresh.kumar@linaro.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).