fsl_esdhc: Add the workaround for erratum ESDHC111 (enable on P4080)
Do not issue a manual asynchronous CMD12. Instead, use a (software) synchronous CMD12 or AUTOCMD12 to abort data transfer. Signed-off-by: Jerry Huang <Chang-Ming.Huang@freescale.com> Signed-off-by: Roy Zang <tie-fei.zang@freescale.com> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010 Freescale Semiconductor, Inc.
|
* Copyright 2010-2011 Freescale Semiconductor, Inc.
|
||||||
*
|
*
|
||||||
* See file CREDITS for list of people who contributed to this
|
* See file CREDITS for list of people who contributed to this
|
||||||
* project.
|
* project.
|
||||||
@@ -49,6 +49,9 @@ static int do_errata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_SYS_FSL_ERRATUM_DDR_MSYNC_IN)
|
#if defined(CONFIG_SYS_FSL_ERRATUM_DDR_MSYNC_IN)
|
||||||
puts("Work-around for DDR MSYNC_IN Erratum enabled\n");
|
puts("Work-around for DDR MSYNC_IN Erratum enabled\n");
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_SYS_FSL_ERRATUM_ESDHC111)
|
||||||
|
puts("Work-around for Erratum ESDHC111 enabled\n");
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2007,2010 Freescale Semiconductor, Inc
|
* Copyright 2007, 2010-2011 Freescale Semiconductor, Inc
|
||||||
* Andy Fleming
|
* Andy Fleming
|
||||||
*
|
*
|
||||||
* Based vaguely on the pxa mmc code:
|
* Based vaguely on the pxa mmc code:
|
||||||
@@ -79,6 +79,9 @@ uint esdhc_xfertyp(struct mmc_cmd *cmd, struct mmc_data *data)
|
|||||||
if (data->blocks > 1) {
|
if (data->blocks > 1) {
|
||||||
xfertyp |= XFERTYP_MSBSEL;
|
xfertyp |= XFERTYP_MSBSEL;
|
||||||
xfertyp |= XFERTYP_BCEN;
|
xfertyp |= XFERTYP_BCEN;
|
||||||
|
#ifdef CONFIG_SYS_FSL_ERRATUM_ESDHC111
|
||||||
|
xfertyp |= XFERTYP_AC12EN;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data->flags & MMC_DATA_READ)
|
if (data->flags & MMC_DATA_READ)
|
||||||
@@ -234,6 +237,11 @@ esdhc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
|
|||||||
struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
|
struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
|
||||||
volatile struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg->esdhc_base;
|
volatile struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg->esdhc_base;
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_FSL_ERRATUM_ESDHC111
|
||||||
|
if (cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION)
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
esdhc_write32(®s->irqstat, -1);
|
esdhc_write32(®s->irqstat, -1);
|
||||||
|
|
||||||
sync();
|
sync();
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2009-2010 Freescale Semiconductor, Inc.
|
* Copyright 2009-2011 Freescale Semiconductor, Inc.
|
||||||
*
|
*
|
||||||
* See file CREDITS for list of people who contributed to this
|
* See file CREDITS for list of people who contributed to this
|
||||||
* project.
|
* project.
|
||||||
@@ -35,6 +35,8 @@
|
|||||||
|
|
||||||
#define CONFIG_ICS307_REFCLK_HZ 33333000 /* ICS307 ref clk freq */
|
#define CONFIG_ICS307_REFCLK_HZ 33333000 /* ICS307 ref clk freq */
|
||||||
|
|
||||||
|
#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
|
||||||
|
|
||||||
#define CONFIG_SYS_P4080_ERRATUM_CPU22
|
#define CONFIG_SYS_P4080_ERRATUM_CPU22
|
||||||
#define CONFIG_SYS_P4080_ERRATUM_SERDES8
|
#define CONFIG_SYS_P4080_ERRATUM_SERDES8
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user