Surface Laptop 4 - linux-surface/linux-surface GitHub Wiki
See Supported-Devices-and-Features for current feature matrix.
The linux-surface kernel is currently required for the Surface Laptop 4 AMD 15" to function.
Details of patches
The following patches are required for surface modules to load:
- Quirk providing IRQ7 override supporting pinctrl-amd interrupt
- Provided in linux-surface kernel
- Initial Quirk SL4A15"
- Add SL4A13" to Quirk
The following patches are required for additional functionality:
- Suspend - Partial support, still WIP
- Enable pinctrl-amd as wakeup source acd47b9f28e5
- Will be included in 5.15
- Included in linux-surface kernel
-
AMD-PMC ACPI ID addition
- Included in linux-surface kernel
- Included in 5.14.14
- Will be included in 5.15
-
AMD-PMC s2idle ACPI ID special casing
- Included in linux-surface kernel
- Included in 5.14.14
- Will be included in 5.15
-
Disable interrupts improperly left enabled by firmware on AMD GPIO controller
- Included in linux-surface kernel
- Will be included in TBD
- Enable pinctrl-amd as wakeup source acd47b9f28e5
- Power button (useful for resume from suspend)
-
soc-button-array probe fixes
- Included in linux-surface kernel
-
soc-button-array probe fixes
Currently, as of Linux 5.15, the system cannot load the amdgpu module with the IOMMU enabled and in passthrough mode, this results in the screen locking up and likely displaying some graphics corruption when the amdgpu module loads. This is caused by the IOMMU blocking the PSP loading the firmware required for operation.ref.
Example IOMMU error output
iommu ivhd0: AMD-Vi: Event logged [ILLEGAL_DEV_TABLE_ENTRY device=03:00.0 pasid=0x00000 address=0x11e880000 flags=0x0180]
AMD-Vi: DTE[0]: 6010000000000003
AMD-Vi: DTE[1]: 0000000100000005
AMD-Vi: DTE[2]: 200000010d09e013
AMD-Vi: DTE[3]: 0000000000000000
[drm] failed to load ucode SDMA0(0x0)
[drm] psp gfx command LOAD_IP_FW(0x6) failed and response status is (0xF)
iommu ivhd0: AMD-Vi: Event logged [ILLEGAL_DEV_TABLE_ENTRY device=03:00.0 pasid=0x00000 address=0x11e885000 flags=0x0180]
AMD-Vi: DTE[0]: 6010000000000003
AMD-Vi: DTE[1]: 0000000100000005
AMD-Vi: DTE[2]: 200000010d09e013
AMD-Vi: DTE[3]: 0000000000000000
[drm] failed to load ucode CP_CE(0x8)
[drm] psp gfx command LOAD_IP_FW(0x6) failed and response status is (0xF)
iommu ivhd0: AMD-Vi: Event logged [ILLEGAL_DEV_TABLE_ENTRY device=03:00.0 pasid=0x00000 address=0x11e888000 flags=0x0180]
AMD-Vi: DTE[0]: 6010000000000003
AMD-Vi: DTE[1]: 0000000100000005
AMD-Vi: DTE[2]: 200000010d09e013
AMD-Vi: DTE[3]: 0000000000000000
[drm] failed to load ucode CP_PFP(0x9)
[drm] psp gfx command LOAD_IP_FW(0x6) failed and response status is (0xF)
iommu ivhd0: AMD-Vi: Event logged [ILLEGAL_DEV_TABLE_ENTRY device=03:00.0 pasid=0x00000 address=0x11e88e000 flags=0x0180]
AMD-Vi: DTE[0]: 6010000000000003
AMD-Vi: DTE[1]: 0000000100000005
AMD-Vi: DTE[2]: 200000010d09e013
AMD-Vi: DTE[3]: 0000000000000000
[drm] failed to load ucode CP_ME(0xA)
[drm] psp gfx command LOAD_IP_FW(0x6) failed and response status is (0xF)
iommu ivhd0: AMD-Vi: Event logged [ILLEGAL_DEV_TABLE_ENTRY device=03:00.0 pasid=0x00000 address=0x11e893000 flags=0x0180]
AMD-Vi: DTE[0]: 6010000000000003
AMD-Vi: DTE[1]: 0000000100000005
AMD-Vi: DTE[2]: 200000010d09e013
AMD-Vi: DTE[3]: 0000000000000000
[drm] failed to load ucode CP_MEC1(0xB)
[drm] psp gfx command LOAD_IP_FW(0x6) failed and response status is (0xF)
The current workaround that seems to be stable for this issue is to set amd_iommu=off iommu=off
to disable the IOMMU.
Setting amd_iommu=force_isolation
results in the IOMMU being configured to translation mode instead of passthrough, and the system will boot and load the amdgpu module, however the long term stability of this is unknown, with some reports of this still resulting in lockups.
Alternatively, nomodeset
will cause the amdgpu driver to be prevented from loading.
It has been observed that this occurs if Windows is booted before rebooting to Linux. Fully turn off the system and boot directly into Linux and try again.
This is reportedly no longer required on the latest kernels (v6.2 and upwards).
On older kernels, ACPI backlight control (/sys/class/backlight/acpi_video0
) does not seem to be working.
You can try adding acpi_backlight=vendor
to the kernel parameters.
This will remove the ACPI backlight device and should leave the amdgpu_bl0
device, which should be functional.
On newer kernels, however, adding this parameter may break the backlight. If you encounter any issues, please make sure to test both variations with the same kernel version. In particular, try removing the option if you have it set already and are experiencing this problem after an update.
See Disk Encryption.
-
nomodeset
seems to aleviate system instability but sacrifices significant video performance and prevents brightness adjustments from being made. - Adding
enable_guc=3
to the i915 kernel module options can lower power consumption by 1-2W (tested on Arch w/ kernel 6.8.2) - Wifi / networking may be unstable.