public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH RFC] fsl_esdhc: flush cache after non-read operation
@ 2014-03-28 10:15 Hector Palacios
  2014-03-28 13:49 ` Fabio Estevam
  0 siblings, 1 reply; 6+ messages in thread
From: Hector Palacios @ 2014-03-28 10:15 UTC (permalink / raw)
  To: u-boot

Cache was invalidated on the read operation, but it should
also be flushed otherwise.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
---

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(&regs->irqstat, -1);

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2014-03-31  8:37 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-28 10:15 [U-Boot] [PATCH RFC] fsl_esdhc: flush cache after non-read operation Hector Palacios
2014-03-28 13:49 ` Fabio Estevam
2014-03-28 14:36   ` Eric Nelson
2014-03-29  3:45     ` Marek Vasut
2014-03-31  8:23     ` Hector Palacios
2014-03-31  8:37       ` Marek Vasut

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox