From: Sascha Hauer <s.ha...@pengutronix.de>

the ESDHC controller is a 32bit device, so can do DMA only on the
lower 32bit. Fix the compiler warning about casting a pointer to integer
of different size on aarch64 by casting to unsigned long first. Error
out if the destination does not fit into 32bit though.

Signed-off-by: Sascha Hauer <s.ha...@pengutronix.de>
---
 arch/arm/mach-imx/xload-esdhc.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-imx/xload-esdhc.c b/arch/arm/mach-imx/xload-esdhc.c
index e774e4e68..bd58bdc64 100644
--- a/arch/arm/mach-imx/xload-esdhc.c
+++ b/arch/arm/mach-imx/xload-esdhc.c
@@ -109,8 +109,13 @@ esdhc_send_cmd(struct esdhc *esdhc, struct mci_cmd *cmd, 
struct mci_data *data)
        __udelay(1);
 
        if (data) {
+               unsigned long dest = (unsigned long)data->dest;
+
+               if (dest > 0xffffffff)
+                       return -EINVAL;
+
                /* Set up for a data transfer if we have one */
-               esdhc_write32(regs + SDHCI_DMA_ADDRESS, (u32)data->dest);
+               esdhc_write32(regs + SDHCI_DMA_ADDRESS, (u32)dest);
                esdhc_write32(regs + SDHCI_BLOCK_SIZE__BLOCK_COUNT, 
data->blocks << 16 | SECTOR_SIZE);
        }
 
-- 
2.17.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to