Framework Laptop 16

From Gentoo Wiki
Jump to:navigation Jump to:search
This article has some todo items:
  • Confirm Ryzen 7 mainboard hardware details
  • Radeon 7700 expansion bay module hardware details

The Framework Laptop 16, released in 2024, is a highly modular and repairable 16 inch laptop. This article is incomplete, see Framework Laptop 13 for a guide on comparable hardware.

Hardware

Ryzen mainboard

TODO: Confirm that the Ryzen 7 model has the same hardware (other than the CPU).

Device Make/model Status Vendor ID / Product ID Kernel driver(s) Kernel version Notes
CPU AMD Ryzen 9 7940HS

AMD Ryzen 7 7840HS

Works AMD microcode
Chipset AMD Pink Sardine Works
Video card AMD Phoenix1 Works 1002:15bf amdgpu Use VIDEO_CARDS: amdgpu radeonsi
Sound card AMD Rembrandt Radeon High Definition Audio Controller Works 1002:1640 snd_hda_intel
Sound card AMD Family 17h/19h HD Audio Controller Works 1022:15e3 snd_hda_intel
Audio coprocessor AMD ACP/ACP3X/ACP6x Audio Coprocessor Works 1022:15e2 snd_pci_ps Also requires Realtek HD-audio codec
Wireless network card MediaTek MT7922 Works 14c3:0616 mt7921e
Bluetooth MediaTek MT7922 Works 0e8d:e616 btusb
Fingerprint Reader Goodix USB2.0 MISC Works 27c6:609c Requires a fingerprint reader package
Webcam Realtek Semiconductor Corp. Laptop Camera Works 0bda:5634 uvcvideo The microphone is attached to the sound card (17h/19h), not the webcam
Ambient light sensor Not tested
Encryption AMD Family 19h (Model 74h) CCP/PSP 3.0 Device Not tested 1022:15c7 ccp
Thunderbolt/USB4 AMD Pink Sardine USB4/Thunderbolt NHI controller Not tested 1022:1668 1022:1669 thunderbolt
AI accelerator AMD IPU Device Not tested 1022:1502 Driver at: https://github.com/amd/xdna-driver

Input modules

The Framework Laptop 16 has a user-configurable input deck. Unless otherwise noted, the modules listed below are OEM modules from Framework.

Device Make/model Status Vendor ID / Product ID Kernel driver(s) Kernel version Notes
Keyboard Framework Laptop 16 Keyboard Module - ANSI Works 32ac:0012 Generic HID?
Touchpad PixArt PIXA3854 Works 093A:0274 hid_multitouch i2c_designware_platform pinctrl_amd
Numpad Framework Laptop 16 Numpad Module Works 32ac:0014 Generic HID?
RGB Macropad Works 32ac:0013 Generic HID?
LED Matrix Works 32ac:0020 cdc_acm

Configuring the QMK devices and LED matrix via web tools requires udev rules (see below).

Expansion cards

See Framework Expansion Cards. The Framework Laptop 16 features six modular expansion card slots allowing for custom port configurations.

Expansion bay

The Framework 16 has an expansion bay with a custom PCIe connector. Unless otherwise noted, the modules listed below are OEM modules from Framework.

Device Make/model Status Vendor ID / Product ID Kernel driver(s) Kernel version Notes
N/A Expansion Bay Shell Works N/A N/A N/A Just provides cooling and fills the bay.
GPU AMD Radeon RX 7700S Works 1002:7480 1002:ab30 amdgpu snd_hda_intel

Installation

See the Handbook for instructions on the general installation process.

Firmware

Firmware from sys-kernel/linux-firmware is needed for the GPU, wireless, and bluetooth interfaces.

Kernel

The easiest way to configure the kernel is use a distribution kernel. The next easiest way is to use genkernel. See Kernel installation in the handbook for details.

genkernel automatically enables enough to get the system booted, but additional changes are required to get all hardware working. On the upside, genkernel all does everything - it compiles the kernel, builds an initramfs, and installs both in the boot partition, and it can be configured to update the bootloader entries.

KERNEL General
Processor type and features  --->
   [*] AMD ACPI2Platform devices support
   [*] Machine Check / overheating reporting
      [*] AMD MCE features
   Performance monitoring  --->
      <*> Intel/AMD rapl performance events
      <*> AMD Processor Power Reporting Mechanism
      <*> AMD Uncore performance events
