| No Wi-Fi or Bluetooth (Intel BE201, only SteamOS before 20261015.1000) |
linux-firmware-neptune lacked the BE201 firmware files |
Step 0 extracts only the missing files from the repo’s linux-firmware-intel and caches them in ~/.cache/oxp3-fix. Later runs work offline. Newer SteamOS ships them and the step skips itself |
| Freeze on resume from sleep in game mode |
The Predator GM7 NVMe (1dee:1602) doesn’t come back from s2idle through the ACPI StorageD3 path (Disabling device after reset failure: -19) |
Kernel parameter nvme.noacpi=1, only when that SSD is present. Deep S0ix still works |
| Big games crash with “out of memory” right after waking from sleep (FF7 Rebirth, about 2 s after resume, with 11-16 GB free) |
On suspend xe moves every GPU buffer out. On resume it rebinds every mapping in one array of 384 bytes per mapping. FF7R has about 33,500 mappings which means 12.9 MB. That’s over the 4 MB kmalloc limit which means it fails every time (63 of 63 in a trace) and Mesa reports execbuf ioctl keeps returning ENOMEM |
oxp3-xevmafix.service loads a small module (xevmafix/) that lets that one array come from vmalloc, the same change Intel already made in drm-xe-next. CI builds it for every SteamOS main kernel and the script downloads the build for yours |
| No real HDR: PQ output leaves the panel black, frozen or at 30 Hz |
gamescope doesn’t know this OLED (Samsung AMS881KB01-0). With PQ (BT.2020, SMPTE ST 2084) xe breaks it three ways. With Panel Replay, the MSA “colorimetry in VSC SDP” bit makes the panel keep its stored frame (black or frozen). The DPCD bit “fixed vtotal AS SDP in PR active” makes the panel show new frames at only 30 Hz, its VRR minimum, until the next wake from sleep (measured with a 120 fps camera: a new image every 33 ms). And after some switches to HDR the VSC SDP header keeps a bad ECC and the panel drops it (black) |
oxp3-xehdrfix.service loads a small module (xehdrfix/) before game mode starts. It clears both bits and writes the VSC SDP header again. While it’s loaded the gamescope lua registers the panel with PQ HDR and its EDID luminance (1100 nits peak, 475 full screen). Without it (no build for the running kernel yet) the lua keeps the panel in its native gamma-2.2 mode and lets gamescope tone-map, like the Steam Deck OLED. Panel Replay stays on. The lua also registers the real 30-144 Hz VRR range. With content_driven = true SDR games keep the panel in SDR and scan out directly (RE4 at 30 W: 87 → 93 fps). The panel switches to HDR only while an HDR game is showing |
| Game mode freezes, then goes black (BIOS 5.11 and later, audio and controls keep working) |
Panel Replay with selective update fails on this panel (Selective fetch area calculation failed). PSR1 freezes it later and with PSR off LOBF keeps it black. No module parameter turns LOBF off |
oxp3-panel-fix.service turns LOBF and PSR/Panel Replay off through xe debugfs before the display manager starts. Only on this panel with BIOS 5.11+ (--force-panel overrides). Reboot needed |
| VRR caps the frame rate at about 70-80 fps (SteamOS 20261015.1000 and later) |
Display firmware DMC v2.36 (i915/xe3lpd_dmc.bin). v2.20 works (issue #1) |
DMC v2.20 in /usr/lib/firmware/updates, which the kernel prefers. Intel firmware, redistributed unmodified (firmware/LICENSE.i915). Reboot needed |
xe ... DSB 0 poll error message flood |
The xe display state buffer fails on this panel |
options xe enable_dsb=0. Cosmetic |
| Volume keys stick when pressed quickly |
The embedded controller drops key-release scancodes |
oxp3-volkey-fix.service re-sends each volume key as press plus release on a virtual keyboard |
| Home, Console and Keyboard keys do nothing |
They come through the MCU keyboard and vendor interfaces |
InputPlumber composite device (InputPlumber 0.78 and 0.83): Home → Steam menu, Console → Quick Access, Keyboard → on-screen keyboard |
| Home and G-key do nothing with the controllers on the connector dock (issue #23) |
The controller connector has its own chip (1a86:fe02) that sends these keys. Stock InputPlumber 0.78 only reads the handheld’s fe00 and drops the G-key code |
With InputPlumber 0.78 the patched InputPlumber, installed for everyone (the gyro stays opt-in), also reads fe02 and maps the G-key to the Steam menu. If the patched one can’t run, the stock binary starts instead. With InputPlumber 0.83 (SteamOS 20261103.1000) the patched build isn’t used: the config adds the dock’s keyboard interface, so Console and Keyboard should work on the dock (not tested on the dock yet), but Home and the G-key on the dock don’t: 0.83’s driver only reads fe00 |
| Back paddles M1 and M2 don’t work |
hid-oxp has to map them and switch the MCU report mode |
hid-oxp maps them to two F13-F24 keys (F15/F16 on kernel 7.2.7) and InputPlumber turns them into the left and right paddle. The script only re-asserts the driver state through sysfs |
| No sound from the speakers after boot or resume |
The ALC245 jack detection briefly reports headphones and PipeWire keeps the Headphones profile with the speaker amp off. Rarely, WirePlumber starts before the codec is ready (“Failed to enable UCM device Speaker”), so the Speaker profile is active but the hardware volume stays very low |
oxp3-audio-route.service picks the Speaker profile, only when the jack is empty but a Headphones profile is active. When WirePlumber logged that UCM failure, it restarts WirePlumber (the volume stays). A sound card left switched off with an empty jack gets the Speaker profile again |
| Battery shows 101-104 % after a full charge |
The gauge reports energy_now above energy_full and Steam reads the raw sysfs value |
oxp3-battery-clamp.service overlays corrected capacity and energy_full values |
| GPU stays throttled below the TDP you set |
TDP tools write the MMIO package PL1 but the GPU obeys the MSR PL1, which keeps the firmware’s 25 W |
oxp3-tdp-sync.service copies the MMIO PL1 into the MSR PL1 (checked every 2 s) |
The journal only holds the last hour and /var/lib/steamos-log-submitter grows by hundreds of MB an hour |
Panther Lake traps user-space split locks, Steam causes them all the time and every hit gets logged and queued as a report |
Kernel parameter split_lock_detect=off (like the Steam Deck). Apply also deletes the queued split-lock reports. Reboot needed |
| Performance overlay shows no CPU power, GPU power or GPU temperature |
The RAPL energy counters are root-only (CVE-2020-8694) and xe has no hwmon sensors for an integrated GPU |
oxp3-rapl-overlay.service publishes coarse world-readable copies (0.5 s, 10 mJ) of the package, CPU core and GPU counters. A patched mangoapp (mangoapp/) shows CPU power (cores), GPU power (RAPL PP1), GPU temperature (= package temperature) and a SoC total on levels 2-4. It falls back to the stock mangoapp when it can’t run |
| CPU boost is all or nothing in SimpleDeckyTDP (optional, fix pack step 14) |
With boost off the cores stop at base clock. With boost on the E- and LP E-cores clock up too and take power the GPU could use |
Installs SimpleDeckyTDP-Intel by kas5852 (PR #24) with an Off / Smart / Full CPU Boost per game. Smart caps P / E / LP E-cores at 3.0 / 2.0 / 1.5 GHz: RE4 at 30 W gets +12 % average fps and +48 % 1% low |
No gyroscope (experimental, opt in with --gyro) |
The BMI260’s ACPI node is named for the bmi160 driver, which fails on it |
ACPI override (BIOS 5.09). The patched InputPlumber above handles the sensor. Drift is reduced, not gone. Only with InputPlumber 0.78: the step needs the patched 0.78 build and is skipped on 0.83. Stock 0.83 would send the gyro with wrong axes, so a gyro set up earlier is removed there (your opt-in is kept). Details in gyro/ |
评论