Re: Compilation error report for: drivers/firmware/qcom_scm.c:469:47: error: passing argument 3 of âdma_alloc_coherentâ from incompatible pointer type

From: Benjamin GAIGNARD
Date: Tue Jan 30 2018 - 05:11:58 EST



On 01/12/2018 05:11 PM, Arnaud Pouliquen wrote:
> Hello Andy,David,
+ Arnd

I have the same issue on drm-misc-next.
Does Arnaud's fix make sense or should we update/change the way of how
we compile the kernel ?

Regards,
Benjamin
>
>
> I'm facing a compilation error using COMPILE_TEST config,
> could you crosscheck the issue.
>
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
> commit: b2cd1df66037e7c4697c7e40496bf7e4a5e16a2d :Linux 4.15-rc7
>
> reproduce:
> ---------
> #apt-get install gcc-arm-linux-gnueabi
> #apt-get install gcc-arm-linux-gnueabihf
>
> apply .config (in attachment)
>
> #make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4
>
>
> error:
> -----
> CC drivers/firmware/qcom_scm.o
> drivers/firmware/qcom_scm.c: In function âqcom_scm_assign_memâ:
> drivers/firmware/qcom_scm.c:469:47: error: passing argument 3 of
> âdma_alloc_coherentâ from incompatible pointer type
> [-Werror=incompatible-pointer-types]
> ptr = dma_alloc_coherent(__scm->dev, ptr_sz, &ptr_phys, GFP_KERNEL);
> ^
> In file included from drivers/firmware/qcom_scm.c:21:0:
> ./include/linux/dma-mapping.h:549:21: note: expected âdma_addr_t * {aka
> long long unsigned int *}â but argument is of type âphys_addr_t * {aka
> unsigned int *}â
> static inline void *dma_alloc_coherent(struct device *dev, size_t size,
> ^
> cc1: some warnings being treated as errors
> scripts/Makefile.build:310: recipe for target
> 'drivers/firmware/qcom_scm.o' failed
> make[2]: *** [drivers/firmware/qcom_scm.o] Error 1
>
> patch to fix compilation issue:
> ------------------------------
> diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
> index af4c752..8dfbe61 100644
> --- a/drivers/firmware/qcom_scm.c
> +++ b/drivers/firmware/qcom_scm.c
> @@ -448,7 +448,7 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t
> mem_sz,
> struct qcom_scm_mem_map_info *mem_to_map;
> phys_addr_t mem_to_map_phys;
> phys_addr_t dest_phys;
> - phys_addr_t ptr_phys;
> + dma_addr_t ptr_phys;
> size_t mem_to_map_sz;
> size_t dest_sz;
> size_t src_sz;
>
> Thanks,
> Arnaud