Device Drivers  --->
   <*> Hardware Monitoring support  --->
      <*>   AMD Family 10h+ temperature sensor
   [*] Watchdog Timer Support  --->
      <*>   AMD/ATI SP5100 TCO Timer/Watchdog
   [*] HID bus support  --->
      <*>   I2C HID support  --->
            AMD SFH HID Support  --->
               <*> AMD Sensor Fusion Hub
   <*> EDAC (Error Detection And Correction) reporting  --->
      <*>   Decode MCEs in human-readable form (only on AMD for now)
      <*>   Output ACPI APEI/GHES BIOS detected errors via EDAC
   [*] IOMMU Hardware Support  --->
      [*]   AMD IOMMU support
   [*] Generic powercap sysfs driver  --->
      <*>   Intel RAPL Support via MSR Interface
KERNEL NVMe/SSD slots
Device Drivers  --->
   NVME Support  --->
      <*> NVM Express block device
KERNEL Wi-Fi and Bluetooth
Device Drivers  --->
   [*] Network device support  --->
      [*]   Wireless LAN  --->
         [*]   MediaTek devices
            <*>     MediaTek MT7921E (PCIe) support
[*] Networking support  --->
   <M>   Bluetooth subsystem support  --->
      [*]     Bluetooth High Speed (HS) features
      [*]   Bluetooth Low Energy (LE) features
            Bluetooth device drivers  --->
               <M> HCI USB driver
               [*]   MediaTek protocol support
KERNEL Graphics
Device Drivers  --->
   Graphics support  --->
      <M> AMD GPU
      [*]   Enable amdgpu support for SI parts
            ACP (Audio CoProcessor) Configuration  --->
               [*] Enable AMD Audio CoProcessor IP support
      [*]   HSA kernel driver for AMD GPU devices
      [*]     Enable HMM-based shared virtual memory manager
      Frame buffer Devices  --->
         <*> Support for frame buffer device drivers  --->
            <*>   VGA 16-color graphics support
            [*]   VESA VGA graphics support
            [*]   EFI-based Framebuffer Support
KERNEL Keyboard and touchpad
Device Drivers  --->
   I2C Support  --->
      <*> I2C support
      <*>   I2C device interface
      I2C Hardware Bus Support  --->
         <*> Intel PIIX4 and compatible (ATI/AMD/Serverworks/Broadcom/SMSC)
         <*> Synopsys DesignWare Platform
         [*]   AMD PSP I2C semaphore support
   [*] Pin controllers  --->
      [*]   AMD GPIO pin control
   [*] HID bus support  --->
      <*>   Generic HID driver
            Special HID drivers  --->
               <*> HID Multitouch panels
            USB HID support  --->
               <*> USB HID transport layer
      <*>   I2C HID support  --->
               <*>   HID over I2C transport layer ACPI driver
KERNEL USB4/Thunderbolt
Device Drivers  --->
   <*> Unified support for USB4 and Thunderbolt  --->
KERNEL Sound card
Device Drivers  --->
   <M> Sound card support  --->
      <M> Advanced Linux Sound Architecture  --->
         HD-Audio  --->
            <M> HD Audio PCI
            <M> Build Realtek HD-audio codec support
            <M> Build HDMI/DisplayPort HD-audio codec support
         <M>   ALSA for SoC audio support  --->
            <M>   AMD Audio Coprocessor-v3.x support
            <M>   AMD Audio Coprocessor - Renoir support
            <M>   AMD Audio Coprocessor-v5.x I2S support
            <M>   AMD Audio Coprocessor-v6.x Yellow Carp support
            <M>   AMD Audio Coprocessor-v6.2 RPL support
            <M>   AMD Audio Coprocessor-v6.3 Pink Sardine support
            [*]   Sound Open Firmware Support  --->
               <M>   SOF PCI enumeration support
               <M>   SOF support for AMD audio DSPs
               <M>     SOF support for RENOIR
               <M>     SOF support for VANGOGH
               <M>     SOF support for REMBRANDT
KERNEL Webcam
Device Drivers  --->
   <M> Multimedia support  --->
      [ ]   Filter media drivers
            Media core support  --->
               <M> Video4Linux core
            Media drivers  --->
               [*] Media USB Adapters  --->
                  <M>   USB Video Class (UVC)
