It needs to flush D-cache before 'mmc read' so that
we can see the right data in DDR. And fix parameter
for invalidate_dcache_range() after 'mmc read'.

Signed-off-by: Yangbo Lu <yangbo...@freescale.com>
Cc: York Sun <york...@freescale.com>
---
 drivers/mmc/fsl_esdhc.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c
index c4719e6..3ca25bd 100644
--- a/drivers/mmc/fsl_esdhc.c
+++ b/drivers/mmc/fsl_esdhc.c
@@ -192,6 +192,17 @@ static int esdhc_setup_data(struct mmc *mmc, struct 
mmc_data *data)
        wml_value = data->blocksize/4;
 
        if (data->flags & MMC_DATA_READ) {
+#ifndef CONFIG_SYS_FSL_ESDHC_USE_PIO
+#ifdef CONFIG_LS2085A
+               /*
+                * It's temporary for ls2085a so that
+                * we can see right data in DDR
+                */
+               flush_dcache_range((ulong)data->dest,
+                                  (ulong)data->dest+data->blocks
+                                        *data->blocksize);
+#endif
+#endif
                if (wml_value > WML_RD_WML_MAX)
                        wml_value = WML_RD_WML_MAX_VAL;
 
@@ -278,14 +289,9 @@ static int esdhc_setup_data(struct mmc *mmc, struct 
mmc_data *data)
 static void check_and_invalidate_dcache_range
        (struct mmc_cmd *cmd,
         struct mmc_data *data) {
-#ifdef CONFIG_LS2085A
-       unsigned start = 0;
-#else
-       unsigned start = (unsigned)data->dest ;
-#endif
+       unsigned start, end;
        unsigned size = roundup(ARCH_DMA_MINALIGN,
                                data->blocks*data->blocksize);
-       unsigned end = start+size ;
 #ifdef CONFIG_LS2085A
        dma_addr_t addr;
 
@@ -294,7 +300,10 @@ static void check_and_invalidate_dcache_range
                printf("Error found for upper 32 bits\n");
        else
                start = lower_32_bits(addr);
+#else
+       start = (unsigned)data->dest;
 #endif
+       end = start + size;
        invalidate_dcache_range(start, end);
 }
 #endif
-- 
2.1.0.27.g96db324

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to