arch/csky/mm/tcm.c:14:2: error: #error "You should define DTCM_RAM_BASE"
by kernel test robot
Hi Guo,
First bad commit (maybe != root cause):
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 25a1298726e97b9d25379986f5d54d9e62ad6e93
commit: 18c07d23da5a48525b2955aa269b8bb108c19300 csky: Fixup calltrace panic
date: 1 year ago
config: csky-randconfig-r036-20210515 (attached as .config)
compiler: csky-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit...
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 18c07d23da5a48525b2955aa269b8bb108c19300
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=csky
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
>> arch/csky/mm/tcm.c:14:2: error: #error "You should define DTCM_RAM_BASE"
14 | #error "You should define DTCM_RAM_BASE"
| ^~~~~
arch/csky/mm/tcm.c:109:7: warning: no previous prototype for 'tcm_alloc' [-Wmissing-prototypes]
109 | void *tcm_alloc(size_t len)
| ^~~~~~~~~
arch/csky/mm/tcm.c:124:6: warning: no previous prototype for 'tcm_free' [-Wmissing-prototypes]
124 | void tcm_free(void *addr, size_t len)
| ^~~~~~~~
vim +14 arch/csky/mm/tcm.c
f525bb2c9e7cf1 Guo Ren 2019-11-27 11
f525bb2c9e7cf1 Guo Ren 2019-11-27 12 #ifdef CONFIG_HAVE_DTCM
f525bb2c9e7cf1 Guo Ren 2019-11-27 13 #if (CONFIG_DTCM_RAM_BASE == 0xffffffff)
f525bb2c9e7cf1 Guo Ren 2019-11-27 @14 #error "You should define DTCM_RAM_BASE"
f525bb2c9e7cf1 Guo Ren 2019-11-27 15 #endif
f525bb2c9e7cf1 Guo Ren 2019-11-27 16
:::::: The code at line 14 was first introduced by commit
:::::: f525bb2c9e7cf1e3c43ab57704c9e1c836d30b34 csky: Tightly-Coupled Memory or Sram support
:::::: TO: Guo Ren <guoren(a)linux.alibaba.com>
:::::: CC: Guo Ren <guoren(a)linux.alibaba.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 4 months
arch/arm64/kernel/hibernate.c:202:44: sparse: sparse: cast from restricted gfp_t
by kernel test robot
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 8ac91e6c6033ebc12c5c1e4aa171b81a662bd70f
commit: 50f53fb721817a6efa541cca24f1b7caa84801c1 arm64: trans_pgd: make trans_pgd_map_page generic
date: 4 months ago
config: arm64-allmodconfig (attached as .config)
compiler: aarch64-linux-gcc (GCC) 9.3.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.3-341-g8af24329-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit...
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 50f53fb721817a6efa541cca24f1b7caa84801c1
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=arm64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
arch/arm64/kernel/hibernate.c:181:39: sparse: sparse: cast to restricted gfp_t
>> arch/arm64/kernel/hibernate.c:202:44: sparse: sparse: cast from restricted gfp_t
vim +202 arch/arm64/kernel/hibernate.c
183
184 /*
185 * Copies length bytes, starting at src_start into an new page,
186 * perform cache maintenance, then maps it at the specified address low
187 * address as executable.
188 *
189 * This is used by hibernate to copy the code it needs to execute when
190 * overwriting the kernel text. This function generates a new set of page
191 * tables, which it loads into ttbr0.
192 *
193 * Length is provided as we probably only want 4K of data, even on a 64K
194 * page system.
195 */
196 static int create_safe_exec_page(void *src_start, size_t length,
197 unsigned long dst_addr,
198 phys_addr_t *phys_dst_addr)
199 {
200 struct trans_pgd_info trans_info = {
201 .trans_alloc_page = hibernate_page_alloc,
> 202 .trans_alloc_arg = (void *)GFP_ATOMIC,
203 };
204
205 void *page = (void *)get_safe_page(GFP_ATOMIC);
206 pgd_t *trans_pgd;
207 int rc;
208
209 if (!page)
210 return -ENOMEM;
211
212 memcpy(page, src_start, length);
213 __flush_icache_range((unsigned long)page, (unsigned long)page + length);
214
215 trans_pgd = (void *)get_safe_page(GFP_ATOMIC);
216 if (!trans_pgd)
217 return -ENOMEM;
218
219 rc = trans_pgd_map_page(&trans_info, trans_pgd, page, dst_addr,
220 PAGE_KERNEL_EXEC);
221 if (rc)
222 return rc;
223
224 /*
225 * Load our new page tables. A strict BBM approach requires that we
226 * ensure that TLBs are free of any entries that may overlap with the
227 * global mappings we are about to install.
228 *
229 * For a real hibernate/resume cycle TTBR0 currently points to a zero
230 * page, but TLBs may contain stale ASID-tagged entries (e.g. for EFI
231 * runtime services), while for a userspace-driven test_resume cycle it
232 * points to userspace page tables (and we must point it at a zero page
233 * ourselves). Elsewhere we only (un)install the idmap with preemption
234 * disabled, so T0SZ should be as required regardless.
235 */
236 cpu_set_reserved_ttbr0();
237 local_flush_tlb_all();
238 write_sysreg(phys_to_ttbr(virt_to_phys(trans_pgd)), ttbr0_el1);
239 isb();
240
241 *phys_dst_addr = virt_to_phys(page);
242
243 return 0;
244 }
245
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 4 months
[kbuild] [intel-linux-intel-lts:5.4/yocto 5/5] drivers/gpu/drm/drm_edid.c:5597 drm_update_tile_info() error: uninitialized symbol 'length'.
by Dan Carpenter
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: 8e2b1510d279aecb1f89907553283c79c1b2b226
commit: 8e2b1510d279aecb1f89907553283c79c1b2b226 [5/5] drm/edid: Fix DispID tile parsing for override EDID
config: i386-randconfig-m021-20210517 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
Reported-by: Dan Carpenter <dan.carpenter(a)oracle.com>
New smatch warnings:
drivers/gpu/drm/drm_edid.c:5597 drm_update_tile_info() error: uninitialized symbol 'length'.
drivers/gpu/drm/drm_edid.c:5597 drm_update_tile_info() error: uninitialized symbol 'idx'.
Old smatch warnings:
drivers/gpu/drm/drm_edid.c:1485 drm_edid_are_equal() error: we previously assumed 'edid2' could be null (see line 1478)
vim +/length +5597 drivers/gpu/drm/drm_edid.c
8e2b1510d279ae Ville Syrjälä 2020-03-13 5584 void drm_update_tile_info(struct drm_connector *connector,
8e2b1510d279ae Ville Syrjälä 2020-03-13 5585 const struct edid *edid)
40d9b043a89e23 Dave Airlie 2014-10-20 5586 {
8e2b1510d279ae Ville Syrjälä 2020-03-13 5587 const void *displayid = NULL;
8e2b1510d279ae Ville Syrjälä 2020-03-13 5588 int length, idx;
^^^^^^^^^^^^^^^
40d9b043a89e23 Dave Airlie 2014-10-20 5589 int ret;
40d9b043a89e23 Dave Airlie 2014-10-20 5590 connector->has_tile = false;
40d9b043a89e23 Dave Airlie 2014-10-20 5591 displayid = drm_find_displayid_extension(edid);
40d9b043a89e23 Dave Airlie 2014-10-20 5592 if (!displayid) {
40d9b043a89e23 Dave Airlie 2014-10-20 5593 /* drop reference to any tile group we had */
40d9b043a89e23 Dave Airlie 2014-10-20 5594 goto out_drop_ref;
40d9b043a89e23 Dave Airlie 2014-10-20 5595 }
40d9b043a89e23 Dave Airlie 2014-10-20 5596
8e2b1510d279ae Ville Syrjälä 2020-03-13 @5597 ret = drm_displayid_parse_tiled(connector, displayid, length, idx);
^^^^^^^^^^^
Uninitialized.
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
_______________________________________________
kbuild mailing list -- kbuild(a)lists.01.org
To unsubscribe send an email to kbuild-leave(a)lists.01.org
1 year, 4 months
drivers/dma/ppc4xx/adma.c:4100:31: sparse: sparse: incorrect type in assignment (different address spaces)
by kernel test robot
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 8ac91e6c6033ebc12c5c1e4aa171b81a662bd70f
commit: d991bb1c8da842a2a0b9dc83b1005e655783f861 include/linux/compiler-gcc.h: sparse can do constant folding of __builtin_bswap*()
date: 2 weeks ago
config: powerpc64-randconfig-s032-20210518 (attached as .config)
compiler: powerpc-linux-gcc (GCC) 9.3.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.3-341-g8af24329-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit...
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout d991bb1c8da842a2a0b9dc83b1005e655783f861
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=powerpc64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
drivers/dma/ppc4xx/adma.c:1155:49: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1155:49: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1157:38: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1157:38: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1157:38: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:909:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct dma_regs *dma_reg @@ got struct dma_regs [noderef] __iomem *dma_reg @@
drivers/dma/ppc4xx/adma.c:909:25: sparse: expected struct dma_regs *dma_reg
drivers/dma/ppc4xx/adma.c:909:25: sparse: got struct dma_regs [noderef] __iomem *dma_reg
drivers/dma/ppc4xx/adma.c:910:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:910:40: sparse: expected void const volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:910:40: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:927:37: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:972:32: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:972:32: sparse: expected void const volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:972:32: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:977:40: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:977:40: sparse: expected void volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:977:40: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:982:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xor_regs *xor_reg @@ got struct xor_regs [noderef] __iomem *xor_reg @@
drivers/dma/ppc4xx/adma.c:982:25: sparse: expected struct xor_regs *xor_reg
drivers/dma/ppc4xx/adma.c:982:25: sparse: got struct xor_regs [noderef] __iomem *xor_reg
drivers/dma/ppc4xx/adma.c:983:34: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:983:34: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:983:34: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:984:34: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:984:34: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:984:34: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:991:55: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:991:55: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:991:55: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:993:51: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:993:51: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:993:51: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:995:51: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:995:51: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:995:51: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:997:46: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:997:46: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:997:46: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1006:35: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1006:35: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1006:35: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1025:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct dma_regs *dma_reg @@ got struct dma_regs [noderef] __iomem *dma_reg @@
drivers/dma/ppc4xx/adma.c:1025:25: sparse: expected struct dma_regs *dma_reg
drivers/dma/ppc4xx/adma.c:1025:25: sparse: got struct dma_regs [noderef] __iomem *dma_reg
drivers/dma/ppc4xx/adma.c:1029:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got unsigned short * @@
drivers/dma/ppc4xx/adma.c:1029:31: sparse: expected void const volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1029:31: sparse: got unsigned short *
drivers/dma/ppc4xx/adma.c:1029:60: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got unsigned short * @@
drivers/dma/ppc4xx/adma.c:1029:60: sparse: expected void const volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1029:60: sparse: got unsigned short *
drivers/dma/ppc4xx/adma.c:1030:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got unsigned short * @@
drivers/dma/ppc4xx/adma.c:1030:31: sparse: expected void const volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1030:31: sparse: got unsigned short *
drivers/dma/ppc4xx/adma.c:1030:60: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got unsigned short * @@
drivers/dma/ppc4xx/adma.c:1030:60: sparse: expected void const volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1030:60: sparse: got unsigned short *
drivers/dma/ppc4xx/adma.c:1036:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xor_regs *xor_reg @@ got struct xor_regs [noderef] __iomem *xor_reg @@
drivers/dma/ppc4xx/adma.c:1036:25: sparse: expected struct xor_regs *xor_reg
drivers/dma/ppc4xx/adma.c:1036:25: sparse: got struct xor_regs [noderef] __iomem *xor_reg
drivers/dma/ppc4xx/adma.c:1037:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1037:37: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1037:37: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1051:48: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct xor_regs *xor_reg @@ got struct xor_regs [noderef] __iomem *xor_reg @@
drivers/dma/ppc4xx/adma.c:1051:48: sparse: expected struct xor_regs *xor_reg
drivers/dma/ppc4xx/adma.c:1051:48: sparse: got struct xor_regs [noderef] __iomem *xor_reg
drivers/dma/ppc4xx/adma.c:1053:25: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1053:25: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1053:25: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1060:41: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1060:41: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1060:41: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1062:39: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1062:39: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1062:39: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1063:25: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1063:25: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1063:25: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1064:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1064:33: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1064:33: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1065:22: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1065:22: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1065:22: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1078:48: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct dma_regs *dma_reg @@ got struct dma_regs [noderef] __iomem *dma_reg @@
drivers/dma/ppc4xx/adma.c:1078:48: sparse: expected struct dma_regs *dma_reg
drivers/dma/ppc4xx/adma.c:1078:48: sparse: got struct dma_regs [noderef] __iomem *dma_reg
drivers/dma/ppc4xx/adma.c:1088:26: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1088:26: sparse: expected void volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1088:26: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1208:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xor_regs *xor_reg @@ got struct xor_regs [noderef] __iomem *xor_reg @@
drivers/dma/ppc4xx/adma.c:1208:25: sparse: expected struct xor_regs *xor_reg
drivers/dma/ppc4xx/adma.c:1208:25: sparse: got struct xor_regs [noderef] __iomem *xor_reg
drivers/dma/ppc4xx/adma.c:1212:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1212:30: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1212:30: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:2775:62: sparse: sparse: Using plain integer as NULL pointer
drivers/dma/ppc4xx/adma.c:4092:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected void *regs @@ got void [noderef] __iomem * @@
drivers/dma/ppc4xx/adma.c:4092:14: sparse: expected void *regs
drivers/dma/ppc4xx/adma.c:4092:14: sparse: got void [noderef] __iomem *
>> drivers/dma/ppc4xx/adma.c:4100:31: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xor_regs [noderef] __iomem *xor_reg @@ got void *regs @@
drivers/dma/ppc4xx/adma.c:4100:31: sparse: expected struct xor_regs [noderef] __iomem *xor_reg
drivers/dma/ppc4xx/adma.c:4100:31: sparse: got void *regs
>> drivers/dma/ppc4xx/adma.c:4107:31: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct dma_regs [noderef] __iomem *dma_reg @@ got void *regs @@
drivers/dma/ppc4xx/adma.c:4107:31: sparse: expected struct dma_regs [noderef] __iomem *dma_reg
drivers/dma/ppc4xx/adma.c:4107:31: sparse: got void *regs
vim +4100 drivers/dma/ppc4xx/adma.c
12458ea06efd7b Anatolij Gustschin 2009-12-11 4001
12458ea06efd7b Anatolij Gustschin 2009-12-11 4002 /**
12458ea06efd7b Anatolij Gustschin 2009-12-11 4003 * ppc440spe_adma_probe - probe the asynch device
12458ea06efd7b Anatolij Gustschin 2009-12-11 4004 */
463a1f8b3ceebe Bill Pemberton 2012-11-19 4005 static int ppc440spe_adma_probe(struct platform_device *ofdev)
12458ea06efd7b Anatolij Gustschin 2009-12-11 4006 {
05c02542c20aa0 Anatolij Gustschin 2010-06-03 4007 struct device_node *np = ofdev->dev.of_node;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4008 struct resource res;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4009 struct ppc440spe_adma_device *adev;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4010 struct ppc440spe_adma_chan *chan;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4011 struct ppc_dma_chan_ref *ref, *_ref;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4012 int ret = 0, initcode = PPC_ADMA_INIT_OK;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4013 const u32 *idx;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4014 int len;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4015 void *regs;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4016 u32 id, pool_size;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4017
12458ea06efd7b Anatolij Gustschin 2009-12-11 4018 if (of_device_is_compatible(np, "amcc,xor-accelerator")) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4019 id = PPC440SPE_XOR_ID;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4020 /* As far as the XOR engine is concerned, it does not
12458ea06efd7b Anatolij Gustschin 2009-12-11 4021 * use FIFOs but uses linked list. So there is no dependency
12458ea06efd7b Anatolij Gustschin 2009-12-11 4022 * between pool size to allocate and the engine configuration.
12458ea06efd7b Anatolij Gustschin 2009-12-11 4023 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4024 pool_size = PAGE_SIZE << 1;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4025 } else {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4026 /* it is DMA0 or DMA1 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4027 idx = of_get_property(np, "cell-index", &len);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4028 if (!idx || (len != sizeof(u32))) {
c6c93048baff25 Rob Herring 2017-07-18 4029 dev_err(&ofdev->dev, "Device node %pOF has missing "
12458ea06efd7b Anatolij Gustschin 2009-12-11 4030 "or invalid cell-index property\n",
c6c93048baff25 Rob Herring 2017-07-18 4031 np);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4032 return -EINVAL;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4033 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4034 id = *idx;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4035 /* DMA0,1 engines use FIFO to maintain CDBs, so we
12458ea06efd7b Anatolij Gustschin 2009-12-11 4036 * should allocate the pool accordingly to size of this
12458ea06efd7b Anatolij Gustschin 2009-12-11 4037 * FIFO. Thus, the pool size depends on the FIFO depth:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4038 * how much CDBs pointers the FIFO may contain then so
12458ea06efd7b Anatolij Gustschin 2009-12-11 4039 * much CDBs we should provide in the pool.
12458ea06efd7b Anatolij Gustschin 2009-12-11 4040 * That is
12458ea06efd7b Anatolij Gustschin 2009-12-11 4041 * CDB size = 32B;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4042 * CDBs number = (DMA0_FIFO_SIZE >> 3);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4043 * Pool size = CDBs number * CDB size =
12458ea06efd7b Anatolij Gustschin 2009-12-11 4044 * = (DMA0_FIFO_SIZE >> 3) << 5 = DMA0_FIFO_SIZE << 2.
12458ea06efd7b Anatolij Gustschin 2009-12-11 4045 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4046 pool_size = (id == PPC440SPE_DMA0_ID) ?
12458ea06efd7b Anatolij Gustschin 2009-12-11 4047 DMA0_FIFO_SIZE : DMA1_FIFO_SIZE;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4048 pool_size <<= 2;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4049 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4050
12458ea06efd7b Anatolij Gustschin 2009-12-11 4051 if (of_address_to_resource(np, 0, &res)) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4052 dev_err(&ofdev->dev, "failed to get memory resource\n");
12458ea06efd7b Anatolij Gustschin 2009-12-11 4053 initcode = PPC_ADMA_INIT_MEMRES;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4054 ret = -ENODEV;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4055 goto out;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4056 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4057
12458ea06efd7b Anatolij Gustschin 2009-12-11 4058 if (!request_mem_region(res.start, resource_size(&res),
12458ea06efd7b Anatolij Gustschin 2009-12-11 4059 dev_driver_string(&ofdev->dev))) {
a584bff5efae8c Joe Perches 2010-11-12 4060 dev_err(&ofdev->dev, "failed to request memory region %pR\n",
a584bff5efae8c Joe Perches 2010-11-12 4061 &res);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4062 initcode = PPC_ADMA_INIT_MEMREG;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4063 ret = -EBUSY;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4064 goto out;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4065 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4066
12458ea06efd7b Anatolij Gustschin 2009-12-11 4067 /* create a device */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4068 adev = kzalloc(sizeof(*adev), GFP_KERNEL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4069 if (!adev) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4070 initcode = PPC_ADMA_INIT_ALLOC;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4071 ret = -ENOMEM;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4072 goto err_adev_alloc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4073 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4074
12458ea06efd7b Anatolij Gustschin 2009-12-11 4075 adev->id = id;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4076 adev->pool_size = pool_size;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4077 /* allocate coherent memory for hardware descriptors */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4078 adev->dma_desc_pool_virt = dma_alloc_coherent(&ofdev->dev,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4079 adev->pool_size, &adev->dma_desc_pool,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4080 GFP_KERNEL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4081 if (adev->dma_desc_pool_virt == NULL) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4082 dev_err(&ofdev->dev, "failed to allocate %d bytes of coherent "
12458ea06efd7b Anatolij Gustschin 2009-12-11 4083 "memory for hardware descriptors\n",
12458ea06efd7b Anatolij Gustschin 2009-12-11 4084 adev->pool_size);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4085 initcode = PPC_ADMA_INIT_COHERENT;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4086 ret = -ENOMEM;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4087 goto err_dma_alloc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4088 }
d73111c6d43f08 Masanari Iida 2012-08-04 4089 dev_dbg(&ofdev->dev, "allocated descriptor pool virt 0x%p phys 0x%llx\n",
12458ea06efd7b Anatolij Gustschin 2009-12-11 4090 adev->dma_desc_pool_virt, (u64)adev->dma_desc_pool);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4091
12458ea06efd7b Anatolij Gustschin 2009-12-11 4092 regs = ioremap(res.start, resource_size(&res));
12458ea06efd7b Anatolij Gustschin 2009-12-11 4093 if (!regs) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4094 dev_err(&ofdev->dev, "failed to ioremap regs!\n");
f3b77727e82722 Julia Lawall 2013-12-29 4095 ret = -ENOMEM;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4096 goto err_regs_alloc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4097 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4098
12458ea06efd7b Anatolij Gustschin 2009-12-11 4099 if (adev->id == PPC440SPE_XOR_ID) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 @4100 adev->xor_reg = regs;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4101 /* Reset XOR */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4102 iowrite32be(XOR_CRSR_XASR_BIT, &adev->xor_reg->crsr);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4103 iowrite32be(XOR_CRSR_64BA_BIT, &adev->xor_reg->crrr);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4104 } else {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4105 size_t fifo_size = (adev->id == PPC440SPE_DMA0_ID) ?
12458ea06efd7b Anatolij Gustschin 2009-12-11 4106 DMA0_FIFO_SIZE : DMA1_FIFO_SIZE;
12458ea06efd7b Anatolij Gustschin 2009-12-11 @4107 adev->dma_reg = regs;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4108 /* DMAx_FIFO_SIZE is defined in bytes,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4109 * <fsiz> - is defined in number of CDB pointers (8byte).
12458ea06efd7b Anatolij Gustschin 2009-12-11 4110 * DMA FIFO Length = CSlength + CPlength, where
12458ea06efd7b Anatolij Gustschin 2009-12-11 4111 * CSlength = CPlength = (fsiz + 1) * 8.
12458ea06efd7b Anatolij Gustschin 2009-12-11 4112 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4113 iowrite32(DMA_FIFO_ENABLE | ((fifo_size >> 3) - 2),
12458ea06efd7b Anatolij Gustschin 2009-12-11 4114 &adev->dma_reg->fsiz);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4115 /* Configure DMA engine */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4116 iowrite32(DMA_CFG_DXEPR_HP | DMA_CFG_DFMPP_HP | DMA_CFG_FALGN,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4117 &adev->dma_reg->cfg);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4118 /* Clear Status */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4119 iowrite32(~0, &adev->dma_reg->dsts);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4120 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4121
12458ea06efd7b Anatolij Gustschin 2009-12-11 4122 adev->dev = &ofdev->dev;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4123 adev->common.dev = &ofdev->dev;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4124 INIT_LIST_HEAD(&adev->common.channels);
dd3daca162f741 Jingoo Han 2013-05-24 4125 platform_set_drvdata(ofdev, adev);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4126
12458ea06efd7b Anatolij Gustschin 2009-12-11 4127 /* create a channel */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4128 chan = kzalloc(sizeof(*chan), GFP_KERNEL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4129 if (!chan) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4130 initcode = PPC_ADMA_INIT_CHANNEL;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4131 ret = -ENOMEM;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4132 goto err_chan_alloc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4133 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4134
12458ea06efd7b Anatolij Gustschin 2009-12-11 4135 spin_lock_init(&chan->lock);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4136 INIT_LIST_HEAD(&chan->chain);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4137 INIT_LIST_HEAD(&chan->all_slots);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4138 chan->device = adev;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4139 chan->common.device = &adev->common;
8ac695463f37af Russell King - ARM Linux 2012-03-06 4140 dma_cookie_init(&chan->common);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4141 list_add_tail(&chan->common.device_node, &adev->common.channels);
7f8281765f9949 Allen Pais 2020-08-31 4142 tasklet_setup(&chan->irq_tasklet, ppc440spe_adma_tasklet);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4143
12458ea06efd7b Anatolij Gustschin 2009-12-11 4144 /* allocate and map helper pages for async validation or
12458ea06efd7b Anatolij Gustschin 2009-12-11 4145 * async_mult/async_sum_product operations on DMA0/1.
12458ea06efd7b Anatolij Gustschin 2009-12-11 4146 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4147 if (adev->id != PPC440SPE_XOR_ID) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4148 chan->pdest_page = alloc_page(GFP_KERNEL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4149 chan->qdest_page = alloc_page(GFP_KERNEL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4150 if (!chan->pdest_page ||
12458ea06efd7b Anatolij Gustschin 2009-12-11 4151 !chan->qdest_page) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4152 if (chan->pdest_page)
12458ea06efd7b Anatolij Gustschin 2009-12-11 4153 __free_page(chan->pdest_page);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4154 if (chan->qdest_page)
12458ea06efd7b Anatolij Gustschin 2009-12-11 4155 __free_page(chan->qdest_page);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4156 ret = -ENOMEM;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4157 goto err_page_alloc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4158 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4159 chan->pdest = dma_map_page(&ofdev->dev, chan->pdest_page, 0,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4160 PAGE_SIZE, DMA_BIDIRECTIONAL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4161 chan->qdest = dma_map_page(&ofdev->dev, chan->qdest_page, 0,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4162 PAGE_SIZE, DMA_BIDIRECTIONAL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4163 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4164
12458ea06efd7b Anatolij Gustschin 2009-12-11 4165 ref = kmalloc(sizeof(*ref), GFP_KERNEL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4166 if (ref) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4167 ref->chan = &chan->common;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4168 INIT_LIST_HEAD(&ref->node);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4169 list_add_tail(&ref->node, &ppc440spe_adma_chan_list);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4170 } else {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4171 dev_err(&ofdev->dev, "failed to allocate channel reference!\n");
12458ea06efd7b Anatolij Gustschin 2009-12-11 4172 ret = -ENOMEM;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4173 goto err_ref_alloc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4174 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4175
12458ea06efd7b Anatolij Gustschin 2009-12-11 4176 ret = ppc440spe_adma_setup_irqs(adev, chan, &initcode);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4177 if (ret)
12458ea06efd7b Anatolij Gustschin 2009-12-11 4178 goto err_irq;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4179
12458ea06efd7b Anatolij Gustschin 2009-12-11 4180 ppc440spe_adma_init_capabilities(adev);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4181
12458ea06efd7b Anatolij Gustschin 2009-12-11 4182 ret = dma_async_device_register(&adev->common);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4183 if (ret) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4184 initcode = PPC_ADMA_INIT_REGISTER;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4185 dev_err(&ofdev->dev, "failed to register dma device\n");
12458ea06efd7b Anatolij Gustschin 2009-12-11 4186 goto err_dev_reg;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4187 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4188
12458ea06efd7b Anatolij Gustschin 2009-12-11 4189 goto out;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4190
12458ea06efd7b Anatolij Gustschin 2009-12-11 4191 err_dev_reg:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4192 ppc440spe_adma_release_irqs(adev, chan);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4193 err_irq:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4194 list_for_each_entry_safe(ref, _ref, &ppc440spe_adma_chan_list, node) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4195 if (chan == to_ppc440spe_adma_chan(ref->chan)) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4196 list_del(&ref->node);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4197 kfree(ref);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4198 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4199 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4200 err_ref_alloc:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4201 if (adev->id != PPC440SPE_XOR_ID) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4202 dma_unmap_page(&ofdev->dev, chan->pdest,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4203 PAGE_SIZE, DMA_BIDIRECTIONAL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4204 dma_unmap_page(&ofdev->dev, chan->qdest,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4205 PAGE_SIZE, DMA_BIDIRECTIONAL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4206 __free_page(chan->pdest_page);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4207 __free_page(chan->qdest_page);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4208 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4209 err_page_alloc:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4210 kfree(chan);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4211 err_chan_alloc:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4212 if (adev->id == PPC440SPE_XOR_ID)
12458ea06efd7b Anatolij Gustschin 2009-12-11 4213 iounmap(adev->xor_reg);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4214 else
12458ea06efd7b Anatolij Gustschin 2009-12-11 4215 iounmap(adev->dma_reg);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4216 err_regs_alloc:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4217 dma_free_coherent(adev->dev, adev->pool_size,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4218 adev->dma_desc_pool_virt,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4219 adev->dma_desc_pool);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4220 err_dma_alloc:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4221 kfree(adev);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4222 err_adev_alloc:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4223 release_mem_region(res.start, resource_size(&res));
12458ea06efd7b Anatolij Gustschin 2009-12-11 4224 out:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4225 if (id < PPC440SPE_ADMA_ENGINES_NUM)
12458ea06efd7b Anatolij Gustschin 2009-12-11 4226 ppc440spe_adma_devices[id] = initcode;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4227
12458ea06efd7b Anatolij Gustschin 2009-12-11 4228 return ret;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4229 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4230
:::::: The code at line 4100 was first introduced by commit
:::::: 12458ea06efd7b44281e68fe59c950ec7d59c649 ppc440spe-adma: adds updated ppc440spe adma driver
:::::: TO: Anatolij Gustschin <agust(a)denx.de>
:::::: CC: Dan Williams <dan.j.williams(a)intel.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 4 months
drivers/dma/ppc4xx/adma.c:688:38: sparse: sparse: incorrect type in argument 2 (different address spaces)
by kernel test robot
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 8ac91e6c6033ebc12c5c1e4aa171b81a662bd70f
commit: 894fa235eb4ca0bfa692dbe4932c2f940cdc8c1e powerpc: inline iomap accessors
date: 6 months ago
config: powerpc64-randconfig-s032-20210518 (attached as .config)
compiler: powerpc-linux-gcc (GCC) 9.3.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.3-341-g8af24329-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit...
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 894fa235eb4ca0bfa692dbe4932c2f940cdc8c1e
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=powerpc64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
drivers/dma/ppc4xx/adma.c:73:1: sparse: sparse: symbol 'ppc440spe_adma_chan_list' was not declared. Should it be static?
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:140:17: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:543:35: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] sg1l @@ got restricted __le32 [usertype] @@
drivers/dma/ppc4xx/adma.c:543:35: sparse: expected unsigned int [usertype] sg1l
drivers/dma/ppc4xx/adma.c:543:35: sparse: got restricted __le32 [usertype]
drivers/dma/ppc4xx/adma.c:544:35: sparse: sparse: invalid assignment: |=
drivers/dma/ppc4xx/adma.c:544:35: sparse: left side has type unsigned int
drivers/dma/ppc4xx/adma.c:544:35: sparse: right side has type restricted __le32
drivers/dma/ppc4xx/adma.c:590:23: sparse: sparse: invalid assignment: |=
drivers/dma/ppc4xx/adma.c:590:23: sparse: left side has type unsigned int
drivers/dma/ppc4xx/adma.c:590:23: sparse: right side has type restricted __le32
drivers/dma/ppc4xx/adma.c:629:23: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] @@ got restricted __le32 [usertype] @@
drivers/dma/ppc4xx/adma.c:629:23: sparse: expected unsigned int [usertype]
drivers/dma/ppc4xx/adma.c:629:23: sparse: got restricted __le32 [usertype]
drivers/dma/ppc4xx/adma.c:630:23: sparse: sparse: invalid assignment: |=
drivers/dma/ppc4xx/adma.c:630:23: sparse: left side has type unsigned int
drivers/dma/ppc4xx/adma.c:630:23: sparse: right side has type restricted __le32
drivers/dma/ppc4xx/adma.c:655:34: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] cnt @@ got restricted __le32 [usertype] @@
drivers/dma/ppc4xx/adma.c:655:34: sparse: expected unsigned int [usertype] cnt
drivers/dma/ppc4xx/adma.c:655:34: sparse: got restricted __le32 [usertype]
>> drivers/dma/ppc4xx/adma.c:688:38: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:688:38: sparse: expected void volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:688:38: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:689:38: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:689:38: sparse: expected void volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:689:38: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:690:38: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:690:38: sparse: expected void volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:690:38: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:691:39: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:691:39: sparse: expected void volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:691:39: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:738:69: sparse: sparse: Using plain integer as NULL pointer
drivers/dma/ppc4xx/adma.c:1187:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct dma_regs *dma_reg @@ got struct dma_regs [noderef] __iomem *dma_reg @@
drivers/dma/ppc4xx/adma.c:1187:25: sparse: expected struct dma_regs *dma_reg
drivers/dma/ppc4xx/adma.c:1187:25: sparse: got struct dma_regs [noderef] __iomem *dma_reg
>> drivers/dma/ppc4xx/adma.c:1188:34: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1188:34: sparse: expected void const volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1188:34: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1190:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xor_regs *xor_reg @@ got struct xor_regs [noderef] __iomem *xor_reg @@
drivers/dma/ppc4xx/adma.c:1190:25: sparse: expected struct xor_regs *xor_reg
drivers/dma/ppc4xx/adma.c:1190:25: sparse: got struct xor_regs [noderef] __iomem *xor_reg
>> drivers/dma/ppc4xx/adma.c:1191:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1191:36: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1191:36: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1138:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xor_regs *xor_reg @@ got struct xor_regs [noderef] __iomem *xor_reg @@
drivers/dma/ppc4xx/adma.c:1138:25: sparse: expected struct xor_regs *xor_reg
drivers/dma/ppc4xx/adma.c:1138:25: sparse: got struct xor_regs [noderef] __iomem *xor_reg
drivers/dma/ppc4xx/adma.c:1147:35: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1147:35: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1147:35: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1157:49: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1157:49: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1157:49: sparse: got unsigned int *
>> drivers/dma/ppc4xx/adma.c:1159:38: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1159:38: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1159:38: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:911:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct dma_regs *dma_reg @@ got struct dma_regs [noderef] __iomem *dma_reg @@
drivers/dma/ppc4xx/adma.c:911:25: sparse: expected struct dma_regs *dma_reg
drivers/dma/ppc4xx/adma.c:911:25: sparse: got struct dma_regs [noderef] __iomem *dma_reg
drivers/dma/ppc4xx/adma.c:912:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:912:40: sparse: expected void const volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:912:40: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:929:37: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:929:37: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:929:37: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:929:37: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:929:37: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:929:37: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:974:32: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:974:32: sparse: expected void const volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:974:32: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:979:40: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:979:40: sparse: expected void volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:979:40: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:984:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xor_regs *xor_reg @@ got struct xor_regs [noderef] __iomem *xor_reg @@
drivers/dma/ppc4xx/adma.c:984:25: sparse: expected struct xor_regs *xor_reg
drivers/dma/ppc4xx/adma.c:984:25: sparse: got struct xor_regs [noderef] __iomem *xor_reg
drivers/dma/ppc4xx/adma.c:985:34: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:985:34: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:985:34: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:986:34: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:986:34: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:986:34: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:993:55: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:993:55: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:993:55: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:995:51: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:995:51: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:995:51: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:997:51: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:997:51: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:997:51: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:999:46: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:999:46: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:999:46: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1008:35: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1008:35: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1008:35: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1027:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct dma_regs *dma_reg @@ got struct dma_regs [noderef] __iomem *dma_reg @@
drivers/dma/ppc4xx/adma.c:1027:25: sparse: expected struct dma_regs *dma_reg
drivers/dma/ppc4xx/adma.c:1027:25: sparse: got struct dma_regs [noderef] __iomem *dma_reg
>> drivers/dma/ppc4xx/adma.c:1031:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got unsigned short * @@
drivers/dma/ppc4xx/adma.c:1031:31: sparse: expected void const volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1031:31: sparse: got unsigned short *
drivers/dma/ppc4xx/adma.c:1031:60: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got unsigned short * @@
drivers/dma/ppc4xx/adma.c:1031:60: sparse: expected void const volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1031:60: sparse: got unsigned short *
drivers/dma/ppc4xx/adma.c:1032:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got unsigned short * @@
drivers/dma/ppc4xx/adma.c:1032:31: sparse: expected void const volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1032:31: sparse: got unsigned short *
drivers/dma/ppc4xx/adma.c:1032:60: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got unsigned short * @@
drivers/dma/ppc4xx/adma.c:1032:60: sparse: expected void const volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1032:60: sparse: got unsigned short *
drivers/dma/ppc4xx/adma.c:1038:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xor_regs *xor_reg @@ got struct xor_regs [noderef] __iomem *xor_reg @@
drivers/dma/ppc4xx/adma.c:1038:25: sparse: expected struct xor_regs *xor_reg
drivers/dma/ppc4xx/adma.c:1038:25: sparse: got struct xor_regs [noderef] __iomem *xor_reg
drivers/dma/ppc4xx/adma.c:1039:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1039:37: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1039:37: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1053:48: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct xor_regs *xor_reg @@ got struct xor_regs [noderef] __iomem *xor_reg @@
drivers/dma/ppc4xx/adma.c:1053:48: sparse: expected struct xor_regs *xor_reg
drivers/dma/ppc4xx/adma.c:1053:48: sparse: got struct xor_regs [noderef] __iomem *xor_reg
drivers/dma/ppc4xx/adma.c:1055:25: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1055:25: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1055:25: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1062:41: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1062:41: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1062:41: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1064:39: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1064:39: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1064:39: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1065:25: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1065:25: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1065:25: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1066:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1066:33: sparse: expected void const [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1066:33: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1067:22: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1067:22: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1067:22: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1080:48: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct dma_regs *dma_reg @@ got struct dma_regs [noderef] __iomem *dma_reg @@
drivers/dma/ppc4xx/adma.c:1080:48: sparse: expected struct dma_regs *dma_reg
drivers/dma/ppc4xx/adma.c:1080:48: sparse: got struct dma_regs [noderef] __iomem *dma_reg
drivers/dma/ppc4xx/adma.c:1090:26: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1090:26: sparse: expected void volatile [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1090:26: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1210:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xor_regs *xor_reg @@ got struct xor_regs [noderef] __iomem *xor_reg @@
drivers/dma/ppc4xx/adma.c:1210:25: sparse: expected struct xor_regs *xor_reg
drivers/dma/ppc4xx/adma.c:1210:25: sparse: got struct xor_regs [noderef] __iomem *xor_reg
drivers/dma/ppc4xx/adma.c:1214:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem *addr @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1214:30: sparse: expected void [noderef] __iomem *addr
drivers/dma/ppc4xx/adma.c:1214:30: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:2777:62: sparse: sparse: Using plain integer as NULL pointer
drivers/dma/ppc4xx/adma.c:4094:14: sparse: sparse: too many warnings
vim +688 drivers/dma/ppc4xx/adma.c
12458ea06efd7b Anatolij Gustschin 2009-12-11 599
12458ea06efd7b Anatolij Gustschin 2009-12-11 600 /**
12458ea06efd7b Anatolij Gustschin 2009-12-11 601 * ppc440spe_desc_set_dest_addr - set destination address into the descriptor
12458ea06efd7b Anatolij Gustschin 2009-12-11 602 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 603 static void ppc440spe_desc_set_dest_addr(struct ppc440spe_adma_desc_slot *desc,
12458ea06efd7b Anatolij Gustschin 2009-12-11 604 struct ppc440spe_adma_chan *chan,
12458ea06efd7b Anatolij Gustschin 2009-12-11 605 dma_addr_t addrh, dma_addr_t addrl,
12458ea06efd7b Anatolij Gustschin 2009-12-11 606 u32 dst_idx)
12458ea06efd7b Anatolij Gustschin 2009-12-11 607 {
12458ea06efd7b Anatolij Gustschin 2009-12-11 608 struct dma_cdb *dma_hw_desc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 609 struct xor_cb *xor_hw_desc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 610 phys_addr_t addr64, tmphi, tmplow;
12458ea06efd7b Anatolij Gustschin 2009-12-11 611 u32 *psgu, *psgl;
12458ea06efd7b Anatolij Gustschin 2009-12-11 612
12458ea06efd7b Anatolij Gustschin 2009-12-11 613 switch (chan->device->id) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 614 case PPC440SPE_DMA0_ID:
12458ea06efd7b Anatolij Gustschin 2009-12-11 615 case PPC440SPE_DMA1_ID:
12458ea06efd7b Anatolij Gustschin 2009-12-11 616 if (!addrh) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 617 addr64 = addrl;
12458ea06efd7b Anatolij Gustschin 2009-12-11 618 tmphi = (addr64 >> 32);
12458ea06efd7b Anatolij Gustschin 2009-12-11 619 tmplow = (addr64 & 0xFFFFFFFF);
12458ea06efd7b Anatolij Gustschin 2009-12-11 620 } else {
12458ea06efd7b Anatolij Gustschin 2009-12-11 621 tmphi = addrh;
12458ea06efd7b Anatolij Gustschin 2009-12-11 622 tmplow = addrl;
12458ea06efd7b Anatolij Gustschin 2009-12-11 623 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 624 dma_hw_desc = desc->hw_desc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 625
12458ea06efd7b Anatolij Gustschin 2009-12-11 626 psgu = dst_idx ? &dma_hw_desc->sg3u : &dma_hw_desc->sg2u;
12458ea06efd7b Anatolij Gustschin 2009-12-11 627 psgl = dst_idx ? &dma_hw_desc->sg3l : &dma_hw_desc->sg2l;
12458ea06efd7b Anatolij Gustschin 2009-12-11 628
12458ea06efd7b Anatolij Gustschin 2009-12-11 @629 *psgl = cpu_to_le32((u32)tmplow);
12458ea06efd7b Anatolij Gustschin 2009-12-11 630 *psgu |= cpu_to_le32((u32)tmphi);
12458ea06efd7b Anatolij Gustschin 2009-12-11 631 break;
12458ea06efd7b Anatolij Gustschin 2009-12-11 632 case PPC440SPE_XOR_ID:
12458ea06efd7b Anatolij Gustschin 2009-12-11 633 xor_hw_desc = desc->hw_desc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 634 xor_hw_desc->cbtal = addrl;
12458ea06efd7b Anatolij Gustschin 2009-12-11 635 xor_hw_desc->cbtah |= addrh;
12458ea06efd7b Anatolij Gustschin 2009-12-11 636 break;
12458ea06efd7b Anatolij Gustschin 2009-12-11 637 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 638 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 639
12458ea06efd7b Anatolij Gustschin 2009-12-11 640 /**
12458ea06efd7b Anatolij Gustschin 2009-12-11 641 * ppc440spe_desc_set_byte_count - set number of data bytes involved
12458ea06efd7b Anatolij Gustschin 2009-12-11 642 * into the operation
12458ea06efd7b Anatolij Gustschin 2009-12-11 643 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 644 static void ppc440spe_desc_set_byte_count(struct ppc440spe_adma_desc_slot *desc,
12458ea06efd7b Anatolij Gustschin 2009-12-11 645 struct ppc440spe_adma_chan *chan,
12458ea06efd7b Anatolij Gustschin 2009-12-11 646 u32 byte_count)
12458ea06efd7b Anatolij Gustschin 2009-12-11 647 {
12458ea06efd7b Anatolij Gustschin 2009-12-11 648 struct dma_cdb *dma_hw_desc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 649 struct xor_cb *xor_hw_desc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 650
12458ea06efd7b Anatolij Gustschin 2009-12-11 651 switch (chan->device->id) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 652 case PPC440SPE_DMA0_ID:
12458ea06efd7b Anatolij Gustschin 2009-12-11 653 case PPC440SPE_DMA1_ID:
12458ea06efd7b Anatolij Gustschin 2009-12-11 654 dma_hw_desc = desc->hw_desc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 655 dma_hw_desc->cnt = cpu_to_le32(byte_count);
12458ea06efd7b Anatolij Gustschin 2009-12-11 656 break;
12458ea06efd7b Anatolij Gustschin 2009-12-11 657 case PPC440SPE_XOR_ID:
12458ea06efd7b Anatolij Gustschin 2009-12-11 658 xor_hw_desc = desc->hw_desc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 659 xor_hw_desc->cbbc = byte_count;
12458ea06efd7b Anatolij Gustschin 2009-12-11 660 break;
12458ea06efd7b Anatolij Gustschin 2009-12-11 661 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 662 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 663
12458ea06efd7b Anatolij Gustschin 2009-12-11 664 /**
12458ea06efd7b Anatolij Gustschin 2009-12-11 665 * ppc440spe_desc_set_rxor_block_size - set RXOR block size
12458ea06efd7b Anatolij Gustschin 2009-12-11 666 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 667 static inline void ppc440spe_desc_set_rxor_block_size(u32 byte_count)
12458ea06efd7b Anatolij Gustschin 2009-12-11 668 {
12458ea06efd7b Anatolij Gustschin 2009-12-11 669 /* assume that byte_count is aligned on the 512-boundary;
12458ea06efd7b Anatolij Gustschin 2009-12-11 670 * thus write it directly to the register (bits 23:31 are
12458ea06efd7b Anatolij Gustschin 2009-12-11 671 * reserved there).
12458ea06efd7b Anatolij Gustschin 2009-12-11 672 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 673 dcr_write(ppc440spe_mq_dcr_host, DCRN_MQ0_CF2H, byte_count);
12458ea06efd7b Anatolij Gustschin 2009-12-11 674 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 675
12458ea06efd7b Anatolij Gustschin 2009-12-11 676 /**
12458ea06efd7b Anatolij Gustschin 2009-12-11 677 * ppc440spe_desc_set_dcheck - set CHECK pattern
12458ea06efd7b Anatolij Gustschin 2009-12-11 678 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 679 static void ppc440spe_desc_set_dcheck(struct ppc440spe_adma_desc_slot *desc,
12458ea06efd7b Anatolij Gustschin 2009-12-11 680 struct ppc440spe_adma_chan *chan, u8 *qword)
12458ea06efd7b Anatolij Gustschin 2009-12-11 681 {
12458ea06efd7b Anatolij Gustschin 2009-12-11 682 struct dma_cdb *dma_hw_desc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 683
12458ea06efd7b Anatolij Gustschin 2009-12-11 684 switch (chan->device->id) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 685 case PPC440SPE_DMA0_ID:
12458ea06efd7b Anatolij Gustschin 2009-12-11 686 case PPC440SPE_DMA1_ID:
12458ea06efd7b Anatolij Gustschin 2009-12-11 687 dma_hw_desc = desc->hw_desc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 @688 iowrite32(qword[0], &dma_hw_desc->sg3l);
12458ea06efd7b Anatolij Gustschin 2009-12-11 689 iowrite32(qword[4], &dma_hw_desc->sg3u);
12458ea06efd7b Anatolij Gustschin 2009-12-11 @690 iowrite32(qword[8], &dma_hw_desc->sg2l);
12458ea06efd7b Anatolij Gustschin 2009-12-11 691 iowrite32(qword[12], &dma_hw_desc->sg2u);
12458ea06efd7b Anatolij Gustschin 2009-12-11 692 break;
12458ea06efd7b Anatolij Gustschin 2009-12-11 693 default:
12458ea06efd7b Anatolij Gustschin 2009-12-11 694 BUG();
12458ea06efd7b Anatolij Gustschin 2009-12-11 695 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 696 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 697
:::::: The code at line 688 was first introduced by commit
:::::: 12458ea06efd7b44281e68fe59c950ec7d59c649 ppc440spe-adma: adds updated ppc440spe adma driver
:::::: TO: Anatolij Gustschin <agust(a)denx.de>
:::::: CC: Dan Williams <dan.j.williams(a)intel.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 4 months
drivers/md/dm-log-writes.c:452:12: warning: stack frame size of 1184 bytes in function 'log_writes_kthread'
by kernel test robot
Hi Christoph,
FYI, the error/warning still remains.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 8ac91e6c6033ebc12c5c1e4aa171b81a662bd70f
commit: 309dca309fc39a9e3c31b916393b74bd174fd74e block: store a block_device pointer in struct bio
date: 4 months ago
config: powerpc64-randconfig-r011-20210518 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 0a34ff8bcb1df16fe7d643ccbe4567b2162c5024)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install powerpc64 cross compiling tool for clang build
# apt-get install binutils-powerpc64-linux-gnu
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit...
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 309dca309fc39a9e3c31b916393b74bd174fd74e
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=powerpc64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All warnings (new ones prefixed by >>):
>> drivers/md/dm-log-writes.c:452:12: warning: stack frame size of 1184 bytes in function 'log_writes_kthread' [-Wframe-larger-than=]
static int log_writes_kthread(void *arg)
^
1 warning generated.
Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for NETDEVICES
Depends on NET
Selected by
- AKEBONO && PPC_47x
WARNING: unmet direct dependencies detected for ETHERNET
Depends on NETDEVICES && NET
Selected by
- AKEBONO && PPC_47x
WARNING: unmet direct dependencies detected for MMC_SDHCI
Depends on MMC && HAS_DMA
Selected by
- AKEBONO && PPC_47x
WARNING: unmet direct dependencies detected for MMC_SDHCI_PLTFM
Depends on MMC && MMC_SDHCI
Selected by
- AKEBONO && PPC_47x
vim +/log_writes_kthread +452 drivers/md/dm-log-writes.c
0e9cebe724597a Josef Bacik 2015-03-20 451
0e9cebe724597a Josef Bacik 2015-03-20 @452 static int log_writes_kthread(void *arg)
0e9cebe724597a Josef Bacik 2015-03-20 453 {
0e9cebe724597a Josef Bacik 2015-03-20 454 struct log_writes_c *lc = (struct log_writes_c *)arg;
0e9cebe724597a Josef Bacik 2015-03-20 455 sector_t sector = 0;
0e9cebe724597a Josef Bacik 2015-03-20 456
0e9cebe724597a Josef Bacik 2015-03-20 457 while (!kthread_should_stop()) {
0e9cebe724597a Josef Bacik 2015-03-20 458 bool super = false;
0e9cebe724597a Josef Bacik 2015-03-20 459 bool logging_enabled;
0e9cebe724597a Josef Bacik 2015-03-20 460 struct pending_block *block = NULL;
0e9cebe724597a Josef Bacik 2015-03-20 461 int ret;
0e9cebe724597a Josef Bacik 2015-03-20 462
0e9cebe724597a Josef Bacik 2015-03-20 463 spin_lock_irq(&lc->blocks_lock);
0e9cebe724597a Josef Bacik 2015-03-20 464 if (!list_empty(&lc->logging_blocks)) {
0e9cebe724597a Josef Bacik 2015-03-20 465 block = list_first_entry(&lc->logging_blocks,
0e9cebe724597a Josef Bacik 2015-03-20 466 struct pending_block, list);
0e9cebe724597a Josef Bacik 2015-03-20 467 list_del_init(&block->list);
0e9cebe724597a Josef Bacik 2015-03-20 468 if (!lc->logging_enabled)
0e9cebe724597a Josef Bacik 2015-03-20 469 goto next;
0e9cebe724597a Josef Bacik 2015-03-20 470
0e9cebe724597a Josef Bacik 2015-03-20 471 sector = lc->next_sector;
228bb5b26038a7 Josef Bacik 2017-07-28 472 if (!(block->flags & LOG_DISCARD_FLAG))
228bb5b26038a7 Josef Bacik 2017-07-28 473 lc->next_sector += dev_to_bio_sectors(lc, block->nr_sectors);
228bb5b26038a7 Josef Bacik 2017-07-28 474 lc->next_sector += dev_to_bio_sectors(lc, 1);
0e9cebe724597a Josef Bacik 2015-03-20 475
0e9cebe724597a Josef Bacik 2015-03-20 476 /*
0e9cebe724597a Josef Bacik 2015-03-20 477 * Apparently the size of the device may not be known
0e9cebe724597a Josef Bacik 2015-03-20 478 * right away, so handle this properly.
0e9cebe724597a Josef Bacik 2015-03-20 479 */
0e9cebe724597a Josef Bacik 2015-03-20 480 if (!lc->end_sector)
0e9cebe724597a Josef Bacik 2015-03-20 481 lc->end_sector = logdev_last_sector(lc);
0e9cebe724597a Josef Bacik 2015-03-20 482 if (lc->end_sector &&
0e9cebe724597a Josef Bacik 2015-03-20 483 lc->next_sector >= lc->end_sector) {
0e9cebe724597a Josef Bacik 2015-03-20 484 DMERR("Ran out of space on the logdev");
0e9cebe724597a Josef Bacik 2015-03-20 485 lc->logging_enabled = false;
0e9cebe724597a Josef Bacik 2015-03-20 486 goto next;
0e9cebe724597a Josef Bacik 2015-03-20 487 }
0e9cebe724597a Josef Bacik 2015-03-20 488 lc->logged_entries++;
0e9cebe724597a Josef Bacik 2015-03-20 489 atomic_inc(&lc->io_blocks);
0e9cebe724597a Josef Bacik 2015-03-20 490
0e9cebe724597a Josef Bacik 2015-03-20 491 super = (block->flags & (LOG_FUA_FLAG | LOG_MARK_FLAG));
0e9cebe724597a Josef Bacik 2015-03-20 492 if (super)
0e9cebe724597a Josef Bacik 2015-03-20 493 atomic_inc(&lc->io_blocks);
0e9cebe724597a Josef Bacik 2015-03-20 494 }
0e9cebe724597a Josef Bacik 2015-03-20 495 next:
0e9cebe724597a Josef Bacik 2015-03-20 496 logging_enabled = lc->logging_enabled;
0e9cebe724597a Josef Bacik 2015-03-20 497 spin_unlock_irq(&lc->blocks_lock);
0e9cebe724597a Josef Bacik 2015-03-20 498 if (block) {
0e9cebe724597a Josef Bacik 2015-03-20 499 if (logging_enabled) {
0e9cebe724597a Josef Bacik 2015-03-20 500 ret = log_one_block(lc, block, sector);
0e9cebe724597a Josef Bacik 2015-03-20 501 if (!ret && super)
0e9cebe724597a Josef Bacik 2015-03-20 502 ret = log_super(lc);
0e9cebe724597a Josef Bacik 2015-03-20 503 if (ret) {
0e9cebe724597a Josef Bacik 2015-03-20 504 spin_lock_irq(&lc->blocks_lock);
0e9cebe724597a Josef Bacik 2015-03-20 505 lc->logging_enabled = false;
0e9cebe724597a Josef Bacik 2015-03-20 506 spin_unlock_irq(&lc->blocks_lock);
0e9cebe724597a Josef Bacik 2015-03-20 507 }
0e9cebe724597a Josef Bacik 2015-03-20 508 } else
0e9cebe724597a Josef Bacik 2015-03-20 509 free_pending_block(lc, block);
0e9cebe724597a Josef Bacik 2015-03-20 510 continue;
0e9cebe724597a Josef Bacik 2015-03-20 511 }
0e9cebe724597a Josef Bacik 2015-03-20 512
0e9cebe724597a Josef Bacik 2015-03-20 513 if (!try_to_freeze()) {
0e9cebe724597a Josef Bacik 2015-03-20 514 set_current_state(TASK_INTERRUPTIBLE);
0e9cebe724597a Josef Bacik 2015-03-20 515 if (!kthread_should_stop() &&
0c79c62021d23f Josef Bacik 2017-07-28 516 list_empty(&lc->logging_blocks))
0e9cebe724597a Josef Bacik 2015-03-20 517 schedule();
0e9cebe724597a Josef Bacik 2015-03-20 518 __set_current_state(TASK_RUNNING);
0e9cebe724597a Josef Bacik 2015-03-20 519 }
0e9cebe724597a Josef Bacik 2015-03-20 520 }
0e9cebe724597a Josef Bacik 2015-03-20 521 return 0;
0e9cebe724597a Josef Bacik 2015-03-20 522 }
0e9cebe724597a Josef Bacik 2015-03-20 523
:::::: The code at line 452 was first introduced by commit
:::::: 0e9cebe724597a76ab1b0ebc0a21e16f7db11b47 dm: add log writes target
:::::: TO: Josef Bacik <jbacik(a)fb.com>
:::::: CC: Mike Snitzer <snitzer(a)redhat.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 4 months
[agd5f:drm-next 266/414] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:2776 handle_hpd_rx_irq() warn: inconsistent indenting
by kernel test robot
tree: https://gitlab.freedesktop.org/agd5f/linux.git drm-next
head: 2117d5f920190bd219e1aca5bf903477781ca161
commit: 509b9a5b4865dee723296f143695a7774fc96c4a [266/414] drm/amd/display: Avoid HPD IRQ in GPU reset state
config: i386-randconfig-m021-20210517 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
New smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:2776 handle_hpd_rx_irq() warn: inconsistent indenting
Old smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:1345 amdgpu_dm_fini() warn: variable dereferenced before check 'adev->dm.dc' (see line 1329)
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:5748 create_stream_for_sink() error: we previously assumed 'aconnector->dc_sink' could be null (see line 5612)
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:8068 handle_cursor_update() error: we previously assumed 'afb' could be null (see line 8027)
vim +2776 drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c
4562236b3bc0a28 Harry Wentland 2017-09-12 2730
4562236b3bc0a28 Harry Wentland 2017-09-12 2731 static void handle_hpd_rx_irq(void *param)
4562236b3bc0a28 Harry Wentland 2017-09-12 2732 {
c84dec2fe8837fa Harry Wentland 2017-09-05 2733 struct amdgpu_dm_connector *aconnector = (struct amdgpu_dm_connector *)param;
4562236b3bc0a28 Harry Wentland 2017-09-12 2734 struct drm_connector *connector = &aconnector->base;
4562236b3bc0a28 Harry Wentland 2017-09-12 2735 struct drm_device *dev = connector->dev;
53cbf65c145450e Tom St Denis 2017-10-17 2736 struct dc_link *dc_link = aconnector->dc_link;
4562236b3bc0a28 Harry Wentland 2017-09-12 2737 bool is_mst_root_connector = aconnector->mst_mgr.mst_state;
c8ea79a8a2767e7 Qingqing Zhuo 2020-10-01 2738 bool result = false;
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2739 enum dc_connection_type new_connection_type = dc_connection_none;
c8ea79a8a2767e7 Qingqing Zhuo 2020-10-01 2740 struct amdgpu_device *adev = drm_to_adev(dev);
2a0f92700fe348f Bhawanpreet Lakha 2019-06-10 2741 union hpd_irq_data hpd_irq_data;
2a0f92700fe348f Bhawanpreet Lakha 2019-06-10 2742
2a0f92700fe348f Bhawanpreet Lakha 2019-06-10 2743 memset(&hpd_irq_data, 0, sizeof(hpd_irq_data));
4562236b3bc0a28 Harry Wentland 2017-09-12 2744
b972b4f913eee02 Harry Wentland 2020-10-02 2745 if (adev->dm.disable_hpd_irq)
b972b4f913eee02 Harry Wentland 2020-10-02 2746 return;
b972b4f913eee02 Harry Wentland 2020-10-02 2747
b972b4f913eee02 Harry Wentland 2020-10-02 2748
1f6010a96273c31 David Francis 2018-08-15 2749 /*
1f6010a96273c31 David Francis 2018-08-15 2750 * TODO:Temporary add mutex to protect hpd interrupt not have a gpio
4562236b3bc0a28 Harry Wentland 2017-09-12 2751 * conflict, after implement i2c helper, this mutex should be
4562236b3bc0a28 Harry Wentland 2017-09-12 2752 * retired.
4562236b3bc0a28 Harry Wentland 2017-09-12 2753 */
4562236b3bc0a28 Harry Wentland 2017-09-12 2754 mutex_lock(&aconnector->hpd_lock);
4562236b3bc0a28 Harry Wentland 2017-09-12 2755
3083a9845e1258e Qingqing Zhuo 2020-11-23 2756 read_hpd_rx_irq_data(dc_link, &hpd_irq_data);
3083a9845e1258e Qingqing Zhuo 2020-11-23 2757
3083a9845e1258e Qingqing Zhuo 2020-11-23 2758 if ((dc_link->cur_link_settings.lane_count != LANE_COUNT_UNKNOWN) ||
3083a9845e1258e Qingqing Zhuo 2020-11-23 2759 (dc_link->type == dc_connection_mst_branch)) {
3083a9845e1258e Qingqing Zhuo 2020-11-23 2760 if (hpd_irq_data.bytes.device_service_irq.bits.UP_REQ_MSG_RDY) {
3083a9845e1258e Qingqing Zhuo 2020-11-23 2761 result = true;
3083a9845e1258e Qingqing Zhuo 2020-11-23 2762 dm_handle_hpd_rx_irq(aconnector);
3083a9845e1258e Qingqing Zhuo 2020-11-23 2763 goto out;
3083a9845e1258e Qingqing Zhuo 2020-11-23 2764 } else if (hpd_irq_data.bytes.device_service_irq.bits.DOWN_REP_MSG_RDY) {
3083a9845e1258e Qingqing Zhuo 2020-11-23 2765 result = false;
3083a9845e1258e Qingqing Zhuo 2020-11-23 2766 dm_handle_hpd_rx_irq(aconnector);
3083a9845e1258e Qingqing Zhuo 2020-11-23 2767 goto out;
3083a9845e1258e Qingqing Zhuo 2020-11-23 2768 }
3083a9845e1258e Qingqing Zhuo 2020-11-23 2769 }
3083a9845e1258e Qingqing Zhuo 2020-11-23 2770
509b9a5b4865dee Zhan Liu 2021-05-09 2771 if (!amdgpu_in_reset(adev)) {
c8ea79a8a2767e7 Qingqing Zhuo 2020-10-01 2772 mutex_lock(&adev->dm.dc_lock);
2a0f92700fe348f Bhawanpreet Lakha 2019-06-10 2773 #ifdef CONFIG_DRM_AMD_DC_HDCP
c8ea79a8a2767e7 Qingqing Zhuo 2020-10-01 2774 result = dc_link_handle_hpd_rx_irq(dc_link, &hpd_irq_data, NULL);
2a0f92700fe348f Bhawanpreet Lakha 2019-06-10 2775 #else
c8ea79a8a2767e7 Qingqing Zhuo 2020-10-01 @2776 result = dc_link_handle_hpd_rx_irq(dc_link, NULL, NULL);
2a0f92700fe348f Bhawanpreet Lakha 2019-06-10 2777 #endif
c8ea79a8a2767e7 Qingqing Zhuo 2020-10-01 2778 mutex_unlock(&adev->dm.dc_lock);
509b9a5b4865dee Zhan Liu 2021-05-09 2779 }
c8ea79a8a2767e7 Qingqing Zhuo 2020-10-01 2780
3083a9845e1258e Qingqing Zhuo 2020-11-23 2781 out:
c8ea79a8a2767e7 Qingqing Zhuo 2020-10-01 2782 if (result && !is_mst_root_connector) {
4562236b3bc0a28 Harry Wentland 2017-09-12 2783 /* Downstream Port status changed. */
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2784 if (!dc_link_detect_sink(dc_link, &new_connection_type))
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2785 DRM_ERROR("KMS: Failed to detect connector\n");
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2786
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2787 if (aconnector->base.force && new_connection_type == dc_connection_none) {
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2788 emulated_link_detect(dc_link);
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2789
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2790 if (aconnector->fake_enable)
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2791 aconnector->fake_enable = false;
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2792
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2793 amdgpu_dm_update_connector_after_detect(aconnector);
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2794
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2795
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2796 drm_modeset_lock_all(dev);
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2797 dm_restore_drm_connector_state(dev, connector);
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2798 drm_modeset_unlock_all(dev);
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2799
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2800 drm_kms_helper_hotplug_event(dev);
fbbdadf2faf17cd Bhawanpreet Lakha 2018-09-26 2801 } else if (dc_link_detect(dc_link, DETECT_REASON_HPDRX)) {
88ac3ddab12e2b0 Roman Li 2018-02-09 2802
88ac3ddab12e2b0 Roman Li 2018-02-09 2803 if (aconnector->fake_enable)
88ac3ddab12e2b0 Roman Li 2018-02-09 2804 aconnector->fake_enable = false;
88ac3ddab12e2b0 Roman Li 2018-02-09 2805
4562236b3bc0a28 Harry Wentland 2017-09-12 2806 amdgpu_dm_update_connector_after_detect(aconnector);
4562236b3bc0a28 Harry Wentland 2017-09-12 2807
4562236b3bc0a28 Harry Wentland 2017-09-12 2808
4562236b3bc0a28 Harry Wentland 2017-09-12 2809 drm_modeset_lock_all(dev);
4562236b3bc0a28 Harry Wentland 2017-09-12 2810 dm_restore_drm_connector_state(dev, connector);
4562236b3bc0a28 Harry Wentland 2017-09-12 2811 drm_modeset_unlock_all(dev);
4562236b3bc0a28 Harry Wentland 2017-09-12 2812
4562236b3bc0a28 Harry Wentland 2017-09-12 2813 drm_kms_helper_hotplug_event(dev);
4562236b3bc0a28 Harry Wentland 2017-09-12 2814 }
4562236b3bc0a28 Harry Wentland 2017-09-12 2815 }
2a0f92700fe348f Bhawanpreet Lakha 2019-06-10 2816 #ifdef CONFIG_DRM_AMD_DC_HDCP
e22bb5626cd6cd7 Alex Deucher 2020-02-18 2817 if (hpd_irq_data.bytes.device_service_irq.bits.CP_IRQ) {
e22bb5626cd6cd7 Alex Deucher 2020-02-18 2818 if (adev->dm.hdcp_workqueue)
2a0f92700fe348f Bhawanpreet Lakha 2019-06-10 2819 hdcp_handle_cpirq(adev->dm.hdcp_workqueue, aconnector->base.index);
e22bb5626cd6cd7 Alex Deucher 2020-02-18 2820 }
2a0f92700fe348f Bhawanpreet Lakha 2019-06-10 2821 #endif
4562236b3bc0a28 Harry Wentland 2017-09-12 2822
b86e7eef91ef119 Nikola Cornij 2021-04-30 2823 if (dc_link->type != dc_connection_mst_branch)
e86e894751f0420 Hans Verkuil 2018-08-27 2824 drm_dp_cec_irq(&aconnector->dm_dp_aux.aux);
b86e7eef91ef119 Nikola Cornij 2021-04-30 2825
4562236b3bc0a28 Harry Wentland 2017-09-12 2826 mutex_unlock(&aconnector->hpd_lock);
4562236b3bc0a28 Harry Wentland 2017-09-12 2827 }
4562236b3bc0a28 Harry Wentland 2017-09-12 2828
:::::: The code at line 2776 was first introduced by commit
:::::: c8ea79a8a2767e7948c778237be655a109366eb9 drm/amd/display: NULL pointer error during compliance test
:::::: TO: Qingqing Zhuo <qingqing.zhuo(a)amd.com>
:::::: CC: Alex Deucher <alexander.deucher(a)amd.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 4 months
drivers/dma/ppc4xx/adma.c:4094:14: sparse: sparse: incorrect type in assignment (different address spaces)
by kernel test robot
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 8ac91e6c6033ebc12c5c1e4aa171b81a662bd70f
commit: 68f35add4ba4c850a33878633e10c02d7ba32d84 dmaengine: ppc4xx: make ppc440spe_adma_chan_list static
date: 7 months ago
config: powerpc64-randconfig-s032-20210518 (attached as .config)
compiler: powerpc-linux-gcc (GCC) 9.3.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.3-341-g8af24329-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit...
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 68f35add4ba4c850a33878633e10c02d7ba32d84
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=powerpc64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
drivers/dma/ppc4xx/adma.c:1159:38: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1159:38: sparse: expected void [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1159:38: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:911:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct dma_regs *dma_reg @@ got struct dma_regs [noderef] __iomem *dma_reg @@
drivers/dma/ppc4xx/adma.c:911:25: sparse: expected struct dma_regs *dma_reg
drivers/dma/ppc4xx/adma.c:911:25: sparse: got struct dma_regs [noderef] __iomem *dma_reg
drivers/dma/ppc4xx/adma.c:912:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:912:40: sparse: expected void const [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:912:40: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:929:37: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:929:37: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:929:37: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:929:37: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:929:37: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:929:37: sparse: sparse: cast to restricted __le32
drivers/dma/ppc4xx/adma.c:974:32: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:974:32: sparse: expected void const [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:974:32: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:979:40: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:979:40: sparse: expected void [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:979:40: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:984:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xor_regs *xor_reg @@ got struct xor_regs [noderef] __iomem *xor_reg @@
drivers/dma/ppc4xx/adma.c:984:25: sparse: expected struct xor_regs *xor_reg
drivers/dma/ppc4xx/adma.c:984:25: sparse: got struct xor_regs [noderef] __iomem *xor_reg
drivers/dma/ppc4xx/adma.c:985:34: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:985:34: sparse: expected void const [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:985:34: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:986:34: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:986:34: sparse: expected void [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:986:34: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:993:55: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:993:55: sparse: expected void const [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:993:55: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:995:51: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:995:51: sparse: expected void [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:995:51: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:997:51: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:997:51: sparse: expected void const [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:997:51: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:999:46: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:999:46: sparse: expected void [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:999:46: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1008:35: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1008:35: sparse: expected void const [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1008:35: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1027:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct dma_regs *dma_reg @@ got struct dma_regs [noderef] __iomem *dma_reg @@
drivers/dma/ppc4xx/adma.c:1027:25: sparse: expected struct dma_regs *dma_reg
drivers/dma/ppc4xx/adma.c:1027:25: sparse: got struct dma_regs [noderef] __iomem *dma_reg
drivers/dma/ppc4xx/adma.c:1031:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned short * @@
drivers/dma/ppc4xx/adma.c:1031:31: sparse: expected void const [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1031:31: sparse: got unsigned short *
drivers/dma/ppc4xx/adma.c:1031:60: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned short * @@
drivers/dma/ppc4xx/adma.c:1031:60: sparse: expected void const [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1031:60: sparse: got unsigned short *
drivers/dma/ppc4xx/adma.c:1032:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned short * @@
drivers/dma/ppc4xx/adma.c:1032:31: sparse: expected void const [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1032:31: sparse: got unsigned short *
drivers/dma/ppc4xx/adma.c:1032:60: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned short * @@
drivers/dma/ppc4xx/adma.c:1032:60: sparse: expected void const [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1032:60: sparse: got unsigned short *
drivers/dma/ppc4xx/adma.c:1038:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xor_regs *xor_reg @@ got struct xor_regs [noderef] __iomem *xor_reg @@
drivers/dma/ppc4xx/adma.c:1038:25: sparse: expected struct xor_regs *xor_reg
drivers/dma/ppc4xx/adma.c:1038:25: sparse: got struct xor_regs [noderef] __iomem *xor_reg
drivers/dma/ppc4xx/adma.c:1039:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1039:37: sparse: expected void const [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1039:37: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1053:48: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct xor_regs *xor_reg @@ got struct xor_regs [noderef] __iomem *xor_reg @@
drivers/dma/ppc4xx/adma.c:1053:48: sparse: expected struct xor_regs *xor_reg
drivers/dma/ppc4xx/adma.c:1053:48: sparse: got struct xor_regs [noderef] __iomem *xor_reg
drivers/dma/ppc4xx/adma.c:1055:25: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1055:25: sparse: expected void const [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1055:25: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1062:41: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1062:41: sparse: expected void [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1062:41: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1064:39: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1064:39: sparse: expected void [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1064:39: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1065:25: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1065:25: sparse: expected void [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1065:25: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1066:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1066:33: sparse: expected void const [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1066:33: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1067:22: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1067:22: sparse: expected void [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1067:22: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1080:48: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct dma_regs *dma_reg @@ got struct dma_regs [noderef] __iomem *dma_reg @@
drivers/dma/ppc4xx/adma.c:1080:48: sparse: expected struct dma_regs *dma_reg
drivers/dma/ppc4xx/adma.c:1080:48: sparse: got struct dma_regs [noderef] __iomem *dma_reg
drivers/dma/ppc4xx/adma.c:1090:26: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1090:26: sparse: expected void [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1090:26: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:1210:25: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct xor_regs *xor_reg @@ got struct xor_regs [noderef] __iomem *xor_reg @@
drivers/dma/ppc4xx/adma.c:1210:25: sparse: expected struct xor_regs *xor_reg
drivers/dma/ppc4xx/adma.c:1210:25: sparse: got struct xor_regs [noderef] __iomem *xor_reg
drivers/dma/ppc4xx/adma.c:1214:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void [noderef] __iomem * @@ got unsigned int * @@
drivers/dma/ppc4xx/adma.c:1214:30: sparse: expected void [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:1214:30: sparse: got unsigned int *
drivers/dma/ppc4xx/adma.c:2777:62: sparse: sparse: Using plain integer as NULL pointer
>> drivers/dma/ppc4xx/adma.c:4094:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected void *regs @@ got void [noderef] __iomem * @@
drivers/dma/ppc4xx/adma.c:4094:14: sparse: expected void *regs
drivers/dma/ppc4xx/adma.c:4094:14: sparse: got void [noderef] __iomem *
drivers/dma/ppc4xx/adma.c:4102:31: sparse: sparse: too many warnings
vim +4094 drivers/dma/ppc4xx/adma.c
12458ea06efd7b Anatolij Gustschin 2009-12-11 4003
12458ea06efd7b Anatolij Gustschin 2009-12-11 4004 /**
12458ea06efd7b Anatolij Gustschin 2009-12-11 4005 * ppc440spe_adma_probe - probe the asynch device
12458ea06efd7b Anatolij Gustschin 2009-12-11 4006 */
463a1f8b3ceebe Bill Pemberton 2012-11-19 4007 static int ppc440spe_adma_probe(struct platform_device *ofdev)
12458ea06efd7b Anatolij Gustschin 2009-12-11 4008 {
05c02542c20aa0 Anatolij Gustschin 2010-06-03 4009 struct device_node *np = ofdev->dev.of_node;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4010 struct resource res;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4011 struct ppc440spe_adma_device *adev;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4012 struct ppc440spe_adma_chan *chan;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4013 struct ppc_dma_chan_ref *ref, *_ref;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4014 int ret = 0, initcode = PPC_ADMA_INIT_OK;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4015 const u32 *idx;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4016 int len;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4017 void *regs;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4018 u32 id, pool_size;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4019
12458ea06efd7b Anatolij Gustschin 2009-12-11 4020 if (of_device_is_compatible(np, "amcc,xor-accelerator")) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4021 id = PPC440SPE_XOR_ID;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4022 /* As far as the XOR engine is concerned, it does not
12458ea06efd7b Anatolij Gustschin 2009-12-11 4023 * use FIFOs but uses linked list. So there is no dependency
12458ea06efd7b Anatolij Gustschin 2009-12-11 4024 * between pool size to allocate and the engine configuration.
12458ea06efd7b Anatolij Gustschin 2009-12-11 4025 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4026 pool_size = PAGE_SIZE << 1;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4027 } else {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4028 /* it is DMA0 or DMA1 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4029 idx = of_get_property(np, "cell-index", &len);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4030 if (!idx || (len != sizeof(u32))) {
c6c93048baff25 Rob Herring 2017-07-18 4031 dev_err(&ofdev->dev, "Device node %pOF has missing "
12458ea06efd7b Anatolij Gustschin 2009-12-11 4032 "or invalid cell-index property\n",
c6c93048baff25 Rob Herring 2017-07-18 4033 np);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4034 return -EINVAL;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4035 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4036 id = *idx;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4037 /* DMA0,1 engines use FIFO to maintain CDBs, so we
12458ea06efd7b Anatolij Gustschin 2009-12-11 4038 * should allocate the pool accordingly to size of this
12458ea06efd7b Anatolij Gustschin 2009-12-11 4039 * FIFO. Thus, the pool size depends on the FIFO depth:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4040 * how much CDBs pointers the FIFO may contain then so
12458ea06efd7b Anatolij Gustschin 2009-12-11 4041 * much CDBs we should provide in the pool.
12458ea06efd7b Anatolij Gustschin 2009-12-11 4042 * That is
12458ea06efd7b Anatolij Gustschin 2009-12-11 4043 * CDB size = 32B;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4044 * CDBs number = (DMA0_FIFO_SIZE >> 3);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4045 * Pool size = CDBs number * CDB size =
12458ea06efd7b Anatolij Gustschin 2009-12-11 4046 * = (DMA0_FIFO_SIZE >> 3) << 5 = DMA0_FIFO_SIZE << 2.
12458ea06efd7b Anatolij Gustschin 2009-12-11 4047 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4048 pool_size = (id == PPC440SPE_DMA0_ID) ?
12458ea06efd7b Anatolij Gustschin 2009-12-11 4049 DMA0_FIFO_SIZE : DMA1_FIFO_SIZE;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4050 pool_size <<= 2;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4051 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4052
12458ea06efd7b Anatolij Gustschin 2009-12-11 4053 if (of_address_to_resource(np, 0, &res)) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4054 dev_err(&ofdev->dev, "failed to get memory resource\n");
12458ea06efd7b Anatolij Gustschin 2009-12-11 4055 initcode = PPC_ADMA_INIT_MEMRES;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4056 ret = -ENODEV;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4057 goto out;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4058 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4059
12458ea06efd7b Anatolij Gustschin 2009-12-11 4060 if (!request_mem_region(res.start, resource_size(&res),
12458ea06efd7b Anatolij Gustschin 2009-12-11 4061 dev_driver_string(&ofdev->dev))) {
a584bff5efae8c Joe Perches 2010-11-12 4062 dev_err(&ofdev->dev, "failed to request memory region %pR\n",
a584bff5efae8c Joe Perches 2010-11-12 4063 &res);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4064 initcode = PPC_ADMA_INIT_MEMREG;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4065 ret = -EBUSY;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4066 goto out;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4067 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4068
12458ea06efd7b Anatolij Gustschin 2009-12-11 4069 /* create a device */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4070 adev = kzalloc(sizeof(*adev), GFP_KERNEL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4071 if (!adev) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4072 initcode = PPC_ADMA_INIT_ALLOC;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4073 ret = -ENOMEM;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4074 goto err_adev_alloc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4075 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4076
12458ea06efd7b Anatolij Gustschin 2009-12-11 4077 adev->id = id;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4078 adev->pool_size = pool_size;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4079 /* allocate coherent memory for hardware descriptors */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4080 adev->dma_desc_pool_virt = dma_alloc_coherent(&ofdev->dev,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4081 adev->pool_size, &adev->dma_desc_pool,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4082 GFP_KERNEL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4083 if (adev->dma_desc_pool_virt == NULL) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4084 dev_err(&ofdev->dev, "failed to allocate %d bytes of coherent "
12458ea06efd7b Anatolij Gustschin 2009-12-11 4085 "memory for hardware descriptors\n",
12458ea06efd7b Anatolij Gustschin 2009-12-11 4086 adev->pool_size);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4087 initcode = PPC_ADMA_INIT_COHERENT;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4088 ret = -ENOMEM;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4089 goto err_dma_alloc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4090 }
d73111c6d43f08 Masanari Iida 2012-08-04 4091 dev_dbg(&ofdev->dev, "allocated descriptor pool virt 0x%p phys 0x%llx\n",
12458ea06efd7b Anatolij Gustschin 2009-12-11 4092 adev->dma_desc_pool_virt, (u64)adev->dma_desc_pool);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4093
12458ea06efd7b Anatolij Gustschin 2009-12-11 @4094 regs = ioremap(res.start, resource_size(&res));
12458ea06efd7b Anatolij Gustschin 2009-12-11 4095 if (!regs) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4096 dev_err(&ofdev->dev, "failed to ioremap regs!\n");
f3b77727e82722 Julia Lawall 2013-12-29 4097 ret = -ENOMEM;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4098 goto err_regs_alloc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4099 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4100
12458ea06efd7b Anatolij Gustschin 2009-12-11 4101 if (adev->id == PPC440SPE_XOR_ID) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4102 adev->xor_reg = regs;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4103 /* Reset XOR */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4104 iowrite32be(XOR_CRSR_XASR_BIT, &adev->xor_reg->crsr);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4105 iowrite32be(XOR_CRSR_64BA_BIT, &adev->xor_reg->crrr);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4106 } else {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4107 size_t fifo_size = (adev->id == PPC440SPE_DMA0_ID) ?
12458ea06efd7b Anatolij Gustschin 2009-12-11 4108 DMA0_FIFO_SIZE : DMA1_FIFO_SIZE;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4109 adev->dma_reg = regs;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4110 /* DMAx_FIFO_SIZE is defined in bytes,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4111 * <fsiz> - is defined in number of CDB pointers (8byte).
12458ea06efd7b Anatolij Gustschin 2009-12-11 4112 * DMA FIFO Length = CSlength + CPlength, where
12458ea06efd7b Anatolij Gustschin 2009-12-11 4113 * CSlength = CPlength = (fsiz + 1) * 8.
12458ea06efd7b Anatolij Gustschin 2009-12-11 4114 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4115 iowrite32(DMA_FIFO_ENABLE | ((fifo_size >> 3) - 2),
12458ea06efd7b Anatolij Gustschin 2009-12-11 4116 &adev->dma_reg->fsiz);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4117 /* Configure DMA engine */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4118 iowrite32(DMA_CFG_DXEPR_HP | DMA_CFG_DFMPP_HP | DMA_CFG_FALGN,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4119 &adev->dma_reg->cfg);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4120 /* Clear Status */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4121 iowrite32(~0, &adev->dma_reg->dsts);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4122 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4123
12458ea06efd7b Anatolij Gustschin 2009-12-11 4124 adev->dev = &ofdev->dev;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4125 adev->common.dev = &ofdev->dev;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4126 INIT_LIST_HEAD(&adev->common.channels);
dd3daca162f741 Jingoo Han 2013-05-24 4127 platform_set_drvdata(ofdev, adev);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4128
12458ea06efd7b Anatolij Gustschin 2009-12-11 4129 /* create a channel */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4130 chan = kzalloc(sizeof(*chan), GFP_KERNEL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4131 if (!chan) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4132 initcode = PPC_ADMA_INIT_CHANNEL;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4133 ret = -ENOMEM;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4134 goto err_chan_alloc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4135 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4136
12458ea06efd7b Anatolij Gustschin 2009-12-11 4137 spin_lock_init(&chan->lock);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4138 INIT_LIST_HEAD(&chan->chain);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4139 INIT_LIST_HEAD(&chan->all_slots);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4140 chan->device = adev;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4141 chan->common.device = &adev->common;
8ac695463f37af Russell King - ARM Linux 2012-03-06 4142 dma_cookie_init(&chan->common);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4143 list_add_tail(&chan->common.device_node, &adev->common.channels);
7f8281765f9949 Allen Pais 2020-08-31 4144 tasklet_setup(&chan->irq_tasklet, ppc440spe_adma_tasklet);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4145
12458ea06efd7b Anatolij Gustschin 2009-12-11 4146 /* allocate and map helper pages for async validation or
12458ea06efd7b Anatolij Gustschin 2009-12-11 4147 * async_mult/async_sum_product operations on DMA0/1.
12458ea06efd7b Anatolij Gustschin 2009-12-11 4148 */
12458ea06efd7b Anatolij Gustschin 2009-12-11 4149 if (adev->id != PPC440SPE_XOR_ID) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4150 chan->pdest_page = alloc_page(GFP_KERNEL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4151 chan->qdest_page = alloc_page(GFP_KERNEL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4152 if (!chan->pdest_page ||
12458ea06efd7b Anatolij Gustschin 2009-12-11 4153 !chan->qdest_page) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4154 if (chan->pdest_page)
12458ea06efd7b Anatolij Gustschin 2009-12-11 4155 __free_page(chan->pdest_page);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4156 if (chan->qdest_page)
12458ea06efd7b Anatolij Gustschin 2009-12-11 4157 __free_page(chan->qdest_page);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4158 ret = -ENOMEM;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4159 goto err_page_alloc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4160 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4161 chan->pdest = dma_map_page(&ofdev->dev, chan->pdest_page, 0,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4162 PAGE_SIZE, DMA_BIDIRECTIONAL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4163 chan->qdest = dma_map_page(&ofdev->dev, chan->qdest_page, 0,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4164 PAGE_SIZE, DMA_BIDIRECTIONAL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4165 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4166
12458ea06efd7b Anatolij Gustschin 2009-12-11 4167 ref = kmalloc(sizeof(*ref), GFP_KERNEL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4168 if (ref) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4169 ref->chan = &chan->common;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4170 INIT_LIST_HEAD(&ref->node);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4171 list_add_tail(&ref->node, &ppc440spe_adma_chan_list);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4172 } else {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4173 dev_err(&ofdev->dev, "failed to allocate channel reference!\n");
12458ea06efd7b Anatolij Gustschin 2009-12-11 4174 ret = -ENOMEM;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4175 goto err_ref_alloc;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4176 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4177
12458ea06efd7b Anatolij Gustschin 2009-12-11 4178 ret = ppc440spe_adma_setup_irqs(adev, chan, &initcode);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4179 if (ret)
12458ea06efd7b Anatolij Gustschin 2009-12-11 4180 goto err_irq;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4181
12458ea06efd7b Anatolij Gustschin 2009-12-11 4182 ppc440spe_adma_init_capabilities(adev);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4183
12458ea06efd7b Anatolij Gustschin 2009-12-11 4184 ret = dma_async_device_register(&adev->common);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4185 if (ret) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4186 initcode = PPC_ADMA_INIT_REGISTER;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4187 dev_err(&ofdev->dev, "failed to register dma device\n");
12458ea06efd7b Anatolij Gustschin 2009-12-11 4188 goto err_dev_reg;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4189 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4190
12458ea06efd7b Anatolij Gustschin 2009-12-11 4191 goto out;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4192
12458ea06efd7b Anatolij Gustschin 2009-12-11 4193 err_dev_reg:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4194 ppc440spe_adma_release_irqs(adev, chan);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4195 err_irq:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4196 list_for_each_entry_safe(ref, _ref, &ppc440spe_adma_chan_list, node) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4197 if (chan == to_ppc440spe_adma_chan(ref->chan)) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4198 list_del(&ref->node);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4199 kfree(ref);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4200 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4201 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4202 err_ref_alloc:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4203 if (adev->id != PPC440SPE_XOR_ID) {
12458ea06efd7b Anatolij Gustschin 2009-12-11 4204 dma_unmap_page(&ofdev->dev, chan->pdest,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4205 PAGE_SIZE, DMA_BIDIRECTIONAL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4206 dma_unmap_page(&ofdev->dev, chan->qdest,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4207 PAGE_SIZE, DMA_BIDIRECTIONAL);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4208 __free_page(chan->pdest_page);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4209 __free_page(chan->qdest_page);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4210 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4211 err_page_alloc:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4212 kfree(chan);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4213 err_chan_alloc:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4214 if (adev->id == PPC440SPE_XOR_ID)
12458ea06efd7b Anatolij Gustschin 2009-12-11 4215 iounmap(adev->xor_reg);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4216 else
12458ea06efd7b Anatolij Gustschin 2009-12-11 4217 iounmap(adev->dma_reg);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4218 err_regs_alloc:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4219 dma_free_coherent(adev->dev, adev->pool_size,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4220 adev->dma_desc_pool_virt,
12458ea06efd7b Anatolij Gustschin 2009-12-11 4221 adev->dma_desc_pool);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4222 err_dma_alloc:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4223 kfree(adev);
12458ea06efd7b Anatolij Gustschin 2009-12-11 4224 err_adev_alloc:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4225 release_mem_region(res.start, resource_size(&res));
12458ea06efd7b Anatolij Gustschin 2009-12-11 4226 out:
12458ea06efd7b Anatolij Gustschin 2009-12-11 4227 if (id < PPC440SPE_ADMA_ENGINES_NUM)
12458ea06efd7b Anatolij Gustschin 2009-12-11 4228 ppc440spe_adma_devices[id] = initcode;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4229
12458ea06efd7b Anatolij Gustschin 2009-12-11 4230 return ret;
12458ea06efd7b Anatolij Gustschin 2009-12-11 4231 }
12458ea06efd7b Anatolij Gustschin 2009-12-11 4232
:::::: The code at line 4094 was first introduced by commit
:::::: 12458ea06efd7b44281e68fe59c950ec7d59c649 ppc440spe-adma: adds updated ppc440spe adma driver
:::::: TO: Anatolij Gustschin <agust(a)denx.de>
:::::: CC: Dan Williams <dan.j.williams(a)intel.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 4 months
[android-common:android12-5.10 7509/9146] mm/hugetlb.c:5458:8: error: conflicting types for 'huge_pmd_share'
by kernel test robot
Hi Peter,
FYI, the error/warning still remains.
tree: https://android.googlesource.com/kernel/common android12-5.10
head: b6e60f0673ab010bb9d00f9473bc2398365a8c43
commit: 59caf93f36aed4b7c5960672376b966e3f5b2bf1 [7509/9146] BACKPORT: FROMGIT: hugetlb: pass vma into huge_pte_alloc() and huge_pmd_share()
config: arm64-randconfig-c003-20210518 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git remote add android-common https://android.googlesource.com/kernel/common
git fetch --no-tags android-common android12-5.10
git checkout 59caf93f36aed4b7c5960672376b966e3f5b2bf1
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=arm64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
>> mm/hugetlb.c:5458:8: error: conflicting types for 'huge_pmd_share'
5458 | pte_t *huge_pmd_share(struct mm_struct *mm, struct vm_area_struct vma,
| ^~~~~~~~~~~~~~
In file included from mm/hugetlb.c:39:
include/linux/hugetlb.h:155:8: note: previous declaration of 'huge_pmd_share' was here
155 | pte_t *huge_pmd_share(struct mm_struct *mm, struct vm_area_struct *vma,
| ^~~~~~~~~~~~~~
vim +/huge_pmd_share +5458 mm/hugetlb.c
5425
5426 /*
5427 * unmap huge page backed by shared pte.
5428 *
5429 * Hugetlb pte page is ref counted at the time of mapping. If pte is shared
5430 * indicated by page_count > 1, unmap is achieved by clearing pud and
5431 * decrementing the ref count. If count == 1, the pte page is not shared.
5432 *
5433 * Called with page table lock held and i_mmap_rwsem held in write mode.
5434 *
5435 * returns: 1 successfully unmapped a shared pte page
5436 * 0 the underlying pte page is not shared, or it is the last user
5437 */
5438 int huge_pmd_unshare(struct mm_struct *mm, struct vm_area_struct *vma,
5439 unsigned long *addr, pte_t *ptep)
5440 {
5441 pgd_t *pgd = pgd_offset(mm, *addr);
5442 p4d_t *p4d = p4d_offset(pgd, *addr);
5443 pud_t *pud = pud_offset(p4d, *addr);
5444
5445 i_mmap_assert_write_locked(vma->vm_file->f_mapping);
5446 BUG_ON(page_count(virt_to_page(ptep)) == 0);
5447 if (page_count(virt_to_page(ptep)) == 1)
5448 return 0;
5449
5450 pud_clear(pud);
5451 put_page(virt_to_page(ptep));
5452 mm_dec_nr_pmds(mm);
5453 *addr = ALIGN(*addr, HPAGE_SIZE * PTRS_PER_PTE) - HPAGE_SIZE;
5454 return 1;
5455 }
5456 #define want_pmd_share() (1)
5457 #else /* !CONFIG_ARCH_WANT_HUGE_PMD_SHARE */
> 5458 pte_t *huge_pmd_share(struct mm_struct *mm, struct vm_area_struct vma,
5459 unsigned long addr, pud_t *pud)
5460 {
5461 return NULL;
5462 }
5463
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
1 year, 4 months