KERNEL LED Matrix
Device Drivers  --->
   [*] USB support  --->
      <M>   USB Modem (CDC ACM) support

Setup

Bluetooth

Enable the bluetooth service. See Bluetooth if the service does not exist.

root #systemctl enable --now bluetooth

Sound

Enable pipewire, pipewire-pulse, and wireplumber. These commands add your user to the pipewire group, enable services for all users (next boot), and start services for your user.

user $sudo usermod -aG pipewire $(whoami)
user $sudo systemctl enable --global pipewire{,-pulse}.{service,socket} wireplumber.service
user $systemctl start --user pipewire{,-pulse}.{service,socket} wireplumber.service

Fingerprint reader

There are a number of fingerprint reader packages but fprintd is recommended.

root #emerge --ask sys-auth/fprintd

Configuration

Web configuration for input modules

The QMK-based input modules (keyboard, numpad, and macropad) are configurable via https://keyboard.frame.work and the LED matrix is configurable via https://ledmatrix.frame.work once some udev rules are in place; 50-qmk.rules (sourced from GitHub) for QMK devices and 50-framework.rules for the LED matrix.

FILE /etc/udev/rules.d/50-qmk.rules
# Atmel DFU
### ATmega16U2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2fef", TAG+="uaccess"
### ATmega32U2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", TAG+="uaccess"
### ATmega16U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff3", TAG+="uaccess"
### ATmega32U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", TAG+="uaccess"
### AT90USB64
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff9", TAG+="uaccess"
### AT90USB162
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffa", TAG+="uaccess"
### AT90USB128
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", TAG+="uaccess"

# Input Club
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", ATTRS{idProduct}=="b007", TAG+="uaccess"

# STM32duino
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", TAG+="uaccess"
# STM32 DFU
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", TAG+="uaccess"

# BootloadHID
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", TAG+="uaccess"

# USBAspLoader
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", TAG+="uaccess"

# USBtinyISP
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1782", ATTRS{idProduct}=="0c9f", TAG+="uaccess"

# ModemManager should ignore the following devices
# Atmel SAM-BA (Massdrop)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"

# Caterina (Pro Micro)
## pid.codes shared PID
### Keyboardio Atreus 2 Bootloader
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="2302", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## Spark Fun Electronics
### Pro Micro 3V3/8MHz
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9203", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### Pro Micro 5V/16MHz
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9205", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### LilyPad 3V3/8MHz (and some Pro Micro clones)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9207", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## Pololu Electronics
### A-Star 32U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1ffb", ATTRS{idProduct}=="0101", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## Arduino SA
### Leonardo
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0036", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### Micro
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0037", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## Adafruit Industries LLC
### Feather 32U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239a", ATTRS{idProduct}=="000c", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### ItsyBitsy 32U4 3V3/8MHz
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239a", ATTRS{idProduct}=="000d", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### ItsyBitsy 32U4 5V/16MHz
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239a", ATTRS{idProduct}=="000e", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## dog hunter AG
### Leonardo
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0036", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### Micro
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0037", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"

# hid_listen
KERNEL=="hidraw*", MODE="0660", GROUP="plugdev", TAG+="uaccess", TAG+="udev-acl"

# hid bootloaders
## QMK HID
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2067", TAG+="uaccess"
## PJRC's HalfKay
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="0478", TAG+="uaccess"

# APM32 DFU
SUBSYSTEMS=="usb", ATTRS{idVendor}=="314b", ATTRS{idProduct}=="0106", TAG+="uaccess"

# GD32V DFU
SUBSYSTEMS=="usb", ATTRS{idVendor}=="28e9", ATTRS{idProduct}=="0189", TAG+="uaccess"

# WB32 DFU
SUBSYSTEMS=="usb", ATTRS{idVendor}=="342d", ATTRS{idProduct}=="dfa0", TAG+="uaccess"
FILE /etc/udev/rules.d/50-framework.rules
# LED Matrix, ModemManager should ignore
SUBSYSTEMS=="usb", ATTRS{idVendor}=="32ac", ATTRS{idProduct}=="0020", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"

Once one or both of these files have been added, run the following:

root #udevadm control --reload-rules
root #udevadm trigger

See also

External resources