mmc does not work in qemu n900

From: Pali RohÃr
Date: Mon Jan 26 2015 - 16:05:09 EST


Hello,

for unknown reason kernel in qemu n900 machine is not able to
detect internal eMMC memory. External SD card is detected without
problem.

If I apply this one-line patch eMMC in qemu start working:

diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 9584bff..0d4461c 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -2337,6 +2337,9 @@ static int mmc_rescan_try_freq(
return 0;
if (!mmc_attach_sd(host))
return 0;
+
+ mmc_go_idle(host);
+
if (!mmc_attach_mmc(host))
return 0;

I played with mmc and qemu n900 a bit and also this simple patch
(without first) fix problem (that mmc is not detected by kernel):

diff --git a/drivers/mmc/core/mmc_ops.c
b/drivers/mmc/core/mmc_ops.c
index 3b044c5..0c93a2c 100644
--- a/drivers/mmc/core/mmc_ops.c
+++ b/drivers/mmc/core/mmc_ops.c
@@ -157,6 +157,10 @@ int mmc_send_op_cond(

BUG_ON(!host);

+ /* reset mmc before calling op_cond */
+ memset(&cmd, 0, sizeof(struct mmc_command));
+ mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
+
cmd.opcode = MMC_SEND_OP_COND;
cmd.arg = mmc_host_is_spi(host) ? 0 : ocr;
cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R3 | MMC_CMD_BCR;


I have no idea where is problem. I also do not understand mmc
kernel code, but second patch I have on my HDD since 2.6.37.

Can somebody with knowledge of mmc subsystem look at this
problem? Why any of these two patches fix problem when mmc is not
detected by kernel in qemu (machine n900)? Detection of mmc fails
because function mmc_send_op_cond() without one of above patches
fails.

--
Pali RohÃr
pali.rohar@xxxxxxxxx

Attachment: signature.asc
Description: This is a digitally signed message part.