Skip to content

FW16 BIOS 03.05 beta - Linux fails to boot with kernel parameter "efi=disable_early_pci_dma" set or kernel config CONFIG_EFI_DISABLE_PCI_DMA enabled #8

@sinatosk

Description

@sinatosk

Device Information

System Model or SKU

Please select one of the following

  • Framework Laptop 13 (11th Gen Intel® Core™)
  • Framework Laptop 13 (12th Gen Intel® Core™)
  • Framework Laptop 13 (13th Gen Intel® Core™)
  • Framework Laptop 13 (AMD Ryzen™ 7040 Series)
  • Framework Laptop 13 (Intel® Core™ Ultra Series 1)
  • Framework Laptop 16 (AMD Ryzen™ 7040 Series)

BIOS VERSION

03.05

DIY Edition information

If you are experiencing an issue on a DIY system, Please also fill out the memory and storage devices you are using.

Memory: Framework - 32 (2 x 16GB) DDR5-5600
Storage: Western Digital SN850X 2TB (2280), Western Digital SN770M 2TB (2230)

Standalone Operation

Are you running your mainboard as a standalone device. Is standalone mode enabled in the BIOS?

  • Yes
  • No

Describe the bug

With the Linux kernel paramater "efi=disable_early_pci_dma" ( or you don't but have the kernel config CONFIG_EFI_DISABLE_PCI_DMA ) enabled ), set, after the system has posted and starts to boot the OS, it's just sitting at there idle ( several minutes ) at the Framework logo until I press the power button ( not holding it down but just tap it ) and it turns off

Steps To Reproduce

Steps to reproduce the behaviour:

  1. Power on and wait for the Framework logo
  2. I wait several minutes thinking it might boot
  3. Tap power button ( after waiting ) and it turns off

Expected behaviour

  1. Power on and wait for the Framework logo
  2. Framework logo changes to showing the Framework logo plus plymouth animation starts to play
  3. I'm booted into Linux tty ready for me to enter my credentials.

Solution

To rid of this issue

  • set kernel parameter "efi=no_disable_early_pci_dma" if you have CONFIG_EFI_DISABLE_PCI_DMA enabled
  • or unset kernel parameter "efi=disable_early_pci_dma" if CONFIG_EFI_DISABLE_PCI_DMA is disabled

Operating System:

  • OS/Distribution: Gentoo ( primarily ), Arch Linux
  • Version: Gentoo ( Linux 6.12.0 ), Arch Linux ( 6.10.6, I've not updated this since I switched over to Gentoo )
  • Linux Kernel Version ( From Gentoo only ): Linux hostname 6.12.0-mainline-byw-gcc-znver4 #1 SMP PREEMPT_RT Wed Nov 20 06:58:15 GMT 2024 x86_64 AMD Ryzen 7 7840HS w/ Radeon 780M Graphics AuthenticAMD GNU/Linux

Additional context

I've only tried Linux 6.10.6 ( Arch Linux ) and 6.12.0 ( Gentoo )

About "efi=disable_early_pci_dma" / CONFIG_EFI_DISABLE_PCI_DMA

Disable the busmaster bit in the control register on all PCI bridges
while calling ExitBootServices() and passing control to the runtime
kernel. System firmware may configure the IOMMU to prevent malicious
PCI devices from being able to attack the OS via DMA. However, since
firmware can't guarantee that the OS is IOMMU-aware, it will tear
down IOMMU configuration when ExitBootServices() is called. This
leaves a window between where a hostile device could still cause
damage before Linux configures the IOMMU again.

If you say Y here, the EFI stub will clear the busmaster bit on all
PCI bridges before ExitBootServices() is called. This will prevent
any malicious PCI devices from being able to perform DMA until the
kernel reenables busmastering after configuring the IOMMU.

This option will cause failures with some poorly behaved hardware
and should not be enabled without testing. The kernel commandline
options "efi=disable_early_pci_dma" or "efi=no_disable_early_pci_dma"
may be used to override this option.

and more info about this from Matthew Garrett

I've been using "efi=disable_early_pci_dma" ( not "efi=no_disable_early_pci_dma" ) with bioses 03.02, 03.03 and 03.04 with no issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions