* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2020-11-11 9:59 ` Dan Carpenter
0 siblings, 0 replies; 15+ messages in thread
From: Dan Carpenter @ 2020-11-11 9:59 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 17236 bytes --]
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
config: i386-randconfig-m021-20201110 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
94e13c288016775 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c288016775 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c288016775 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c288016775 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c288016775 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c288016775 Sia Jee Heng 2020-06-26 918 {
94e13c288016775 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c288016775 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c288016775 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c288016775 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c288016775 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c288016775 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c288016775 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c288016775 Sia Jee Heng 2020-06-26 932
94e13c288016775 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c288016775 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 935
94e13c288016775 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c288016775 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c288016775 Sia Jee Heng 2020-06-26 938
94e13c288016775 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c288016775 Sia Jee Heng 2020-06-26 940
94e13c288016775 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c288016775 Sia Jee Heng 2020-06-26 942
94e13c288016775 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c288016775 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c288016775 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c288016775 Sia Jee Heng 2020-06-26 946
94e13c288016775 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c288016775 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c288016775 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c288016775 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 959 }
94e13c288016775 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c288016775 Sia Jee Heng 2020-06-26 961
94e13c288016775 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c288016775 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 966
94e13c288016775 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c288016775 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c288016775 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 970 u32 mem, len;
^^^^^^^^^^^^^
94e13c288016775 Sia Jee Heng 2020-06-26 971
94e13c288016775 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
^^^^^^^^^
94e13c288016775 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 975
94e13c288016775 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 978
94e13c288016775 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c288016775 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c288016775 Sia Jee Heng 2020-06-26 982
94e13c288016775 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c288016775 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c288016775 Sia Jee Heng 2020-06-26 986 }
94e13c288016775 Sia Jee Heng 2020-06-26 987
94e13c288016775 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 989
94e13c288016775 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c288016775 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c288016775 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c288016775 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c288016775 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c288016775 Sia Jee Heng 2020-06-26 996
94e13c288016775 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 999
94e13c288016775 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c288016775 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c288016775 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1003 } else {
94e13c288016775 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c288016775 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c288016775 Sia Jee Heng 2020-06-26 1007 }
94e13c288016775 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c288016775 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1011
94e13c288016775 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1013
94e13c288016775 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1015 }
94e13c288016775 Sia Jee Heng 2020-06-26 1016 break;
94e13c288016775 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c288016775 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c288016775 Sia Jee Heng 2020-06-26 1019
94e13c288016775 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c288016775 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c288016775 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 1031 }
94e13c288016775 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c288016775 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c288016775 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c288016775 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 1040
94e13c288016775 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c288016775 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
^^^^^^^^^^^^^
94e13c288016775 Sia Jee Heng 2020-06-26 1045
94e13c288016775 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c288016775 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c288016775 Sia Jee Heng 2020-06-26 1049
94e13c288016775 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
^^^^^^^^^^^^^^
94e13c288016775 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c288016775 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1055 }
94e13c288016775 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
^^^
94e13c288016775 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 1061
94e13c288016775 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 1064
94e13c288016775 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c288016775 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c288016775 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c288016775 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c288016775 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c288016775 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c288016775 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c288016775 Sia Jee Heng 2020-06-26 1073
94e13c288016775 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1076
94e13c288016775 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c288016775 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c288016775 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1080 } else {
94e13c288016775 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c288016775 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c288016775 Sia Jee Heng 2020-06-26 1084 }
94e13c288016775 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c288016775 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1088
94e13c288016775 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1090
94e13c288016775 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c288016775 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1093 }
94e13c288016775 Sia Jee Heng 2020-06-26 1094 break;
94e13c288016775 Sia Jee Heng 2020-06-26 1095 default:
94e13c288016775 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1097 }
94e13c288016775 Sia Jee Heng 2020-06-26 1098
94e13c288016775 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c288016775 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1101
94e13c288016775 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c288016775 Sia Jee Heng 2020-06-26 1103
94e13c288016775 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c288016775 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c288016775 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c288016775 Sia Jee Heng 2020-06-26 1107
94e13c288016775 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1109 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 30605 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2020-11-11 9:59 ` Dan Carpenter
0 siblings, 0 replies; 15+ messages in thread
From: Dan Carpenter @ 2020-11-11 9:59 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 17236 bytes --]
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
config: i386-randconfig-m021-20201110 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
94e13c288016775 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c288016775 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c288016775 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c288016775 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c288016775 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c288016775 Sia Jee Heng 2020-06-26 918 {
94e13c288016775 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c288016775 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c288016775 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c288016775 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c288016775 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c288016775 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c288016775 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c288016775 Sia Jee Heng 2020-06-26 932
94e13c288016775 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c288016775 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 935
94e13c288016775 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c288016775 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c288016775 Sia Jee Heng 2020-06-26 938
94e13c288016775 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c288016775 Sia Jee Heng 2020-06-26 940
94e13c288016775 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c288016775 Sia Jee Heng 2020-06-26 942
94e13c288016775 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c288016775 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c288016775 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c288016775 Sia Jee Heng 2020-06-26 946
94e13c288016775 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c288016775 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c288016775 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c288016775 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 959 }
94e13c288016775 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c288016775 Sia Jee Heng 2020-06-26 961
94e13c288016775 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c288016775 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 966
94e13c288016775 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c288016775 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c288016775 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 970 u32 mem, len;
^^^^^^^^^^^^^
94e13c288016775 Sia Jee Heng 2020-06-26 971
94e13c288016775 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
^^^^^^^^^
94e13c288016775 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 975
94e13c288016775 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 978
94e13c288016775 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c288016775 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c288016775 Sia Jee Heng 2020-06-26 982
94e13c288016775 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c288016775 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c288016775 Sia Jee Heng 2020-06-26 986 }
94e13c288016775 Sia Jee Heng 2020-06-26 987
94e13c288016775 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 989
94e13c288016775 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c288016775 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c288016775 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c288016775 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c288016775 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c288016775 Sia Jee Heng 2020-06-26 996
94e13c288016775 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 999
94e13c288016775 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c288016775 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c288016775 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1003 } else {
94e13c288016775 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c288016775 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c288016775 Sia Jee Heng 2020-06-26 1007 }
94e13c288016775 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c288016775 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1011
94e13c288016775 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1013
94e13c288016775 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1015 }
94e13c288016775 Sia Jee Heng 2020-06-26 1016 break;
94e13c288016775 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c288016775 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c288016775 Sia Jee Heng 2020-06-26 1019
94e13c288016775 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c288016775 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c288016775 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 1031 }
94e13c288016775 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c288016775 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c288016775 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c288016775 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 1040
94e13c288016775 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c288016775 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
^^^^^^^^^^^^^
94e13c288016775 Sia Jee Heng 2020-06-26 1045
94e13c288016775 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c288016775 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c288016775 Sia Jee Heng 2020-06-26 1049
94e13c288016775 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
^^^^^^^^^^^^^^
94e13c288016775 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c288016775 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1055 }
94e13c288016775 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
^^^
94e13c288016775 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 1061
94e13c288016775 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 1064
94e13c288016775 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c288016775 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c288016775 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c288016775 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c288016775 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c288016775 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c288016775 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c288016775 Sia Jee Heng 2020-06-26 1073
94e13c288016775 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1076
94e13c288016775 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c288016775 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c288016775 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1080 } else {
94e13c288016775 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c288016775 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c288016775 Sia Jee Heng 2020-06-26 1084 }
94e13c288016775 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c288016775 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1088
94e13c288016775 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1090
94e13c288016775 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c288016775 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1093 }
94e13c288016775 Sia Jee Heng 2020-06-26 1094 break;
94e13c288016775 Sia Jee Heng 2020-06-26 1095 default:
94e13c288016775 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1097 }
94e13c288016775 Sia Jee Heng 2020-06-26 1098
94e13c288016775 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c288016775 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1101
94e13c288016775 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c288016775 Sia Jee Heng 2020-06-26 1103
94e13c288016775 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c288016775 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c288016775 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c288016775 Sia Jee Heng 2020-06-26 1107
94e13c288016775 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1109 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 30605 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2021-03-02 7:51 Dan Carpenter
0 siblings, 0 replies; 15+ messages in thread
From: Dan Carpenter @ 2021-03-02 7:51 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 16958 bytes --]
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
config: x86_64-randconfig-m001-20210301 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
94e13c28801677 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c28801677 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c28801677 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c28801677 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c28801677 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c28801677 Sia Jee Heng 2020-06-26 918 {
94e13c28801677 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c28801677 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c28801677 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c28801677 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c28801677 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c28801677 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c28801677 Sia Jee Heng 2020-06-26 932
94e13c28801677 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c28801677 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 935
94e13c28801677 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c28801677 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c28801677 Sia Jee Heng 2020-06-26 938
94e13c28801677 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c28801677 Sia Jee Heng 2020-06-26 940
94e13c28801677 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c28801677 Sia Jee Heng 2020-06-26 942
94e13c28801677 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c28801677 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c28801677 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 946
94e13c28801677 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c28801677 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 959 }
94e13c28801677 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 961
94e13c28801677 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 966
94e13c28801677 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 970 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 971
94e13c28801677 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
^^^^^^^^^
These aren't initialized.
94e13c28801677 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 975
94e13c28801677 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 978
94e13c28801677 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 982
94e13c28801677 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 986 }
94e13c28801677 Sia Jee Heng 2020-06-26 987
94e13c28801677 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 989
94e13c28801677 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 996
94e13c28801677 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 999
94e13c28801677 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1003 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1007 }
94e13c28801677 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1011
94e13c28801677 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1013
94e13c28801677 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1015 }
94e13c28801677 Sia Jee Heng 2020-06-26 1016 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c28801677 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 1019
94e13c28801677 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1031 }
94e13c28801677 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c28801677 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1040
94e13c28801677 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 1045
94e13c28801677 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 1049
94e13c28801677 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
94e13c28801677 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1055 }
94e13c28801677 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
^^^
94e13c28801677 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1061
94e13c28801677 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1064
94e13c28801677 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c28801677 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c28801677 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 1073
94e13c28801677 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1076
94e13c28801677 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1080 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1084 }
94e13c28801677 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1088
94e13c28801677 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1090
94e13c28801677 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c28801677 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1093 }
94e13c28801677 Sia Jee Heng 2020-06-26 1094 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1095 default:
94e13c28801677 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1097 }
94e13c28801677 Sia Jee Heng 2020-06-26 1098
94e13c28801677 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c28801677 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1101
94e13c28801677 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c28801677 Sia Jee Heng 2020-06-26 1103
94e13c28801677 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c28801677 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c28801677 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c28801677 Sia Jee Heng 2020-06-26 1107
94e13c28801677 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1109 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
_______________________________________________
kbuild mailing list -- kbuild(a)lists.01.org
To unsubscribe send an email to kbuild-leave(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 29280 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2021-03-02 7:10 kernel test robot
0 siblings, 0 replies; 15+ messages in thread
From: kernel test robot @ 2021-03-02 7:10 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 16832 bytes --]
CC: kbuild-all(a)lists.01.org
TO: Sia Jee Heng <jee.heng.sia@intel.com>
CC: "Li, Yifan" <yifan2.li@intel.com>
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
:::::: branch date: 7 months ago
:::::: commit date: 7 months ago
config: x86_64-randconfig-m001-20210301 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
1fe20f1b84548b Eugeniy Paltsev 2018-03-06 912
94e13c28801677 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c28801677 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c28801677 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c28801677 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c28801677 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c28801677 Sia Jee Heng 2020-06-26 918 {
94e13c28801677 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c28801677 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c28801677 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c28801677 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c28801677 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c28801677 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c28801677 Sia Jee Heng 2020-06-26 932
94e13c28801677 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c28801677 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 935
94e13c28801677 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c28801677 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c28801677 Sia Jee Heng 2020-06-26 938
94e13c28801677 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c28801677 Sia Jee Heng 2020-06-26 940
94e13c28801677 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c28801677 Sia Jee Heng 2020-06-26 942
94e13c28801677 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c28801677 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c28801677 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 946
94e13c28801677 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c28801677 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 959 }
94e13c28801677 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 961
94e13c28801677 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 966
94e13c28801677 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 970 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 971
94e13c28801677 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
94e13c28801677 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 975
94e13c28801677 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 978
94e13c28801677 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 982
94e13c28801677 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 986 }
94e13c28801677 Sia Jee Heng 2020-06-26 987
94e13c28801677 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 989
94e13c28801677 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 996
94e13c28801677 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 999
94e13c28801677 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1003 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1007 }
94e13c28801677 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1011
94e13c28801677 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1013
94e13c28801677 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1015 }
94e13c28801677 Sia Jee Heng 2020-06-26 1016 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c28801677 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 1019
94e13c28801677 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1031 }
94e13c28801677 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c28801677 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1040
94e13c28801677 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 1045
94e13c28801677 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 1049
94e13c28801677 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
94e13c28801677 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1055 }
94e13c28801677 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
94e13c28801677 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1061
94e13c28801677 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1064
94e13c28801677 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c28801677 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c28801677 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 1073
94e13c28801677 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1076
94e13c28801677 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1080 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1084 }
94e13c28801677 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1088
94e13c28801677 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1090
94e13c28801677 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c28801677 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1093 }
94e13c28801677 Sia Jee Heng 2020-06-26 1094 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1095 default:
94e13c28801677 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1097 }
94e13c28801677 Sia Jee Heng 2020-06-26 1098
94e13c28801677 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c28801677 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1101
94e13c28801677 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c28801677 Sia Jee Heng 2020-06-26 1103
94e13c28801677 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c28801677 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c28801677 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c28801677 Sia Jee Heng 2020-06-26 1107
94e13c28801677 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1109 }
94e13c28801677 Sia Jee Heng 2020-06-26 1110
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 29280 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2021-02-16 8:54 ` Dan Carpenter
0 siblings, 0 replies; 15+ messages in thread
From: Dan Carpenter @ 2021-02-16 8:54 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 17026 bytes --]
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
config: i386-randconfig-m021-20210215 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1139 axi_chan_handle_err() warn: inconsistent returns 'chan->vc.lock'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1139 axi_chan_handle_err() warn: inconsistent returns 'flags'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
94e13c28801677 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c28801677 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c28801677 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c28801677 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c28801677 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c28801677 Sia Jee Heng 2020-06-26 918 {
94e13c28801677 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c28801677 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c28801677 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c28801677 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c28801677 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c28801677 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c28801677 Sia Jee Heng 2020-06-26 932
94e13c28801677 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c28801677 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 935
94e13c28801677 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c28801677 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c28801677 Sia Jee Heng 2020-06-26 938
94e13c28801677 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c28801677 Sia Jee Heng 2020-06-26 940
94e13c28801677 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c28801677 Sia Jee Heng 2020-06-26 942
94e13c28801677 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c28801677 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c28801677 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 946
94e13c28801677 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c28801677 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 959 }
94e13c28801677 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 961
94e13c28801677 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 966
94e13c28801677 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 970 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 971
94e13c28801677 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
^^^^^^^^^
Uninitialized variables
94e13c28801677 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 975
94e13c28801677 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 978
94e13c28801677 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 982
94e13c28801677 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 986 }
94e13c28801677 Sia Jee Heng 2020-06-26 987
94e13c28801677 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 989
94e13c28801677 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 996
94e13c28801677 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 999
94e13c28801677 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1003 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1007 }
94e13c28801677 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1011
94e13c28801677 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1013
94e13c28801677 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1015 }
94e13c28801677 Sia Jee Heng 2020-06-26 1016 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c28801677 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 1019
94e13c28801677 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1031 }
94e13c28801677 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c28801677 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1040
94e13c28801677 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 1045
94e13c28801677 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 1049
94e13c28801677 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
94e13c28801677 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1055 }
94e13c28801677 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
^^^
94e13c28801677 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1061
94e13c28801677 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1064
94e13c28801677 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c28801677 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c28801677 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 1073
94e13c28801677 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1076
94e13c28801677 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1080 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1084 }
94e13c28801677 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1088
94e13c28801677 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1090
94e13c28801677 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c28801677 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1093 }
94e13c28801677 Sia Jee Heng 2020-06-26 1094 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1095 default:
94e13c28801677 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1097 }
94e13c28801677 Sia Jee Heng 2020-06-26 1098
94e13c28801677 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c28801677 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1101
94e13c28801677 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c28801677 Sia Jee Heng 2020-06-26 1103
94e13c28801677 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c28801677 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c28801677 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c28801677 Sia Jee Heng 2020-06-26 1107
94e13c28801677 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1109 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 36970 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2021-02-16 8:54 ` Dan Carpenter
0 siblings, 0 replies; 15+ messages in thread
From: Dan Carpenter @ 2021-02-16 8:54 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 17026 bytes --]
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
config: i386-randconfig-m021-20210215 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1139 axi_chan_handle_err() warn: inconsistent returns 'chan->vc.lock'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1139 axi_chan_handle_err() warn: inconsistent returns 'flags'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
94e13c28801677 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c28801677 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c28801677 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c28801677 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c28801677 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c28801677 Sia Jee Heng 2020-06-26 918 {
94e13c28801677 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c28801677 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c28801677 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c28801677 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c28801677 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c28801677 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c28801677 Sia Jee Heng 2020-06-26 932
94e13c28801677 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c28801677 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 935
94e13c28801677 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c28801677 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c28801677 Sia Jee Heng 2020-06-26 938
94e13c28801677 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c28801677 Sia Jee Heng 2020-06-26 940
94e13c28801677 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c28801677 Sia Jee Heng 2020-06-26 942
94e13c28801677 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c28801677 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c28801677 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 946
94e13c28801677 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c28801677 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 959 }
94e13c28801677 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 961
94e13c28801677 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 966
94e13c28801677 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 970 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 971
94e13c28801677 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
^^^^^^^^^
Uninitialized variables
94e13c28801677 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 975
94e13c28801677 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 978
94e13c28801677 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 982
94e13c28801677 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 986 }
94e13c28801677 Sia Jee Heng 2020-06-26 987
94e13c28801677 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 989
94e13c28801677 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 996
94e13c28801677 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 999
94e13c28801677 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1003 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1007 }
94e13c28801677 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1011
94e13c28801677 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1013
94e13c28801677 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1015 }
94e13c28801677 Sia Jee Heng 2020-06-26 1016 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c28801677 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 1019
94e13c28801677 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1031 }
94e13c28801677 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c28801677 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1040
94e13c28801677 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 1045
94e13c28801677 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 1049
94e13c28801677 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
94e13c28801677 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1055 }
94e13c28801677 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
^^^
94e13c28801677 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1061
94e13c28801677 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1064
94e13c28801677 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c28801677 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c28801677 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 1073
94e13c28801677 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1076
94e13c28801677 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1080 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1084 }
94e13c28801677 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1088
94e13c28801677 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1090
94e13c28801677 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c28801677 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1093 }
94e13c28801677 Sia Jee Heng 2020-06-26 1094 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1095 default:
94e13c28801677 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1097 }
94e13c28801677 Sia Jee Heng 2020-06-26 1098
94e13c28801677 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c28801677 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1101
94e13c28801677 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c28801677 Sia Jee Heng 2020-06-26 1103
94e13c28801677 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c28801677 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c28801677 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c28801677 Sia Jee Heng 2020-06-26 1107
94e13c28801677 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1109 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 36970 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2021-02-15 19:01 kernel test robot
0 siblings, 0 replies; 15+ messages in thread
From: kernel test robot @ 2021-02-15 19:01 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 17060 bytes --]
CC: kbuild-all(a)lists.01.org
TO: Sia Jee Heng <jee.heng.sia@intel.com>
CC: "Li, Yifan" <yifan2.li@intel.com>
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
:::::: branch date: 6 months ago
:::::: commit date: 6 months ago
config: i386-randconfig-m021-20210215 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1139 axi_chan_handle_err() warn: inconsistent returns 'chan->vc.lock'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1139 axi_chan_handle_err() warn: inconsistent returns 'flags'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
1fe20f1b84548b Eugeniy Paltsev 2018-03-06 912
94e13c28801677 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c28801677 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c28801677 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c28801677 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c28801677 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c28801677 Sia Jee Heng 2020-06-26 918 {
94e13c28801677 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c28801677 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c28801677 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c28801677 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c28801677 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c28801677 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c28801677 Sia Jee Heng 2020-06-26 932
94e13c28801677 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c28801677 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 935
94e13c28801677 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c28801677 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c28801677 Sia Jee Heng 2020-06-26 938
94e13c28801677 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c28801677 Sia Jee Heng 2020-06-26 940
94e13c28801677 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c28801677 Sia Jee Heng 2020-06-26 942
94e13c28801677 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c28801677 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c28801677 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 946
94e13c28801677 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c28801677 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 959 }
94e13c28801677 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 961
94e13c28801677 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 966
94e13c28801677 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 970 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 971
94e13c28801677 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
94e13c28801677 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 975
94e13c28801677 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 978
94e13c28801677 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 982
94e13c28801677 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 986 }
94e13c28801677 Sia Jee Heng 2020-06-26 987
94e13c28801677 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 989
94e13c28801677 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 996
94e13c28801677 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 999
94e13c28801677 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1003 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1007 }
94e13c28801677 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1011
94e13c28801677 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1013
94e13c28801677 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1015 }
94e13c28801677 Sia Jee Heng 2020-06-26 1016 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c28801677 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 1019
94e13c28801677 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1031 }
94e13c28801677 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c28801677 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1040
94e13c28801677 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 1045
94e13c28801677 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 1049
94e13c28801677 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
94e13c28801677 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1055 }
94e13c28801677 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
94e13c28801677 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1061
94e13c28801677 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1064
94e13c28801677 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c28801677 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c28801677 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 1073
94e13c28801677 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1076
94e13c28801677 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1080 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1084 }
94e13c28801677 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1088
94e13c28801677 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1090
94e13c28801677 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c28801677 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1093 }
94e13c28801677 Sia Jee Heng 2020-06-26 1094 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1095 default:
94e13c28801677 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1097 }
94e13c28801677 Sia Jee Heng 2020-06-26 1098
94e13c28801677 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c28801677 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1101
94e13c28801677 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c28801677 Sia Jee Heng 2020-06-26 1103
94e13c28801677 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c28801677 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c28801677 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c28801677 Sia Jee Heng 2020-06-26 1107
94e13c28801677 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1109 }
94e13c28801677 Sia Jee Heng 2020-06-26 1110
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 36970 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2020-12-14 10:38 ` Dan Carpenter
0 siblings, 0 replies; 15+ messages in thread
From: Dan Carpenter @ 2020-12-14 10:38 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 16917 bytes --]
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
config: i386-randconfig-m021-20201209 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1139 axi_chan_handle_err() warn: inconsistent returns 'chan->vc.lock'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1139 axi_chan_handle_err() warn: inconsistent returns 'flags'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
94e13c28801677 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c28801677 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c28801677 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c28801677 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c28801677 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c28801677 Sia Jee Heng 2020-06-26 918 {
94e13c28801677 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c28801677 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c28801677 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c28801677 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c28801677 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c28801677 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c28801677 Sia Jee Heng 2020-06-26 932
94e13c28801677 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c28801677 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 935
94e13c28801677 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c28801677 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c28801677 Sia Jee Heng 2020-06-26 938
94e13c28801677 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c28801677 Sia Jee Heng 2020-06-26 940
94e13c28801677 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c28801677 Sia Jee Heng 2020-06-26 942
94e13c28801677 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c28801677 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c28801677 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 946
94e13c28801677 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c28801677 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 959 }
94e13c28801677 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 961
94e13c28801677 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 966
94e13c28801677 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 970 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 971
94e13c28801677 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
^^^^^^^^^
Uninitialized variables.
94e13c28801677 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 975
94e13c28801677 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 978
94e13c28801677 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 982
94e13c28801677 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 986 }
94e13c28801677 Sia Jee Heng 2020-06-26 987
94e13c28801677 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 989
94e13c28801677 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 996
94e13c28801677 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 999
94e13c28801677 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1003 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1007 }
94e13c28801677 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1011
94e13c28801677 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1013
94e13c28801677 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1015 }
94e13c28801677 Sia Jee Heng 2020-06-26 1016 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c28801677 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 1019
94e13c28801677 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1031 }
94e13c28801677 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c28801677 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1040
94e13c28801677 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 1045
94e13c28801677 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 1049
94e13c28801677 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
94e13c28801677 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1055 }
94e13c28801677 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
94e13c28801677 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1061
94e13c28801677 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1064
94e13c28801677 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c28801677 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c28801677 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 1073
94e13c28801677 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1076
94e13c28801677 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1080 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1084 }
94e13c28801677 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1088
94e13c28801677 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1090
94e13c28801677 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c28801677 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1093 }
94e13c28801677 Sia Jee Heng 2020-06-26 1094 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1095 default:
94e13c28801677 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1097 }
94e13c28801677 Sia Jee Heng 2020-06-26 1098
94e13c28801677 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c28801677 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1101
94e13c28801677 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c28801677 Sia Jee Heng 2020-06-26 1103
94e13c28801677 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c28801677 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c28801677 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c28801677 Sia Jee Heng 2020-06-26 1107
94e13c28801677 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1109 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 34420 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2020-12-14 10:38 ` Dan Carpenter
0 siblings, 0 replies; 15+ messages in thread
From: Dan Carpenter @ 2020-12-14 10:38 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 16917 bytes --]
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
config: i386-randconfig-m021-20201209 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1139 axi_chan_handle_err() warn: inconsistent returns 'chan->vc.lock'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1139 axi_chan_handle_err() warn: inconsistent returns 'flags'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
94e13c28801677 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c28801677 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c28801677 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c28801677 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c28801677 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c28801677 Sia Jee Heng 2020-06-26 918 {
94e13c28801677 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c28801677 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c28801677 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c28801677 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c28801677 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c28801677 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c28801677 Sia Jee Heng 2020-06-26 932
94e13c28801677 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c28801677 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 935
94e13c28801677 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c28801677 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c28801677 Sia Jee Heng 2020-06-26 938
94e13c28801677 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c28801677 Sia Jee Heng 2020-06-26 940
94e13c28801677 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c28801677 Sia Jee Heng 2020-06-26 942
94e13c28801677 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c28801677 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c28801677 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 946
94e13c28801677 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c28801677 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 959 }
94e13c28801677 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 961
94e13c28801677 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 966
94e13c28801677 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 970 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 971
94e13c28801677 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
^^^^^^^^^
Uninitialized variables.
94e13c28801677 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 975
94e13c28801677 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 978
94e13c28801677 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 982
94e13c28801677 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 986 }
94e13c28801677 Sia Jee Heng 2020-06-26 987
94e13c28801677 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 989
94e13c28801677 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 996
94e13c28801677 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 999
94e13c28801677 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1003 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1007 }
94e13c28801677 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1011
94e13c28801677 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1013
94e13c28801677 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1015 }
94e13c28801677 Sia Jee Heng 2020-06-26 1016 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c28801677 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 1019
94e13c28801677 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1031 }
94e13c28801677 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c28801677 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1040
94e13c28801677 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 1045
94e13c28801677 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 1049
94e13c28801677 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
94e13c28801677 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1055 }
94e13c28801677 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
94e13c28801677 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1061
94e13c28801677 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1064
94e13c28801677 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c28801677 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c28801677 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 1073
94e13c28801677 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1076
94e13c28801677 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1080 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1084 }
94e13c28801677 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1088
94e13c28801677 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1090
94e13c28801677 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c28801677 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1093 }
94e13c28801677 Sia Jee Heng 2020-06-26 1094 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1095 default:
94e13c28801677 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1097 }
94e13c28801677 Sia Jee Heng 2020-06-26 1098
94e13c28801677 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c28801677 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1101
94e13c28801677 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c28801677 Sia Jee Heng 2020-06-26 1103
94e13c28801677 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c28801677 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c28801677 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c28801677 Sia Jee Heng 2020-06-26 1107
94e13c28801677 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1109 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 34420 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2020-12-12 10:18 kernel test robot
0 siblings, 0 replies; 15+ messages in thread
From: kernel test robot @ 2020-12-12 10:18 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 17060 bytes --]
CC: kbuild-all(a)lists.01.org
TO: Sia Jee Heng <jee.heng.sia@intel.com>
CC: "Li, Yifan" <yifan2.li@intel.com>
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
:::::: branch date: 4 months ago
:::::: commit date: 4 months ago
config: i386-randconfig-m021-20201209 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1139 axi_chan_handle_err() warn: inconsistent returns 'chan->vc.lock'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1139 axi_chan_handle_err() warn: inconsistent returns 'flags'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
1fe20f1b84548b Eugeniy Paltsev 2018-03-06 912
94e13c28801677 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c28801677 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c28801677 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c28801677 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c28801677 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c28801677 Sia Jee Heng 2020-06-26 918 {
94e13c28801677 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c28801677 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c28801677 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c28801677 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c28801677 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c28801677 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c28801677 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c28801677 Sia Jee Heng 2020-06-26 932
94e13c28801677 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c28801677 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 935
94e13c28801677 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c28801677 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c28801677 Sia Jee Heng 2020-06-26 938
94e13c28801677 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c28801677 Sia Jee Heng 2020-06-26 940
94e13c28801677 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c28801677 Sia Jee Heng 2020-06-26 942
94e13c28801677 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c28801677 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c28801677 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 946
94e13c28801677 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c28801677 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 959 }
94e13c28801677 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 961
94e13c28801677 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 966
94e13c28801677 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 970 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 971
94e13c28801677 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
94e13c28801677 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 975
94e13c28801677 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 978
94e13c28801677 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 982
94e13c28801677 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c28801677 Sia Jee Heng 2020-06-26 986 }
94e13c28801677 Sia Jee Heng 2020-06-26 987
94e13c28801677 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 989
94e13c28801677 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 996
94e13c28801677 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 999
94e13c28801677 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1003 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1007 }
94e13c28801677 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1011
94e13c28801677 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1013
94e13c28801677 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1015 }
94e13c28801677 Sia Jee Heng 2020-06-26 1016 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c28801677 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c28801677 Sia Jee Heng 2020-06-26 1019
94e13c28801677 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c28801677 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c28801677 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c28801677 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c28801677 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c28801677 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c28801677 Sia Jee Heng 2020-06-26 1031 }
94e13c28801677 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c28801677 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c28801677 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c28801677 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c28801677 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1040
94e13c28801677 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c28801677 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
94e13c28801677 Sia Jee Heng 2020-06-26 1045
94e13c28801677 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c28801677 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c28801677 Sia Jee Heng 2020-06-26 1049
94e13c28801677 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
94e13c28801677 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c28801677 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c28801677 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c28801677 Sia Jee Heng 2020-06-26 1055 }
94e13c28801677 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
94e13c28801677 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c28801677 Sia Jee Heng 2020-06-26 1061
94e13c28801677 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c28801677 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c28801677 Sia Jee Heng 2020-06-26 1064
94e13c28801677 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c28801677 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c28801677 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c28801677 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c28801677 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c28801677 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c28801677 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c28801677 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c28801677 Sia Jee Heng 2020-06-26 1073
94e13c28801677 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1076
94e13c28801677 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c28801677 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c28801677 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1080 } else {
94e13c28801677 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c28801677 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c28801677 Sia Jee Heng 2020-06-26 1084 }
94e13c28801677 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c28801677 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c28801677 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c28801677 Sia Jee Heng 2020-06-26 1088
94e13c28801677 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c28801677 Sia Jee Heng 2020-06-26 1090
94e13c28801677 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c28801677 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c28801677 Sia Jee Heng 2020-06-26 1093 }
94e13c28801677 Sia Jee Heng 2020-06-26 1094 break;
94e13c28801677 Sia Jee Heng 2020-06-26 1095 default:
94e13c28801677 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1097 }
94e13c28801677 Sia Jee Heng 2020-06-26 1098
94e13c28801677 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c28801677 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1101
94e13c28801677 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c28801677 Sia Jee Heng 2020-06-26 1103
94e13c28801677 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c28801677 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c28801677 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c28801677 Sia Jee Heng 2020-06-26 1107
94e13c28801677 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c28801677 Sia Jee Heng 2020-06-26 1109 }
94e13c28801677 Sia Jee Heng 2020-06-26 1110
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 34420 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2020-11-10 22:37 kernel test robot
0 siblings, 0 replies; 15+ messages in thread
From: kernel test robot @ 2020-11-10 22:37 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 17029 bytes --]
CC: kbuild-all(a)lists.01.org
TO: Sia Jee Heng <jee.heng.sia@intel.com>
CC: "Li, Yifan" <yifan2.li@intel.com>
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
:::::: branch date: 3 months ago
:::::: commit date: 3 months ago
config: i386-randconfig-m021-20201110 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
1fe20f1b84548bb Eugeniy Paltsev 2018-03-06 912
94e13c288016775 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c288016775 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c288016775 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c288016775 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c288016775 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c288016775 Sia Jee Heng 2020-06-26 918 {
94e13c288016775 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c288016775 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c288016775 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c288016775 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c288016775 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c288016775 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c288016775 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c288016775 Sia Jee Heng 2020-06-26 932
94e13c288016775 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c288016775 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 935
94e13c288016775 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c288016775 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c288016775 Sia Jee Heng 2020-06-26 938
94e13c288016775 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c288016775 Sia Jee Heng 2020-06-26 940
94e13c288016775 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c288016775 Sia Jee Heng 2020-06-26 942
94e13c288016775 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c288016775 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c288016775 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c288016775 Sia Jee Heng 2020-06-26 946
94e13c288016775 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c288016775 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c288016775 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c288016775 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 959 }
94e13c288016775 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c288016775 Sia Jee Heng 2020-06-26 961
94e13c288016775 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c288016775 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 966
94e13c288016775 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c288016775 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c288016775 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 970 u32 mem, len;
94e13c288016775 Sia Jee Heng 2020-06-26 971
94e13c288016775 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
94e13c288016775 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 975
94e13c288016775 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 978
94e13c288016775 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c288016775 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c288016775 Sia Jee Heng 2020-06-26 982
94e13c288016775 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c288016775 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c288016775 Sia Jee Heng 2020-06-26 986 }
94e13c288016775 Sia Jee Heng 2020-06-26 987
94e13c288016775 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 989
94e13c288016775 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c288016775 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c288016775 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c288016775 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c288016775 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c288016775 Sia Jee Heng 2020-06-26 996
94e13c288016775 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 999
94e13c288016775 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c288016775 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c288016775 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1003 } else {
94e13c288016775 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c288016775 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c288016775 Sia Jee Heng 2020-06-26 1007 }
94e13c288016775 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c288016775 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1011
94e13c288016775 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1013
94e13c288016775 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1015 }
94e13c288016775 Sia Jee Heng 2020-06-26 1016 break;
94e13c288016775 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c288016775 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c288016775 Sia Jee Heng 2020-06-26 1019
94e13c288016775 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c288016775 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c288016775 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 1031 }
94e13c288016775 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c288016775 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c288016775 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c288016775 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 1040
94e13c288016775 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c288016775 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
94e13c288016775 Sia Jee Heng 2020-06-26 1045
94e13c288016775 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c288016775 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c288016775 Sia Jee Heng 2020-06-26 1049
94e13c288016775 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
94e13c288016775 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c288016775 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1055 }
94e13c288016775 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
94e13c288016775 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 1061
94e13c288016775 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 1064
94e13c288016775 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c288016775 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c288016775 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c288016775 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c288016775 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c288016775 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c288016775 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c288016775 Sia Jee Heng 2020-06-26 1073
94e13c288016775 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1076
94e13c288016775 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c288016775 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c288016775 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1080 } else {
94e13c288016775 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c288016775 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c288016775 Sia Jee Heng 2020-06-26 1084 }
94e13c288016775 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c288016775 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1088
94e13c288016775 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1090
94e13c288016775 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c288016775 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1093 }
94e13c288016775 Sia Jee Heng 2020-06-26 1094 break;
94e13c288016775 Sia Jee Heng 2020-06-26 1095 default:
94e13c288016775 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1097 }
94e13c288016775 Sia Jee Heng 2020-06-26 1098
94e13c288016775 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c288016775 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1101
94e13c288016775 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c288016775 Sia Jee Heng 2020-06-26 1103
94e13c288016775 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c288016775 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c288016775 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c288016775 Sia Jee Heng 2020-06-26 1107
94e13c288016775 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1109 }
94e13c288016775 Sia Jee Heng 2020-06-26 1110
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 30605 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2020-10-09 13:39 kernel test robot
0 siblings, 0 replies; 15+ messages in thread
From: kernel test robot @ 2020-10-09 13:39 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 16914 bytes --]
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
:::::: branch date: 7 weeks ago
:::::: commit date: 7 weeks ago
config: x86_64-randconfig-m001-20201008 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
1fe20f1b84548bb Eugeniy Paltsev 2018-03-06 912
94e13c288016775 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c288016775 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c288016775 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c288016775 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c288016775 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c288016775 Sia Jee Heng 2020-06-26 918 {
94e13c288016775 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c288016775 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c288016775 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c288016775 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c288016775 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c288016775 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c288016775 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c288016775 Sia Jee Heng 2020-06-26 932
94e13c288016775 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c288016775 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 935
94e13c288016775 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c288016775 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c288016775 Sia Jee Heng 2020-06-26 938
94e13c288016775 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c288016775 Sia Jee Heng 2020-06-26 940
94e13c288016775 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c288016775 Sia Jee Heng 2020-06-26 942
94e13c288016775 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c288016775 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c288016775 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c288016775 Sia Jee Heng 2020-06-26 946
94e13c288016775 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c288016775 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c288016775 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c288016775 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 959 }
94e13c288016775 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c288016775 Sia Jee Heng 2020-06-26 961
94e13c288016775 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c288016775 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 966
94e13c288016775 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c288016775 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c288016775 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 970 u32 mem, len;
94e13c288016775 Sia Jee Heng 2020-06-26 971
94e13c288016775 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
94e13c288016775 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 975
94e13c288016775 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 978
94e13c288016775 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c288016775 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c288016775 Sia Jee Heng 2020-06-26 982
94e13c288016775 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c288016775 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c288016775 Sia Jee Heng 2020-06-26 986 }
94e13c288016775 Sia Jee Heng 2020-06-26 987
94e13c288016775 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 989
94e13c288016775 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c288016775 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c288016775 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c288016775 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c288016775 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c288016775 Sia Jee Heng 2020-06-26 996
94e13c288016775 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 999
94e13c288016775 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c288016775 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c288016775 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1003 } else {
94e13c288016775 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c288016775 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c288016775 Sia Jee Heng 2020-06-26 1007 }
94e13c288016775 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c288016775 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1011
94e13c288016775 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1013
94e13c288016775 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1015 }
94e13c288016775 Sia Jee Heng 2020-06-26 1016 break;
94e13c288016775 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c288016775 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c288016775 Sia Jee Heng 2020-06-26 1019
94e13c288016775 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c288016775 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c288016775 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 1031 }
94e13c288016775 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c288016775 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c288016775 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c288016775 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 1040
94e13c288016775 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c288016775 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
94e13c288016775 Sia Jee Heng 2020-06-26 1045
94e13c288016775 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c288016775 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c288016775 Sia Jee Heng 2020-06-26 1049
94e13c288016775 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
94e13c288016775 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c288016775 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1055 }
94e13c288016775 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
94e13c288016775 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 1061
94e13c288016775 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 1064
94e13c288016775 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c288016775 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c288016775 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c288016775 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c288016775 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c288016775 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c288016775 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c288016775 Sia Jee Heng 2020-06-26 1073
94e13c288016775 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1076
94e13c288016775 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c288016775 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c288016775 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1080 } else {
94e13c288016775 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c288016775 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c288016775 Sia Jee Heng 2020-06-26 1084 }
94e13c288016775 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c288016775 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1088
94e13c288016775 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1090
94e13c288016775 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c288016775 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1093 }
94e13c288016775 Sia Jee Heng 2020-06-26 1094 break;
94e13c288016775 Sia Jee Heng 2020-06-26 1095 default:
94e13c288016775 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1097 }
94e13c288016775 Sia Jee Heng 2020-06-26 1098
94e13c288016775 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c288016775 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1101
94e13c288016775 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c288016775 Sia Jee Heng 2020-06-26 1103
94e13c288016775 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c288016775 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c288016775 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c288016775 Sia Jee Heng 2020-06-26 1107
94e13c288016775 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1109 }
94e13c288016775 Sia Jee Heng 2020-06-26 1110
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 39577 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2020-10-09 11:55 ` Dan Carpenter
0 siblings, 0 replies; 15+ messages in thread
From: Dan Carpenter @ 2020-10-09 11:55 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 17086 bytes --]
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
config: x86_64-randconfig-m001-20201008 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
94e13c288016775 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c288016775 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c288016775 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c288016775 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c288016775 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c288016775 Sia Jee Heng 2020-06-26 918 {
94e13c288016775 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c288016775 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c288016775 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c288016775 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c288016775 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c288016775 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c288016775 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c288016775 Sia Jee Heng 2020-06-26 932
94e13c288016775 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c288016775 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 935
94e13c288016775 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c288016775 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c288016775 Sia Jee Heng 2020-06-26 938
94e13c288016775 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c288016775 Sia Jee Heng 2020-06-26 940
94e13c288016775 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c288016775 Sia Jee Heng 2020-06-26 942
94e13c288016775 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c288016775 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c288016775 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c288016775 Sia Jee Heng 2020-06-26 946
94e13c288016775 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c288016775 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c288016775 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c288016775 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 959 }
94e13c288016775 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c288016775 Sia Jee Heng 2020-06-26 961
94e13c288016775 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c288016775 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 966
94e13c288016775 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c288016775 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c288016775 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 970 u32 mem, len;
^^^^^^^^^^^^^
94e13c288016775 Sia Jee Heng 2020-06-26 971
94e13c288016775 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
^^^^^^^^^
Uninitialized.
94e13c288016775 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 975
94e13c288016775 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 978
94e13c288016775 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c288016775 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c288016775 Sia Jee Heng 2020-06-26 982
94e13c288016775 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c288016775 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c288016775 Sia Jee Heng 2020-06-26 986 }
94e13c288016775 Sia Jee Heng 2020-06-26 987
94e13c288016775 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 989
94e13c288016775 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c288016775 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c288016775 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c288016775 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c288016775 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c288016775 Sia Jee Heng 2020-06-26 996
94e13c288016775 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 999
94e13c288016775 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c288016775 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c288016775 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1003 } else {
94e13c288016775 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c288016775 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c288016775 Sia Jee Heng 2020-06-26 1007 }
94e13c288016775 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c288016775 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1011
94e13c288016775 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1013
94e13c288016775 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1015 }
94e13c288016775 Sia Jee Heng 2020-06-26 1016 break;
94e13c288016775 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c288016775 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c288016775 Sia Jee Heng 2020-06-26 1019
94e13c288016775 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c288016775 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c288016775 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 1031 }
94e13c288016775 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c288016775 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c288016775 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c288016775 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 1040
94e13c288016775 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c288016775 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
94e13c288016775 Sia Jee Heng 2020-06-26 1045
94e13c288016775 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c288016775 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c288016775 Sia Jee Heng 2020-06-26 1049
94e13c288016775 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
94e13c288016775 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c288016775 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1055 }
94e13c288016775 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
^^^
Here too.
94e13c288016775 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 1061
94e13c288016775 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 1064
94e13c288016775 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c288016775 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c288016775 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c288016775 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c288016775 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c288016775 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c288016775 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c288016775 Sia Jee Heng 2020-06-26 1073
94e13c288016775 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1076
94e13c288016775 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c288016775 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c288016775 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1080 } else {
94e13c288016775 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c288016775 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c288016775 Sia Jee Heng 2020-06-26 1084 }
94e13c288016775 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c288016775 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1088
94e13c288016775 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1090
94e13c288016775 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c288016775 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1093 }
94e13c288016775 Sia Jee Heng 2020-06-26 1094 break;
94e13c288016775 Sia Jee Heng 2020-06-26 1095 default:
94e13c288016775 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1097 }
94e13c288016775 Sia Jee Heng 2020-06-26 1098
94e13c288016775 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c288016775 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1101
94e13c288016775 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c288016775 Sia Jee Heng 2020-06-26 1103
94e13c288016775 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c288016775 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c288016775 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c288016775 Sia Jee Heng 2020-06-26 1107
94e13c288016775 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1109 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 39577 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2020-10-09 11:55 ` Dan Carpenter
0 siblings, 0 replies; 15+ messages in thread
From: Dan Carpenter @ 2020-10-09 11:55 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 17086 bytes --]
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
config: x86_64-randconfig-m001-20201008 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
94e13c288016775 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c288016775 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c288016775 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c288016775 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c288016775 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c288016775 Sia Jee Heng 2020-06-26 918 {
94e13c288016775 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c288016775 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c288016775 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c288016775 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c288016775 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c288016775 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c288016775 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c288016775 Sia Jee Heng 2020-06-26 932
94e13c288016775 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c288016775 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 935
94e13c288016775 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c288016775 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c288016775 Sia Jee Heng 2020-06-26 938
94e13c288016775 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c288016775 Sia Jee Heng 2020-06-26 940
94e13c288016775 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c288016775 Sia Jee Heng 2020-06-26 942
94e13c288016775 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c288016775 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c288016775 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c288016775 Sia Jee Heng 2020-06-26 946
94e13c288016775 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c288016775 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c288016775 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c288016775 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 959 }
94e13c288016775 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c288016775 Sia Jee Heng 2020-06-26 961
94e13c288016775 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c288016775 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 966
94e13c288016775 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c288016775 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c288016775 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 970 u32 mem, len;
^^^^^^^^^^^^^
94e13c288016775 Sia Jee Heng 2020-06-26 971
94e13c288016775 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
^^^^^^^^^
Uninitialized.
94e13c288016775 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 975
94e13c288016775 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 978
94e13c288016775 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c288016775 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c288016775 Sia Jee Heng 2020-06-26 982
94e13c288016775 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c288016775 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c288016775 Sia Jee Heng 2020-06-26 986 }
94e13c288016775 Sia Jee Heng 2020-06-26 987
94e13c288016775 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 989
94e13c288016775 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c288016775 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c288016775 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c288016775 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c288016775 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c288016775 Sia Jee Heng 2020-06-26 996
94e13c288016775 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 999
94e13c288016775 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c288016775 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c288016775 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1003 } else {
94e13c288016775 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c288016775 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c288016775 Sia Jee Heng 2020-06-26 1007 }
94e13c288016775 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c288016775 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1011
94e13c288016775 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1013
94e13c288016775 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1015 }
94e13c288016775 Sia Jee Heng 2020-06-26 1016 break;
94e13c288016775 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c288016775 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c288016775 Sia Jee Heng 2020-06-26 1019
94e13c288016775 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c288016775 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c288016775 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 1031 }
94e13c288016775 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c288016775 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c288016775 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c288016775 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 1040
94e13c288016775 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c288016775 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
94e13c288016775 Sia Jee Heng 2020-06-26 1045
94e13c288016775 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c288016775 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c288016775 Sia Jee Heng 2020-06-26 1049
94e13c288016775 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
94e13c288016775 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c288016775 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1055 }
94e13c288016775 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
^^^
Here too.
94e13c288016775 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 1061
94e13c288016775 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 1064
94e13c288016775 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c288016775 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c288016775 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c288016775 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c288016775 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c288016775 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c288016775 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c288016775 Sia Jee Heng 2020-06-26 1073
94e13c288016775 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1076
94e13c288016775 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c288016775 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c288016775 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1080 } else {
94e13c288016775 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c288016775 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c288016775 Sia Jee Heng 2020-06-26 1084 }
94e13c288016775 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c288016775 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1088
94e13c288016775 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1090
94e13c288016775 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c288016775 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1093 }
94e13c288016775 Sia Jee Heng 2020-06-26 1094 break;
94e13c288016775 Sia Jee Heng 2020-06-26 1095 default:
94e13c288016775 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1097 }
94e13c288016775 Sia Jee Heng 2020-06-26 1098
94e13c288016775 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c288016775 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1101
94e13c288016775 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c288016775 Sia Jee Heng 2020-06-26 1103
94e13c288016775 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c288016775 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c288016775 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c288016775 Sia Jee Heng 2020-06-26 1107
94e13c288016775 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1109 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 39577 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
@ 2020-10-08 3:20 kernel test robot
0 siblings, 0 replies; 15+ messages in thread
From: kernel test robot @ 2020-10-08 3:20 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 17029 bytes --]
CC: kbuild-all(a)lists.01.org
TO: Sia Jee Heng <jee.heng.sia@intel.com>
CC: "Li, Yifan" <yifan2.li@intel.com>
tree: https://github.com/intel/linux-intel-lts.git 5.4/yocto
head: eeb611e5394c56d45c5cc8f7dc484c9f19e93143
commit: 94e13c2880167751eb5cbbcb0e7be68ca83f0653 [40/1142] dmaengine: dw-axi-dma: support cyclic mode
:::::: branch date: 7 weeks ago
:::::: commit date: 7 weeks ago
config: x86_64-randconfig-m001-20201008 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
Old smatch warnings:
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1050 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'len'.
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:1058 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem'.
vim +/mem +972 drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
1fe20f1b84548bb Eugeniy Paltsev 2018-03-06 912
94e13c288016775 Sia Jee Heng 2020-06-26 913 static struct dma_async_tx_descriptor *
94e13c288016775 Sia Jee Heng 2020-06-26 914 dw_chan_prep_dma_cyclic(struct dma_chan *dchan, dma_addr_t buf_addr,
94e13c288016775 Sia Jee Heng 2020-06-26 915 size_t buf_len, size_t period_len,
94e13c288016775 Sia Jee Heng 2020-06-26 916 enum dma_transfer_direction direction,
94e13c288016775 Sia Jee Heng 2020-06-26 917 unsigned long flags)
94e13c288016775 Sia Jee Heng 2020-06-26 918 {
94e13c288016775 Sia Jee Heng 2020-06-26 919 struct axi_dma_chan *chan = dchan_to_axi_dma_chan(dchan);
94e13c288016775 Sia Jee Heng 2020-06-26 920 struct axi_dma_desc *first = NULL, *prev = NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 921 unsigned int reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 922 unsigned int mem_width;
94e13c288016775 Sia Jee Heng 2020-06-26 923 unsigned int data_width = BIT(chan->chip->dw->hdata->m_data_width);
94e13c288016775 Sia Jee Heng 2020-06-26 924 dma_addr_t reg;
94e13c288016775 Sia Jee Heng 2020-06-26 925 u32 reg_value = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 926 unsigned int i = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 927 u32 ctllo, ctlhi;
94e13c288016775 Sia Jee Heng 2020-06-26 928 size_t total_len = 0;
94e13c288016775 Sia Jee Heng 2020-06-26 929 size_t block_ts, max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 930 u8 lms = 0; // Select AXI0 master for LLI fetching
94e13c288016775 Sia Jee Heng 2020-06-26 931 u32 offset;
94e13c288016775 Sia Jee Heng 2020-06-26 932
94e13c288016775 Sia Jee Heng 2020-06-26 933 if (unlikely(!is_slave_direction(direction)))
94e13c288016775 Sia Jee Heng 2020-06-26 934 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 935
94e13c288016775 Sia Jee Heng 2020-06-26 936 chan->direction = direction;
94e13c288016775 Sia Jee Heng 2020-06-26 937 chan->cyclic = 0x1;
94e13c288016775 Sia Jee Heng 2020-06-26 938
94e13c288016775 Sia Jee Heng 2020-06-26 939 max_block_ts = chan->chip->dw->hdata->block_size[chan->id];
94e13c288016775 Sia Jee Heng 2020-06-26 940
94e13c288016775 Sia Jee Heng 2020-06-26 941 axi_set_hw_channel(chan->chip, chan->hw_hs_num);
94e13c288016775 Sia Jee Heng 2020-06-26 942
94e13c288016775 Sia Jee Heng 2020-06-26 943 switch (direction) {
94e13c288016775 Sia Jee Heng 2020-06-26 944 case DMA_MEM_TO_DEV:
94e13c288016775 Sia Jee Heng 2020-06-26 945 reg_width = __ffs(chan->slave_config.dst_addr_width);
94e13c288016775 Sia Jee Heng 2020-06-26 946
94e13c288016775 Sia Jee Heng 2020-06-26 947 chan->reg_width = reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 948 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c288016775 Sia Jee Heng 2020-06-26 949 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 950 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 951 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 952 axi_dma_apb_iowrite32(chan->chip,
94e13c288016775 Sia Jee Heng 2020-06-26 953 DMAC_APB_HALFWORD_WR_CH_EN, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 954 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c288016775 Sia Jee Heng 2020-06-26 955 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 956 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 957 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 958 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 959 }
94e13c288016775 Sia Jee Heng 2020-06-26 960 reg = chan->slave_config.dst_addr;
94e13c288016775 Sia Jee Heng 2020-06-26 961
94e13c288016775 Sia Jee Heng 2020-06-26 962 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c288016775 Sia Jee Heng 2020-06-26 963 reg_width << CH_CTL_L_DST_WIDTH_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 964 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_DST_INC_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 965 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_SRC_INC_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 966
94e13c288016775 Sia Jee Heng 2020-06-26 967 for (i = 0; i < buf_len / period_len; i++) {
94e13c288016775 Sia Jee Heng 2020-06-26 968 struct axi_dma_desc *desc;
94e13c288016775 Sia Jee Heng 2020-06-26 969 size_t xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 970 u32 mem, len;
94e13c288016775 Sia Jee Heng 2020-06-26 971
94e13c288016775 Sia Jee Heng 2020-06-26 @972 mem_width = __ffs(data_width | mem | len);
94e13c288016775 Sia Jee Heng 2020-06-26 973 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 974 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 975
94e13c288016775 Sia Jee Heng 2020-06-26 976 xfer_len = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 977 block_ts = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 978
94e13c288016775 Sia Jee Heng 2020-06-26 979 desc = axi_desc_get(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 980 if (unlikely(!desc))
94e13c288016775 Sia Jee Heng 2020-06-26 981 goto err_desc_get;
94e13c288016775 Sia Jee Heng 2020-06-26 982
94e13c288016775 Sia Jee Heng 2020-06-26 983 if (block_ts > max_block_ts) {
94e13c288016775 Sia Jee Heng 2020-06-26 984 block_ts = max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 985 xfer_len = max_block_ts << mem_width;
94e13c288016775 Sia Jee Heng 2020-06-26 986 }
94e13c288016775 Sia Jee Heng 2020-06-26 987
94e13c288016775 Sia Jee Heng 2020-06-26 988 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 989
94e13c288016775 Sia Jee Heng 2020-06-26 990 ctllo |= mem_width << CH_CTL_L_SRC_WIDTH_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 991 write_desc_sar(desc, buf_addr + i * period_len);
94e13c288016775 Sia Jee Heng 2020-06-26 992 write_desc_dar(desc, reg);
94e13c288016775 Sia Jee Heng 2020-06-26 993 desc->lli.block_ts_lo = period_len / 4;
94e13c288016775 Sia Jee Heng 2020-06-26 994 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c288016775 Sia Jee Heng 2020-06-26 995 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c288016775 Sia Jee Heng 2020-06-26 996
94e13c288016775 Sia Jee Heng 2020-06-26 997 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 998 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 999
94e13c288016775 Sia Jee Heng 2020-06-26 1000 // Manage transfer list (xfer_list)
94e13c288016775 Sia Jee Heng 2020-06-26 1001 if (!first) {
94e13c288016775 Sia Jee Heng 2020-06-26 1002 first = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1003 } else {
94e13c288016775 Sia Jee Heng 2020-06-26 1004 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1005 list_add_tail(&desc->xfer_list,
94e13c288016775 Sia Jee Heng 2020-06-26 1006 &first->xfer_list);
94e13c288016775 Sia Jee Heng 2020-06-26 1007 }
94e13c288016775 Sia Jee Heng 2020-06-26 1008 prev = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1009 if (i == ((buf_len / period_len) - 1))
94e13c288016775 Sia Jee Heng 2020-06-26 1010 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1011
94e13c288016775 Sia Jee Heng 2020-06-26 1012 total_len += xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1013
94e13c288016775 Sia Jee Heng 2020-06-26 1014 set_desc_last(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1015 }
94e13c288016775 Sia Jee Heng 2020-06-26 1016 break;
94e13c288016775 Sia Jee Heng 2020-06-26 1017 case DMA_DEV_TO_MEM:
94e13c288016775 Sia Jee Heng 2020-06-26 1018 reg_width = __ffs(chan->slave_config.src_addr_width);
94e13c288016775 Sia Jee Heng 2020-06-26 1019
94e13c288016775 Sia Jee Heng 2020-06-26 1020 chan->reg_width = reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1021 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16) {
94e13c288016775 Sia Jee Heng 2020-06-26 1022 offset = DMAC_APB_HALFWORD_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 1023 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 1024 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 1025 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 1026 } else if (reg_width == DWAXIDMAC_TRANS_WIDTH_8) {
94e13c288016775 Sia Jee Heng 2020-06-26 1027 offset = DMAC_APB_BYTE_WR_CH_EN;
94e13c288016775 Sia Jee Heng 2020-06-26 1028 reg_value = axi_dma_apb_ioread32(chan->chip, offset);
94e13c288016775 Sia Jee Heng 2020-06-26 1029 reg_value |= 0x1 << chan->id;
94e13c288016775 Sia Jee Heng 2020-06-26 1030 axi_dma_apb_iowrite32(chan->chip, offset, reg_value);
94e13c288016775 Sia Jee Heng 2020-06-26 1031 }
94e13c288016775 Sia Jee Heng 2020-06-26 1032 reg = chan->slave_config.src_addr;
94e13c288016775 Sia Jee Heng 2020-06-26 1033 if (reg_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1034 reg_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 1035 ctllo = axi_dma_prepare_ctllo(chan) |
94e13c288016775 Sia Jee Heng 2020-06-26 1036 reg_width << CH_CTL_L_SRC_WIDTH_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 1037 DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS |
94e13c288016775 Sia Jee Heng 2020-06-26 1038 // Workaround
94e13c288016775 Sia Jee Heng 2020-06-26 1039 DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 1040
94e13c288016775 Sia Jee Heng 2020-06-26 1041 for (i = 0; i < buf_len / period_len; i++) {
94e13c288016775 Sia Jee Heng 2020-06-26 1042 struct axi_dma_desc *desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1043 size_t xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1044 u32 mem, len;
94e13c288016775 Sia Jee Heng 2020-06-26 1045
94e13c288016775 Sia Jee Heng 2020-06-26 1046 desc = axi_desc_get(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 1047 if (unlikely(!desc))
94e13c288016775 Sia Jee Heng 2020-06-26 1048 goto err_desc_get;
94e13c288016775 Sia Jee Heng 2020-06-26 1049
94e13c288016775 Sia Jee Heng 2020-06-26 1050 xfer_len = len;
94e13c288016775 Sia Jee Heng 2020-06-26 1051 block_ts = xfer_len >> reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1052 if (block_ts > max_block_ts) {
94e13c288016775 Sia Jee Heng 2020-06-26 1053 block_ts = max_block_ts;
94e13c288016775 Sia Jee Heng 2020-06-26 1054 xfer_len = max_block_ts << reg_width;
94e13c288016775 Sia Jee Heng 2020-06-26 1055 }
94e13c288016775 Sia Jee Heng 2020-06-26 1056 xfer_len = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1057 block_ts = period_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1058 mem_width = __ffs(data_width | mem | xfer_len);
94e13c288016775 Sia Jee Heng 2020-06-26 1059 if (mem_width > DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1060 mem_width = DWAXIDMAC_TRANS_WIDTH_32;
94e13c288016775 Sia Jee Heng 2020-06-26 1061
94e13c288016775 Sia Jee Heng 2020-06-26 1062 ctlhi = axi_dma_prepare_ctlhi(chan);
94e13c288016775 Sia Jee Heng 2020-06-26 1063 ctllo |= mem_width << CH_CTL_L_DST_WIDTH_POS;
94e13c288016775 Sia Jee Heng 2020-06-26 1064
94e13c288016775 Sia Jee Heng 2020-06-26 1065 write_desc_sar(desc, reg);
94e13c288016775 Sia Jee Heng 2020-06-26 1066 write_desc_dar(desc, buf_addr + i * period_len);
94e13c288016775 Sia Jee Heng 2020-06-26 1067 if (reg_width == DWAXIDMAC_TRANS_WIDTH_16)
94e13c288016775 Sia Jee Heng 2020-06-26 1068 desc->lli.block_ts_lo = period_len / 2;
94e13c288016775 Sia Jee Heng 2020-06-26 1069 else if (reg_width >= DWAXIDMAC_TRANS_WIDTH_32)
94e13c288016775 Sia Jee Heng 2020-06-26 1070 desc->lli.block_ts_lo = period_len / 4;
94e13c288016775 Sia Jee Heng 2020-06-26 1071 desc->lli.ctl_hi = cpu_to_le32(ctlhi);
94e13c288016775 Sia Jee Heng 2020-06-26 1072 desc->lli.ctl_lo = cpu_to_le32(ctllo);
94e13c288016775 Sia Jee Heng 2020-06-26 1073
94e13c288016775 Sia Jee Heng 2020-06-26 1074 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1075 set_desc_src_master(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1076
94e13c288016775 Sia Jee Heng 2020-06-26 1077 // Manage transfer list (xfer_list)
94e13c288016775 Sia Jee Heng 2020-06-26 1078 if (!first) {
94e13c288016775 Sia Jee Heng 2020-06-26 1079 first = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1080 } else {
94e13c288016775 Sia Jee Heng 2020-06-26 1081 write_desc_llp(prev, desc->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1082 list_add_tail(&desc->xfer_list,
94e13c288016775 Sia Jee Heng 2020-06-26 1083 &first->xfer_list);
94e13c288016775 Sia Jee Heng 2020-06-26 1084 }
94e13c288016775 Sia Jee Heng 2020-06-26 1085 prev = desc;
94e13c288016775 Sia Jee Heng 2020-06-26 1086 if (i == ((buf_len / period_len) - 1))
94e13c288016775 Sia Jee Heng 2020-06-26 1087 write_desc_llp(prev, first->vd.tx.phys | lms);
94e13c288016775 Sia Jee Heng 2020-06-26 1088
94e13c288016775 Sia Jee Heng 2020-06-26 1089 total_len += xfer_len;
94e13c288016775 Sia Jee Heng 2020-06-26 1090
94e13c288016775 Sia Jee Heng 2020-06-26 1091 // TODO: check if needed
94e13c288016775 Sia Jee Heng 2020-06-26 1092 set_desc_last(desc);
94e13c288016775 Sia Jee Heng 2020-06-26 1093 }
94e13c288016775 Sia Jee Heng 2020-06-26 1094 break;
94e13c288016775 Sia Jee Heng 2020-06-26 1095 default:
94e13c288016775 Sia Jee Heng 2020-06-26 1096 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1097 }
94e13c288016775 Sia Jee Heng 2020-06-26 1098
94e13c288016775 Sia Jee Heng 2020-06-26 1099 if (unlikely(!first))
94e13c288016775 Sia Jee Heng 2020-06-26 1100 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1101
94e13c288016775 Sia Jee Heng 2020-06-26 1102 return vchan_tx_prep(&chan->vc, &first->vd, flags);
94e13c288016775 Sia Jee Heng 2020-06-26 1103
94e13c288016775 Sia Jee Heng 2020-06-26 1104 err_desc_get:
94e13c288016775 Sia Jee Heng 2020-06-26 1105 if (first)
94e13c288016775 Sia Jee Heng 2020-06-26 1106 axi_desc_put(first);
94e13c288016775 Sia Jee Heng 2020-06-26 1107
94e13c288016775 Sia Jee Heng 2020-06-26 1108 return NULL;
94e13c288016775 Sia Jee Heng 2020-06-26 1109 }
94e13c288016775 Sia Jee Heng 2020-06-26 1110
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 39577 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2021-03-02 7:51 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-11 9:59 [intel-linux-intel-lts:5.4/yocto 40/1142] drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c:972 dw_chan_prep_dma_cyclic() error: uninitialized symbol 'mem' Dan Carpenter
2020-11-11 9:59 ` Dan Carpenter
-- strict thread matches above, loose matches on Subject: below --
2021-03-02 7:51 Dan Carpenter
2021-03-02 7:10 kernel test robot
2021-02-16 8:54 Dan Carpenter
2021-02-16 8:54 ` Dan Carpenter
2021-02-15 19:01 kernel test robot
2020-12-14 10:38 Dan Carpenter
2020-12-14 10:38 ` Dan Carpenter
2020-12-12 10:18 kernel test robot
2020-11-10 22:37 kernel test robot
2020-10-09 13:39 kernel test robot
2020-10-09 11:55 Dan Carpenter
2020-10-09 11:55 ` Dan Carpenter
2020-10-08 3:20 kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.