Commit ede28228 authored by Rasmus Villemoes's avatar Rasmus Villemoes Committed by Peng Fan
Browse files

mmc: fsl_esdhc: actually enable cache snooping on mpc830x

The reference manuals for MPC8308 and MPC8309 both say that the
esdhcctl aka DMA Control Register "is implemented as SDHCCR" in the
System configuration registers. Unfortunately, that doesn't mean that
the registers are just mirrors of each other - any write to esdhcctl
is simply ignored. So to actually enable cache snooping, we
unfortunately have to add a little ifdeffery.

There is, naturally, no description of the bit fields of esdhcctl in
the MPC8309 manual, but comparing the description of esdhcctl from the
LS1021A reference manual to the description of the sdhccr in MPC8309,
one also finds that the fields are bit-reversed, so the bit to set is
0x02000000 rather than 0x00000040 - this is also what board_mmc_init()
uses in the two gdsys/mpc8308/ boards.
Signed-off-by: default avatarRasmus Villemoes <>
Reviewed-by: default avatarYangbo Lu <>
parent 76ca2d13
......@@ -578,6 +578,18 @@ static int esdhc_set_ios_common(struct fsl_esdhc_priv *priv, struct mmc *mmc)
return 0;
static void esdhc_enable_cache_snooping(struct fsl_esdhc *regs)
immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
sysconf83xx_t *sysconf = &immr->sysconf;
setbits_be32(&sysconf->sdhccr, 0x02000000);
esdhc_write32(&regs->esdhcctl, 0x00000040);
static int esdhc_init_common(struct fsl_esdhc_priv *priv, struct mmc *mmc)
struct fsl_esdhc *regs = priv->esdhc_regs;
......@@ -593,8 +605,7 @@ static int esdhc_init_common(struct fsl_esdhc_priv *priv, struct mmc *mmc)
return -ETIMEDOUT;
/* Enable cache snooping */
esdhc_write32(&regs->esdhcctl, 0x00000040);
esdhc_setbits32(&regs->sysctl, SYSCTL_HCKEN | SYSCTL_IPGEN);
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment