On Friday, March 28, 2014 at 03:36:42 PM, Eric Nelson wrote: > Hi Hector, > > On 03/28/2014 06:49 AM, Fabio Estevam wrote: > > 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); > >> > >> } > > Since this comes after the wait for completion, this is > clearly not the right fix.
ACK > If this patch is fixing the problem, the issue must be somewhere else. > > Can you verify that the call to flush_dcache_range() in the > esdhc_setup_data routine is being called prior to esdhc_send_command? _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot