pftf / RPi4

Raspberry Pi 4 UEFI Firmware Images
https://rpi4-uefi.dev
Other
1.19k stars 140 forks source link

NVME support for RPi Compute Board 4 #120

Open CreeperKong opened 3 years ago

CreeperKong commented 3 years ago

The CM4 provides a PCI Express x1 Slot extension on the IO Board. Is it possible to give support for NVME on the platform?

jlinton commented 3 years ago

Yes, we are working in that direction. There are two parts, first the firmware needs an update to deal with the mapping changes the rpi foundation made to the pcie mapping between the original rpi4 and the CM4. At that point we could add the NVMe driver to the firmware, but the OS's will also need to directly support PCIe rather than the XHCI platform device we have in place for compatibility purposes. That is also progressing in the form of a generic ACPI/PCIe SMC conduit standard.

So I would expect that is possible in the near future.

rtreffer commented 3 years ago

ACPI+devicetree works if the following patch is applied: https://github.com/rtreffer/edk2-platforms/commit/126fdc009f215b3491760011ac08f8515e2b6bfd

@jlinton would you consider the missing ACPI only support a blocker against enabling this upstream?

jlinton commented 3 years ago

The edk2 code was merged last week, so edk2 can boot from NVMe on this device. The kernel patches https://lkml.org/lkml/2021/8/26/73

jlinton commented 3 years ago

The kernel patches look good (their Acks), I would hope they land in 5.16 at this point, which itself will be a couple of months out. This gives me time if they get merged to -next/etc in the near future, to fix the fact that I changed the _DSD that is now in the .30 firmware just built.

For now I would suggest use the .30 release, and merge the linked above patches with the third patch's line

if (strlen(soc) != ACPI_OEM_ID_SIZE)

changed to:

if (strlen(soc) < ACPI_OEM_ID_SIZE)

and "bc2711" changed to "bcm271" in the table.

ElvishJerricco commented 2 years ago

I would hope they land in 5.16 at this point

If that's the case, will it still need these changes?

if (strlen(soc) != ACPI_OEM_ID_SIZE)

changed to:

if (strlen(soc) < ACPI_OEM_ID_SIZE)

and "bc2711" changed to "bcm271" in the table.

xvzf commented 8 months ago

Hey folks

Any update on this?