Re: [PATCH v2 2/3] drm/msm/a5xx: Hold a CPU latency request while the GPU is powered
From: Fabricio Akio
Date: Mon Oct 26 2026 - 16:09:12 EST
On Wed, Oct 21, 2026 at 08:42:26PM +0300, Dmitry Baryshkov wrote:
> Do you have any extra patches that you are running with? I don't think
> that currently Linux can hit system power collapse with the GPU still
> running.
Yes, a series not yet sent that adds SDM630's system-level idle state
(cluster and system power domains in PSCI OSI mode, and the MPM). The
stall needs that state, so on mainline this patch prevents nothing. I
briefly mentioned it in the cover letter.
> On SDM630 the GPU is running from the CX, but we don't vote on it (yet).
> With the CPUs awake we keep a vote on CX. With the cores going to the
> deep sleep, the CX might drop below the required leven, causing GPU to
> die.
[...]
> Could you please check what actually stops in your setup (CX corner, the
> BIMC vote, XO)? I think the proper fix is for the GPU to vote its real
> rail, scaled per OPP, in both RPM sets, rather than keeping the CPUs out
> of their idle states.
The GPU doesn't die: it pauses for as long as the SoC is in the system
state, and the job completes once the SoC leaves it. The votes don't
change that. I tested them with the latency request off and on:
- XO: the GPU clock controller using RPM_SMD_XO_CLK_SRC
- CX: the GPU clock controller voting RPMPD_VDDCX at TURBO
- MX: every GPU OPP at TURBO
- BIMC: every GPU OPP at the maximum peak bandwidth
Each was read back from debugfs during the run, in both sets. Hang
detections in jobs, two runs with the request off:
request off request on
as is 207/483 216/483 0/500
CX 192/488 194/485 0/499
XO 188/487 188/483 0/499
CX + XO + BIMC 180/487 185/488 0/499
CX + XO + BIMC + MX 199/494 208/487 0/498
I don't know why it pauses, but downstream keeps the SoC out of that
state while the GPU is active, with qcom,pm-qos-active-latency.
You're right about the CPUs' idle states, though: with sdm630.dtsi's
values, 424 us keeps every CPU out of power collapse while the GPU is
powered. Only the system state needs blocking: at 2336 us, which leaves
every CPU and cluster state available, the same test gives no hang
detections.