[PATCH 02/24] mtd: rawnand: sunxi_spl: fix pointer from integer without a cast

Andre Przywara andre.przywara at arm.com
Fri Oct 17 09:57:16 CEST 2025


Hi,

On 16/10/2025 15:27, Richard Genoud wrote:
> Fix pointer from interget warning when compiling for ARM64
> 
> When compiling for arm64, we get this error:
> error: passing argument 2 of ‘__memcpy_fromio’ makes pointer from
> 			integer without a cast [-Wint-conversion]
> 
> Fix that with a cast to (void *)(uintptr_t)
> 
> Signed-off-by: Richard Genoud <richard.genoud at bootlin.com>
> ---
>   drivers/mtd/nand/raw/sunxi_nand_spl.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mtd/nand/raw/sunxi_nand_spl.c b/drivers/mtd/nand/raw/sunxi_nand_spl.c
> index 4f1e2d9a5775..19091ece632b 100644
> --- a/drivers/mtd/nand/raw/sunxi_nand_spl.c
> +++ b/drivers/mtd/nand/raw/sunxi_nand_spl.c
> @@ -310,7 +310,8 @@ static int nand_read_page(const struct nfc_config *conf, u32 offs,
>   			return 1;
>   
>   		/* Retrieve the data from SRAM */
> -		memcpy_fromio(data, SUNXI_NFC_BASE + NFC_RAM0_BASE,
> +		memcpy_fromio(data,
> +			      (void *)(uintptr_t)SUNXI_NFC_BASE + NFC_RAM0_BASE,

I don't think memcpy_fromio() is correct here in the first place. It 
looks tempting to use it, but the implementation is not safe to use with 
Allwinner peripherals: we need to stick to the predefined device 
register access width. Neither the arm nor the arm64 implementation are 
fully compliant. If you go by the book, the peripheral registers are 
32-bit wide, and must only be accessed via a 32-bit wide access 
(readl/writel). Empirically 8-bit accesses to a 32-bit aligned address 
also seem to work, but not to other addresses. Everything else is unsafe 
and should be avoided.
So can you please replace this call with a for-loop of readl() 
invocations? This should be safe with all devices, and since the base 
address is 32-bit aligned, and I assume ecc_size is as well, we are good 
here.

Cheers,
Andre

>   			      conf->ecc_size);
>   
>   		/* Stop the ECC engine */



More information about the U-Boot mailing list