diff mbox

mmc does not work in qemu n900

Message ID 201501262204.59305@pali (mailing list archive)
State New, archived
Headers show

Commit Message

Pali Rohár Jan. 26, 2015, 9:04 p.m. UTC
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:

 

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.

Comments

Aaro Koskinen Jan. 26, 2015, 11:21 p.m. UTC | #1
Hi,

On Mon, Jan 26, 2015 at 10:04:59PM +0100, Pali Rohár wrote:
> 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.

Has it ever worked? It could be just that QEMU's emulation is broken.
Since the kernel works on actual HW, you probably should contact
QEMU maintainers.

I don't see n900 in Debian's QEMU. There's n800 and n810 but
I couldn't boot any of my kernels with those...

A.
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Pali Rohár Jan. 27, 2015, 9:17 a.m. UTC | #2
On Tuesday 27 January 2015 00:21:04 Aaro Koskinen wrote:
> Hi,
> 
> On Mon, Jan 26, 2015 at 10:04:59PM +0100, Pali Rohár wrote:
> > 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.
> 
> Has it ever worked? It could be just that QEMU's emulation is
> broken. Since the kernel works on actual HW, you probably
> should contact QEMU maintainers.
> 
> I don't see n900 in Debian's QEMU. There's n800 and n810 but
> I couldn't boot any of my kernels with those...
> 
> A.

It worked with stock Nokia kernel (2.6.28).

N900 qemu support is not in upstream qemu project, but in linaro 
qemu version. You can find it e.g. in ubuntu: 
http://packages.ubuntu.com/source/precise-updates/qemu-linaro
Pali Rohár Dec. 25, 2015, 12:57 p.m. UTC | #3
On Monday 26 January 2015 22:04:59 Pali Rohár wrote:
> 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.

I will bring this tread to front again as mmc without one of provided 
patches does not work with 4.4-rc6 kernel in N900 qemu.
diff mbox

Patch

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;