As promised last weekend, here are the results of my investigations into the latest kernel in the 2007.26-8 kernel. As I previously observed, the transfer speed is capped at 24MHz even though the device is capable of operating at 48MHz. This cuts the maximum transfer rate of high-speed SD and MMC cards. Apparently this was done for stability reasons, but I never encountered any problems with my patched kernels.
In addition, after some tests and a careful read of the diff, I’ve discovered that they have deliberately removed 4-bit MMC support. I know this is deliberate because they’ve included the high-speed MMC changes that went in to the mainline kernel at the same time. So, if you’ve got an MMCplus or MMCmobile card, this is doubly annoying as your card is now running at 1-bit 24MHz instead of 4-bit 48MHz. This translates to a 3MB/s transfer rate, instead of 13MB/s – that’s quite a bit. I don’t know the reasoning behind this change but I do know I did not observe any problems previously and never received any reports of problems. Perhaps someone (Daniel?) can shed some light on this.
On the bright side, they’ve taken the trouble to back-port the MMC-HC support (This is the MMC equivalent of SDHC) from the latest mainline kernel. The only catch is that these cards are impossible to find. Pierre was only able to test his MMC-HC change because Nokia provided him with a pre-production card they managed to wrangle out of some manufacturer (probably Samsung). I don’t know what the problem is, but it seems MMC is really struggling to maintain relevance and problems like this don’t help. I have somewhat mixed feelings about it because the MMC standard is, at least notionally, a public and freely implementable one – they just charge to get a copy of the spec. On the other hand, while the full SD spec is still locked up behind a crazy NDA, they have published very useful simplified specs which has made it easier to implement SD features than MMC ones. Ah well.
Finally, there have been multiple reports of the new kernel b0rking up cards and causing other kinds of problems (see my previous post‘s comments for links and details). I don’t know why this is, and I haven’t personally observed any problems, so I can’t offer any suggestions or solutions at this time.
Anyway, the punchline of all of this is that I definitely have good reasons to build a custom kernel to restore 48Mhz and 4-bit MMC support. I’ll be trying to work on that this week, but my personal life is pretty hectic right now, so I do rather doubt it will be done that soon, but I’ll certainly let you all know when it is.