On Fri, Mar 28, 2014 at 7:15 AM, Hector Palacios <hector.palac...@digi.com> wrote: > Cache was invalidated on the read operation, but it should > also be flushed otherwise. > > Signed-off-by: Hector Palacios <hector.palac...@digi.com>
Thanks, Hector. Adding Marek on Cc as well. > --- > > Notes: > After enabling L2 cache on i.MX6 I found out that many times > when running the 'gpt' command to partition a uSD card, the > data was not written at all, or was badly written to the media. > > This patch seems to solve it but I'm not sure if that's the > right place to flush the cache. Could someone please comment? > > Thank you. > > drivers/mmc/fsl_esdhc.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c > index e945c0a470ca..5ef575eb0272 100644 > --- a/drivers/mmc/fsl_esdhc.c > +++ b/drivers/mmc/fsl_esdhc.c > @@ -253,6 +253,16 @@ static int esdhc_setup_data(struct mmc *mmc, struct > mmc_data *data) > return 0; > } > > +static void check_and_flush_dcache_range > + (struct mmc_cmd *cmd, > + struct mmc_data *data) { > + unsigned start = (unsigned)data->dest ; > + unsigned size = roundup(ARCH_DMA_MINALIGN, > + data->blocks*data->blocksize); > + unsigned end = start+size ; > + flush_dcache_range(start, end); > +} > + > static void check_and_invalidate_dcache_range > (struct mmc_cmd *cmd, > struct mmc_data *data) { > @@ -401,6 +411,8 @@ esdhc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, > struct mmc_data *data) > #endif > if (data->flags & MMC_DATA_READ) > check_and_invalidate_dcache_range(cmd, data); > + else > + check_and_flush_dcache_range(cmd, data); > } > > esdhc_write32(®s->irqstat, -1); > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot