nixos-hardware/framework/13-inch/7040-amd
Luflosi 106d3fec43 framework AMD 7040: work around white screen / flickering issue on newer kernels
Fixes #817.

Updating the kernel if it is too old is already done by `common/cpu/amd/raphael/igpu.nix`, so I removed the redundant code.
2024-02-16 13:49:10 +00:00
..
default.nix framework AMD 7040: work around white screen / flickering issue on newer kernels 2024-02-16 13:49:10 +00:00
README.md framework amd: only apply suspend workaround on <6.7 2024-01-08 18:25:06 +00:00

Framework Laptop 13

Updating Firmware

First put enable fwupd

services.fwupd.enable = true;

Then run

 $ fwupdmgr update

Suspend/wake workaround

As of firmware v03.03, a bug in the EC causes the system to wake if AC is connected despite the lid being closed. A workaround has been upstreamed in Linux v6.7. For older kernels, the following works around this, with the trade-off that keyboard presses also no longer wake the system.

{
  hardware.framework.amd-7040.preventWakeOnAC = true;
}

See Framework AMD Ryzen 7040 Series lid wakeup behavior feedback.

Getting the fingerprint sensor to work

The firmware on the fingerprint sensor needs a downgrade to make it work on Linux. The process is documented here.

However on recent NixOS versions also fwupd can no longer update the firmware. Using the following snippet allows to temporarly downgrade fwupd to an old-enough version:

{
  services.fwupd.enable = true;
  # we need fwupd 1.9.7 to downgrade the fingerprint sensor firmware
  services.fwupd.package = (import (builtins.fetchTarball {
    url = "https://github.com/NixOS/nixpkgs/archive/bb2009ca185d97813e75736c2b8d1d8bb81bde05.tar.gz";
    sha256 = "sha256:003qcrsq5g5lggfrpq31gcvj82lb065xvr7bpfa8ddsw8x4dnysk";
  }) {
    inherit (pkgs) system;
  }).fwupd;
}

Afterwards the downgraded driver can be downloaded and installed like this:

wget https://github.com/FrameworkComputer/linux-docs/raw/main/goodix-moc-609c-v01000330.cab
sudo fwupdtool install --allow-reinstall --allow-older goodix-moc-609c-v01000330.cab
Loading…                 [ -                                     ]/nix/store/1n2l5law9g3b77hcfyp50vrhhssbrj5g-glibc-2.37-8/lib/libc.so.6: version `GLIBC_2.38' not found (required by /nix/store/f55npw04a2s6xmrbx4jw12xq16b3avb8-gvfs-1.52.1/lib/gio/modules/libgvfsdbus.so)
Failed to load module: /nix/store/f55npw04a2s6xmrbx4jw12xq16b3avb8-gvfs-1.52.1/lib/gio/modules/libgvfsdbus.so
Loading…                 [                                       ]12:16:46.348 FuHistory            schema version 9 is unknown
Writing…                 [*************************************  ]12:16:57.055 FuEngine             failed to update-cleanup after failed update: failed to get device before update cleanup: failed to wait for detach replug: device d432baa2162a32c1554ef24bd8281953b9d07c11 did not come back

failed to write: failed to reply: transfer timed out

The error message above is harmless. After a reboot, I was able to enroll my fingerprint like this:

sudo fprintd-enroll $USER