From: Michal Wilczynski <m.wilczynski@samsung.com>
To: Krzysztof Kozlowski <krzk@kernel.org>
Cc: Drew Fustini <drew@pdp7.com>, Guo Ren <guoren@kernel.org>,
Fu Wei <wefu@redhat.com>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Bartosz Golaszewski <brgl@bgdev.pl>,
Philipp Zabel <p.zabel@pengutronix.de>,
Frank Binns <frank.binns@imgtec.com>,
Matt Coster <matt.coster@imgtec.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
Paul Walmsley <paul.walmsley@sifive.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Alexandre Ghiti <alex@ghiti.fr>,
Ulf Hansson <ulf.hansson@linaro.org>,
Marek Szyprowski <m.szyprowski@samsung.com>,
linux-riscv@lists.infradead.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v3 3/8] drm/imagination: Use pwrseq for TH1520 GPU power management
Date: Tue, 3 Jun 2025 21:43:22 +0200 [thread overview]
Message-ID: <d42a8c49-7ad2-49ef-bd9c-1e3d9981b58e@samsung.com> (raw)
In-Reply-To: <20250603-whispering-jaybird-of-thunder-f87867@kuoka>
On 6/3/25 15:28, Krzysztof Kozlowski wrote:
> On Fri, May 30, 2025 at 12:23:50AM GMT, Michal Wilczynski wrote:
>> Update the Imagination PVR DRM driver to leverage the pwrseq framework
>> for managing the power sequence of the GPU on the T-HEAD TH1520 SoC.
>>
>> In pvr_device_init(), the driver now attempts to get a handle to the
>> "gpu-power" sequencer target using devm_pwrseq_get(). If successful,
>> the responsibility for powering on and off the GPU's core clocks and
>> resets is delegated to the power sequencer. Consequently, the GPU
>> driver conditionally skips acquiring the GPU reset line if the pwrseq
>> handle is obtained, as the sequencer's match function will acquire it.
>> Clock handles are still acquired by the GPU driver for other purposes
>> like devfreq.
>>
>> The runtime PM callbacks, pvr_power_device_resume() and
>> pvr_power_device_suspend(), are modified to call pwrseq_power_on() and
>> pwrseq_power_off() respectively when the sequencer is present. If no
>> sequencer is found, the driver falls back to its existing manual clock
>> and reset management. A helper function,
>> pvr_power_off_sequence_manual(), is introduced to encapsulate the manual
>> power-down logic.
>>
>> Signed-off-by: Michal Wilczynski <m.wilczynski@samsung.com>
>> ---
>> drivers/gpu/drm/imagination/Kconfig | 1 +
>> drivers/gpu/drm/imagination/pvr_device.c | 33 +++++++++++--
>> drivers/gpu/drm/imagination/pvr_device.h | 6 +++
>> drivers/gpu/drm/imagination/pvr_power.c | 82 +++++++++++++++++++++-----------
>> 4 files changed, 89 insertions(+), 33 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/imagination/Kconfig b/drivers/gpu/drm/imagination/Kconfig
>> index 3bfa2ac212dccb73c53bdc2bc259bcba636e7cfc..737ace77c4f1247c687cc1fde2f139fc2e118c50 100644
>> --- a/drivers/gpu/drm/imagination/Kconfig
>> +++ b/drivers/gpu/drm/imagination/Kconfig
>> @@ -11,6 +11,7 @@ config DRM_POWERVR
>> select DRM_SCHED
>> select DRM_GPUVM
>> select FW_LOADER
>> + select POWER_SEQUENCING
>
> Messed indent.
>
>> help
>> Choose this option if you have a system that has an Imagination
>> Technologies PowerVR (Series 6 or later) or IMG GPU.
>> diff --git a/drivers/gpu/drm/imagination/pvr_device.c b/drivers/gpu/drm/imagination/pvr_device.c
>> index 8b9ba4983c4cb5bc40342fcafc4259078bc70547..19d48bbc828cf2b8dbead602e90ff88780152124 100644
>> --- a/drivers/gpu/drm/imagination/pvr_device.c
>> +++ b/drivers/gpu/drm/imagination/pvr_device.c
>> @@ -25,6 +25,7 @@
>> #include <linux/interrupt.h>
>> #include <linux/platform_device.h>
>> #include <linux/pm_runtime.h>
>> +#include <linux/pwrseq/consumer.h>
>> #include <linux/reset.h>
>> #include <linux/slab.h>
>> #include <linux/stddef.h>
>> @@ -631,10 +632,34 @@ pvr_device_init(struct pvr_device *pvr_dev)
>> if (err)
>> return err;
>>
>> - /* Get the reset line for the GPU */
>> - err = pvr_device_reset_init(pvr_dev);
>> - if (err)
>> - return err;
>> + /*
>> + * Try to get a power sequencer. If successful, it will handle clocks
>> + * and resets. Otherwise, we fall back to managing them ourselves.
>> + */
>> + pvr_dev->pwrseq = devm_pwrseq_get(dev, "gpu-power");
>> + if (IS_ERR(pvr_dev->pwrseq)) {
>> + int pwrseq_err = PTR_ERR(pvr_dev->pwrseq);
>> +
>> + /*
>> + * If the error is -EPROBE_DEFER, it's because the
>> + * optional sequencer provider is not present
>> + * and it's safe to fall back on manual power-up.
>
> It is safe but why it is desirable? The rule is rather to defer the
> probe, assuming this is probe path.
Yeah this is probe path.
The GPU node will depend on the AON node, which will be the sole
provider for the 'gpu-power' sequencer (based on the discussion in patch
1).
Therefore, if the AON/pwrseq driver has already completed its probe, and
devm_pwrseq_get() in the GPU driver subsequently returns -EPROBE_DEFER
(because pwrseq_get found 'no match' on the bus for 'gpu-power'), the
interpretation is that the AON driver did not register this optional
sequencer. Since AON is the only anticipated source, it implies the
sequencer won't become available later from its designated provider.
This specific scenario is when we intend to fall back to manual power
management, which pvr driver is capable of, it just doesn't work for the
TH1520 SoC, as it has a custom requirements implemented by the pwrseq
driver.
>
> Best regards,
> Krzysztof
>
>
Best regards,
--
Michal Wilczynski <m.wilczynski@samsung.com>
next prev parent reply other threads:[~2025-06-03 19:43 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20250529222402eucas1p1c9e0ddd3efd62e078e5de2cf71655f58@eucas1p1.samsung.com>
2025-05-29 22:23 ` [PATCH v3 0/8] Add TH1520 GPU support with power sequencing Michal Wilczynski
[not found] ` <CGME20250529222403eucas1p1923fe09240be34e3bbadf16822574d75@eucas1p1.samsung.com>
2025-05-29 22:23 ` [PATCH v3 1/8] dt-bindings: power: Add T-HEAD TH1520 GPU power sequencer Michal Wilczynski
2025-06-02 14:46 ` Bartosz Golaszewski
2025-06-02 20:29 ` Michal Wilczynski
2025-06-03 13:19 ` Krzysztof Kozlowski
2025-06-03 13:35 ` Bartosz Golaszewski
2025-06-03 14:49 ` Bartosz Golaszewski
2025-06-03 20:07 ` Michal Wilczynski
2025-06-03 18:24 ` Michal Wilczynski
2025-06-04 6:36 ` Bartosz Golaszewski
[not found] ` <CGME20250529222404eucas1p2856b44ad410171edfc2190127dafee0c@eucas1p2.samsung.com>
2025-05-29 22:23 ` [PATCH v3 2/8] power: sequencing: Add T-HEAD TH1520 GPU power sequencer driver Michal Wilczynski
[not found] ` <CGME20250529222405eucas1p18ed1254bf1b2d78468734656fec537e1@eucas1p1.samsung.com>
2025-05-29 22:23 ` [PATCH v3 3/8] drm/imagination: Use pwrseq for TH1520 GPU power management Michal Wilczynski
2025-06-03 13:28 ` Krzysztof Kozlowski
2025-06-03 19:43 ` Michal Wilczynski [this message]
2025-06-04 6:36 ` Krzysztof Kozlowski
2025-06-04 11:53 ` Michal Wilczynski
2025-06-04 12:07 ` Krzysztof Kozlowski
2025-06-05 7:47 ` Michal Wilczynski
2025-06-05 8:10 ` Bartosz Golaszewski
2025-06-05 9:07 ` Krzysztof Kozlowski
2025-06-11 12:01 ` Michal Wilczynski
2025-06-11 12:32 ` Bartosz Golaszewski
2025-06-13 6:47 ` Krzysztof Kozlowski
2025-06-13 6:44 ` Krzysztof Kozlowski
2025-06-13 8:25 ` Michal Wilczynski
2025-06-13 9:49 ` Michal Wilczynski
2025-06-13 10:01 ` Krzysztof Kozlowski
2025-06-13 10:41 ` Bartosz Golaszewski
[not found] ` <CGME20250529222406eucas1p117082ce4f06921f71bbc442c47e58574@eucas1p1.samsung.com>
2025-05-29 22:23 ` [PATCH v3 4/8] dt-bindings: gpu: Add TH1520 GPU compatible to Imagination bindings Michal Wilczynski
2025-06-03 13:16 ` Krzysztof Kozlowski
[not found] ` <CGME20250529222407eucas1p233be883d7e84e5a000e4d44b37cf7265@eucas1p2.samsung.com>
2025-05-29 22:23 ` [PATCH v3 5/8] riscv: dts: thead: th1520: Add missing reset controller header include Michal Wilczynski
2025-06-01 17:40 ` Drew Fustini
2025-06-03 13:20 ` Krzysztof Kozlowski
2025-06-03 18:26 ` Michal Wilczynski
2025-06-03 18:49 ` Krzysztof Kozlowski
[not found] ` <CGME20250529222408eucas1p20f62cea4c9c64bb5dda6db1fd38fb333@eucas1p2.samsung.com>
2025-05-29 22:23 ` [PATCH v3 6/8] riscv: dts: thead: Add GPU power sequencer node Michal Wilczynski
2025-06-03 13:22 ` Krzysztof Kozlowski
2025-06-03 18:45 ` Michal Wilczynski
2025-06-04 12:33 ` Bartosz Golaszewski
[not found] ` <CGME20250529222410eucas1p2e1d41a2fc717caef1aed51367a7db944@eucas1p2.samsung.com>
2025-05-29 22:23 ` [PATCH v3 7/8] riscv: dts: thead: th1520: Add IMG BXM-4-64 GPU node Michal Wilczynski
2025-06-03 12:27 ` Ulf Hansson
2025-06-04 12:40 ` Michal Wilczynski
2025-06-04 13:57 ` Ulf Hansson
2025-06-04 16:47 ` Matt Coster
2025-06-05 9:57 ` Ulf Hansson
2025-06-05 10:34 ` Matt Coster
[not found] ` <CGME20250529222411eucas1p27e4b662d6f120c4e83d808cb03e4bb1e@eucas1p2.samsung.com>
2025-05-29 22:23 ` [PATCH v3 8/8] drm/imagination: Enable PowerVR driver for RISC-V Michal Wilczynski
2025-06-01 23:05 ` [PATCH v3 0/8] Add TH1520 GPU support with power sequencing Drew Fustini
2025-06-02 8:03 ` Michal Wilczynski
2025-06-02 17:33 ` Drew Fustini
2025-06-02 21:39 ` Drew Fustini
2025-06-03 12:25 ` Ulf Hansson
2025-06-03 18:29 ` Michal Wilczynski
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=d42a8c49-7ad2-49ef-bd9c-1e3d9981b58e@samsung.com \
--to=m.wilczynski@samsung.com \
--cc=airlied@gmail.com \
--cc=alex@ghiti.fr \
--cc=aou@eecs.berkeley.edu \
--cc=brgl@bgdev.pl \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=drew@pdp7.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=frank.binns@imgtec.com \
--cc=guoren@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=krzk@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=m.szyprowski@samsung.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=matt.coster@imgtec.com \
--cc=mripard@kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=robh@kernel.org \
--cc=simona@ffwll.ch \
--cc=tzimmermann@suse.de \
--cc=ulf.hansson@linaro.org \
--cc=wefu@redhat.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 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).