Message ID | 20201116044121.2457272-1-tzungbi@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | remoteproc/mediatek: fix sparse errors | expand |
Hi, On Mon, Nov 16, 2020 at 12:41 PM Tzung-Bi Shih <tzungbi@google.com> wrote: > > Fixes the following sparse errors: > > warning: incorrect type in argument 2 (different address spaces) > expected void volatile [noderef] __iomem *addr > got void *addr > warning: incorrect type in argument 1 (different address spaces) > expected void *addr > got void [noderef] __iomem * > warning: incorrect type in assignment (different address spaces) > expected void [noderef] __iomem *cpu_addr > got void * > warning: incorrect type in argument 3 (different address spaces) > expected void *cpu_addr > got void [noderef] __iomem *cpu_addr Can you also tell us which lines actually fail? Would be easier to follow (I ended up digging out the test robot email to understand) > > Reported-by: kernel test robot <lkp@intel.com> > Signed-off-by: Tzung-Bi Shih <tzungbi@google.com> > --- > drivers/remoteproc/mtk_scp.c | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) > > diff --git a/drivers/remoteproc/mtk_scp.c b/drivers/remoteproc/mtk_scp.c > index 577cbd5d421e..99d5a4de3e2f 100644 > --- a/drivers/remoteproc/mtk_scp.c > +++ b/drivers/remoteproc/mtk_scp.c > @@ -298,7 +298,7 @@ static int mt8183_scp_before_load(struct mtk_scp *scp) > return 0; > } > > -static void mt8192_power_on_sram(void *addr) > +static void mt8192_power_on_sram(void __iomem *addr) > { > int i; > > @@ -307,7 +307,7 @@ static void mt8192_power_on_sram(void *addr) > writel(0, addr); > } > > -static void mt8192_power_off_sram(void *addr) > +static void mt8192_power_off_sram(void __iomem *addr) > { > int i; > These 2 make sense. > @@ -556,8 +556,9 @@ static int scp_map_memory_region(struct mtk_scp *scp) > > /* Reserved SCP code size */ > scp->dram_size = MAX_CODE_SIZE; > - scp->cpu_addr = dma_alloc_coherent(scp->dev, scp->dram_size, > - &scp->dma_addr, GFP_KERNEL); > + scp->cpu_addr = (void __iomem *)dma_alloc_coherent( > + scp->dev, scp->dram_size, > + &scp->dma_addr, GFP_KERNEL); > if (!scp->cpu_addr) > return -ENOMEM; > This one looks wrong to me. dma_alloc_coherent memory is not normally tagged as __iomem. Why is scp->cpu_addr __iomem in the first place? > @@ -569,8 +570,8 @@ static void scp_unmap_memory_region(struct mtk_scp *scp) > if (scp->dram_size == 0) > return; > > - dma_free_coherent(scp->dev, scp->dram_size, scp->cpu_addr, > - scp->dma_addr); > + dma_free_coherent(scp->dev, scp->dram_size, > + (void __force *)scp->cpu_addr, scp->dma_addr); > of_reserved_mem_device_release(scp->dev); > } > > -- > 2.29.2.299.gdc1121823c-goog > > > _______________________________________________ > Linux-mediatek mailing list > Linux-mediatek@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-mediatek
On Mon, Nov 16, 2020 at 1:38 PM Nicolas Boichat <drinkcat@chromium.org> wrote: > On Mon, Nov 16, 2020 at 12:41 PM Tzung-Bi Shih <tzungbi@google.com> wrote: > > > > Fixes the following sparse errors: > > > > warning: incorrect type in argument 2 (different address spaces) > > expected void volatile [noderef] __iomem *addr > > got void *addr > > warning: incorrect type in argument 1 (different address spaces) > > expected void *addr > > got void [noderef] __iomem * > > warning: incorrect type in assignment (different address spaces) > > expected void [noderef] __iomem *cpu_addr > > got void * > > warning: incorrect type in argument 3 (different address spaces) > > expected void *cpu_addr > > got void [noderef] __iomem *cpu_addr > > Can you also tell us which lines actually fail? Would be easier to > follow (I ended up digging out the test robot email to understand) Will separate them to make it clear. > > @@ -556,8 +556,9 @@ static int scp_map_memory_region(struct mtk_scp *scp) > > > > /* Reserved SCP code size */ > > scp->dram_size = MAX_CODE_SIZE; > > - scp->cpu_addr = dma_alloc_coherent(scp->dev, scp->dram_size, > > - &scp->dma_addr, GFP_KERNEL); > > + scp->cpu_addr = (void __iomem *)dma_alloc_coherent( > > + scp->dev, scp->dram_size, > > + &scp->dma_addr, GFP_KERNEL); > > if (!scp->cpu_addr) > > return -ENOMEM; > > > > This one looks wrong to me. dma_alloc_coherent memory is not normally > tagged as __iomem. Why is scp->cpu_addr __iomem in the first place? Did you mean address returns from dma_alloc_coherent() is not normally a __iomem? I am wondering if the cpu_addr declaration is somehow misused. In drivers/remoteproc/mtk_common.h: > void __iomem *cpu_addr;
diff --git a/drivers/remoteproc/mtk_scp.c b/drivers/remoteproc/mtk_scp.c index 577cbd5d421e..99d5a4de3e2f 100644 --- a/drivers/remoteproc/mtk_scp.c +++ b/drivers/remoteproc/mtk_scp.c @@ -298,7 +298,7 @@ static int mt8183_scp_before_load(struct mtk_scp *scp) return 0; } -static void mt8192_power_on_sram(void *addr) +static void mt8192_power_on_sram(void __iomem *addr) { int i; @@ -307,7 +307,7 @@ static void mt8192_power_on_sram(void *addr) writel(0, addr); } -static void mt8192_power_off_sram(void *addr) +static void mt8192_power_off_sram(void __iomem *addr) { int i; @@ -556,8 +556,9 @@ static int scp_map_memory_region(struct mtk_scp *scp) /* Reserved SCP code size */ scp->dram_size = MAX_CODE_SIZE; - scp->cpu_addr = dma_alloc_coherent(scp->dev, scp->dram_size, - &scp->dma_addr, GFP_KERNEL); + scp->cpu_addr = (void __iomem *)dma_alloc_coherent( + scp->dev, scp->dram_size, + &scp->dma_addr, GFP_KERNEL); if (!scp->cpu_addr) return -ENOMEM; @@ -569,8 +570,8 @@ static void scp_unmap_memory_region(struct mtk_scp *scp) if (scp->dram_size == 0) return; - dma_free_coherent(scp->dev, scp->dram_size, scp->cpu_addr, - scp->dma_addr); + dma_free_coherent(scp->dev, scp->dram_size, + (void __force *)scp->cpu_addr, scp->dma_addr); of_reserved_mem_device_release(scp->dev); }
Fixes the following sparse errors: warning: incorrect type in argument 2 (different address spaces) expected void volatile [noderef] __iomem *addr got void *addr warning: incorrect type in argument 1 (different address spaces) expected void *addr got void [noderef] __iomem * warning: incorrect type in assignment (different address spaces) expected void [noderef] __iomem *cpu_addr got void * warning: incorrect type in argument 3 (different address spaces) expected void *cpu_addr got void [noderef] __iomem *cpu_addr Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: Tzung-Bi Shih <tzungbi@google.com> --- drivers/remoteproc/mtk_scp.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)