From: Thierry Reding <thierry.reding@gmail.com>
To: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Wei Ni <wni@nvidia.com>, "Rafael J. Wysocki" <rafael@kernel.org>,
Jon Hunter <jonathanh@nvidia.com>,
Johan Hovold <johan@kernel.org>,
Philipp Zabel <p.zabel@pengutronix.de>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
"linux-tegra@vger.kernel.org" <linux-tegra@vger.kernel.org>,
Linux PM mailing list <linux-pm@vger.kernel.org>
Subject: Re: thermal/drivers/tegra: Getting rid of the get_thermal_instance() usage
Date: Tue, 7 Feb 2023 15:27:12 +0100 [thread overview]
Message-ID: <Y+JfwM0O/0ZjMHua@orome> (raw)
In-Reply-To: <e6b4c6a9-0e35-e3b2-c8e8-01e5326bdba1@linaro.org>
[-- Attachment #1: Type: text/plain, Size: 6519 bytes --]
On Tue, Feb 07, 2023 at 01:38:08PM +0100, Daniel Lezcano wrote:
> On 07/02/2023 13:18, Thierry Reding wrote:
> > On Mon, Feb 06, 2023 at 03:50:22PM +0100, Daniel Lezcano wrote:
> > >
> > > Hi Thierry,
> > >
> > > did you have the time to look at the get_thermal_instance() removal ?
> > >
> > >
> > > On 26/01/2023 13:55, Thierry Reding wrote:
> > >
> > > > [ 12.354091] tegra_soctherm 700e2000.thermal-sensor: missing thermtrips, will use critical trips as shut down temp
> > > > [ 12.379009] tegra_soctherm 700e2000.thermal-sensor: thermtrip: will shut down when cpu reaches 102500 mC
> > > > [ 12.388882] tegra_soctherm 700e2000.thermal-sensor: programming throttle for cpu to 102500
> > > > [ 12.401007] tegra_soctherm 700e2000.thermal-sensor: throttrip: will throttle when cpu reaches 102500 mC
> > > > [ 12.471041] tegra_soctherm 700e2000.thermal-sensor: thermtrip: will shut down when gpu reaches 103000 mC
> > > > [ 12.482852] tegra_soctherm 700e2000.thermal-sensor: programming throttle for gpu to 103000
> > > > [ 12.482860] tegra_soctherm 700e2000.thermal-sensor: throttrip: will throttle when gpu reaches 103000 mC
> > > > [ 12.485357] tegra_soctherm 700e2000.thermal-sensor: thermtrip: will shut down when pll reaches 103000 mC
> > > > [ 12.501774] tegra_soctherm 700e2000.thermal-sensor: thermtrip: will shut down when mem reaches 103000 mC
> > > >
> > > > and after these changes, it turns into:
> > > >
> > > > [ 12.447113] tegra_soctherm 700e2000.thermal-sensor: missing thermtrips, will use critical trips as shut down temp
> > > > [ 12.472300] tegra_soctherm 700e2000.thermal-sensor: thermtrip: will shut down when cpu reaches 102500 mC
> > > > [ 12.481789] tegra_soctherm 700e2000.thermal-sensor: programming throttle for cpu to 102500
> > > > [ 12.495447] tegra_soctherm 700e2000.thermal-sensor: throttrip: will throttle when cpu reaches 102500 mC
> > > > [ 12.496514] tegra_soctherm 700e2000.thermal-sensor: thermtrip: will shut down when gpu reaches 103000 mC
> > > > [ 12.510353] tegra_soctherm 700e2000.thermal-sensor: programming throttle for gpu to 103000
> > > > [ 12.526856] tegra_soctherm 700e2000.thermal-sensor: throttrip: will throttle when gpu reaches 103000 mC
> > > > [ 12.528774] tegra_soctherm 700e2000.thermal-sensor: thermtrip: will shut down when pll reaches 103000 mC
> > > > [ 12.569352] tegra_soctherm 700e2000.thermal-sensor: programming throttle for pll to 103000
> > > > [ 12.577635] tegra_soctherm 700e2000.thermal-sensor: throttrip: will throttle when pll reaches 103000 mC
> > > > [ 12.590952] tegra_soctherm 700e2000.thermal-sensor: thermtrip: will shut down when mem reaches 103000 mC
> > > > [ 12.600783] tegra_soctherm 700e2000.thermal-sensor: programming throttle for mem to 103000
> > > > [ 12.609204] tegra_soctherm 700e2000.thermal-sensor: throttrip: will throttle when mem reaches 103000 mC
> > > >
> > > > The "programming throttle ..." messages are something I've added locally
> > > > to trace what gets called. So it looks like for "pll" and "mem" thermal
> > > > zones, we now program trip points whereas we previously didn't.
> >
> > My diagnosis above wasn't entirely correct. We're not actually skipping
> > trip point programming for PLL and MEM thermal zones in the current
> > code. Instead, we skip throttle programming. As far as I can tell this
> > is a mechanism built into ACTMON to allow it to automatically throttle
> > when a zone reaches a certain temperature.
> >
> > This is modelled as a cooling device, but internally it's actually done
> > automatically, which is why we have this code that programs the throttle
> > at driver probe time, rather than the on-demand programming that typical
> > cooling device would do (such as a fan).
> >
> > The reason why we have get_thermal_instance() here is to check if this
> > built-in cooling device has been configured for the "hot" trip point. If
> > not, we don't want the throttle programming to happen. This adds the
> > added flexibility of explicitly disabling the automatic throttling by
> > ACTMON and using another cooling device (or none at all) if that's what
> > is needed.
> >
> > Dropping just the call to get_thermal_instance() and relying on the
> > find_throttle_cfg_by_name() function will always return a valid throttle
> > configuration. This is slightly obfuscated because of this:
> >
> > cdev = ts->throt_cfgs[i].cdev;
> > if (get_thermal_instance(tz, cdev, trip_id))
> > stc = find_throttle_cfg_by_name(ts, cdev->type);
> >
> > As far as I can tell this will always return &ts->throt_cfgs[i], so the
> > find_throttle_cfg_by_name() call is a bit redundant here. I'll look into
> > fixing that.
> >
> > In any case, the important thing is that it would always find a valid
> > throttle configuration and therefore program the throttle, even if we
> > may not want to.
>
> Why not rely on the thermal framework mechanism to set the hwtrpis ?
>
> thermal_zone_device_register() calls thermal_zone_device_update(). This one
> calls thermal_zone_set_trips() which programs the hardware trip point.
>
> When we suspend/resume, the PM notifiers are calling
> thermal_zone_device_update() which in turn sets the hw trip points.
>
> May be I'm missing something but isn't enough for the sensor ?
These aren't actually trip points getting programmed, but rather the
built-in throttling mechanism. That said, it might be possible to append
that programming to the driver's ->set_trips() implementation. I'll look
into that.
Thanks for the suggestion,
Thierry
>
>
> > Possibly we could work around that by removing this fiddly special case
> > and instead add a new callback for the cooling devices that can be run
> > when they are bound to a thermal zone. This would allow the throttle
> > programming to be initiated from within the thermal core rather than
> > "bolted on" like it is now and should allow us to achieve the same
> > effect but without calling into get_thermal_instance().
> >
> > I'll try and prototype this, but feel free to suggest anything better if
> > you can think of something.
> >
> > Thierry
>
> --
> <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
>
> Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
> <http://twitter.com/#!/linaroorg> Twitter |
> <http://www.linaro.org/linaro-blog/> Blog
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2023-02-07 14:27 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-24 19:57 thermal/drivers/tegra: Getting rid of the get_thermal_instance() usage Daniel Lezcano
2023-01-26 12:55 ` Thierry Reding
2023-01-26 15:37 ` Daniel Lezcano
2023-02-06 14:50 ` Daniel Lezcano
2023-02-07 12:18 ` Thierry Reding
2023-02-07 12:38 ` Daniel Lezcano
2023-02-07 14:27 ` Thierry Reding [this message]
2023-02-10 13:17 ` Daniel Lezcano
2023-02-10 14:09 ` Thierry Reding
2023-02-10 14:36 ` Daniel Lezcano
2023-02-10 15:12 ` Thierry Reding
2023-04-11 10:48 ` Daniel Lezcano
2023-04-11 16:30 ` Thierry Reding
2023-03-08 17:21 ` Daniel Lezcano
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=Y+JfwM0O/0ZjMHua@orome \
--to=thierry.reding@gmail.com \
--cc=daniel.lezcano@linaro.org \
--cc=johan@kernel.org \
--cc=jonathanh@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=rafael@kernel.org \
--cc=wni@nvidia.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.