ctrl->tx.base = dmam_alloc_coherent(&pdev->dev,
(ctrl->tx.sl_sz * ctrl->tx.n),
&ctrl->tx.phy, GFP_KERNEL);
if (!ctrl->tx.base) {
ret = -ENOMEM;
goto err;
}
ctrl->rx.base = dmam_alloc_coherent(&pdev->dev,
(ctrl->rx.sl_sz * ctrl->rx.n),
&ctrl->rx.phy, GFP_KERNEL);
I got another one of
/git/arm-soc/drivers/slimbus/qcom-ctrl.c: In function 'qcom_slim_probe': /git/arm-soc/drivers/slimbus/qcom-ctrl.c:584:9: error: passing argument 3 of 'dmam_alloc_coherent' from incompatible pointer type [-Werror=incompatible-pointer-types] &ctrl->tx.phy, GFP_KERNEL); ^ In file included from /git/arm-soc/drivers/slimbus/qcom-ctrl.c:16:0: /git/arm-soc/include/linux/dma-mapping.h:760:14: note: expected 'dma_addr_t * {aka unsigned int *}' but argument is of type 'phys_addr_t * {aka long long unsigned int *}' extern void *dmam_alloc_coherent(struct device *dev, size_t size, ^~~~~~~~~~~~~~~~~~~ /git/arm-soc/drivers/slimbus/qcom-ctrl.c:592:9: error: passing argument 3 of 'dmam_alloc_coherent' from incompatible pointer type [-Werror=incompatible-pointer-types] &ctrl->rx.phy, GFP_KERNEL); ^ In file included from /git/arm-soc/drivers/slimbus/qcom-ctrl.c:16:0: /git/arm-soc/include/linux/dma-mapping.h:760:14: note: expected 'dma_addr_t * {aka unsigned int *}' but argument is of type 'phys_addr_t * {aka long long unsigned int *}' extern void *dmam_alloc_coherent(struct device *dev, size_t size,
I don't have time to analyze this further, but I guess this is the same confusion that happened in a few other qualcomm drivers, which all used dma_alloc_* to get a buffer that gets passed into firmware.This is always wrong.
Arnd