Hi all,
I’ve spent the last couple of days trying to get an MM8108-MF15457 up over SDIO on a Compute Module 5 and I’ve hit something I can’t get past on my own. Every Morse branch that supports the MM8108 crashes the RP1 SDIO host controller before the chip can enumerate, and the one branch that doesn’t crash won’t run MM8108 firmware.
My setup is a CM5 Rev 1.0 with the module on the 40-pin header of the PI. CLK on GPIO22, CMD GPIO23, D0-D3 on GPIO24/25/26/27, RESET_N on GPIO17 with a 10k pulldown. WAKE and BUSY aren’t connected — I’m only using reset. Power is fine, vcgencmd get_throttled reads 0x0.
config.txt:
gpio=17=op,dh
dtoverlay=sdio-pi5
dtoverlay=morse-sdio
kernel=kernel_2712-morse.img
The gpio= line is there because RESET_N is held low by the pulldown at boot and the chip won’t enumerate without it. My own overlay adds the child node under rp1_mmc0:
mm8108@2 {
compatible = "morse,mm610x";
reg = <2>;
reset-gpios = <&gpio 17 0>;
status = "okay";
};
I used reg = <2> because morse_of_probe runs against function 2, and morse,mm610x because the SDIO match table in sdio.c doesn’t have an MM8108 entry — just morse,mm6104 and morse,mm610x. Those were both guesses that turned out to work, so tell me if there’s a proper way to do this.
What I tried, same board and same overlay throughout:
| Kernel | dwcmshc probe | mmc2 | MM8108 |
|---|---|---|---|
| Stock RPi OS 6.18.34+rpt | fine | yes — 0x325b / 0x0809 | n/a, no driver |
| 1.16.x + driver 1.16.4 + fw 1.16 | fine | yes | probes, loads FW, fails at init |
| mm8108-2.0.x + driver 2.0.0 + fw 2.0 | oops | no | never gets that far |
| mm8108-2.1.x + driver 2.1.0 + fw 2.1 | oops | no | never gets that far |
Issue is identical on 2.0.x and 2.1.x:
Unable to handle kernel execute from non-executable memory at virtual address ffffd06f59fb50d8
Internal error: Oops: 000000008600000f [#1] PREEMPT SMP
Hardware name: Raspberry Pi Compute Module 5 Rev 1.0 (DT)
CPU: 2 UID: 0 PID: 40 Comm: kworker/u19:0 Not tainted 6.12.21-morse+ #2
pc : sdhci_dwcmshc_ops+0x0/0xfffffffffffffc2f28 [sdhci_of_dwcmshc]
lr : dwcmshc_probe+0x2d0/0x778 [sdhci_of_dwcmshc]
platform_probe+0x70/0xe8
really_probe+0xc4/0x2d0
The rp1-sdio-clk ... loaded sdio_clk0 line shows up first, so the clock comes up and then the host controller dies in probe. No mmc2, so nothing to bind to. Dropping dtoverlay=sdio-pi5 stops the crash but leaves me with no SDIO host at all.
What makes me think this isn’t my wiring or my overlay: the exact same config on the stock Raspberry Pi kernel brings up mmc2 and enumerates the chip cleanly at vendor 0x325b, device 0x0809, two functions. So the hardware side seems right.
On 1.16.x it gets much further and then stops here:
morse_sdio mmc2:0001:1: sdio new func 1 vendor 0x325b device 0x809 block 0x8/0x8
morse_sdio mmc2:0001:2: sdio new func 2 vendor 0x325b device 0x809 block 0x200/0x200
morse_sdio mmc2:0001:2: morse_of_probe: Reading gpio pins configuration from device tree
morse_sdio mmc2:0001:2: Loaded firmware from morse/mm8108b2-rl.bin, size 456924, crc32 0xe4799c8d
morse_sdio mmc2:0001:2: Loaded BCF from morse/bcf_boardtype_0807.bin, size 2510, crc32 0xc8af8c0d
morse_sdio mmc2:0001:2: FW manifest pointer not set (ret:-5)
morse_sdio mmc2:0001:2: morse_firmware_init failed: -5
Before I matched the firmware to the branch I was getting Incompatible FW version: (Driver) 56.3.0, (Chip) 57.3.0 instead, which is what prompted me to keep kernel, driver and firmware on the same release line.
So, a few questions:
- Is SDIO on CM5/Pi 5 supported on any current branch? Given
sdio-pi5behaves under the stock kernel, the crash looks specific to the Morse trees rather than the hardware. - Is the dwcmshc oops something you’ve seen? It’s not in 1.16.x but it’s in both 2.0.x and 2.1.x.
- Is the
FW manifest pointer not seton 1.16.x just MM8108-over-SDIO not being supported in that release? I notice the SPI table distinguishesmorse,mm610x-spiandmorse,mm810x-spi, but the SDIO table only ever lists MM610x. - If SDIO is a dead end here, is USB the way to go for MM8108 on RP1? The build thread mentions it skips the device tree entirely, which sounds a lot more appealing right now.
Happy to post the full dmesg from any of the four, or to try patches. Thanks for any pointers.