From 18f509780a3eb76ffe31b4bfc24016c408dec537 Mon Sep 17 00:00:00 2001 From: David Riley Date: Tue, 5 Aug 2014 22:16:01 +0000 Subject: linux_spi: properly convert pointers to kernel's u64 For arm64 with 32-bit userspace, pointers such as 0xff96ebf8 were incorrectly getting converted to u64_t 0xffffffffff96ebf8 in the spi_ioc_transfer struct which was causing ioctl()s to be rejected by the kernel. With this patch we first cast to uintptr_t (to avoid warnings on architectures where char * are not 64b wide) and then to uint64_t which is always big enough and does not produce warnings. This patch is taken from ChromiumOS' Change-Id: I5a15b4ca5d9657c3cb1ddccd42eafd91c852dd26 Corresponding to flashrom svn r1836. Signed-off-by: David Riley Reviewed-by: David Hendricks Acked-by: Stefan Tauner --- linux_spi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linux_spi.c b/linux_spi.c index 2315c2abd..26725e1d6 100644 --- a/linux_spi.c +++ b/linux_spi.c @@ -142,11 +142,11 @@ static int linux_spi_send_command(struct flashctx *flash, unsigned int writecnt, int iocontrol_code; struct spi_ioc_transfer msg[2] = { { - .tx_buf = (uint64_t)(ptrdiff_t)txbuf, + .tx_buf = (uint64_t)(uintptr_t)txbuf, .len = writecnt, }, { - .rx_buf = (uint64_t)(ptrdiff_t)rxbuf, + .rx_buf = (uint64_t)(uintptr_t)rxbuf, .len = readcnt, }, }; -- cgit v1.2.3