It's essential for some ARM SoCs. Allwinner chips like the MMC as their
first boot source, and people are very happy with having their firmware
and linux on micro SD. It makes the system unbrickable.
For coreboot, this presents a whole new set of challenges. First off,
MMC, NAND and friends are block devices. Unlike SPI, which is easily
integrateable as an alternate CBFS driver, block devices are a whole new
beast.
First, there's the potential of code reuse, or excessive duplication,
depending on how you look at it. uboot has a 1500+ LOC driver for MMC/SD
handling. Beynod that, low-level operations are passed to
device-specific drivers. I'm not happy with the details of the uboot
code, and have tried to adapt it for coreboot [1]. The result is a
complete mess. This is part of a larger effort to bring Allwinner
support to coreboot[2].
We need block device and MMC/SD support (at least for Allwinner at the
moment), and we need to do it coreboot style. That means high quality,
readable code, and most of all modular. We need an API on which to build
things. I'm not happy with the uboot model here: it's not clear what
belongs where.
So, how do we handle block devices, then MMC/SD, and potentially NAND? I
can adapt the existing code to a specification, but I am disqualified to
write that spec, as I have been brainwashed by working with the uboot
code[2]. It works, but we need a coreboot-centric approach.
Any takers?
Alex
[1] http://review.coreboot.org/4631
[2] https://github.com/mrnuke/coreboot cubie_mmc branch