Thanks to a tip by Richard Purdie on the kernel-discuss mailing list, I found the problem. It turns out that the Linux MMC layer assumes that the card has a 512-byte block size.

I managed to work around it by forcing the block size on my card to be 512 bytes (even though it returns 1024 bytes). This isn’t the correct fix, but it seems to do the job for now. I’ll look into a proper fix once I have a chance to come back to it.

Read full post