[PATCH] mmc: fsl_esdhc: actually enable cache snooping on mpc830x

Peng Fan peng.fan at nxp.com
Wed Feb 5 08:08:23 CET 2020


> Subject: [PATCH] mmc: fsl_esdhc: actually enable cache snooping on mpc830x

+ Y.b

Are you ok with this patch?

Thanks,
Peng.

> 
> 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: Rasmus Villemoes <rasmus.villemoes at prevas.dk>
> ---
>  drivers/mmc/fsl_esdhc.c | 15 +++++++++++++--
>  1 file changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index
> 1e7d606cd8..34e5bd270f 100644
> --- a/drivers/mmc/fsl_esdhc.c
> +++ b/drivers/mmc/fsl_esdhc.c
> @@ -577,6 +577,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) {
> +#ifdef CONFIG_ARCH_MPC830X
> +	immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
> +	sysconf83xx_t *sysconf = &immr->sysconf;
> +
> +	setbits_be32(&sysconf->sdhccr, 0x02000000); #else
> +	esdhc_write32(&regs->esdhcctl, 0x00000040); #endif }
> +
>  static int esdhc_init_common(struct fsl_esdhc_priv *priv, struct mmc *mmc)
> {
>  	struct fsl_esdhc *regs = priv->esdhc_regs; @@ -592,8 +604,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_enable_cache_snooping(regs);
> 
>  	esdhc_setbits32(&regs->sysctl, SYSCTL_HCKEN | SYSCTL_IPGEN);
> 
> --
> 2.23.0



More information about the U-Boot mailing list