Missing Marvell pcie8897_uapsta.bin firmware in linux-firmware on Surface Pro? [Workaround]

Hi all,

Sharing a solution for a Wi-Fi issue encountered on a recent Garuda Hyprland install on a Surface Pro device using the Marvell 88W8897 Wi-Fi chip and the linux-surface kernel. After searching forums and trying standard troubleshooting, the fix involved manually adding a firmware file. wifi was not working using the provided kernel neither the

The Issue:

  • After installing Garuda and the linux-surface kernel (from surface-linux), Wi-Fi device was not detected (nmcli device only showed lo).
  • Running dmesg | grep -i mwifiex showed the following error, indicating missing firmware:
    mwifiex_pcie 0000:01:00.0: Direct firmware load for mrvl/pcie8897_uapsta.bin failed with error -2
    mwifiex_pcie 0000:01:00.0: Failed to get firmware mrvl/pcie8897_uapsta.bin
    

Troubleshooting Attempted (Standard Fixes):

  • Ensured the correct linux-surface kernel was booted (uname -a confirmed surface kernel).
  • Verified no rfkill blocks.
  • Installed and reinstalled linux-firmware package using sudo pacman -Syu linux-firmware while connected via USB tethering. The package installed/reinstalled successfully according to pacman (version linux-firmware-20250311.b69d4b74-3).
  • Crucially, even after reinstalling linux-firmware, the required file was missing:
    • ls -l /usr/lib/firmware/mrvl/pcie8897_uapsta.bin reported “No such file or directory”.
    • pacman -Ql linux-firmware | grep pcie8897_uapsta.bin returned no output, confirming the file wasn’t registered as part of the package by pacman on my system.

The Workaround (Manual Firmware Placement):

Since the standard package didn’t provide the file, I manually downloaded pcie8897_uapsta.bin from the official upstream linux-firmware repository:
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/mrvl/pcie8897_uapsta.bin

And placed it correctly using the terminal (while connected via tethering):

# Create the directory if it doesn't exist
sudo mkdir -p /usr/lib/firmware/mrvl/

# Download directly into the correct location
sudo wget -O /usr/lib/firmware/mrvl/pcie8897_uapsta.bin https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/mrvl/pcie8897_uapsta.bin

# Verify file exists
ls -l /usr/lib/firmware/mrvl/pcie8897_uapsta.bin

Result:
After rebooting (sudo reboot), the Wi-Fi interface appeared in nmcli device and connected successfully.

System Information (garuda-inxi):

System:
  Kernel: 6.13.8-zen1-1-zen arch: x86_64 bits: 64 compiler: gcc v: 14.2.1 clocksource: tsc
    avail: acpi_pm parameters: BOOT_IMAGE=/@/boot/vmlinuz-linux-zen
    root=UUID=9a8bc8c8-5849-422b-8616-3c06d2caf217 rw rootflags=subvol=@ quiet
    resume=UUID=06daf29c-9494-4810-aa2a-e8e09476cb86 loglevel=3 ibt=off
  Console: pty pts/2 DM: SDDM Distro: Garuda base: Arch Linux
Machine:
  Type: Laptop System: Microsoft product: Surface Pro
    v: 124000000000000000000000D:0B:09F:5C:09P:38S:01E:0 serial: <filter> Chassis: type: 9
    serial: <filter>
  Mobo: Microsoft model: Surface Pro serial: <filter> part-nu: Surface_Pro_1796
    uuid: 7f669287-b043-e7bb-ddf3-9a9fefbc5575 UEFI: Microsoft v: 239.871.768 date: 11/07/2015
Battery:
  ID-1: BAT1 charge: 24.4 Wh (64.0%) condition: 38.1/45.0 Wh (84.8%) power: 59.3 W volts: 7.9
    min: 7.6 model: SMP M1009169 type: Li-ion serial: <filter> status: discharging cycles: 489
