What's in a Steam Deck kernel anyway?
More than some people say. Less than is needed.
There is a lot more work than strictly just work for hardware support for the Steam Deck.
But also, a lot of it is unneeded if the goal is just to run a Linux, and not the best Linux that could be.
Valve, entirely going against the popular definition of Vendor[pejorative], is still actively working on improving and maintaining the kernel for their Steam Deck hardware. Let's see what they're up to in this 6.8 cycle.
To do so, I'm looking at the merges and explaining them. I've ignored the fix merging commits, as they are tautologically merge of commits intended to fix merges.
This is based on:
$ git log --merges --oneline v6.8.12..6.8.12-valve7
The Jovian Experiements mirror of the vendor kernel has the relevant vendor tag.
The big chunks
These are the larger merges, containing generic changes to drivers. A large chunk of those changes are not specific to the Steam Deck, but upholds improved support for it.
The changes are from different origins, either from the kernel upstream, from the different sub-project WIP branches, or from further downstream suppliers/vendors.
Audio driver
8bda5bd86ba6f Merge branch 6.8/features/backport-asoc-amd-mf
Backports, WIP work, and workarounds on top of the upstream AMD audio drivers.
Video driver
c120f3501738f Merge branch 6.8/features/amd-drm-extra 382863a1f6b61 Merge branch 'rcardoso/6.8/display-fixes'
The biggest branch from the vendor. It contains AMDGPU work from different provenances. I won't pretend I deeply understand every one of them.
The nature of the changes differs just as much as provenance. Some of the changes are simple backports, some are fixes that can be or are upstreamed, and some changes are workarounds or hacks in waiting of a solution.
Work sent upstream
These changes are presumed to be intended to be re-sent upstream, if they are not already in their current form.
GPU reset events
ee1e196b89532 Merge branch 6.8/features/gpu-reset
This change set has been sent upstream, along with these follow-up changes.
It is not currently in Linux (6.12).
The cover letter explains why this is desirable.
The TLDR is: making userspace aware of GPU resets, allowing recovery to be attempted.
TSC work
66560a08a6a8b Merge branch 6.8/features/tsc
Part of the changes sent to upstream, status unclear.
All related to the TSC (Time Stamp Counter).
I do not know if or how these changes affects the experience for end-users.
Platform-specific changes
Steam Deck support
8c5c5df9a7b9f Merge branch 6.8/features/steamdeck-mfd
These changes are not strictly needed to operate the system, but should be considered required for top-tier platform support.
It adds:
- Steam Deck specific “sensor” information
- Fan speed
- Battery temp
- PD (Power Delivery) contract information
- Status/power LED brightness support
- including support for a firmware-based "multiplier" (read: max-level)
- Support for USB role switching
- Battery max charge / charge rate support
- Controlling power to the “controller board” (gamepad)
Galileo (OLED model) support
543b13bbacdc5 Merge branch 6.8/features/bt 5596f56bddfac Merge branch 'rcardoso/6.8/bluez-revert'
Changes for Galileo's (OLED model) Bluetooth hardware.
Mostly changes from Quectel.
a70a12c7ce5f0 Merge branch 6.8/features/wifi-mf
Backports and vendor-provided changes (from Quectel) for the Wi-Fi chipset for Galileo (OLED model).
Workarounds and hacks
USB role switching
7bf5fadb8b74f Merge branch 6.8/features/usb
Purely workarounds for the DWC3 driver, mainly specific to the Steam Deck.
Notably, the USB driver side of the required changes for USB role switching.
Misc. quirks
609cc9fa91f2e Merge branch 6.8/features/quirks
A grab-bag of small workarounds. Other than the Galileo (OLED model) panel orientation, AFAICT none sent to upstream yet.
The nature of the changes varies a bit. Though it seems to mostly be specific to SteamOS or their hardware development process.
c83d6e33ed18c Merge branch 'rcardoso/6.8/reset-8821'
From the changes, it looks like this is actually two set of logical changes:
- Workaround for audio hisses (nau8821 driver)
- First pass at fixing the root cause of an MST/DSC issue (and reverting workarounds)
Hacks
09ffb3798e4c3 Merge branch 6.8/features/hacks
Workarounds and hacks for:
- suspend
- older Jupiter (LCD model) platform firmware
- userspace weirdness on backlight change
- platform firmware message flood
- exposing “private” AMD color management
I believe f50574d9cdd94
is an interesting change to higlight.
It seems that proprietary software (one game here, maybe more than one) may have surprising behaviour with regard to device "hotplug" on non-valve kernels.
What's even more surprising is that, if I understand the software stack from SteamOS correction, this would be experienced without actively changing the brightness of the system! Steam has support for automatic backlight control for the Steam Deck, which I suppose would cause gamepads to re-enumerate during gameplay.
Better generic hardware support
5ee35155a4ce9 Merge branch 6.8/features/hid-mf
Includes mainly backports for gamepad-orientated changes.
The main goal for this branch is to make SteamOS support the newer hardware out of the box.
Backports
(See also previous changes including backports…)
Misc.
7081518de4743 Merge branch 6.8/features/backport-misc-mf
Strictly upstream backports.
Quickly described:
- DRM/GPU driver fixes (including MST)
- USB wakeup
- WiFi power usage for rtw88/8822ce
sched-ext
ebb9d5db497c5 Merge branch 6.8/features/sched-ext
This is a backport of the Extensible Scheduler Class (sched-ext
), plus the work to make it work on a 6.8 kernel.
Security
da4c38e075d09 Merge branch 'rcardoso/6.8/unicode-cve'
Backport for CVE-2024-50089.
“Uninteresting” CI changes
d580e338863eb Merge branch 6.8/features/setup-gitlabci
Stuff for their CI. I have not looked into it, other than checking with a pattern that it contains no other sneaky changes.
':!./ci' ':!./.gitlab-ci.yml' ':!./.config-fragment' ':!./.config-fragment-extra' ':!./kernel_test.sh'