[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <202508250351.vxyvTsJa-lkp@intel.com>
Date: Mon, 25 Aug 2025 03:38:06 +0800
From: kernel test robot <lkp@...el.com>
To: Jisheng Zhang <jszhang@...nel.org>, Vinod Koul <vkoul@...nel.org>,
Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk@...nel.org>,
Conor Dooley <conor+dt@...nel.org>,
Robin Murphy <robin.murphy@....com>
Cc: llvm@...ts.linux.dev, oe-kbuild-all@...ts.linux.dev,
dmaengine@...r.kernel.org, devicetree@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 14/14] dmaengine: dma350: Support ARM DMA-250
Hi Jisheng,
kernel test robot noticed the following build warnings:
[auto build test WARNING on vkoul-dmaengine/next]
[also build test WARNING on robh/for-next krzk-dt/for-next linus/master v6.17-rc2 next-20250822]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Jisheng-Zhang/dmaengine-dma350-Fix-CH_CTRL_USESRCTRIGIN-definition/20250824-000425
base: https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git next
patch link: https://lore.kernel.org/r/20250823154009.25992-15-jszhang%40kernel.org
patch subject: [PATCH 14/14] dmaengine: dma350: Support ARM DMA-250
config: x86_64-buildonly-randconfig-002-20250824 (https://download.01.org/0day-ci/archive/20250825/202508250351.vxyvTsJa-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250825/202508250351.vxyvTsJa-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508250351.vxyvTsJa-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/dma/arm-dma350.c:849:34: warning: variable 'sg' is uninitialized when used here [-Wuninitialized]
849 | sglen = DIV_ROUND_UP(sg_dma_len(sg), step_max) * periods;
| ^~
include/linux/scatterlist.h:34:27: note: expanded from macro 'sg_dma_len'
34 | #define sg_dma_len(sg) ((sg)->dma_length)
| ^~
include/uapi/linux/const.h:51:40: note: expanded from macro '__KERNEL_DIV_ROUND_UP'
51 | #define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
| ^
drivers/dma/arm-dma350.c:835:24: note: initialize the variable 'sg' to silence this warning
835 | struct scatterlist *sg;
| ^
| = NULL
1 warning generated.
vim +/sg +849 drivers/dma/arm-dma350.c
824
825 static struct dma_async_tx_descriptor *
826 d250_prep_cyclic(struct dma_chan *chan, dma_addr_t buf_addr,
827 size_t buf_len, size_t period_len, enum dma_transfer_direction dir,
828 unsigned long flags)
829 {
830 struct d350_chan *dch = to_d350_chan(chan);
831 u32 len, periods, trig, *cmd, tsz;
832 dma_addr_t src, dst, phys, mem_addr;
833 size_t xfer_len, step_max;
834 struct d350_desc *desc;
835 struct scatterlist *sg;
836 struct d350_sg *dsg;
837 int sglen, i;
838
839 if (unlikely(!is_slave_direction(dir) || !buf_len || !period_len))
840 return NULL;
841
842 if (dir == DMA_MEM_TO_DEV)
843 tsz = __ffs(dch->config.dst_addr_width | (1 << dch->tsz));
844 else
845 tsz = __ffs(dch->config.src_addr_width | (1 << dch->tsz));
846 step_max = ((1UL << 16) - 1) << tsz;
847
848 periods = buf_len / period_len;
> 849 sglen = DIV_ROUND_UP(sg_dma_len(sg), step_max) * periods;
850
851 desc = kzalloc(struct_size(desc, sg, sglen), GFP_NOWAIT);
852 if (!desc)
853 return NULL;
854
855 dch->cyclic = true;
856 dch->periods = periods;
857 desc->sglen = sglen;
858
859 sglen = 0;
860 for (i = 0; i < periods; i++) {
861 len = period_len;
862 mem_addr = buf_addr + i * period_len;
863 do {
864 desc->sg[sglen].command = dma_pool_zalloc(dch->cmd_pool, GFP_NOWAIT, &phys);
865 if (unlikely(!desc->sg[sglen].command))
866 goto err_cmd_alloc;
867
868 xfer_len = (len > step_max) ? step_max : len;
869 desc->sg[sglen].phys = phys;
870 dsg = &desc->sg[sglen];
871
872 if (dir == DMA_MEM_TO_DEV) {
873 src = mem_addr;
874 dst = dch->config.dst_addr;
875 trig = CH_CTRL_USEDESTRIGIN;
876 } else {
877 src = dch->config.src_addr;
878 dst = mem_addr;
879 trig = CH_CTRL_USESRCTRIGIN;
880 }
881 dsg->tsz = tsz;
882 dsg->xsize = lower_16_bits(xfer_len >> dsg->tsz);
883
884 cmd = dsg->command;
885 cmd[0] = LINK_CTRL | LINK_SRCADDR | LINK_DESADDR |
886 LINK_XSIZE | LINK_SRCTRANSCFG |
887 LINK_DESTRANSCFG | LINK_XADDRINC | LINK_LINKADDR;
888
889 cmd[1] = FIELD_PREP(CH_CTRL_TRANSIZE, dsg->tsz) |
890 FIELD_PREP(CH_CTRL_XTYPE, CH_CTRL_XTYPE_CONTINUE) |
891 FIELD_PREP(CH_CTRL_DONETYPE, CH_CTRL_DONETYPE_CMD) | trig;
892
893 cmd[2] = lower_32_bits(src);
894 cmd[3] = lower_32_bits(dst);
895 cmd[4] = FIELD_PREP(CH_XY_SRC, dsg->xsize) |
896 FIELD_PREP(CH_XY_DES, dsg->xsize);
897 if (dir == DMA_MEM_TO_DEV) {
898 cmd[0] |= LINK_DESTRIGINCFG;
899 cmd[5] = dch->coherent ? TRANSCFG_WB : TRANSCFG_NC;
900 cmd[6] = TRANSCFG_DEVICE;
901 cmd[7] = FIELD_PREP(CH_XY_SRC, 1);
902 cmd[8] = FIELD_PREP(CH_DESTRIGINMODE, CH_DESTRIG_DMA_FC) |
903 FIELD_PREP(CH_DESTRIGINTYPE, CH_DESTRIG_HW_REQ);
904 } else {
905 cmd[0] |= LINK_SRCTRIGINCFG;
906 cmd[5] = TRANSCFG_DEVICE;
907 cmd[6] = dch->coherent ? TRANSCFG_WB : TRANSCFG_NC;
908 cmd[7] = FIELD_PREP(CH_XY_DES, 1);
909 cmd[8] = FIELD_PREP(CH_SRCTRIGINMODE, CH_SRCTRIG_DMA_FC) |
910 FIELD_PREP(CH_SRCTRIGINTYPE, CH_SRCTRIG_HW_REQ);
911 }
912
913 if (sglen)
914 desc->sg[sglen - 1].command[9] = phys | CH_LINKADDR_EN;
915
916 len -= xfer_len;
917 mem_addr += xfer_len;
918 sglen++;
919 } while (len);
920 desc->sg[sglen - 1].command[1] |= FIELD_PREP(CH_CTRL_DONETYPE,
921 CH_CTRL_DONETYPE_CMD);
922 }
923
924 /* cyclic list */
925 desc->sg[sglen - 1].command[9] = desc->sg[0].phys | CH_LINKADDR_EN;
926
927 mb();
928
929 return vchan_tx_prep(&dch->vc, &desc->vd, flags);
930
931 err_cmd_alloc:
932 for (i = 0; i < sglen; i++)
933 dma_pool_free(dch->cmd_pool, desc->sg[i].command, desc->sg[i].phys);
934 kfree(desc);
935 return NULL;
936 }
937
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Powered by blists - more mailing lists