while trying to switch from mainline kernel to latest downstream kernel (6.12.y cloned yesterday), I found that it's not possible to get MMC working on RPi2 B v1.1 (the rare BCM2836 model), when booting with
kernel build with bcm2709_defconfig without any changes, with latest firmware, proper DT (arch/arm/boot/dts/broadcom/bcm2836-rpi-2-b.dtb from downstream kernel build) and upstream_kernel=1 commented in config.txt:
Code: Select all
Booting Linux on physical CPU 0xf00
Linux version 6.12.33-rpi+ (md@rpi4) (gcc (Debian 12.2.0-14+deb12u1) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #11 SMP Fri Jun 20 15:38:35 CEST 2025
CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d
CPU: div instructions available: patching division code
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
OF: fdt: Machine model: Raspberry Pi 2 Model B Rev 1.1
Code: Select all
raspberrypi-firmware soc:firmware: Attached to firmware from 2025-05-14T12:25:47, variant start_x
raspberrypi-firmware soc:firmware: Firmware hash is 17084b403fb60475b8ee2641c26049a7d54bf153
Code: Select all
sdhost-bcm2835 3f202000.mmc: loaded - DMA enabled (>1)
mmc0: host does not support reading read-only switch, assuming write-enable
mmc0: new high speed SDXC card at address 0007
mmcblk0: mmc0:0007 SD128 117 GiB
sdhost-bcm2835 3f202000.mmc: wait_transfer_complete - still waiting after 100000 retries
sdhost-bcm2835 3f202000.mmc: previous command (18) not complete (EDM 00010902)
sdhost-bcm2835 3f202000.mmc: previous command (18) not complete (EDM 00010902)
usb 1-1: new high-speed USB device number 2 using dwc2
sdhost-bcm2835 3f202000.mmc: previous command (18) not complete (EDM 00010902)
sdhost-bcm2835 3f202000.mmc: previous command (18) not complete (EDM 00010902)
sdhost-bcm2835 3f202000.mmc: previous command (18) not complete (EDM 00010902)
sdhost-bcm2835 3f202000.mmc: previous command (18) not complete (EDM 00010902)
mmcblk0: unable to read partition table
mmcblk0: mmc0:0007 SD128 117 GiB (quirks 0x80000000)
mmc0: card 0007 removed
As I found that the downstream kernel recently switched to upstream SDHOST driver ( CONFIG_MMC_BCM2835) in commit cb6b027 (https://github.com/raspberrypi/linux/co ... cc76f49369),
I tried to switch back to downstream driver (CONFIG_MMC_BCM2835_SDHOST enabled with CONFIG_MMC_BCM2835 disabled) but that didn't help, with this config, there are no MMC related messages in kernel log and the kernel ends up waiting for root device forever.
I can rule out the possibility of board or card issue because the board & cards works flawlessly with mainline/upstream kernel 6.12.33, using the same upstream driver (CONFIG_MMC_BCM2835) which throws above errors in downstream kernel.
As CONFIG_MMC_BCM2835 works with upstream kernel, while neither CONFIG_MMC_BCM2835 nor CONFIG_MMC_BCM2835_SDHOST work in downstream one, I guess the cause might be in downstream kernel, but outside these drivers...
Any hints/patches how to solve this issue are welcome. In case you don't have BCM2836 board to try, I'm willing to test on mine.