CPU:
  Info: model: Intel Core i5-7300U socket: BGA1356 (U3E1) note: check bits: 64 type: MT MCP
    arch: Amber/Kaby Lake note: check gen: core 7 level: v3 note: check built: 2017
    process: Intel 14nm family: 6 model-id: 0x8E (142) stepping: 9 microcode: 0xF6
  Topology: cpus: 1x dies: 1 clusters: 2 cores: 2 threads: 4 tpc: 2 smt: enabled cache:
    L1: 128 KiB desc: d-2x32 KiB; i-2x32 KiB L2: 512 KiB desc: 2x256 KiB L3: 3 MiB desc: 1x3 MiB
  Speed (MHz): avg: 900 min/max: 400/3500 scaling: driver: intel_pstate governor: powersave
    volts: 0.8 V ext-clock: 100 MHz cores: 1: 900 2: 900 3: 900 4: 900 bogomips: 21599
  Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx
  Vulnerabilities: <filter>
Graphics:
  Device-1: Intel HD Graphics 620 vendor: Microsoft driver: i915 v: kernel arch: Gen-9.5
    process: Intel 14nm built: 2016-20 ports: active: none off: eDP-1 empty: DP-1, DP-2, HDMI-A-1,
    HDMI-A-2 bus-ID: 00:02.0 chip-ID: 8086:5916 class-ID: 0300
  Display: unspecified server: X.org v: 1.21.1.16 with: Xwayland v: 24.1.6 compositor: Hyprland
    driver: X: loaded: modesetting alternate: fbdev,intel,vesa dri: iris gpu: i915 tty: 120x30
  Monitor-1: eDP-1 model: LG Display 0x0555 serial: <filter> built: 2016 res: 2736x1824 dpi: 267
    gamma: 1.2 size: 260x173mm (10.24x6.81") diag: 312mm (12.3") ratio: 3:2 modes: 2736x1824
  API: Vulkan v: 1.4.309 layers: 5 device: 0 type: integrated-gpu name: Intel HD Graphics 620
    (KBL GT2) driver: N/A device-ID: 8086:5916 surfaces: N/A device: 1 type: cpu name: llvmpipe
    (LLVM 19.1.7 256 bits) driver: N/A device-ID: 10005:0000 surfaces: N/A
  API: OpenGL Message: GL data unavailable in console, glxinfo missing.
  Info: Tools: api: vulkaninfo wl: kanshi, wdisplays, wlr-randr x11: xprop
Audio:
  Device-1: Intel Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Imaging Unit driver: ipu3-imgu
    alternate: ipu3_imgu bus-ID: 00:05.0 chip-ID: 8086:1919 class-ID: 0480
  Device-2: Intel CSI-2 Host driver: ipu3-cio2 alternate: ipu3_cio2 bus-ID: 00:14.3
    chip-ID: 8086:9d32 class-ID: 0480
  Device-3: Intel Sunrise Point-LP HD Audio driver: snd_hda_intel v: kernel
    alternate: snd_soc_avs bus-ID: 00:1f.3 chip-ID: 8086:9d71 class-ID: 0403
  API: ALSA v: k6.13.8-zen1-1-zen status: kernel-api tools: alsactl,alsamixer,amixer
  Server-1: sndiod v: N/A status: off tools: aucat,midicat,sndioctl
  Server-2: PipeWire v: 1.4.1 status: n/a (root, process) with: 1: pipewire-pulse status: active
    2: wireplumber status: active 3: pipewire-alsa type: plugin 4: pw-jack type: plugin
    tools: pactl,pw-cat,pw-cli,wpctl
Network:
  Device-1: Marvell 88W8897 [AVASTAR] 802.11ac Wireless driver: mwifiex_pcie v: 1.0 pcie: gen: 1
    speed: 2.5 GT/s lanes: 1 bus-ID: 01:00.0 chip-ID: 11ab:2b38 class-ID: 0200
  IF: wlp1s0 state: up mac: <filter>
  IF-ID-1: tailscale0 state: unknown speed: -1 duplex: full mac: N/A
  Info: services: NetworkManager, sshd, systemd-timesyncd, wpa_supplicant
Bluetooth:
  Device-1: Marvell Bluetooth and Wireless LAN Composite driver: btusb v: 0.8 type: USB rev: 2.0
    speed: 480 Mb/s lanes: 1 mode: 2.0 bus-ID: 1-5:3 chip-ID: 1286:204c class-ID: e001
    serial: <filter>
  Report: btmgmt ID: hci0 rfk-id: 0 state: up address: <filter> bt-v: 4.2 lmp-v: 8 status:
    discoverable: no pairing: no class-ID: 6c010c
