I'm working on a eMMC/SD driver for our Thunder ARMv8 SoCs by porting
the MIPS driver I wrote earlier but I'm running into some issues and
have some comments.
First of all, our SoC performs a number of high-level operations in
hardware which are not supported by the U-Boot model. The biggest issue
is how we handle data transfers. We do not support sending CMD12 to stop
a transmission and instead rely on CMD23 for multi-sector transfers. The
mmc_read_blocks/mmc_write_blocks functions don't work with our hardware.
For our Octeon SoC I basically had to replicate everything in mmc.c for
our SoC and replace all of the functionality. I am wondering if this is
considered acceptable because our hardware just does not fit the U-Boot
MMC driver model very well. I also ran into a lot of issues with
sd_send_op_cond/mmc_send_op_cond. Our SoC hardware also automatically
handles things like polling the status. It would be nice if most or all
of the functions inside mmc.c could be overridden by the driver.
Also, our MMC controller shows up as a PCI device but the single PCI
device can handle up to four MMC slots using the same registers. The
probe support does not allow for this. There can be multiple PCI devices
as well in our NUMA configurations, with one PCI device per SoC.
(408) 943-7198 (510) 789-8988 (cell)
U-Boot mailing list