UEFI+ACPI on Raspberry Pi 4B


Feature

Driver Name

Silicon

ACPI Table Description

Linux Kernel Submit Message & Link

ACPI Table

Windows Status

Linux Status

Description

 

Feature

Driver Name

Silicon

ACPI Table Description

Linux Kernel Submit Message & Link

ACPI Table

Windows Status

Linux Status

Description

 

SD/eMMC

bcm2836sdhc

BCM2836/BCM2711

// emmc2 Host Controller. (brcm,bcm2711-emmc2)
Device (SDC3)
{
Name (_HID, "BRCME88C")

 

// ArasanSD 3.0 SD Host Controller. (brcm,bcm2835-sdhci)
Device (SDC1)
{
Name (_HID, "BCM2847")
Name (_CID, "BCM2847")

mmc: sdhci-iproc: Add ACPI bindings for the RPi
https://github.com/torvalds/linux/commit/4f9833d3ec8da34861cd0680b00c73e653877eb9

edk2-platforms\Platform\RaspberryPi\AcpiTables\Emmc.asl

edk2-platforms\Platform\RaspberryPi\AcpiTables\Sdhc.asl

Working

Working

Broadcom 2836 Arasan SD Host Controller

 

Display

MSBDD (Inbox)

 

 

 

 

Working

 

 

 

Audio

rpiwav

BCM2836/BCM2711

 

 

 

Working

 

The audio driver (rpiwav.sys) uses the PWM driver (bcm2836pwm.sys) exclusively. rpiwav.sys sends PCM audio packets to bmc2836pwm.sys to modulate and output over the right and left channels resulting in a stereo audio output.

 

HDMI Audio

rpi4hdmiwav
rpi4hdmiwavbridge

BCM2711

 

 

 

Partial working

 

only the HDMI0 port is supported

 

PCIe

 

 

Device(PCI0)
{
Name(_HID, EISAID("PNP0A08")) // PCI Express Root Bridge
Name(_CID, EISAID("PNP0A03")) // Compatible PCI Root Bridge

General PCIE Root Bridge Driver at
./drivers/acpi/pci_root.c

edk2-platforms\Platform\RaspberryPi\AcpiTables\Pci.asl

 

 

 

 

GPIO

bcmgpio

BCM2836/BCM2711

 

 

 

Working

Not Working

BCM2836 GPIO Controller

 

I2C

bcmi2c

BCM2836/BCM2711

// Description: I2C
Device (I2C1)
{
Name (_HID, "BCM2841")
Name (_CID, "BCM2841")

 

edk2-platforms\Platform\RaspberryPi\AcpiTables\GpuDevs.asl

Working

 

 

 

SPI

bcmspi

BCM2836/BCM2711

Device (SPI0)
{
Name (_HID, "BCM2838")
Name (_CID, "BCM2838")

 

edk2-platforms\Platform\RaspberryPi\AcpiTables\GpuDevs.asl

Working

 

Raspberry Pi 2 (BCM2836) SPI Controller driver, a single SPI peripheral (SPI0)

 

SPI

bcmauxspi

BCM2836/BCM2711

 

 

 

Working

 

Raspberry Pi 2 (BCM2836)  AUXSPI Controller

 

UART

pi_miniuart

BCM2836/BCM2711

// PL011 based UART.
Device (URT0)
{
Name (_HID, "BCM2837")
Name (_CID, "ARMH0011")

drivers: PL011: add ACPI probing for SBSA UART
https://github.com/torvalds/linux/commit/3db9ab0b6d8a293435a78c048f877099e040f72c

edk2-platforms\Platform\RaspberryPi\AcpiTables\Uart.asl

Working

Not Working

BCM283x Mini UART driver.
This is a Windows 10 device driver for the Broadcom proprietary version of the 16550 UART, available on the Pi 2 and 3. Due to lack of certain features present in the standard 16550 UART, the Broadcom version is called miniUart.

 

UART

SerPL011

BCM2836

Device (URTM)
{
Name (_HID, "BCM2836")
Name (_CID, "BCM2836")

serial: 8250_bcm2835aux: Add ACPI support
https://github.com/torvalds/linux/commit/fcc446c8aa6303b247b0d88f460167b731265282

edk2-platforms\Platform\RaspberryPi\AcpiTables\Uart.asl

Working

Working

ARM PL011 UART Driver, using _HID as BCM2887

 

Bluetooth

cywbtserialbus

BCM2836/BCM2711

Device(BTH0)
{
Name (_HID, "BCM2EA6")
Name (_CID, "BCM2EA6")

Bluetooth: hci_bcm: Add PM for BCM devices
https://github.com/torvalds/linux/commit/0395ffc1ee0509df11ad830772c22d13627e02ec

edk2-platforms\Platform\RaspberryPi\AcpiTables\Uart.asl

Working

 

Cypress Bluetooth over UART Transport Driver

 

WIFI

 

 

 

 

 

Not working

 

No driver available

 

Ethernet

bcmgenet

BCM2711

Device (ETH0)
{
Name (_HID, "BCM6E4E")
Name (_CID, "BCM6E4E")

net: bcmgenet: Initial bcmgenet ACPI support
https://github.com/torvalds/linux/commit/99c6b06a37d4cab118c45448fef9d28df62d35d8

edk2-platforms\Platform\RaspberryPi\AcpiTables\Dsdt.asl

Working

Working

Broadcom GENET Gigabit Ethernet Controller

 

PWM

bcm2836pwm

BCM2836/BCM2711

// PWM Driver
Device (PWM0)
{
Name (_HID, "BCM2844")
Name (_CID, "BCM2844")

 

edk2-platforms\Platform\RaspberryPi\AcpiTables\GpuDevs.asl

Working

 

 

 

USB

rpiuxflt

BCM2711

 

 

 

Partially working

 

Raspberry Pi 4 (BCM2711)  VIA VL805 XHCI Host Controller Filter Driver

 

USB

mcci_dwchsotg

BCM2711

 

 

 

Partially working

 

 

 

USB OTG

 

BCM2848

// DWC OTG Controller
Device (USB0)
{
Name (_HID, "BCM2848")
#if (RPI_MODEL == 3)
Name (_CID, "DWC_OTG")
#elif (RPI_MODEL == 4)
Name (_CID, "BCM2848")
#endif

usb: dwc2: Enable RPi in ACPI mode
https://github.com/torvalds/linux/commit/2e5db2c0e508f10daa348c47c3093d34f0b865c8

edk2-platforms\Platform\RaspberryPi\AcpiTables\GpuDevs.asl

 

 

 

 

GPU

roskmd.sys

 

// Video Core 4 GPU
Device (GPU0)
{
Name (_HID, "BCM2850")
Name (_CID, "BCM2850")

 

edk2-platforms\Platform\RaspberryPi\AcpiTables\GpuDevs.asl

Not working

Not Working

the driver loads, but it doesn't do much as it's unfinished

 

VC4 Mailbox

RPIQ

BCM2836

 

 

 

Working

 

 

 

VC4 HIQ

VCHIQ

BCM2836

 

 

 

Not working

 

This is the Video Core Host Interface Queue driver that is responsible to marshall communication with the GPU firmware. THe VCHIQ driver is main function is to provide the interface with firmware with various client such as MMAL.

 

UEFI

dsdtpatch

 

 

 

 

 

 

DSDT Patch:

  1. changes the _HIDs of the

  • PL011 controller to BCM2887

  • XHCI controller to RPI0D10

    so Windows won't install the incompatible inbox drivers instead of our own versions. This is not necessary if the drivers are properly signed.

  1. fixes the PWM definition and adds an analog audio device

  2. adds dummy HDMI controller and digital audio devices

 

USBSTOR

uaspdisabler

 

 

 

 

 

 

Add registray

 

Power

 

 

 

 

 

 

 

 

 

SD/eMMC

rpisdhc

BCM2836

 

 

 

 

 

 

 

SD/eMMC

bcmemmc2

BCM2711

 

 

 

 

 

Broadcom eMMC2 SD Host Controller

 

SD/eMMC

SDHostBRCME88C

BCM2711

 

 

 

 

 

Broadcom SD Host (BRCME88C) for Raspberry Pi 4

 

Camera

 

 

 

 

 

 

 

 

 

Embedded Controller