[U-Boot] Patch about mmc and sdhci, Please look it, i can not pull the patch. I copy it here.
Pantelis Antoniou
pantelis.antoniou at gmail.com
Wed Oct 30 20:18:47 CET 2013
Hi Richie,
Please take a look at our patch submission guidelines.
http://www.denx.de/wiki/U-Boot/Patches
Some of the methods you use are questionable to say the least.
Is your magic variable something to do with a quirk?
I understand what you're trying to do, but you need to be more forthcoming
about why this patch is needed; i.e. what is the board you're seeing
this bug occuring?
Please try to clean this up and submit again, I'm afraid that this patch
is rejected.
Regards
-- Pantelis
On Sep 26, 2013, at 5:11 AM, richie_wang wrote:
> From 133570dbb7f772f78558cfac9d8c558513d033a1 Mon Sep 17 00:00:00 2001
> From: richie_wang <macro_system at 163.com>
> Date: Wed, 25 Sep 2013 08:20:25 +0800
> Subject: [PATCH 3/3] This commit solve mmc_write_blocks with async cmd12
> hidden bug
>
> When the processor use mmc_write_blocks to write multi-block data to SD
> Memory card
> it will send CMD12 to finish the transfer. But if the code using PIO method
> and processor
> speed is high than the SD host sending the data in SD host buffer.There will
> be a condition
> CMD12 will on cmd line and some data still on data line, which will conflict
> will multi-write
> Time requirement in SPEC. This commit makes CPU send CMD12 after register
> 0x24 bit8 change to
> zero.
>
> Signed-off-by: richie_wang <macro_system at 163.com>
> ---
> :100644 100644 aa2fdef... f2f982c... M drivers/mmc/mmc_write.c
> :100644 100644 dfb2eee... d66cc9a... M drivers/mmc/sdhci.c
> :100644 100644 74d06ae... a0c9e32... M include/sdhci.h
> drivers/mmc/mmc_write.c | 8 ++++++++
> drivers/mmc/sdhci.c | 11 +++++++++++
> include/sdhci.h | 4 ++++
> 3 files changed, 23 insertions(+)
>
> diff --git a/drivers/mmc/mmc_write.c b/drivers/mmc/mmc_write.c
> index aa2fdef..f2f982c 100644
> --- a/drivers/mmc/mmc_write.c
> +++ b/drivers/mmc/mmc_write.c
> @@ -10,6 +10,7 @@
> #include <config.h>
> #include <common.h>
> #include <part.h>
> +#include <sdhci.h>
> #include "mmc_private.h"
>
> static ulong mmc_erase_t(struct mmc *mmc, ulong start, lbaint_t blkcnt)
> @@ -103,6 +104,7 @@ static ulong mmc_write_blocks(struct mmc *mmc, lbaint_t
> start,
> {
> struct mmc_cmd cmd;
> struct mmc_data data;
> + struct sdhci_host* host;
> int timeout = 1000;
>
> if ((start + blkcnt) > mmc->block_dev.lba) {
> @@ -142,6 +144,12 @@ static ulong mmc_write_blocks(struct mmc *mmc, lbaint_t
> start,
> cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
> cmd.cmdarg = 0;
> cmd.resp_type = MMC_RSP_R1b;
> +
> + /* cmd12 async timing problem */
> + host = (struct sdhci_host*)mmc->priv;
> + if(host->magic_num == SDHCI_MAGIC_NUM)
> + sdhci_cmd12_wait(host);
> +
> if (mmc_send_cmd(mmc, &cmd, NULL)) {
> printf("mmc fail to send stop cmd\n");
> return 0;
> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
> index dfb2eee..d66cc9a 100644
> --- a/drivers/mmc/sdhci.c
> +++ b/drivers/mmc/sdhci.c
> @@ -410,6 +410,7 @@ int add_sdhci(struct sdhci_host *host, u32 max_clk, u32
> min_clk)
> struct mmc *mmc;
> unsigned int caps;
>
> + host->magic_num = SDHCI_MAGIC_NUM;
> mmc = malloc(sizeof(struct mmc));
> if (!mmc) {
> printf("mmc malloc fail!\n");
> @@ -482,3 +483,13 @@ int add_sdhci(struct sdhci_host *host, u32 max_clk, u32
> min_clk)
>
> return 0;
> }
> +
> +
> +void sdhci_cmd12_wait(struct sdhci_host *host)
> +{
> + u32 mask = SDHCI_DOING_WRITE;
> +
> + while(sdhci_readl(host, SDHCI_PRESENT_STATE) & mask);
> +
> + return ;
> +}
> diff --git a/include/sdhci.h b/include/sdhci.h
> index 74d06ae..a0c9e32 100644
> --- a/include/sdhci.h
> +++ b/include/sdhci.h
> @@ -233,7 +233,10 @@ struct sdhci_ops {
> #endif
> };
>
> +#define SDHCI_MAGIC_NUM 0x20131001
> +
> struct sdhci_host {
> + unsigned int magic_num;
> char *name;
> void *ioaddr;
> unsigned int quirks;
> @@ -332,4 +335,5 @@ static inline u8 sdhci_readb(struct sdhci_host *host,
> int reg)
> #endif
>
> int add_sdhci(struct sdhci_host *host, u32 max_clk, u32 min_clk);
> +void sdhci_cmd12_wait(struct sdhci_host *host);
> #endif /* __SDHCI_HW_H */
> --
> 1.7.9.5
>
>
>
>
> --
> View this message in context: http://u-boot.10912.n7.nabble.com/Patch-about-mmc-and-sdhci-Please-look-it-i-can-not-pull-the-patch-I-copy-it-here-tp164059.html
> Sent from the U-Boot mailing list archive at Nabble.com.
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
More information about the U-Boot
mailing list