Hi Green, I love your patch! Yet something to improve: [auto build test ERROR on linus/master] [cannot apply to v5.3 next-20190916] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Green-Wan/dmaengine-sf-pdma-Add-platform-dma-driver/20190917-142826 config: i386-allmodconfig (attached as .config) compiler: gcc-7 (Debian 7.4.0-11) 7.4.0 reproduce: # save the attached .config to linux build tree make ARCH=i386 If you fix the issue, kindly add following tag Reported-by: kbuild test robot <lkp@xxxxxxxxx> All errors (new ones prefixed by >>): drivers/dma/sf-pdma/sf-pdma.c: In function 'sf_pdma_fill_desc': >> drivers/dma/sf-pdma/sf-pdma.c:80:2: error: implicit declaration of function 'writeq'; did you mean 'writel'? [-Werror=implicit-function-declaration] writeq(size, regs->xfer_size); ^~~~~~ writel drivers/dma/sf-pdma/sf-pdma.c: In function 'sf_pdma_desc_residue': >> drivers/dma/sf-pdma/sf-pdma.c:188:12: error: implicit declaration of function 'readq'; did you mean 'readl'? [-Werror=implicit-function-declaration] residue = readq(regs->residue); ^~~~~ readl drivers/dma/sf-pdma/sf-pdma.c: In function 'sf_pdma_free_desc': drivers/dma/sf-pdma/sf-pdma.c:308:16: warning: unused variable 'flags' [-Wunused-variable] unsigned long flags; ^~~~~ cc1: some warnings being treated as errors vim +80 drivers/dma/sf-pdma/sf-pdma.c 71 72 static void sf_pdma_fill_desc(struct sf_pdma_chan *chan, 73 u64 dst, 74 u64 src, 75 u64 size) 76 { 77 struct pdma_regs *regs = &chan->regs; 78 79 writel(PDMA_FULL_SPEED, regs->xfer_type); > 80 writeq(size, regs->xfer_size); 81 writeq(dst, regs->dst_addr); 82 writeq(src, regs->src_addr); 83 } 84 85 void sf_pdma_disclaim_chan(struct sf_pdma_chan *chan) 86 { 87 struct pdma_regs *regs = &chan->regs; 88 89 writel(PDMA_CLEAR_CTRL, regs->ctrl); 90 } 91 92 struct dma_async_tx_descriptor * 93 sf_pdma_prep_dma_memcpy(struct dma_chan *dchan, 94 dma_addr_t dest, 95 dma_addr_t src, 96 size_t len, 97 unsigned long flags) 98 { 99 struct sf_pdma_chan *chan = to_sf_pdma_chan(dchan); 100 struct sf_pdma_desc *desc; 101 102 if (!chan || !len || !dest || !src) { 103 pr_debug("%s: Please check dma len, dest, src!\n", __func__); 104 return NULL; 105 } 106 107 desc = sf_pdma_alloc_desc(chan); 108 if (!desc) 109 return NULL; 110 111 desc->in_use = true; 112 desc->dirn = DMA_MEM_TO_MEM; 113 desc->async_tx = vchan_tx_prep(&chan->vchan, &desc->vdesc, flags); 114 115 spin_lock_irqsave(&chan->lock, flags); 116 chan->desc = desc; 117 sf_pdma_fill_desc(desc->chan, dest, src, len); 118 spin_unlock_irqrestore(&chan->lock, flags); 119 120 return desc->async_tx; 121 } 122 123 static void sf_pdma_unprep_slave_dma(struct sf_pdma_chan *chan) 124 { 125 if (chan->dma_dir != DMA_NONE) 126 dma_unmap_resource(chan->vchan.chan.device->dev, 127 chan->dma_dev_addr, 128 chan->dma_dev_size, 129 chan->dma_dir, 0); 130 chan->dma_dir = DMA_NONE; 131 } 132 133 static int sf_pdma_slave_config(struct dma_chan *dchan, 134 struct dma_slave_config *cfg) 135 { 136 struct sf_pdma_chan *chan = to_sf_pdma_chan(dchan); 137 138 memcpy(&chan->cfg, cfg, sizeof(*cfg)); 139 sf_pdma_unprep_slave_dma(chan); 140 141 return 0; 142 } 143 144 static int sf_pdma_alloc_chan_resources(struct dma_chan *dchan) 145 { 146 struct sf_pdma_chan *chan = to_sf_pdma_chan(dchan); 147 struct pdma_regs *regs = &chan->regs; 148 149 dma_cookie_init(dchan); 150 writel(PDMA_CLAIM_MASK, regs->ctrl); 151 152 return 0; 153 } 154 155 static void sf_pdma_disable_request(struct sf_pdma_chan *chan) 156 { 157 struct pdma_regs *regs = &chan->regs; 158 159 writel(readl(regs->ctrl) & ~PDMA_RUN_MASK, regs->ctrl); 160 } 161 162 static void sf_pdma_free_chan_resources(struct dma_chan *dchan) 163 { 164 struct sf_pdma_chan *chan = to_sf_pdma_chan(dchan); 165 unsigned long flags; 166 LIST_HEAD(head); 167 168 spin_lock_irqsave(&chan->vchan.lock, flags); 169 sf_pdma_disable_request(chan); 170 kfree(chan->desc); 171 chan->desc = NULL; 172 vchan_get_all_descriptors(&chan->vchan, &head); 173 sf_pdma_unprep_slave_dma(chan); 174 vchan_dma_desc_free_list(&chan->vchan, &head); 175 sf_pdma_disclaim_chan(chan); 176 spin_unlock_irqrestore(&chan->vchan.lock, flags); 177 } 178 179 static size_t sf_pdma_desc_residue(struct sf_pdma_chan *chan, 180 dma_cookie_t cookie) 181 { 182 struct virt_dma_desc *vd = NULL; 183 struct sf_pdma_desc *desc; 184 struct pdma_regs *regs = &chan->regs; 185 unsigned long flags; 186 u64 residue; 187 > 188 residue = readq(regs->residue); 189 190 chan->status = residue ? DMA_IN_PROGRESS : DMA_COMPLETE; 191 192 spin_lock_irqsave(&chan->vchan.lock, flags); 193 vd = vchan_find_desc(&chan->vchan, cookie); 194 if (!vd) 195 goto out; 196 197 desc = to_sf_pdma_desc(vd); 198 199 spin_unlock_irqrestore(&chan->vchan.lock, flags); 200 201 if (desc && chan->status == DMA_COMPLETE) 202 vchan_tx_desc_free(desc->async_tx); 203 204 return residue; 205 206 out: 207 spin_unlock_irqrestore(&chan->vchan.lock, flags); 208 return residue; 209 } 210 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip