From: Reinhard Meyer <u-boot@emk-elektronik.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [Question]AT91: MMC read and multiple read failed
Date: Mon, 11 Jul 2011 11:05:52 +0200 [thread overview]
Message-ID: <4E1ABCF0.6080504@emk-elektronik.de> (raw)
In-Reply-To: <4C79549CB6F772498162A641D92D5328021821FF@penmb01.corp.atmel.com>
Hello Song, Elen,
> Hello Reinhard:
>
> I've tried your patch([PATCH] AT91: enable MMC on at91sam(9260/9g20/0xe)ek) on uboot-atmel branch on at91sam9260.The sdcard is correctly initialized,but when I test "mmc read" command, I found two issues.
>
> 1.while run command "mmc read 22000000 0 1" to read the first block,it will cause "gen_atmel_mci: CMDR 00051051 (17) ARGR 00000000 (SR: 0c400025) Data Transfer Failed".
> Both read and write will fail.Sd1.0 and 2.0 cards face the same problem.
> 2.cmd 18(multiple read) failed,that means can not run "mmc read 22000000 0 2".
>
> Do you have faced the same problem?
All worked fine when I tested the patch late last year.
Since then some changes to common MMC code have been done, perhaps
those affect the Atmel implementation?
>
> To issues1: "Data Transfer Failed" is caused by transfer data lost(not read),if MCCK too high the host may not receive the data.so I try to reduce the MCCK frequency,it works.
No idea, the clock should be computed and set correctly in the code as is.
Have you investigated why it might be set too high for the card in question?
You are testing on a standard at91sam9260-ek? I can only test on a 9xe-ek,
but that should be the same.
> To issues2: While multiple reading ,it did not set block count . so multiple read failed because it don't know how many blocks to read.I set reg MCI_BLKR BCNT bit.It is add in gen_atmel_mci.c.
I think that multiple reading was added to common code.
>
> static int mci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
> {
> ...
> cmdr = mci_encode_cmd(cmd, data,&error_flags);
>
> /* Send the command */
>
> +if ((cmd->cmdidx == MMC_CMD_READ_MULTIPLE_BLOCK) ||(cmd->cmdidx == MMC_CMD_WRITE_MULTIPLE_BLOCK))
> +{
> + writel(data->blocks|mmc->read_bl_len<<16,&mci->blkr);
> +}
can't we write that register for all commands (remove the if)?
>
> writel(cmd->cmdarg,&mci->argr);
> writel(cmdr,&mci->cmdr);
> ...
>
> MCI_BLKR should be added in mmc.h:
atmel_mci.h, I hope...
> typedef struct atmel_mci {
> /* reg Offset */
> u32 cr; /* 0x00 */
> u32 mr; /* 0x04 */
> u32 dtor; /* 0x08 */
> u32 sdcr; /* 0x0c */
> u32 argr; /* 0x10 */
> u32 cmdr; /* 0x14 */
> - u32 _18; /* 0x18 */
> + u32 blkr; /* 0x18 */
> ...
>
> Do you think it is correct?
Looks correct by the data sheet. Please verify function in both read and write
modes, make sure the number of blocks read or write is correct.
> In that case,I will deliver a patch.
How does the patch for problem 1. look like?
And please run the patch through <linux>/scripts/checkpatch.pl, I see issues
in the samples you provided above.
Best Regards,
Reinhard
next prev parent reply other threads:[~2011-07-11 9:05 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-11 8:42 [U-Boot] [Question]AT91: MMC read and multiple read failed Song, Elen
2011-07-11 9:05 ` Reinhard Meyer [this message]
2011-07-11 10:13 ` Song, Elen
2011-07-11 10:27 ` Reinhard Meyer
2011-07-12 2:52 ` Song, Elen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E1ABCF0.6080504@emk-elektronik.de \
--to=u-boot@emk-elektronik.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox