RPi4 icon indicating copy to clipboard operation
RPi4 copied to clipboard

NVME support for RPi Compute Board 4

Open CreeperKong opened this issue 4 years ago • 6 comments

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

CreeperKong avatar Dec 24 '20 10:12 CreeperKong

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.

jlinton avatar Jan 04 '21 15:01 jlinton

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?

rtreffer avatar Mar 12 '21 10:03 rtreffer

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 avatar Aug 26 '21 14:08 jlinton

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.

jlinton avatar Sep 01 '21 22:09 jlinton

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.

ElvishJerricco avatar Oct 16 '21 00:10 ElvishJerricco

Hey folks

Any update on this?

xvzf avatar Dec 23 '23 21:12 xvzf