Drives:
  Local Storage: total: 239.24 GiB used: 6.21 GiB (2.6%)
  SMART Message: Required tool smartctl not installed. Check --recommends
  ID-1: /dev/nvme0n1 maj-min: 259:0 vendor: Samsung model: KUS020203M-B000 size: 119.24 GiB
    block-size: physical: 512 B logical: 512 B speed: 15.8 Gb/s lanes: 2 tech: SSD serial: <filter>
    fw-rev: DXB8AM1Q temp: 30.9 C scheme: GPT
  ID-2: /dev/sda maj-min: 8:0 vendor: Generic model: SD MMC size: 120 GiB block-size:
    physical: 512 B logical: 512 B type: USB rev: 3.0 spd: 5 Gb/s lanes: 1 mode: 3.2 gen-1x1
    tech: SSD serial: <filter> fw-rev: 1.00 scheme: MBR
Partition:
  ID-1: / raw-size: 110.15 GiB size: 110.15 GiB (100.00%) used: 6.21 GiB (5.6%) fs: btrfs
    block-size: 4096 B dev: /dev/nvme0n1p2 maj-min: 259:2
  ID-2: /boot/efi raw-size: 300 MiB size: 299.4 MiB (99.80%) used: 608 KiB (0.2%) fs: vfat
    block-size: 512 B dev: /dev/nvme0n1p1 maj-min: 259:1
  ID-3: /home raw-size: 110.15 GiB size: 110.15 GiB (100.00%) used: 6.21 GiB (5.6%) fs: btrfs
    block-size: 4096 B dev: /dev/nvme0n1p2 maj-min: 259:2
  ID-4: /var/log raw-size: 110.15 GiB size: 110.15 GiB (100.00%) used: 6.21 GiB (5.6%) fs: btrfs
    block-size: 4096 B dev: /dev/nvme0n1p2 maj-min: 259:2
  ID-5: /var/tmp raw-size: 110.15 GiB size: 110.15 GiB (100.00%) used: 6.21 GiB (5.6%) fs: btrfs
    block-size: 4096 B dev: /dev/nvme0n1p2 maj-min: 259:2
Swap:
  Kernel: swappiness: 133 (default 60) cache-pressure: 100 (default) zswap: no
  ID-1: swap-1 type: zram size: 7.67 GiB used: 0 KiB (0.0%) priority: 100 comp: zstd
    avail: lzo-rle,lzo,lz4,lz4hc,deflate,842 max-streams: 4 dev: /dev/zram0
  ID-2: swap-2 type: partition size: 8.8 GiB used: 0 KiB (0.0%) priority: -2 dev: /dev/nvme0n1p3
    maj-min: 259:3
Sensors:
  System Temperatures: cpu: 30.0 C pch: 27.0 C mobo: N/A
  Fan Speeds (rpm): N/A
Info:
  Memory: total: 8 GiB available: 7.67 GiB used: 1.64 GiB (21.5%) igpu: 32 MiB
  Processes: 206 Power: uptime: 33m states: freeze,mem,disk suspend: s2idle wakeups: 0
    hibernate: platform avail: shutdown, reboot, suspend, test_resume image: 3.06 GiB Init: systemd
    v: 257 default: graphical tool: systemctl
  Packages: pm: pacman pkgs: 1217 libs: 362 tools: pacseek,paru Compilers: gcc: 14.2.1
    Shell: garuda-inxi (sudo) default: Bash v: 5.2.37 running-in: pty pts/2 (SSH) inxi: 3.3.37
Garuda (2.7.2-1):
  System install date:     2025-04-06
  Last full system update: 2025-04-06
  Is partially upgraded:   No
  Relevant software:       snapper NetworkManager dracut
  Windows dual boot:       No/Undetected
  Failed units:
2 Likes

Welcome to the Garuda forum @Molier. :wave: :smiley:

Thanks for posting your solution, but I fear you went through a ton of work for nothing.

In their wisdom a while back the devolopers/maintainers of thelinux-firmware package split off various infrequently used drivers in an effort to reduce its overall size. They felt that it would be better to split off firmware that was rarely used into separate packages, rather than cramming everything into one large all-encompassing linux-firmware package.

You likely only needed to install the linux-firmware-marvell package to get your WiFi functioning correctly.

This change is not well known to many Linux users, and it often leads to much confusion for the users of non mainstream hardware.

Sorry for you being baffled by this change, but you’re far from the only one who this change has caught by surprise.

8 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.