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