2008-07-24 13:24:05

by Thomas Kunze

[permalink] [raw]
Subject: mmc_test with mmc_spi

Hi Pierre,

I wrote a small hack to be able to use the mmc_test driver on mmc-spi host. You or somebody else might find it useful.
All test but "Correct xfer_size at write (start failure)", "Correct xfer_size at read (start failure)" and "Correct xfer_size
at write (midway failure)" passed.
I'm not sure what these tests try to do and how they do it, so I don't know if my modifcations of mmc_test, my spi driver or the
mmc-spi driver are responsible.

It would be great if you could provide some insight.

Regards,
Thomas

--
diff --git a/drivers/mmc/card/mmc_test.c b/drivers/mmc/card/mmc_test.c
index d6b9b48..2366150 100644
--- a/drivers/mmc/card/mmc_test.c
+++ b/drivers/mmc/card/mmc_test.c
@@ -44,7 +44,7 @@ static int mmc_test_set_blksize(struct mmc_test_card *test, unsigned size)

cmd.opcode = MMC_SET_BLOCKLEN;
cmd.arg = size;
- cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
+ cmd.flags = MMC_RSP_SPI_R1;
ret = mmc_wait_for_cmd(test->card->host, &cmd, 0);
if (ret)
return ret;
@@ -70,14 +70,14 @@ static void mmc_test_prepare_mrq(struct mmc_test_card *test,
}

mrq->cmd->arg = dev_addr;
- mrq->cmd->flags = MMC_RSP_R1 | MMC_CMD_ADTC;
+ mrq->cmd->flags = MMC_RSP_SPI_R1;

if (blocks == 1)
mrq->stop = NULL;
else {
mrq->stop->opcode = MMC_STOP_TRANSMISSION;
mrq->stop->arg = 0;
- mrq->stop->flags = MMC_RSP_R1B | MMC_CMD_AC;
+ mrq->stop->flags = MMC_RSP_SPI_R1;
}

mrq->data->blksz = blksz;
@@ -103,7 +103,7 @@ static int mmc_test_wait_busy(struct mmc_test_card *test)

cmd.opcode = MMC_SEND_STATUS;
cmd.arg = test->card->rca << 16;
- cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
+ cmd.flags = MMC_RSP_SPI_R2;

ret = mmc_wait_for_cmd(test->card->host, &cmd, 0);
if (ret)
@@ -155,10 +155,10 @@ static int mmc_test_buffer_transfer(struct mmc_test_card *test,
if (data.error)
return data.error;

- ret = mmc_test_wait_busy(test);
+/* ret = mmc_test_wait_busy(test);
if (ret)
return ret;
-
+*/
return 0;
}

@@ -240,7 +240,7 @@ static void mmc_test_prepare_broken_mrq(struct mmc_test_card *test,
MMC_WRITE_BLOCK : MMC_READ_SINGLE_BLOCK;
mrq->stop = NULL;
} else {
- mrq->cmd->opcode = MMC_SEND_STATUS;
+ mrq->cmd->opcode = MMC_SEND_CID;
mrq->cmd->arg = test->card->rca << 16;
}
}
@@ -333,7 +333,7 @@ static int mmc_test_simple_transfer(struct mmc_test_card *test,

mmc_wait_for_req(test->card->host, &mrq);

- mmc_test_wait_busy(test);
+ //mmc_test_wait_busy(test);

return mmc_test_check_result(test, &mrq);
}
@@ -367,7 +367,7 @@ static int mmc_test_broken_transfer(struct mmc_test_card *test,

mmc_wait_for_req(test->card->host, &mrq);

- mmc_test_wait_busy(test);
+ //mmc_test_wait_busy(test);

return mmc_test_check_broken_result(test, &mrq);
}


2008-07-26 23:34:50

by Pierre Ossman

[permalink] [raw]
Subject: Re: mmc_test with mmc_spi

On Thu, 24 Jul 2008 15:23:38 +0200
Thomas Kunze <[email protected]> wrote:

> Hi Pierre,
>
> I wrote a small hack to be able to use the mmc_test driver on mmc-spi host. You or somebody else might find it useful.
> All test but "Correct xfer_size at write (start failure)", "Correct xfer_size at read (start failure)" and "Correct xfer_size
> at write (midway failure)" passed.
> I'm not sure what these tests try to do and how they do it, so I don't know if my modifcations of mmc_test, my spi driver or the
> mmc-spi driver are responsible.
>
> It would be great if you could provide some insight.
>

I haven't really thought about the SPI part that much. It has just the
one driver, so bugs should not be that reoccuring. There's no harm in
making mmc_test handle it though.

I don't know why those tests fail. There's a bit hackish, so they might
not work as intended with the SPI version of the protocol. Basically,
the send and invalid request to the controller where the card will stop
the data transaction too early. This is a crude test to make sure the
controller doesn't over-estimate the amount of data transferred.

Rgds
--
-- Pierre Ossman

Linux kernel, MMC maintainer http://www.kernel.org
rdesktop, core developer http://www.rdesktop.org

WARNING: This correspondence is being monitored by the
Swedish government. Make sure your server uses encryption
for SMTP traffic and consider using PGP for end-to-end
encryption.


Attachments:
signature.asc (197.00 B)