[linux-next:master 2370/9787] drivers/remoteproc/imx_dsp_rproc.c:765:39: sparse: sparse: incorrect type in argument 2 (different address spaces)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   e134c93f788fb93fd6a3ec3af9af850a2048c7e6
commit: 408ec1ff0caa340c57eecf4cbd14ef0132036a50 [2370/9787] remoteproc: imx_dsp_rproc: Add custom memory copy implementation for i.MX DSP Cores
config: arm64-randconfig-s053-20230406 (https://download.01.org/0day-ci/archive/20230407/202304070251.LY6c7kgm-lkp@xxxxxxxxx/config)
compiler: aarch64-linux-gcc (GCC) 12.1.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.4-39-gce1a6720-dirty
        # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=408ec1ff0caa340c57eecf4cbd14ef0132036a50
        git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
        git fetch --no-tags linux-next master
        git checkout 408ec1ff0caa340c57eecf4cbd14ef0132036a50
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=arm64 olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=arm64 SHELL=/bin/bash drivers/remoteproc/ lib/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Link: https://lore.kernel.org/oe-kbuild-all/202304070251.LY6c7kgm-lkp@xxxxxxxxx/

sparse warnings: (new ones prefixed by >>)
>> drivers/remoteproc/imx_dsp_rproc.c:765:39: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void volatile [noderef] __iomem *addr @@     got unsigned int [usertype] * @@
   drivers/remoteproc/imx_dsp_rproc.c:765:39: sparse:     expected void volatile [noderef] __iomem *addr
   drivers/remoteproc/imx_dsp_rproc.c:765:39: sparse:     got unsigned int [usertype] *
>> drivers/remoteproc/imx_dsp_rproc.c:775:34: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __iomem *addr @@     got void * @@
   drivers/remoteproc/imx_dsp_rproc.c:775:34: sparse:     expected void const volatile [noderef] __iomem *addr
   drivers/remoteproc/imx_dsp_rproc.c:775:34: sparse:     got void *
>> drivers/remoteproc/imx_dsp_rproc.c:782:34: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void volatile [noderef] __iomem *addr @@     got void * @@
   drivers/remoteproc/imx_dsp_rproc.c:782:34: sparse:     expected void volatile [noderef] __iomem *addr
   drivers/remoteproc/imx_dsp_rproc.c:782:34: sparse:     got void *
   drivers/remoteproc/imx_dsp_rproc.c:813:40: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void volatile [noderef] __iomem *addr @@     got unsigned int [usertype] * @@
   drivers/remoteproc/imx_dsp_rproc.c:813:40: sparse:     expected void volatile [noderef] __iomem *addr
   drivers/remoteproc/imx_dsp_rproc.c:813:40: sparse:     got unsigned int [usertype] *
>> drivers/remoteproc/imx_dsp_rproc.c:823:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __iomem *addr @@     got unsigned int [usertype] *[assigned] tmp_dst @@
   drivers/remoteproc/imx_dsp_rproc.c:823:29: sparse:     expected void const volatile [noderef] __iomem *addr
   drivers/remoteproc/imx_dsp_rproc.c:823:29: sparse:     got unsigned int [usertype] *[assigned] tmp_dst
>> drivers/remoteproc/imx_dsp_rproc.c:827:29: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void volatile [noderef] __iomem *addr @@     got unsigned int [usertype] *[assigned] tmp_dst @@
   drivers/remoteproc/imx_dsp_rproc.c:827:29: sparse:     expected void volatile [noderef] __iomem *addr
   drivers/remoteproc/imx_dsp_rproc.c:827:29: sparse:     got unsigned int [usertype] *[assigned] tmp_dst

vim +765 drivers/remoteproc/imx_dsp_rproc.c

   740	
   741	/*
   742	 * Custom memory copy implementation for i.MX DSP Cores
   743	 *
   744	 * The IRAM is part of the HiFi DSP.
   745	 * According to hw specs only 32-bits writes are allowed.
   746	 */
   747	static int imx_dsp_rproc_memcpy(void *dest, const void *src, size_t size)
   748	{
   749		const u8 *src_byte = src;
   750		const u32 *source = src;
   751		u32 affected_mask;
   752		u32 *dst = dest;
   753		int i, q, r;
   754		u32 tmp;
   755	
   756		/* destination must be 32bit aligned */
   757		if (!IS_ALIGNED((uintptr_t)dest, 4))
   758			return -EINVAL;
   759	
   760		q = size / 4;
   761		r = size % 4;
   762	
   763		/* copy data in units of 32 bits at a time */
   764		for (i = 0; i < q; i++)
 > 765			writel(source[i], &dst[i]);
   766	
   767		if (r) {
   768			affected_mask = GENMASK(8 * r, 0);
   769	
   770			/*
   771			 * first read the 32bit data of dest, then change affected
   772			 * bytes, and write back to dest.
   773			 * For unaffected bytes, it should not be changed
   774			 */
 > 775			tmp = readl(dest + q * 4);
   776			tmp &= ~affected_mask;
   777	
   778			/* avoid reading after end of source */
   779			for (i = 0; i < r; i++)
   780				tmp |= (src_byte[q * 4 + i] << (8 * i));
   781	
 > 782			writel(tmp, dest + q * 4);
   783		}
   784	
   785		return 0;
   786	}
   787	
   788	/*
   789	 * Custom memset implementation for i.MX DSP Cores
   790	 *
   791	 * The IRAM is part of the HiFi DSP.
   792	 * According to hw specs only 32-bits writes are allowed.
   793	 */
   794	static int imx_dsp_rproc_memset(void *addr, u8 value, size_t size)
   795	{
   796		u32 tmp_val = value;
   797		u32 *tmp_dst = addr;
   798		u32 affected_mask;
   799		int q, r;
   800		u32 tmp;
   801	
   802		/* destination must be 32bit aligned */
   803		if (!IS_ALIGNED((uintptr_t)addr, 4))
   804			return -EINVAL;
   805	
   806		tmp_val |= tmp_val << 8;
   807		tmp_val |= tmp_val << 16;
   808	
   809		q = size / 4;
   810		r = size % 4;
   811	
   812		while (q--)
   813			writel(tmp_val, tmp_dst++);
   814	
   815		if (r) {
   816			affected_mask = GENMASK(8 * r, 0);
   817	
   818			/*
   819			 * first read the 32bit data of addr, then change affected
   820			 * bytes, and write back to addr.
   821			 * For unaffected bytes, it should not be changed
   822			 */
 > 823			tmp = readl(tmp_dst);
   824			tmp &= ~affected_mask;
   825	
   826			tmp |= (tmp_val & affected_mask);
 > 827			writel(tmp, tmp_dst);
   828		}
   829	
   830		return 0;
   831	}
   832	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux