Black screen on resume from S3 with 7.0.0-28-generic: it's the backlight, and 
i915.enable_dpcd_backlight=0 fixes it
TL;DR — If your laptop wakes from suspend with a black screen on kernel 
7.0.0-28-generic,

add this to GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub, run sudo 
update-grub, reboot:
i915.enable_dpcd_backlight=0

The machine isn't failing to resume. The panel's backlight is never
switched back on.

Everything else — compositor, Wi-Fi, input — is already alive behind a dark 
screen.
Affected setup
·       ThinkPad L380, Intel UHD 620 (Kaby Lake-R, PCI device ID 5917), i915
·       Ubuntu 24.04 LTS, HWE kernel 7.0.0-28-generic (linux-generic-hwe-24.04)
·       GNOME on Wayland, mem_sleep = deep (S3)
This matches Launchpad #2161243

("black screen on resume, 7.0.0-28-generic, works on 7.0.0-27") and its
twins

#2162560, #2161214, #2161961,

#2161826, #2161820 — X1 Carbon 5th gen (iGPU 5916), T480s, and at least one 
Broadwell machine.
What doesn't work
Both parameters recommended in most threads had zero effect here, and I'd 
advise against

keeping the second one — it costs idle battery life:
i915.enable_psr=0
i915.enable_dc=0

The reporter on #2161243 saw the same thing. So did I, over several boots.
The actual clue
It didn't come from the suspend logs — those are clean. There is no i915 or DRM 
error at

resume, the freezer completes in milliseconds, PM: suspend exit is
normal, and the machine

happily reassociates Wi-Fi and renews its DHCP lease seconds later. On
one attempt GNOME Shell

even drew the session-end dialog in response to a power-key press. The
compositor was

rendering frames the whole time. That is not a dead pipeline — that is a dark 
panel.
The clue came from a completely different annoyance on the same kernel: the 
brightness keys

stopped working. First boot on 7.0.0-28 logged this, once:
systemd-backlight[1037]: intel_backlight: Saved brightness 6818 is too high; 
decreasing to 1023.

6818 was the value saved by the previous session under 6.17.0-35. So
max_brightness had

dropped from ≥6818 to 1023 across the kernel bump. And 1023 is not an
arbitrary number:

it is 2^10−1, exactly a 10-bit DPCD range.
Mechanism
On 7.0.0-28, i915 switches this panel from PWM backlight control (max derived 
from the VBT,

~7500 steps) to DPCD/AUX control (10-bit, 1023 steps). This panel
accepts the AUX writes and

does nothing with them. Hence:
·       While running: brightness values change in sysfs, the GNOME OSD moves, 
the panel doesn't.
·       After S3: in deep suspend the panel is powered down, and i915 must 
re-enable the

backlight on resume — through the same DPCD channel the panel ignores. It stays 
at zero.
That also explains the asymmetry everyone reports, where s2idle "fixes" it: in 
s2idle the

display pipeline is never torn down, so there is no backlight to bring back.
Check whether this is your bug
cat /sys/class/backlight/intel_backlight/max_brightness

·       1023 → you're on the DPCD path, this fix very likely applies to you.
·       a four-digit value in the thousands (mine is 6818) → your backlight is 
on PWM, your black

screen has some other cause.
The fix
sudo sed -i 
's/GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="\1 
i915.enable_dpcd_backlight=0"/' /etc/default/grub
sudo update-grub
sudo reboot

After the reboot, max_brightness should read in the thousands again, the
brightness keys should

physically dim the panel, and suspend/resume in deep works. Confirmed
here — a clean S3

cycle, ACPI: PM: Preparing to enter system sleep state S3 → Waking up
from system sleep state S3,

screen back:
kernel: PM: suspend entry (deep)
kernel: ACPI: PM: Preparing to enter system sleep state S3
kernel: ACPI: PM: Waking up from system sleep state S3
kernel: PM: suspend exit

Why this beats the usual workarounds
The two fixes circulating in these threads both cost something:
·       mem_sleep_default=s2idle keeps you on a mains-hungry sleep state — S3 
draws a few hundred

mW, s2idle far more. It also only hides the problem.
·       Downgrading the kernel. On Noble's HWE stack there is no 7.0.0-27 to 
fall back to

(it belongs to a different series); the nearest 7.0 is 7.0.0-14, which
is many security

updates behind. 7.0.0-28 ships from noble-security, so leaving it has a real 
cost.
i915.enable_dpcd_backlight=0 keeps the current security-patched kernel, keeps 
real S3 suspend,

and restores brightness control. It is also forward-safe: zz-update-grub
re-applies it to every

new kernel automatically.
Caveats
·       One machine, one panel. I'm reasonably confident about the mechanism, 
but the correlation

"brightness broken and resume broken on the same kernel bump" is
parsimony, not proof.

If it works for you, please say so on #2161243 with your iGPU device ID
(lspci -nn | grep VGA)

and your max_brightness before and after — that's what will get this triaged.
·       Remember to re-test without the parameter after each kernel upgrade. 
Once i915 stops

putting this panel on DPCD, the workaround would silently mask the real
fix.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2161243

Title:
  System fails to resume from suspend (black screen) on kernel
  7.0.0-28-generic; works correctly on 7.0.0-27-generic

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2161243/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to