1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Driver for the Atmel Extensible DMA Controller (aka XDMAC on AT91 systems) 4 * 5 * Copyright (C) 2014 Atmel Corporation 6 * 7 * Author: Ludovic Desroches <ludovic.desroches@atmel.com> 8 */ 9 10 #include <asm/barrier.h> 11 #include <dt-bindings/dma/at91.h> 12 #include <linux/clk.h> 13 #include <linux/dmaengine.h> 14 #include <linux/dmapool.h> 15 #include <linux/interrupt.h> 16 #include <linux/irq.h> 17 #include <linux/kernel.h> 18 #include <linux/list.h> 19 #include <linux/module.h> 20 #include <linux/of_dma.h> 21 #include <linux/of_platform.h> 22 #include <linux/platform_device.h> 23 #include <linux/pm.h> 24 25 #include "dmaengine.h" 26 27 /* Global registers */ 28 #define AT_XDMAC_GTYPE 0x00 /* Global Type Register */ 29 #define AT_XDMAC_NB_CH(i) (((i) & 0x1F) + 1) /* Number of Channels Minus One */ 30 #define AT_XDMAC_FIFO_SZ(i) (((i) >> 5) & 0x7FF) /* Number of Bytes */ 31 #define AT_XDMAC_NB_REQ(i) ((((i) >> 16) & 0x3F) + 1) /* Number of Peripheral Requests Minus One */ 32 #define AT_XDMAC_GCFG 0x04 /* Global Configuration Register */ 33 #define AT_XDMAC_WRHP(i) (((i) & 0xF) << 4) 34 #define AT_XDMAC_WRMP(i) (((i) & 0xF) << 8) 35 #define AT_XDMAC_WRLP(i) (((i) & 0xF) << 12) 36 #define AT_XDMAC_RDHP(i) (((i) & 0xF) << 16) 37 #define AT_XDMAC_RDMP(i) (((i) & 0xF) << 20) 38 #define AT_XDMAC_RDLP(i) (((i) & 0xF) << 24) 39 #define AT_XDMAC_RDSG(i) (((i) & 0xF) << 28) 40 #define AT_XDMAC_GCFG_M2M (AT_XDMAC_RDLP(0xF) | AT_XDMAC_WRLP(0xF)) 41 #define AT_XDMAC_GCFG_P2M (AT_XDMAC_RDSG(0x1) | AT_XDMAC_RDHP(0x3) | \ 42 AT_XDMAC_WRHP(0x5)) 43 #define AT_XDMAC_GWAC 0x08 /* Global Weighted Arbiter Configuration Register */ 44 #define AT_XDMAC_PW0(i) (((i) & 0xF) << 0) 45 #define AT_XDMAC_PW1(i) (((i) & 0xF) << 4) 46 #define AT_XDMAC_PW2(i) (((i) & 0xF) << 8) 47 #define AT_XDMAC_PW3(i) (((i) & 0xF) << 12) 48 #define AT_XDMAC_GWAC_M2M 0 49 #define AT_XDMAC_GWAC_P2M (AT_XDMAC_PW0(0xF) | AT_XDMAC_PW2(0xF)) 50 51 #define AT_XDMAC_GIE 0x0C /* Global Interrupt Enable Register */ 52 #define AT_XDMAC_GID 0x10 /* Global Interrupt Disable Register */ 53 #define AT_XDMAC_GIM 0x14 /* Global Interrupt Mask Register */ 54 #define AT_XDMAC_GIS 0x18 /* Global Interrupt Status Register */ 55 #define AT_XDMAC_GE 0x1C /* Global Channel Enable Register */ 56 #define AT_XDMAC_GD 0x20 /* Global Channel Disable Register */ 57 #define AT_XDMAC_GS 0x24 /* Global Channel Status Register */ 58 #define AT_XDMAC_VERSION 0xFFC /* XDMAC Version Register */ 59 60 /* Channel relative registers offsets */ 61 #define AT_XDMAC_CIE 0x00 /* Channel Interrupt Enable Register */ 62 #define AT_XDMAC_CIE_BIE BIT(0) /* End of Block Interrupt Enable Bit */ 63 #define AT_XDMAC_CIE_LIE BIT(1) /* End of Linked List Interrupt Enable Bit */ 64 #define AT_XDMAC_CIE_DIE BIT(2) /* End of Disable Interrupt Enable Bit */ 65 #define AT_XDMAC_CIE_FIE BIT(3) /* End of Flush Interrupt Enable Bit */ 66 #define AT_XDMAC_CIE_RBEIE BIT(4) /* Read Bus Error Interrupt Enable Bit */ 67 #define AT_XDMAC_CIE_WBEIE BIT(5) /* Write Bus Error Interrupt Enable Bit */ 68 #define AT_XDMAC_CIE_ROIE BIT(6) /* Request Overflow Interrupt Enable Bit */ 69 #define AT_XDMAC_CID 0x04 /* Channel Interrupt Disable Register */ 70 #define AT_XDMAC_CID_BID BIT(0) /* End of Block Interrupt Disable Bit */ 71 #define AT_XDMAC_CID_LID BIT(1) /* End of Linked List Interrupt Disable Bit */ 72 #define AT_XDMAC_CID_DID BIT(2) /* End of Disable Interrupt Disable Bit */ 73 #define AT_XDMAC_CID_FID BIT(3) /* End of Flush Interrupt Disable Bit */ 74 #define AT_XDMAC_CID_RBEID BIT(4) /* Read Bus Error Interrupt Disable Bit */ 75 #define AT_XDMAC_CID_WBEID BIT(5) /* Write Bus Error Interrupt Disable Bit */ 76 #define AT_XDMAC_CID_ROID BIT(6) /* Request Overflow Interrupt Disable Bit */ 77 #define AT_XDMAC_CIM 0x08 /* Channel Interrupt Mask Register */ 78 #define AT_XDMAC_CIM_BIM BIT(0) /* End of Block Interrupt Mask Bit */ 79 #define AT_XDMAC_CIM_LIM BIT(1) /* End of Linked List Interrupt Mask Bit */ 80 #define AT_XDMAC_CIM_DIM BIT(2) /* End of Disable Interrupt Mask Bit */ 81 #define AT_XDMAC_CIM_FIM BIT(3) /* End of Flush Interrupt Mask Bit */ 82 #define AT_XDMAC_CIM_RBEIM BIT(4) /* Read Bus Error Interrupt Mask Bit */ 83 #define AT_XDMAC_CIM_WBEIM BIT(5) /* Write Bus Error Interrupt Mask Bit */ 84 #define AT_XDMAC_CIM_ROIM BIT(6) /* Request Overflow Interrupt Mask Bit */ 85 #define AT_XDMAC_CIS 0x0C /* Channel Interrupt Status Register */ 86 #define AT_XDMAC_CIS_BIS BIT(0) /* End of Block Interrupt Status Bit */ 87 #define AT_XDMAC_CIS_LIS BIT(1) /* End of Linked List Interrupt Status Bit */ 88 #define AT_XDMAC_CIS_DIS BIT(2) /* End of Disable Interrupt Status Bit */ 89 #define AT_XDMAC_CIS_FIS BIT(3) /* End of Flush Interrupt Status Bit */ 90 #define AT_XDMAC_CIS_RBEIS BIT(4) /* Read Bus Error Interrupt Status Bit */ 91 #define AT_XDMAC_CIS_WBEIS BIT(5) /* Write Bus Error Interrupt Status Bit */ 92 #define AT_XDMAC_CIS_ROIS BIT(6) /* Request Overflow Interrupt Status Bit */ 93 #define AT_XDMAC_CSA 0x10 /* Channel Source Address Register */ 94 #define AT_XDMAC_CDA 0x14 /* Channel Destination Address Register */ 95 #define AT_XDMAC_CNDA 0x18 /* Channel Next Descriptor Address Register */ 96 #define AT_XDMAC_CNDA_NDAIF(i) ((i) & 0x1) /* Channel x Next Descriptor Interface */ 97 #define AT_XDMAC_CNDA_NDA(i) ((i) & 0xfffffffc) /* Channel x Next Descriptor Address */ 98 #define AT_XDMAC_CNDC 0x1C /* Channel Next Descriptor Control Register */ 99 #define AT_XDMAC_CNDC_NDE (0x1 << 0) /* Channel x Next Descriptor Enable */ 100 #define AT_XDMAC_CNDC_NDSUP (0x1 << 1) /* Channel x Next Descriptor Source Update */ 101 #define AT_XDMAC_CNDC_NDDUP (0x1 << 2) /* Channel x Next Descriptor Destination Update */ 102 #define AT_XDMAC_CNDC_NDVIEW_MASK GENMASK(28, 27) 103 #define AT_XDMAC_CNDC_NDVIEW_NDV0 (0x0 << 3) /* Channel x Next Descriptor View 0 */ 104 #define AT_XDMAC_CNDC_NDVIEW_NDV1 (0x1 << 3) /* Channel x Next Descriptor View 1 */ 105 #define AT_XDMAC_CNDC_NDVIEW_NDV2 (0x2 << 3) /* Channel x Next Descriptor View 2 */ 106 #define AT_XDMAC_CNDC_NDVIEW_NDV3 (0x3 << 3) /* Channel x Next Descriptor View 3 */ 107 #define AT_XDMAC_CUBC 0x20 /* Channel Microblock Control Register */ 108 #define AT_XDMAC_CBC 0x24 /* Channel Block Control Register */ 109 #define AT_XDMAC_CC 0x28 /* Channel Configuration Register */ 110 #define AT_XDMAC_CC_TYPE (0x1 << 0) /* Channel Transfer Type */ 111 #define AT_XDMAC_CC_TYPE_MEM_TRAN (0x0 << 0) /* Memory to Memory Transfer */ 112 #define AT_XDMAC_CC_TYPE_PER_TRAN (0x1 << 0) /* Peripheral to Memory or Memory to Peripheral Transfer */ 113 #define AT_XDMAC_CC_MBSIZE_MASK (0x3 << 1) 114 #define AT_XDMAC_CC_MBSIZE_SINGLE (0x0 << 1) 115 #define AT_XDMAC_CC_MBSIZE_FOUR (0x1 << 1) 116 #define AT_XDMAC_CC_MBSIZE_EIGHT (0x2 << 1) 117 #define AT_XDMAC_CC_MBSIZE_SIXTEEN (0x3 << 1) 118 #define AT_XDMAC_CC_DSYNC (0x1 << 4) /* Channel Synchronization */ 119 #define AT_XDMAC_CC_DSYNC_PER2MEM (0x0 << 4) 120 #define AT_XDMAC_CC_DSYNC_MEM2PER (0x1 << 4) 121 #define AT_XDMAC_CC_PROT (0x1 << 5) /* Channel Protection */ 122 #define AT_XDMAC_CC_PROT_SEC (0x0 << 5) 123 #define AT_XDMAC_CC_PROT_UNSEC (0x1 << 5) 124 #define AT_XDMAC_CC_SWREQ (0x1 << 6) /* Channel Software Request Trigger */ 125 #define AT_XDMAC_CC_SWREQ_HWR_CONNECTED (0x0 << 6) 126 #define AT_XDMAC_CC_SWREQ_SWR_CONNECTED (0x1 << 6) 127 #define AT_XDMAC_CC_MEMSET (0x1 << 7) /* Channel Fill Block of memory */ 128 #define AT_XDMAC_CC_MEMSET_NORMAL_MODE (0x0 << 7) 129 #define AT_XDMAC_CC_MEMSET_HW_MODE (0x1 << 7) 130 #define AT_XDMAC_CC_CSIZE(i) ((0x7 & (i)) << 8) /* Channel Chunk Size */ 131 #define AT_XDMAC_CC_DWIDTH_OFFSET 11 132 #define AT_XDMAC_CC_DWIDTH_MASK (0x3 << AT_XDMAC_CC_DWIDTH_OFFSET) 133 #define AT_XDMAC_CC_DWIDTH(i) ((0x3 & (i)) << AT_XDMAC_CC_DWIDTH_OFFSET) /* Channel Data Width */ 134 #define AT_XDMAC_CC_DWIDTH_BYTE 0x0 135 #define AT_XDMAC_CC_DWIDTH_HALFWORD 0x1 136 #define AT_XDMAC_CC_DWIDTH_WORD 0x2 137 #define AT_XDMAC_CC_DWIDTH_DWORD 0x3 138 #define AT_XDMAC_CC_SIF(i) ((0x1 & (i)) << 13) /* Channel Source Interface Identifier */ 139 #define AT_XDMAC_CC_DIF(i) ((0x1 & (i)) << 14) /* Channel Destination Interface Identifier */ 140 #define AT_XDMAC_CC_SAM_MASK (0x3 << 16) /* Channel Source Addressing Mode */ 141 #define AT_XDMAC_CC_SAM_FIXED_AM (0x0 << 16) 142 #define AT_XDMAC_CC_SAM_INCREMENTED_AM (0x1 << 16) 143 #define AT_XDMAC_CC_SAM_UBS_AM (0x2 << 16) 144 #define AT_XDMAC_CC_SAM_UBS_DS_AM (0x3 << 16) 145 #define AT_XDMAC_CC_DAM_MASK (0x3 << 18) /* Channel Source Addressing Mode */ 146 #define AT_XDMAC_CC_DAM_FIXED_AM (0x0 << 18) 147 #define AT_XDMAC_CC_DAM_INCREMENTED_AM (0x1 << 18) 148 #define AT_XDMAC_CC_DAM_UBS_AM (0x2 << 18) 149 #define AT_XDMAC_CC_DAM_UBS_DS_AM (0x3 << 18) 150 #define AT_XDMAC_CC_INITD (0x1 << 21) /* Channel Initialization Terminated (read only) */ 151 #define AT_XDMAC_CC_INITD_TERMINATED (0x0 << 21) 152 #define AT_XDMAC_CC_INITD_IN_PROGRESS (0x1 << 21) 153 #define AT_XDMAC_CC_RDIP (0x1 << 22) /* Read in Progress (read only) */ 154 #define AT_XDMAC_CC_RDIP_DONE (0x0 << 22) 155 #define AT_XDMAC_CC_RDIP_IN_PROGRESS (0x1 << 22) 156 #define AT_XDMAC_CC_WRIP (0x1 << 23) /* Write in Progress (read only) */ 157 #define AT_XDMAC_CC_WRIP_DONE (0x0 << 23) 158 #define AT_XDMAC_CC_WRIP_IN_PROGRESS (0x1 << 23) 159 #define AT_XDMAC_CC_PERID(i) ((0x7f & (i)) << 24) /* Channel Peripheral Identifier */ 160 #define AT_XDMAC_CDS_MSP 0x2C /* Channel Data Stride Memory Set Pattern */ 161 #define AT_XDMAC_CSUS 0x30 /* Channel Source Microblock Stride */ 162 #define AT_XDMAC_CDUS 0x34 /* Channel Destination Microblock Stride */ 163 164 /* Microblock control members */ 165 #define AT_XDMAC_MBR_UBC_UBLEN_MAX 0xFFFFFFUL /* Maximum Microblock Length */ 166 #define AT_XDMAC_MBR_UBC_NDE (0x1 << 24) /* Next Descriptor Enable */ 167 #define AT_XDMAC_MBR_UBC_NSEN (0x1 << 25) /* Next Descriptor Source Update */ 168 #define AT_XDMAC_MBR_UBC_NDEN (0x1 << 26) /* Next Descriptor Destination Update */ 169 #define AT_XDMAC_MBR_UBC_NDV0 (0x0 << 27) /* Next Descriptor View 0 */ 170 #define AT_XDMAC_MBR_UBC_NDV1 (0x1 << 27) /* Next Descriptor View 1 */ 171 #define AT_XDMAC_MBR_UBC_NDV2 (0x2 << 27) /* Next Descriptor View 2 */ 172 #define AT_XDMAC_MBR_UBC_NDV3 (0x3 << 27) /* Next Descriptor View 3 */ 173 174 #define AT_XDMAC_MAX_CHAN 0x20 175 #define AT_XDMAC_MAX_CSIZE 16 /* 16 data */ 176 #define AT_XDMAC_MAX_DWIDTH 8 /* 64 bits */ 177 #define AT_XDMAC_RESIDUE_MAX_RETRIES 5 178 179 #define AT_XDMAC_DMA_BUSWIDTHS\ 180 (BIT(DMA_SLAVE_BUSWIDTH_UNDEFINED) |\ 181 BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) |\ 182 BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) |\ 183 BIT(DMA_SLAVE_BUSWIDTH_4_BYTES) |\ 184 BIT(DMA_SLAVE_BUSWIDTH_8_BYTES)) 185 186 enum atc_status { 187 AT_XDMAC_CHAN_IS_CYCLIC = 0, 188 AT_XDMAC_CHAN_IS_PAUSED, 189 }; 190 191 struct at_xdmac_layout { 192 /* Global Channel Read Suspend Register */ 193 u8 grs; 194 /* Global Write Suspend Register */ 195 u8 gws; 196 /* Global Channel Read Write Suspend Register */ 197 u8 grws; 198 /* Global Channel Read Write Resume Register */ 199 u8 grwr; 200 /* Global Channel Software Request Register */ 201 u8 gswr; 202 /* Global channel Software Request Status Register */ 203 u8 gsws; 204 /* Global Channel Software Flush Request Register */ 205 u8 gswf; 206 /* Channel reg base */ 207 u8 chan_cc_reg_base; 208 /* Source/Destination Interface must be specified or not */ 209 bool sdif; 210 /* AXI queue priority configuration supported */ 211 bool axi_config; 212 }; 213 214 /* ----- Channels ----- */ 215 struct at_xdmac_chan { 216 struct dma_chan chan; 217 void __iomem *ch_regs; 218 u32 mask; /* Channel Mask */ 219 u32 cfg; /* Channel Configuration Register */ 220 u8 perid; /* Peripheral ID */ 221 u8 perif; /* Peripheral Interface */ 222 u8 memif; /* Memory Interface */ 223 u32 save_cc; 224 u32 save_cim; 225 u32 save_cnda; 226 u32 save_cndc; 227 u32 irq_status; 228 unsigned long status; 229 struct tasklet_struct tasklet; 230 struct dma_slave_config sconfig; 231 232 spinlock_t lock; 233 234 struct list_head xfers_list; 235 struct list_head free_descs_list; 236 }; 237 238 239 /* ----- Controller ----- */ 240 struct at_xdmac { 241 struct dma_device dma; 242 void __iomem *regs; 243 int irq; 244 struct clk *clk; 245 u32 save_gim; 246 struct dma_pool *at_xdmac_desc_pool; 247 const struct at_xdmac_layout *layout; 248 struct at_xdmac_chan chan[]; 249 }; 250 251 252 /* ----- Descriptors ----- */ 253 254 /* Linked List Descriptor */ 255 struct at_xdmac_lld { 256 u32 mbr_nda; /* Next Descriptor Member */ 257 u32 mbr_ubc; /* Microblock Control Member */ 258 u32 mbr_sa; /* Source Address Member */ 259 u32 mbr_da; /* Destination Address Member */ 260 u32 mbr_cfg; /* Configuration Register */ 261 u32 mbr_bc; /* Block Control Register */ 262 u32 mbr_ds; /* Data Stride Register */ 263 u32 mbr_sus; /* Source Microblock Stride Register */ 264 u32 mbr_dus; /* Destination Microblock Stride Register */ 265 }; 266 267 /* 64-bit alignment needed to update CNDA and CUBC registers in an atomic way. */ 268 struct at_xdmac_desc { 269 struct at_xdmac_lld lld; 270 enum dma_transfer_direction direction; 271 struct dma_async_tx_descriptor tx_dma_desc; 272 struct list_head desc_node; 273 /* Following members are only used by the first descriptor */ 274 bool active_xfer; 275 unsigned int xfer_size; 276 struct list_head descs_list; 277 struct list_head xfer_node; 278 } __aligned(sizeof(u64)); 279 280 static const struct at_xdmac_layout at_xdmac_sama5d4_layout = { 281 .grs = 0x28, 282 .gws = 0x2C, 283 .grws = 0x30, 284 .grwr = 0x34, 285 .gswr = 0x38, 286 .gsws = 0x3C, 287 .gswf = 0x40, 288 .chan_cc_reg_base = 0x50, 289 .sdif = true, 290 .axi_config = false, 291 }; 292 293 static const struct at_xdmac_layout at_xdmac_sama7g5_layout = { 294 .grs = 0x30, 295 .gws = 0x38, 296 .grws = 0x40, 297 .grwr = 0x44, 298 .gswr = 0x48, 299 .gsws = 0x4C, 300 .gswf = 0x50, 301 .chan_cc_reg_base = 0x60, 302 .sdif = false, 303 .axi_config = true, 304 }; 305 306 static inline void __iomem *at_xdmac_chan_reg_base(struct at_xdmac *atxdmac, unsigned int chan_nb) 307 { 308 return atxdmac->regs + (atxdmac->layout->chan_cc_reg_base + chan_nb * 0x40); 309 } 310 311 #define at_xdmac_read(atxdmac, reg) readl_relaxed((atxdmac)->regs + (reg)) 312 #define at_xdmac_write(atxdmac, reg, value) \ 313 writel_relaxed((value), (atxdmac)->regs + (reg)) 314 315 #define at_xdmac_chan_read(atchan, reg) readl_relaxed((atchan)->ch_regs + (reg)) 316 #define at_xdmac_chan_write(atchan, reg, value) writel_relaxed((value), (atchan)->ch_regs + (reg)) 317 318 static inline struct at_xdmac_chan *to_at_xdmac_chan(struct dma_chan *dchan) 319 { 320 return container_of(dchan, struct at_xdmac_chan, chan); 321 } 322 323 static struct device *chan2dev(struct dma_chan *chan) 324 { 325 return &chan->dev->device; 326 } 327 328 static inline struct at_xdmac *to_at_xdmac(struct dma_device *ddev) 329 { 330 return container_of(ddev, struct at_xdmac, dma); 331 } 332 333 static inline struct at_xdmac_desc *txd_to_at_desc(struct dma_async_tx_descriptor *txd) 334 { 335 return container_of(txd, struct at_xdmac_desc, tx_dma_desc); 336 } 337 338 static inline int at_xdmac_chan_is_cyclic(struct at_xdmac_chan *atchan) 339 { 340 return test_bit(AT_XDMAC_CHAN_IS_CYCLIC, &atchan->status); 341 } 342 343 static inline int at_xdmac_chan_is_paused(struct at_xdmac_chan *atchan) 344 { 345 return test_bit(AT_XDMAC_CHAN_IS_PAUSED, &atchan->status); 346 } 347 348 static inline bool at_xdmac_chan_is_peripheral_xfer(u32 cfg) 349 { 350 return cfg & AT_XDMAC_CC_TYPE_PER_TRAN; 351 } 352 353 static inline u8 at_xdmac_get_dwidth(u32 cfg) 354 { 355 return (cfg & AT_XDMAC_CC_DWIDTH_MASK) >> AT_XDMAC_CC_DWIDTH_OFFSET; 356 }; 357 358 static unsigned int init_nr_desc_per_channel = 64; 359 module_param(init_nr_desc_per_channel, uint, 0644); 360 MODULE_PARM_DESC(init_nr_desc_per_channel, 361 "initial descriptors per channel (default: 64)"); 362 363 364 static bool at_xdmac_chan_is_enabled(struct at_xdmac_chan *atchan) 365 { 366 return at_xdmac_chan_read(atchan, AT_XDMAC_GS) & atchan->mask; 367 } 368 369 static void at_xdmac_off(struct at_xdmac *atxdmac) 370 { 371 at_xdmac_write(atxdmac, AT_XDMAC_GD, -1L); 372 373 /* Wait that all chans are disabled. */ 374 while (at_xdmac_read(atxdmac, AT_XDMAC_GS)) 375 cpu_relax(); 376 377 at_xdmac_write(atxdmac, AT_XDMAC_GID, -1L); 378 } 379 380 /* Call with lock hold. */ 381 static void at_xdmac_start_xfer(struct at_xdmac_chan *atchan, 382 struct at_xdmac_desc *first) 383 { 384 struct at_xdmac *atxdmac = to_at_xdmac(atchan->chan.device); 385 u32 reg; 386 387 dev_vdbg(chan2dev(&atchan->chan), "%s: desc 0x%p\n", __func__, first); 388 389 /* Set transfer as active to not try to start it again. */ 390 first->active_xfer = true; 391 392 /* Tell xdmac where to get the first descriptor. */ 393 reg = AT_XDMAC_CNDA_NDA(first->tx_dma_desc.phys); 394 if (atxdmac->layout->sdif) 395 reg |= AT_XDMAC_CNDA_NDAIF(atchan->memif); 396 397 at_xdmac_chan_write(atchan, AT_XDMAC_CNDA, reg); 398 399 /* 400 * When doing non cyclic transfer we need to use the next 401 * descriptor view 2 since some fields of the configuration register 402 * depend on transfer size and src/dest addresses. 403 */ 404 if (at_xdmac_chan_is_cyclic(atchan)) 405 reg = AT_XDMAC_CNDC_NDVIEW_NDV1; 406 else if ((first->lld.mbr_ubc & 407 AT_XDMAC_CNDC_NDVIEW_MASK) == AT_XDMAC_MBR_UBC_NDV3) 408 reg = AT_XDMAC_CNDC_NDVIEW_NDV3; 409 else 410 reg = AT_XDMAC_CNDC_NDVIEW_NDV2; 411 /* 412 * Even if the register will be updated from the configuration in the 413 * descriptor when using view 2 or higher, the PROT bit won't be set 414 * properly. This bit can be modified only by using the channel 415 * configuration register. 416 */ 417 at_xdmac_chan_write(atchan, AT_XDMAC_CC, first->lld.mbr_cfg); 418 419 reg |= AT_XDMAC_CNDC_NDDUP 420 | AT_XDMAC_CNDC_NDSUP 421 | AT_XDMAC_CNDC_NDE; 422 at_xdmac_chan_write(atchan, AT_XDMAC_CNDC, reg); 423 424 dev_vdbg(chan2dev(&atchan->chan), 425 "%s: CC=0x%08x CNDA=0x%08x, CNDC=0x%08x, CSA=0x%08x, CDA=0x%08x, CUBC=0x%08x\n", 426 __func__, at_xdmac_chan_read(atchan, AT_XDMAC_CC), 427 at_xdmac_chan_read(atchan, AT_XDMAC_CNDA), 428 at_xdmac_chan_read(atchan, AT_XDMAC_CNDC), 429 at_xdmac_chan_read(atchan, AT_XDMAC_CSA), 430 at_xdmac_chan_read(atchan, AT_XDMAC_CDA), 431 at_xdmac_chan_read(atchan, AT_XDMAC_CUBC)); 432 433 at_xdmac_chan_write(atchan, AT_XDMAC_CID, 0xffffffff); 434 reg = AT_XDMAC_CIE_RBEIE | AT_XDMAC_CIE_WBEIE; 435 /* 436 * Request Overflow Error is only for peripheral synchronized transfers 437 */ 438 if (at_xdmac_chan_is_peripheral_xfer(first->lld.mbr_cfg)) 439 reg |= AT_XDMAC_CIE_ROIE; 440 441 /* 442 * There is no end of list when doing cyclic dma, we need to get 443 * an interrupt after each periods. 444 */ 445 if (at_xdmac_chan_is_cyclic(atchan)) 446 at_xdmac_chan_write(atchan, AT_XDMAC_CIE, 447 reg | AT_XDMAC_CIE_BIE); 448 else 449 at_xdmac_chan_write(atchan, AT_XDMAC_CIE, 450 reg | AT_XDMAC_CIE_LIE); 451 at_xdmac_write(atxdmac, AT_XDMAC_GIE, atchan->mask); 452 dev_vdbg(chan2dev(&atchan->chan), 453 "%s: enable channel (0x%08x)\n", __func__, atchan->mask); 454 wmb(); 455 at_xdmac_write(atxdmac, AT_XDMAC_GE, atchan->mask); 456 457 dev_vdbg(chan2dev(&atchan->chan), 458 "%s: CC=0x%08x CNDA=0x%08x, CNDC=0x%08x, CSA=0x%08x, CDA=0x%08x, CUBC=0x%08x\n", 459 __func__, at_xdmac_chan_read(atchan, AT_XDMAC_CC), 460 at_xdmac_chan_read(atchan, AT_XDMAC_CNDA), 461 at_xdmac_chan_read(atchan, AT_XDMAC_CNDC), 462 at_xdmac_chan_read(atchan, AT_XDMAC_CSA), 463 at_xdmac_chan_read(atchan, AT_XDMAC_CDA), 464 at_xdmac_chan_read(atchan, AT_XDMAC_CUBC)); 465 466 } 467 468 static dma_cookie_t at_xdmac_tx_submit(struct dma_async_tx_descriptor *tx) 469 { 470 struct at_xdmac_desc *desc = txd_to_at_desc(tx); 471 struct at_xdmac_chan *atchan = to_at_xdmac_chan(tx->chan); 472 dma_cookie_t cookie; 473 unsigned long irqflags; 474 475 spin_lock_irqsave(&atchan->lock, irqflags); 476 cookie = dma_cookie_assign(tx); 477 478 list_add_tail(&desc->xfer_node, &atchan->xfers_list); 479 spin_unlock_irqrestore(&atchan->lock, irqflags); 480 481 dev_vdbg(chan2dev(tx->chan), "%s: atchan 0x%p, add desc 0x%p to xfers_list\n", 482 __func__, atchan, desc); 483 484 return cookie; 485 } 486 487 static struct at_xdmac_desc *at_xdmac_alloc_desc(struct dma_chan *chan, 488 gfp_t gfp_flags) 489 { 490 struct at_xdmac_desc *desc; 491 struct at_xdmac *atxdmac = to_at_xdmac(chan->device); 492 dma_addr_t phys; 493 494 desc = dma_pool_zalloc(atxdmac->at_xdmac_desc_pool, gfp_flags, &phys); 495 if (desc) { 496 INIT_LIST_HEAD(&desc->descs_list); 497 dma_async_tx_descriptor_init(&desc->tx_dma_desc, chan); 498 desc->tx_dma_desc.tx_submit = at_xdmac_tx_submit; 499 desc->tx_dma_desc.phys = phys; 500 } 501 502 return desc; 503 } 504 505 static void at_xdmac_init_used_desc(struct at_xdmac_desc *desc) 506 { 507 memset(&desc->lld, 0, sizeof(desc->lld)); 508 INIT_LIST_HEAD(&desc->descs_list); 509 desc->direction = DMA_TRANS_NONE; 510 desc->xfer_size = 0; 511 desc->active_xfer = false; 512 } 513 514 /* Call must be protected by lock. */ 515 static struct at_xdmac_desc *at_xdmac_get_desc(struct at_xdmac_chan *atchan) 516 { 517 struct at_xdmac_desc *desc; 518 519 if (list_empty(&atchan->free_descs_list)) { 520 desc = at_xdmac_alloc_desc(&atchan->chan, GFP_NOWAIT); 521 } else { 522 desc = list_first_entry(&atchan->free_descs_list, 523 struct at_xdmac_desc, desc_node); 524 list_del(&desc->desc_node); 525 at_xdmac_init_used_desc(desc); 526 } 527 528 return desc; 529 } 530 531 static void at_xdmac_queue_desc(struct dma_chan *chan, 532 struct at_xdmac_desc *prev, 533 struct at_xdmac_desc *desc) 534 { 535 if (!prev || !desc) 536 return; 537 538 prev->lld.mbr_nda = desc->tx_dma_desc.phys; 539 prev->lld.mbr_ubc |= AT_XDMAC_MBR_UBC_NDE; 540 541 dev_dbg(chan2dev(chan), "%s: chain lld: prev=0x%p, mbr_nda=%pad\n", 542 __func__, prev, &prev->lld.mbr_nda); 543 } 544 545 static inline void at_xdmac_increment_block_count(struct dma_chan *chan, 546 struct at_xdmac_desc *desc) 547 { 548 if (!desc) 549 return; 550 551 desc->lld.mbr_bc++; 552 553 dev_dbg(chan2dev(chan), 554 "%s: incrementing the block count of the desc 0x%p\n", 555 __func__, desc); 556 } 557 558 static struct dma_chan *at_xdmac_xlate(struct of_phandle_args *dma_spec, 559 struct of_dma *of_dma) 560 { 561 struct at_xdmac *atxdmac = of_dma->of_dma_data; 562 struct at_xdmac_chan *atchan; 563 struct dma_chan *chan; 564 struct device *dev = atxdmac->dma.dev; 565 566 if (dma_spec->args_count != 1) { 567 dev_err(dev, "dma phandler args: bad number of args\n"); 568 return NULL; 569 } 570 571 chan = dma_get_any_slave_channel(&atxdmac->dma); 572 if (!chan) { 573 dev_err(dev, "can't get a dma channel\n"); 574 return NULL; 575 } 576 577 atchan = to_at_xdmac_chan(chan); 578 atchan->memif = AT91_XDMAC_DT_GET_MEM_IF(dma_spec->args[0]); 579 atchan->perif = AT91_XDMAC_DT_GET_PER_IF(dma_spec->args[0]); 580 atchan->perid = AT91_XDMAC_DT_GET_PERID(dma_spec->args[0]); 581 dev_dbg(dev, "chan dt cfg: memif=%u perif=%u perid=%u\n", 582 atchan->memif, atchan->perif, atchan->perid); 583 584 return chan; 585 } 586 587 static int at_xdmac_compute_chan_conf(struct dma_chan *chan, 588 enum dma_transfer_direction direction) 589 { 590 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 591 struct at_xdmac *atxdmac = to_at_xdmac(atchan->chan.device); 592 int csize, dwidth; 593 594 if (direction == DMA_DEV_TO_MEM) { 595 atchan->cfg = 596 AT91_XDMAC_DT_PERID(atchan->perid) 597 | AT_XDMAC_CC_DAM_INCREMENTED_AM 598 | AT_XDMAC_CC_SAM_FIXED_AM 599 | AT_XDMAC_CC_SWREQ_HWR_CONNECTED 600 | AT_XDMAC_CC_DSYNC_PER2MEM 601 | AT_XDMAC_CC_MBSIZE_SIXTEEN 602 | AT_XDMAC_CC_TYPE_PER_TRAN; 603 if (atxdmac->layout->sdif) 604 atchan->cfg |= AT_XDMAC_CC_DIF(atchan->memif) | 605 AT_XDMAC_CC_SIF(atchan->perif); 606 607 csize = ffs(atchan->sconfig.src_maxburst) - 1; 608 if (csize < 0) { 609 dev_err(chan2dev(chan), "invalid src maxburst value\n"); 610 return -EINVAL; 611 } 612 atchan->cfg |= AT_XDMAC_CC_CSIZE(csize); 613 dwidth = ffs(atchan->sconfig.src_addr_width) - 1; 614 if (dwidth < 0) { 615 dev_err(chan2dev(chan), "invalid src addr width value\n"); 616 return -EINVAL; 617 } 618 atchan->cfg |= AT_XDMAC_CC_DWIDTH(dwidth); 619 } else if (direction == DMA_MEM_TO_DEV) { 620 atchan->cfg = 621 AT91_XDMAC_DT_PERID(atchan->perid) 622 | AT_XDMAC_CC_DAM_FIXED_AM 623 | AT_XDMAC_CC_SAM_INCREMENTED_AM 624 | AT_XDMAC_CC_SWREQ_HWR_CONNECTED 625 | AT_XDMAC_CC_DSYNC_MEM2PER 626 | AT_XDMAC_CC_MBSIZE_SIXTEEN 627 | AT_XDMAC_CC_TYPE_PER_TRAN; 628 if (atxdmac->layout->sdif) 629 atchan->cfg |= AT_XDMAC_CC_DIF(atchan->perif) | 630 AT_XDMAC_CC_SIF(atchan->memif); 631 632 csize = ffs(atchan->sconfig.dst_maxburst) - 1; 633 if (csize < 0) { 634 dev_err(chan2dev(chan), "invalid src maxburst value\n"); 635 return -EINVAL; 636 } 637 atchan->cfg |= AT_XDMAC_CC_CSIZE(csize); 638 dwidth = ffs(atchan->sconfig.dst_addr_width) - 1; 639 if (dwidth < 0) { 640 dev_err(chan2dev(chan), "invalid dst addr width value\n"); 641 return -EINVAL; 642 } 643 atchan->cfg |= AT_XDMAC_CC_DWIDTH(dwidth); 644 } 645 646 dev_dbg(chan2dev(chan), "%s: cfg=0x%08x\n", __func__, atchan->cfg); 647 648 return 0; 649 } 650 651 /* 652 * Only check that maxburst and addr width values are supported by the 653 * the controller but not that the configuration is good to perform the 654 * transfer since we don't know the direction at this stage. 655 */ 656 static int at_xdmac_check_slave_config(struct dma_slave_config *sconfig) 657 { 658 if ((sconfig->src_maxburst > AT_XDMAC_MAX_CSIZE) 659 || (sconfig->dst_maxburst > AT_XDMAC_MAX_CSIZE)) 660 return -EINVAL; 661 662 if ((sconfig->src_addr_width > AT_XDMAC_MAX_DWIDTH) 663 || (sconfig->dst_addr_width > AT_XDMAC_MAX_DWIDTH)) 664 return -EINVAL; 665 666 return 0; 667 } 668 669 static int at_xdmac_set_slave_config(struct dma_chan *chan, 670 struct dma_slave_config *sconfig) 671 { 672 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 673 674 if (at_xdmac_check_slave_config(sconfig)) { 675 dev_err(chan2dev(chan), "invalid slave configuration\n"); 676 return -EINVAL; 677 } 678 679 memcpy(&atchan->sconfig, sconfig, sizeof(atchan->sconfig)); 680 681 return 0; 682 } 683 684 static struct dma_async_tx_descriptor * 685 at_xdmac_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl, 686 unsigned int sg_len, enum dma_transfer_direction direction, 687 unsigned long flags, void *context) 688 { 689 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 690 struct at_xdmac_desc *first = NULL, *prev = NULL; 691 struct scatterlist *sg; 692 int i; 693 unsigned int xfer_size = 0; 694 unsigned long irqflags; 695 struct dma_async_tx_descriptor *ret = NULL; 696 697 if (!sgl) 698 return NULL; 699 700 if (!is_slave_direction(direction)) { 701 dev_err(chan2dev(chan), "invalid DMA direction\n"); 702 return NULL; 703 } 704 705 dev_dbg(chan2dev(chan), "%s: sg_len=%d, dir=%s, flags=0x%lx\n", 706 __func__, sg_len, 707 direction == DMA_MEM_TO_DEV ? "to device" : "from device", 708 flags); 709 710 /* Protect dma_sconfig field that can be modified by set_slave_conf. */ 711 spin_lock_irqsave(&atchan->lock, irqflags); 712 713 if (at_xdmac_compute_chan_conf(chan, direction)) 714 goto spin_unlock; 715 716 /* Prepare descriptors. */ 717 for_each_sg(sgl, sg, sg_len, i) { 718 struct at_xdmac_desc *desc = NULL; 719 u32 len, mem, dwidth, fixed_dwidth; 720 721 len = sg_dma_len(sg); 722 mem = sg_dma_address(sg); 723 if (unlikely(!len)) { 724 dev_err(chan2dev(chan), "sg data length is zero\n"); 725 goto spin_unlock; 726 } 727 dev_dbg(chan2dev(chan), "%s: * sg%d len=%u, mem=0x%08x\n", 728 __func__, i, len, mem); 729 730 desc = at_xdmac_get_desc(atchan); 731 if (!desc) { 732 dev_err(chan2dev(chan), "can't get descriptor\n"); 733 if (first) 734 list_splice_tail_init(&first->descs_list, 735 &atchan->free_descs_list); 736 goto spin_unlock; 737 } 738 739 /* Linked list descriptor setup. */ 740 if (direction == DMA_DEV_TO_MEM) { 741 desc->lld.mbr_sa = atchan->sconfig.src_addr; 742 desc->lld.mbr_da = mem; 743 } else { 744 desc->lld.mbr_sa = mem; 745 desc->lld.mbr_da = atchan->sconfig.dst_addr; 746 } 747 dwidth = at_xdmac_get_dwidth(atchan->cfg); 748 fixed_dwidth = IS_ALIGNED(len, 1 << dwidth) 749 ? dwidth 750 : AT_XDMAC_CC_DWIDTH_BYTE; 751 desc->lld.mbr_ubc = AT_XDMAC_MBR_UBC_NDV2 /* next descriptor view */ 752 | AT_XDMAC_MBR_UBC_NDEN /* next descriptor dst parameter update */ 753 | AT_XDMAC_MBR_UBC_NSEN /* next descriptor src parameter update */ 754 | (len >> fixed_dwidth); /* microblock length */ 755 desc->lld.mbr_cfg = (atchan->cfg & ~AT_XDMAC_CC_DWIDTH_MASK) | 756 AT_XDMAC_CC_DWIDTH(fixed_dwidth); 757 dev_dbg(chan2dev(chan), 758 "%s: lld: mbr_sa=%pad, mbr_da=%pad, mbr_ubc=0x%08x\n", 759 __func__, &desc->lld.mbr_sa, &desc->lld.mbr_da, desc->lld.mbr_ubc); 760 761 /* Chain lld. */ 762 if (prev) 763 at_xdmac_queue_desc(chan, prev, desc); 764 765 prev = desc; 766 if (!first) 767 first = desc; 768 769 dev_dbg(chan2dev(chan), "%s: add desc 0x%p to descs_list 0x%p\n", 770 __func__, desc, first); 771 list_add_tail(&desc->desc_node, &first->descs_list); 772 xfer_size += len; 773 } 774 775 776 first->tx_dma_desc.flags = flags; 777 first->xfer_size = xfer_size; 778 first->direction = direction; 779 ret = &first->tx_dma_desc; 780 781 spin_unlock: 782 spin_unlock_irqrestore(&atchan->lock, irqflags); 783 return ret; 784 } 785 786 static struct dma_async_tx_descriptor * 787 at_xdmac_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf_addr, 788 size_t buf_len, size_t period_len, 789 enum dma_transfer_direction direction, 790 unsigned long flags) 791 { 792 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 793 struct at_xdmac_desc *first = NULL, *prev = NULL; 794 unsigned int periods = buf_len / period_len; 795 int i; 796 unsigned long irqflags; 797 798 dev_dbg(chan2dev(chan), "%s: buf_addr=%pad, buf_len=%zd, period_len=%zd, dir=%s, flags=0x%lx\n", 799 __func__, &buf_addr, buf_len, period_len, 800 direction == DMA_MEM_TO_DEV ? "mem2per" : "per2mem", flags); 801 802 if (!is_slave_direction(direction)) { 803 dev_err(chan2dev(chan), "invalid DMA direction\n"); 804 return NULL; 805 } 806 807 if (test_and_set_bit(AT_XDMAC_CHAN_IS_CYCLIC, &atchan->status)) { 808 dev_err(chan2dev(chan), "channel currently used\n"); 809 return NULL; 810 } 811 812 if (at_xdmac_compute_chan_conf(chan, direction)) 813 return NULL; 814 815 for (i = 0; i < periods; i++) { 816 struct at_xdmac_desc *desc = NULL; 817 818 spin_lock_irqsave(&atchan->lock, irqflags); 819 desc = at_xdmac_get_desc(atchan); 820 if (!desc) { 821 dev_err(chan2dev(chan), "can't get descriptor\n"); 822 if (first) 823 list_splice_tail_init(&first->descs_list, 824 &atchan->free_descs_list); 825 spin_unlock_irqrestore(&atchan->lock, irqflags); 826 return NULL; 827 } 828 spin_unlock_irqrestore(&atchan->lock, irqflags); 829 dev_dbg(chan2dev(chan), 830 "%s: desc=0x%p, tx_dma_desc.phys=%pad\n", 831 __func__, desc, &desc->tx_dma_desc.phys); 832 833 if (direction == DMA_DEV_TO_MEM) { 834 desc->lld.mbr_sa = atchan->sconfig.src_addr; 835 desc->lld.mbr_da = buf_addr + i * period_len; 836 } else { 837 desc->lld.mbr_sa = buf_addr + i * period_len; 838 desc->lld.mbr_da = atchan->sconfig.dst_addr; 839 } 840 desc->lld.mbr_cfg = atchan->cfg; 841 desc->lld.mbr_ubc = AT_XDMAC_MBR_UBC_NDV1 842 | AT_XDMAC_MBR_UBC_NDEN 843 | AT_XDMAC_MBR_UBC_NSEN 844 | period_len >> at_xdmac_get_dwidth(desc->lld.mbr_cfg); 845 846 dev_dbg(chan2dev(chan), 847 "%s: lld: mbr_sa=%pad, mbr_da=%pad, mbr_ubc=0x%08x\n", 848 __func__, &desc->lld.mbr_sa, &desc->lld.mbr_da, desc->lld.mbr_ubc); 849 850 /* Chain lld. */ 851 if (prev) 852 at_xdmac_queue_desc(chan, prev, desc); 853 854 prev = desc; 855 if (!first) 856 first = desc; 857 858 dev_dbg(chan2dev(chan), "%s: add desc 0x%p to descs_list 0x%p\n", 859 __func__, desc, first); 860 list_add_tail(&desc->desc_node, &first->descs_list); 861 } 862 863 at_xdmac_queue_desc(chan, prev, first); 864 first->tx_dma_desc.flags = flags; 865 first->xfer_size = buf_len; 866 first->direction = direction; 867 868 return &first->tx_dma_desc; 869 } 870 871 static inline u32 at_xdmac_align_width(struct dma_chan *chan, dma_addr_t addr) 872 { 873 u32 width; 874 875 /* 876 * Check address alignment to select the greater data width we 877 * can use. 878 * 879 * Some XDMAC implementations don't provide dword transfer, in 880 * this case selecting dword has the same behavior as 881 * selecting word transfers. 882 */ 883 if (!(addr & 7)) { 884 width = AT_XDMAC_CC_DWIDTH_DWORD; 885 dev_dbg(chan2dev(chan), "%s: dwidth: double word\n", __func__); 886 } else if (!(addr & 3)) { 887 width = AT_XDMAC_CC_DWIDTH_WORD; 888 dev_dbg(chan2dev(chan), "%s: dwidth: word\n", __func__); 889 } else if (!(addr & 1)) { 890 width = AT_XDMAC_CC_DWIDTH_HALFWORD; 891 dev_dbg(chan2dev(chan), "%s: dwidth: half word\n", __func__); 892 } else { 893 width = AT_XDMAC_CC_DWIDTH_BYTE; 894 dev_dbg(chan2dev(chan), "%s: dwidth: byte\n", __func__); 895 } 896 897 return width; 898 } 899 900 static struct at_xdmac_desc * 901 at_xdmac_interleaved_queue_desc(struct dma_chan *chan, 902 struct at_xdmac_chan *atchan, 903 struct at_xdmac_desc *prev, 904 dma_addr_t src, dma_addr_t dst, 905 struct dma_interleaved_template *xt, 906 struct data_chunk *chunk) 907 { 908 struct at_xdmac_desc *desc; 909 u32 dwidth; 910 unsigned long flags; 911 size_t ublen; 912 /* 913 * WARNING: The channel configuration is set here since there is no 914 * dmaengine_slave_config call in this case. Moreover we don't know the 915 * direction, it involves we can't dynamically set the source and dest 916 * interface so we have to use the same one. Only interface 0 allows EBI 917 * access. Hopefully we can access DDR through both ports (at least on 918 * SAMA5D4x), so we can use the same interface for source and dest, 919 * that solves the fact we don't know the direction. 920 * ERRATA: Even if useless for memory transfers, the PERID has to not 921 * match the one of another channel. If not, it could lead to spurious 922 * flag status. 923 * For SAMA7G5x case, the SIF and DIF fields are no longer used. 924 * Thus, no need to have the SIF/DIF interfaces here. 925 * For SAMA5D4x and SAMA5D2x the SIF and DIF are already configured as 926 * zero. 927 */ 928 u32 chan_cc = AT_XDMAC_CC_PERID(0x7f) 929 | AT_XDMAC_CC_MBSIZE_SIXTEEN 930 | AT_XDMAC_CC_TYPE_MEM_TRAN; 931 932 dwidth = at_xdmac_align_width(chan, src | dst | chunk->size); 933 if (chunk->size >= (AT_XDMAC_MBR_UBC_UBLEN_MAX << dwidth)) { 934 dev_dbg(chan2dev(chan), 935 "%s: chunk too big (%zu, max size %lu)...\n", 936 __func__, chunk->size, 937 AT_XDMAC_MBR_UBC_UBLEN_MAX << dwidth); 938 return NULL; 939 } 940 941 if (prev) 942 dev_dbg(chan2dev(chan), 943 "Adding items at the end of desc 0x%p\n", prev); 944 945 if (xt->src_inc) { 946 if (xt->src_sgl) 947 chan_cc |= AT_XDMAC_CC_SAM_UBS_AM; 948 else 949 chan_cc |= AT_XDMAC_CC_SAM_INCREMENTED_AM; 950 } 951 952 if (xt->dst_inc) { 953 if (xt->dst_sgl) 954 chan_cc |= AT_XDMAC_CC_DAM_UBS_AM; 955 else 956 chan_cc |= AT_XDMAC_CC_DAM_INCREMENTED_AM; 957 } 958 959 spin_lock_irqsave(&atchan->lock, flags); 960 desc = at_xdmac_get_desc(atchan); 961 spin_unlock_irqrestore(&atchan->lock, flags); 962 if (!desc) { 963 dev_err(chan2dev(chan), "can't get descriptor\n"); 964 return NULL; 965 } 966 967 chan_cc |= AT_XDMAC_CC_DWIDTH(dwidth); 968 969 ublen = chunk->size >> dwidth; 970 971 desc->lld.mbr_sa = src; 972 desc->lld.mbr_da = dst; 973 desc->lld.mbr_sus = dmaengine_get_src_icg(xt, chunk); 974 desc->lld.mbr_dus = dmaengine_get_dst_icg(xt, chunk); 975 976 desc->lld.mbr_ubc = AT_XDMAC_MBR_UBC_NDV3 977 | AT_XDMAC_MBR_UBC_NDEN 978 | AT_XDMAC_MBR_UBC_NSEN 979 | ublen; 980 desc->lld.mbr_cfg = chan_cc; 981 982 dev_dbg(chan2dev(chan), 983 "%s: lld: mbr_sa=%pad, mbr_da=%pad, mbr_ubc=0x%08x, mbr_cfg=0x%08x\n", 984 __func__, &desc->lld.mbr_sa, &desc->lld.mbr_da, 985 desc->lld.mbr_ubc, desc->lld.mbr_cfg); 986 987 /* Chain lld. */ 988 if (prev) 989 at_xdmac_queue_desc(chan, prev, desc); 990 991 return desc; 992 } 993 994 static struct dma_async_tx_descriptor * 995 at_xdmac_prep_interleaved(struct dma_chan *chan, 996 struct dma_interleaved_template *xt, 997 unsigned long flags) 998 { 999 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 1000 struct at_xdmac_desc *prev = NULL, *first = NULL; 1001 dma_addr_t dst_addr, src_addr; 1002 size_t src_skip = 0, dst_skip = 0, len = 0; 1003 struct data_chunk *chunk; 1004 int i; 1005 1006 if (!xt || !xt->numf || (xt->dir != DMA_MEM_TO_MEM)) 1007 return NULL; 1008 1009 /* 1010 * TODO: Handle the case where we have to repeat a chain of 1011 * descriptors... 1012 */ 1013 if ((xt->numf > 1) && (xt->frame_size > 1)) 1014 return NULL; 1015 1016 dev_dbg(chan2dev(chan), "%s: src=%pad, dest=%pad, numf=%zu, frame_size=%zu, flags=0x%lx\n", 1017 __func__, &xt->src_start, &xt->dst_start, xt->numf, 1018 xt->frame_size, flags); 1019 1020 src_addr = xt->src_start; 1021 dst_addr = xt->dst_start; 1022 1023 if (xt->numf > 1) { 1024 first = at_xdmac_interleaved_queue_desc(chan, atchan, 1025 NULL, 1026 src_addr, dst_addr, 1027 xt, xt->sgl); 1028 1029 /* Length of the block is (BLEN+1) microblocks. */ 1030 for (i = 0; i < xt->numf - 1; i++) 1031 at_xdmac_increment_block_count(chan, first); 1032 1033 dev_dbg(chan2dev(chan), "%s: add desc 0x%p to descs_list 0x%p\n", 1034 __func__, first, first); 1035 list_add_tail(&first->desc_node, &first->descs_list); 1036 } else { 1037 for (i = 0; i < xt->frame_size; i++) { 1038 size_t src_icg = 0, dst_icg = 0; 1039 struct at_xdmac_desc *desc; 1040 1041 chunk = xt->sgl + i; 1042 1043 dst_icg = dmaengine_get_dst_icg(xt, chunk); 1044 src_icg = dmaengine_get_src_icg(xt, chunk); 1045 1046 src_skip = chunk->size + src_icg; 1047 dst_skip = chunk->size + dst_icg; 1048 1049 dev_dbg(chan2dev(chan), 1050 "%s: chunk size=%zu, src icg=%zu, dst icg=%zu\n", 1051 __func__, chunk->size, src_icg, dst_icg); 1052 1053 desc = at_xdmac_interleaved_queue_desc(chan, atchan, 1054 prev, 1055 src_addr, dst_addr, 1056 xt, chunk); 1057 if (!desc) { 1058 list_splice_tail_init(&first->descs_list, 1059 &atchan->free_descs_list); 1060 return NULL; 1061 } 1062 1063 if (!first) 1064 first = desc; 1065 1066 dev_dbg(chan2dev(chan), "%s: add desc 0x%p to descs_list 0x%p\n", 1067 __func__, desc, first); 1068 list_add_tail(&desc->desc_node, &first->descs_list); 1069 1070 if (xt->src_sgl) 1071 src_addr += src_skip; 1072 1073 if (xt->dst_sgl) 1074 dst_addr += dst_skip; 1075 1076 len += chunk->size; 1077 prev = desc; 1078 } 1079 } 1080 1081 first->tx_dma_desc.cookie = -EBUSY; 1082 first->tx_dma_desc.flags = flags; 1083 first->xfer_size = len; 1084 1085 return &first->tx_dma_desc; 1086 } 1087 1088 static struct dma_async_tx_descriptor * 1089 at_xdmac_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src, 1090 size_t len, unsigned long flags) 1091 { 1092 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 1093 struct at_xdmac_desc *first = NULL, *prev = NULL; 1094 size_t remaining_size = len, xfer_size = 0, ublen; 1095 dma_addr_t src_addr = src, dst_addr = dest; 1096 u32 dwidth; 1097 /* 1098 * WARNING: We don't know the direction, it involves we can't 1099 * dynamically set the source and dest interface so we have to use the 1100 * same one. Only interface 0 allows EBI access. Hopefully we can 1101 * access DDR through both ports (at least on SAMA5D4x), so we can use 1102 * the same interface for source and dest, that solves the fact we 1103 * don't know the direction. 1104 * ERRATA: Even if useless for memory transfers, the PERID has to not 1105 * match the one of another channel. If not, it could lead to spurious 1106 * flag status. 1107 * For SAMA7G5x case, the SIF and DIF fields are no longer used. 1108 * Thus, no need to have the SIF/DIF interfaces here. 1109 * For SAMA5D4x and SAMA5D2x the SIF and DIF are already configured as 1110 * zero. 1111 */ 1112 u32 chan_cc = AT_XDMAC_CC_PERID(0x7f) 1113 | AT_XDMAC_CC_DAM_INCREMENTED_AM 1114 | AT_XDMAC_CC_SAM_INCREMENTED_AM 1115 | AT_XDMAC_CC_MBSIZE_SIXTEEN 1116 | AT_XDMAC_CC_TYPE_MEM_TRAN; 1117 unsigned long irqflags; 1118 1119 dev_dbg(chan2dev(chan), "%s: src=%pad, dest=%pad, len=%zd, flags=0x%lx\n", 1120 __func__, &src, &dest, len, flags); 1121 1122 if (unlikely(!len)) 1123 return NULL; 1124 1125 dwidth = at_xdmac_align_width(chan, src_addr | dst_addr); 1126 1127 /* Prepare descriptors. */ 1128 while (remaining_size) { 1129 struct at_xdmac_desc *desc = NULL; 1130 1131 dev_dbg(chan2dev(chan), "%s: remaining_size=%zu\n", __func__, remaining_size); 1132 1133 spin_lock_irqsave(&atchan->lock, irqflags); 1134 desc = at_xdmac_get_desc(atchan); 1135 spin_unlock_irqrestore(&atchan->lock, irqflags); 1136 if (!desc) { 1137 dev_err(chan2dev(chan), "can't get descriptor\n"); 1138 if (first) 1139 list_splice_tail_init(&first->descs_list, 1140 &atchan->free_descs_list); 1141 return NULL; 1142 } 1143 1144 /* Update src and dest addresses. */ 1145 src_addr += xfer_size; 1146 dst_addr += xfer_size; 1147 1148 if (remaining_size >= AT_XDMAC_MBR_UBC_UBLEN_MAX << dwidth) 1149 xfer_size = AT_XDMAC_MBR_UBC_UBLEN_MAX << dwidth; 1150 else 1151 xfer_size = remaining_size; 1152 1153 dev_dbg(chan2dev(chan), "%s: xfer_size=%zu\n", __func__, xfer_size); 1154 1155 /* Check remaining length and change data width if needed. */ 1156 dwidth = at_xdmac_align_width(chan, 1157 src_addr | dst_addr | xfer_size); 1158 chan_cc &= ~AT_XDMAC_CC_DWIDTH_MASK; 1159 chan_cc |= AT_XDMAC_CC_DWIDTH(dwidth); 1160 1161 ublen = xfer_size >> dwidth; 1162 remaining_size -= xfer_size; 1163 1164 desc->lld.mbr_sa = src_addr; 1165 desc->lld.mbr_da = dst_addr; 1166 desc->lld.mbr_ubc = AT_XDMAC_MBR_UBC_NDV2 1167 | AT_XDMAC_MBR_UBC_NDEN 1168 | AT_XDMAC_MBR_UBC_NSEN 1169 | ublen; 1170 desc->lld.mbr_cfg = chan_cc; 1171 1172 dev_dbg(chan2dev(chan), 1173 "%s: lld: mbr_sa=%pad, mbr_da=%pad, mbr_ubc=0x%08x, mbr_cfg=0x%08x\n", 1174 __func__, &desc->lld.mbr_sa, &desc->lld.mbr_da, desc->lld.mbr_ubc, desc->lld.mbr_cfg); 1175 1176 /* Chain lld. */ 1177 if (prev) 1178 at_xdmac_queue_desc(chan, prev, desc); 1179 1180 prev = desc; 1181 if (!first) 1182 first = desc; 1183 1184 dev_dbg(chan2dev(chan), "%s: add desc 0x%p to descs_list 0x%p\n", 1185 __func__, desc, first); 1186 list_add_tail(&desc->desc_node, &first->descs_list); 1187 } 1188 1189 first->tx_dma_desc.flags = flags; 1190 first->xfer_size = len; 1191 1192 return &first->tx_dma_desc; 1193 } 1194 1195 static struct at_xdmac_desc *at_xdmac_memset_create_desc(struct dma_chan *chan, 1196 struct at_xdmac_chan *atchan, 1197 dma_addr_t dst_addr, 1198 size_t len, 1199 int value) 1200 { 1201 struct at_xdmac_desc *desc; 1202 unsigned long flags; 1203 size_t ublen; 1204 u32 dwidth; 1205 /* 1206 * WARNING: The channel configuration is set here since there is no 1207 * dmaengine_slave_config call in this case. Moreover we don't know the 1208 * direction, it involves we can't dynamically set the source and dest 1209 * interface so we have to use the same one. Only interface 0 allows EBI 1210 * access. Hopefully we can access DDR through both ports (at least on 1211 * SAMA5D4x), so we can use the same interface for source and dest, 1212 * that solves the fact we don't know the direction. 1213 * ERRATA: Even if useless for memory transfers, the PERID has to not 1214 * match the one of another channel. If not, it could lead to spurious 1215 * flag status. 1216 * For SAMA7G5x case, the SIF and DIF fields are no longer used. 1217 * Thus, no need to have the SIF/DIF interfaces here. 1218 * For SAMA5D4x and SAMA5D2x the SIF and DIF are already configured as 1219 * zero. 1220 */ 1221 u32 chan_cc = AT_XDMAC_CC_PERID(0x7f) 1222 | AT_XDMAC_CC_DAM_UBS_AM 1223 | AT_XDMAC_CC_SAM_INCREMENTED_AM 1224 | AT_XDMAC_CC_MBSIZE_SIXTEEN 1225 | AT_XDMAC_CC_MEMSET_HW_MODE 1226 | AT_XDMAC_CC_TYPE_MEM_TRAN; 1227 1228 dwidth = at_xdmac_align_width(chan, dst_addr); 1229 1230 if (len >= (AT_XDMAC_MBR_UBC_UBLEN_MAX << dwidth)) { 1231 dev_err(chan2dev(chan), 1232 "%s: Transfer too large, aborting...\n", 1233 __func__); 1234 return NULL; 1235 } 1236 1237 spin_lock_irqsave(&atchan->lock, flags); 1238 desc = at_xdmac_get_desc(atchan); 1239 spin_unlock_irqrestore(&atchan->lock, flags); 1240 if (!desc) { 1241 dev_err(chan2dev(chan), "can't get descriptor\n"); 1242 return NULL; 1243 } 1244 1245 chan_cc |= AT_XDMAC_CC_DWIDTH(dwidth); 1246 1247 ublen = len >> dwidth; 1248 1249 desc->lld.mbr_da = dst_addr; 1250 desc->lld.mbr_ds = value; 1251 desc->lld.mbr_ubc = AT_XDMAC_MBR_UBC_NDV3 1252 | AT_XDMAC_MBR_UBC_NDEN 1253 | AT_XDMAC_MBR_UBC_NSEN 1254 | ublen; 1255 desc->lld.mbr_cfg = chan_cc; 1256 1257 dev_dbg(chan2dev(chan), 1258 "%s: lld: mbr_da=%pad, mbr_ds=0x%08x, mbr_ubc=0x%08x, mbr_cfg=0x%08x\n", 1259 __func__, &desc->lld.mbr_da, desc->lld.mbr_ds, desc->lld.mbr_ubc, 1260 desc->lld.mbr_cfg); 1261 1262 return desc; 1263 } 1264 1265 static struct dma_async_tx_descriptor * 1266 at_xdmac_prep_dma_memset(struct dma_chan *chan, dma_addr_t dest, int value, 1267 size_t len, unsigned long flags) 1268 { 1269 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 1270 struct at_xdmac_desc *desc; 1271 1272 dev_dbg(chan2dev(chan), "%s: dest=%pad, len=%zu, pattern=0x%x, flags=0x%lx\n", 1273 __func__, &dest, len, value, flags); 1274 1275 if (unlikely(!len)) 1276 return NULL; 1277 1278 desc = at_xdmac_memset_create_desc(chan, atchan, dest, len, value); 1279 list_add_tail(&desc->desc_node, &desc->descs_list); 1280 1281 desc->tx_dma_desc.cookie = -EBUSY; 1282 desc->tx_dma_desc.flags = flags; 1283 desc->xfer_size = len; 1284 1285 return &desc->tx_dma_desc; 1286 } 1287 1288 static struct dma_async_tx_descriptor * 1289 at_xdmac_prep_dma_memset_sg(struct dma_chan *chan, struct scatterlist *sgl, 1290 unsigned int sg_len, int value, 1291 unsigned long flags) 1292 { 1293 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 1294 struct at_xdmac_desc *desc, *pdesc = NULL, 1295 *ppdesc = NULL, *first = NULL; 1296 struct scatterlist *sg, *psg = NULL, *ppsg = NULL; 1297 size_t stride = 0, pstride = 0, len = 0; 1298 int i; 1299 1300 if (!sgl) 1301 return NULL; 1302 1303 dev_dbg(chan2dev(chan), "%s: sg_len=%d, value=0x%x, flags=0x%lx\n", 1304 __func__, sg_len, value, flags); 1305 1306 /* Prepare descriptors. */ 1307 for_each_sg(sgl, sg, sg_len, i) { 1308 dev_dbg(chan2dev(chan), "%s: dest=%pad, len=%d, pattern=0x%x, flags=0x%lx\n", 1309 __func__, &sg_dma_address(sg), sg_dma_len(sg), 1310 value, flags); 1311 desc = at_xdmac_memset_create_desc(chan, atchan, 1312 sg_dma_address(sg), 1313 sg_dma_len(sg), 1314 value); 1315 if (!desc && first) 1316 list_splice_tail_init(&first->descs_list, 1317 &atchan->free_descs_list); 1318 1319 if (!first) 1320 first = desc; 1321 1322 /* Update our strides */ 1323 pstride = stride; 1324 if (psg) 1325 stride = sg_dma_address(sg) - 1326 (sg_dma_address(psg) + sg_dma_len(psg)); 1327 1328 /* 1329 * The scatterlist API gives us only the address and 1330 * length of each elements. 1331 * 1332 * Unfortunately, we don't have the stride, which we 1333 * will need to compute. 1334 * 1335 * That make us end up in a situation like this one: 1336 * len stride len stride len 1337 * +-------+ +-------+ +-------+ 1338 * | N-2 | | N-1 | | N | 1339 * +-------+ +-------+ +-------+ 1340 * 1341 * We need all these three elements (N-2, N-1 and N) 1342 * to actually take the decision on whether we need to 1343 * queue N-1 or reuse N-2. 1344 * 1345 * We will only consider N if it is the last element. 1346 */ 1347 if (ppdesc && pdesc) { 1348 if ((stride == pstride) && 1349 (sg_dma_len(ppsg) == sg_dma_len(psg))) { 1350 dev_dbg(chan2dev(chan), 1351 "%s: desc 0x%p can be merged with desc 0x%p\n", 1352 __func__, pdesc, ppdesc); 1353 1354 /* 1355 * Increment the block count of the 1356 * N-2 descriptor 1357 */ 1358 at_xdmac_increment_block_count(chan, ppdesc); 1359 ppdesc->lld.mbr_dus = stride; 1360 1361 /* 1362 * Put back the N-1 descriptor in the 1363 * free descriptor list 1364 */ 1365 list_add_tail(&pdesc->desc_node, 1366 &atchan->free_descs_list); 1367 1368 /* 1369 * Make our N-1 descriptor pointer 1370 * point to the N-2 since they were 1371 * actually merged. 1372 */ 1373 pdesc = ppdesc; 1374 1375 /* 1376 * Rule out the case where we don't have 1377 * pstride computed yet (our second sg 1378 * element) 1379 * 1380 * We also want to catch the case where there 1381 * would be a negative stride, 1382 */ 1383 } else if (pstride || 1384 sg_dma_address(sg) < sg_dma_address(psg)) { 1385 /* 1386 * Queue the N-1 descriptor after the 1387 * N-2 1388 */ 1389 at_xdmac_queue_desc(chan, ppdesc, pdesc); 1390 1391 /* 1392 * Add the N-1 descriptor to the list 1393 * of the descriptors used for this 1394 * transfer 1395 */ 1396 list_add_tail(&desc->desc_node, 1397 &first->descs_list); 1398 dev_dbg(chan2dev(chan), 1399 "%s: add desc 0x%p to descs_list 0x%p\n", 1400 __func__, desc, first); 1401 } 1402 } 1403 1404 /* 1405 * If we are the last element, just see if we have the 1406 * same size than the previous element. 1407 * 1408 * If so, we can merge it with the previous descriptor 1409 * since we don't care about the stride anymore. 1410 */ 1411 if ((i == (sg_len - 1)) && 1412 sg_dma_len(psg) == sg_dma_len(sg)) { 1413 dev_dbg(chan2dev(chan), 1414 "%s: desc 0x%p can be merged with desc 0x%p\n", 1415 __func__, desc, pdesc); 1416 1417 /* 1418 * Increment the block count of the N-1 1419 * descriptor 1420 */ 1421 at_xdmac_increment_block_count(chan, pdesc); 1422 pdesc->lld.mbr_dus = stride; 1423 1424 /* 1425 * Put back the N descriptor in the free 1426 * descriptor list 1427 */ 1428 list_add_tail(&desc->desc_node, 1429 &atchan->free_descs_list); 1430 } 1431 1432 /* Update our descriptors */ 1433 ppdesc = pdesc; 1434 pdesc = desc; 1435 1436 /* Update our scatter pointers */ 1437 ppsg = psg; 1438 psg = sg; 1439 1440 len += sg_dma_len(sg); 1441 } 1442 1443 first->tx_dma_desc.cookie = -EBUSY; 1444 first->tx_dma_desc.flags = flags; 1445 first->xfer_size = len; 1446 1447 return &first->tx_dma_desc; 1448 } 1449 1450 static enum dma_status 1451 at_xdmac_tx_status(struct dma_chan *chan, dma_cookie_t cookie, 1452 struct dma_tx_state *txstate) 1453 { 1454 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 1455 struct at_xdmac *atxdmac = to_at_xdmac(atchan->chan.device); 1456 struct at_xdmac_desc *desc, *_desc; 1457 struct list_head *descs_list; 1458 enum dma_status ret; 1459 int residue, retry; 1460 u32 cur_nda, check_nda, cur_ubc, mask, value; 1461 u8 dwidth = 0; 1462 unsigned long flags; 1463 bool initd; 1464 1465 ret = dma_cookie_status(chan, cookie, txstate); 1466 if (ret == DMA_COMPLETE) 1467 return ret; 1468 1469 if (!txstate) 1470 return ret; 1471 1472 spin_lock_irqsave(&atchan->lock, flags); 1473 1474 desc = list_first_entry(&atchan->xfers_list, struct at_xdmac_desc, xfer_node); 1475 1476 /* 1477 * If the transfer has not been started yet, don't need to compute the 1478 * residue, it's the transfer length. 1479 */ 1480 if (!desc->active_xfer) { 1481 dma_set_residue(txstate, desc->xfer_size); 1482 goto spin_unlock; 1483 } 1484 1485 residue = desc->xfer_size; 1486 /* 1487 * Flush FIFO: only relevant when the transfer is source peripheral 1488 * synchronized. Flush is needed before reading CUBC because data in 1489 * the FIFO are not reported by CUBC. Reporting a residue of the 1490 * transfer length while we have data in FIFO can cause issue. 1491 * Usecase: atmel USART has a timeout which means I have received 1492 * characters but there is no more character received for a while. On 1493 * timeout, it requests the residue. If the data are in the DMA FIFO, 1494 * we will return a residue of the transfer length. It means no data 1495 * received. If an application is waiting for these data, it will hang 1496 * since we won't have another USART timeout without receiving new 1497 * data. 1498 */ 1499 mask = AT_XDMAC_CC_TYPE | AT_XDMAC_CC_DSYNC; 1500 value = AT_XDMAC_CC_TYPE_PER_TRAN | AT_XDMAC_CC_DSYNC_PER2MEM; 1501 if ((desc->lld.mbr_cfg & mask) == value) { 1502 at_xdmac_write(atxdmac, atxdmac->layout->gswf, atchan->mask); 1503 while (!(at_xdmac_chan_read(atchan, AT_XDMAC_CIS) & AT_XDMAC_CIS_FIS)) 1504 cpu_relax(); 1505 } 1506 1507 /* 1508 * The easiest way to compute the residue should be to pause the DMA 1509 * but doing this can lead to miss some data as some devices don't 1510 * have FIFO. 1511 * We need to read several registers because: 1512 * - DMA is running therefore a descriptor change is possible while 1513 * reading these registers 1514 * - When the block transfer is done, the value of the CUBC register 1515 * is set to its initial value until the fetch of the next descriptor. 1516 * This value will corrupt the residue calculation so we have to skip 1517 * it. 1518 * 1519 * INITD -------- ------------ 1520 * |____________________| 1521 * _______________________ _______________ 1522 * NDA @desc2 \/ @desc3 1523 * _______________________/\_______________ 1524 * __________ ___________ _______________ 1525 * CUBC 0 \/ MAX desc1 \/ MAX desc2 1526 * __________/\___________/\_______________ 1527 * 1528 * Since descriptors are aligned on 64 bits, we can assume that 1529 * the update of NDA and CUBC is atomic. 1530 * Memory barriers are used to ensure the read order of the registers. 1531 * A max number of retries is set because unlikely it could never ends. 1532 */ 1533 for (retry = 0; retry < AT_XDMAC_RESIDUE_MAX_RETRIES; retry++) { 1534 check_nda = at_xdmac_chan_read(atchan, AT_XDMAC_CNDA) & 0xfffffffc; 1535 rmb(); 1536 cur_ubc = at_xdmac_chan_read(atchan, AT_XDMAC_CUBC); 1537 rmb(); 1538 initd = !!(at_xdmac_chan_read(atchan, AT_XDMAC_CC) & AT_XDMAC_CC_INITD); 1539 rmb(); 1540 cur_nda = at_xdmac_chan_read(atchan, AT_XDMAC_CNDA) & 0xfffffffc; 1541 rmb(); 1542 1543 if ((check_nda == cur_nda) && initd) 1544 break; 1545 } 1546 1547 if (unlikely(retry >= AT_XDMAC_RESIDUE_MAX_RETRIES)) { 1548 ret = DMA_ERROR; 1549 goto spin_unlock; 1550 } 1551 1552 /* 1553 * Flush FIFO: only relevant when the transfer is source peripheral 1554 * synchronized. Another flush is needed here because CUBC is updated 1555 * when the controller sends the data write command. It can lead to 1556 * report data that are not written in the memory or the device. The 1557 * FIFO flush ensures that data are really written. 1558 */ 1559 if ((desc->lld.mbr_cfg & mask) == value) { 1560 at_xdmac_write(atxdmac, atxdmac->layout->gswf, atchan->mask); 1561 while (!(at_xdmac_chan_read(atchan, AT_XDMAC_CIS) & AT_XDMAC_CIS_FIS)) 1562 cpu_relax(); 1563 } 1564 1565 /* 1566 * Remove size of all microblocks already transferred and the current 1567 * one. Then add the remaining size to transfer of the current 1568 * microblock. 1569 */ 1570 descs_list = &desc->descs_list; 1571 list_for_each_entry_safe(desc, _desc, descs_list, desc_node) { 1572 dwidth = at_xdmac_get_dwidth(desc->lld.mbr_cfg); 1573 residue -= (desc->lld.mbr_ubc & 0xffffff) << dwidth; 1574 if ((desc->lld.mbr_nda & 0xfffffffc) == cur_nda) 1575 break; 1576 } 1577 residue += cur_ubc << dwidth; 1578 1579 dma_set_residue(txstate, residue); 1580 1581 dev_dbg(chan2dev(chan), 1582 "%s: desc=0x%p, tx_dma_desc.phys=%pad, tx_status=%d, cookie=%d, residue=%d\n", 1583 __func__, desc, &desc->tx_dma_desc.phys, ret, cookie, residue); 1584 1585 spin_unlock: 1586 spin_unlock_irqrestore(&atchan->lock, flags); 1587 return ret; 1588 } 1589 1590 static void at_xdmac_advance_work(struct at_xdmac_chan *atchan) 1591 { 1592 struct at_xdmac_desc *desc; 1593 1594 /* 1595 * If channel is enabled, do nothing, advance_work will be triggered 1596 * after the interruption. 1597 */ 1598 if (at_xdmac_chan_is_enabled(atchan) || list_empty(&atchan->xfers_list)) 1599 return; 1600 1601 desc = list_first_entry(&atchan->xfers_list, struct at_xdmac_desc, 1602 xfer_node); 1603 dev_vdbg(chan2dev(&atchan->chan), "%s: desc 0x%p\n", __func__, desc); 1604 if (!desc->active_xfer) 1605 at_xdmac_start_xfer(atchan, desc); 1606 } 1607 1608 static void at_xdmac_handle_cyclic(struct at_xdmac_chan *atchan) 1609 { 1610 struct at_xdmac_desc *desc; 1611 struct dma_async_tx_descriptor *txd; 1612 1613 spin_lock_irq(&atchan->lock); 1614 dev_dbg(chan2dev(&atchan->chan), "%s: status=0x%08x\n", 1615 __func__, atchan->irq_status); 1616 if (list_empty(&atchan->xfers_list)) { 1617 spin_unlock_irq(&atchan->lock); 1618 return; 1619 } 1620 desc = list_first_entry(&atchan->xfers_list, struct at_xdmac_desc, 1621 xfer_node); 1622 spin_unlock_irq(&atchan->lock); 1623 txd = &desc->tx_dma_desc; 1624 if (txd->flags & DMA_PREP_INTERRUPT) 1625 dmaengine_desc_get_callback_invoke(txd, NULL); 1626 } 1627 1628 /* Called with atchan->lock held. */ 1629 static void at_xdmac_handle_error(struct at_xdmac_chan *atchan) 1630 { 1631 struct at_xdmac *atxdmac = to_at_xdmac(atchan->chan.device); 1632 struct at_xdmac_desc *bad_desc; 1633 1634 /* 1635 * The descriptor currently at the head of the active list is 1636 * broken. Since we don't have any way to report errors, we'll 1637 * just have to scream loudly and try to continue with other 1638 * descriptors queued (if any). 1639 */ 1640 if (atchan->irq_status & AT_XDMAC_CIS_RBEIS) 1641 dev_err(chan2dev(&atchan->chan), "read bus error!!!"); 1642 if (atchan->irq_status & AT_XDMAC_CIS_WBEIS) 1643 dev_err(chan2dev(&atchan->chan), "write bus error!!!"); 1644 if (atchan->irq_status & AT_XDMAC_CIS_ROIS) 1645 dev_err(chan2dev(&atchan->chan), "request overflow error!!!"); 1646 1647 /* Channel must be disabled first as it's not done automatically */ 1648 at_xdmac_write(atxdmac, AT_XDMAC_GD, atchan->mask); 1649 while (at_xdmac_read(atxdmac, AT_XDMAC_GS) & atchan->mask) 1650 cpu_relax(); 1651 1652 bad_desc = list_first_entry(&atchan->xfers_list, 1653 struct at_xdmac_desc, 1654 xfer_node); 1655 1656 /* Print bad descriptor's details if needed */ 1657 dev_dbg(chan2dev(&atchan->chan), 1658 "%s: lld: mbr_sa=%pad, mbr_da=%pad, mbr_ubc=0x%08x\n", 1659 __func__, &bad_desc->lld.mbr_sa, &bad_desc->lld.mbr_da, 1660 bad_desc->lld.mbr_ubc); 1661 1662 /* Then continue with usual descriptor management */ 1663 } 1664 1665 static void at_xdmac_tasklet(struct tasklet_struct *t) 1666 { 1667 struct at_xdmac_chan *atchan = from_tasklet(atchan, t, tasklet); 1668 struct at_xdmac_desc *desc; 1669 struct dma_async_tx_descriptor *txd; 1670 u32 error_mask; 1671 1672 if (at_xdmac_chan_is_cyclic(atchan)) 1673 return at_xdmac_handle_cyclic(atchan); 1674 1675 error_mask = AT_XDMAC_CIS_RBEIS | AT_XDMAC_CIS_WBEIS | 1676 AT_XDMAC_CIS_ROIS; 1677 1678 spin_lock_irq(&atchan->lock); 1679 1680 dev_dbg(chan2dev(&atchan->chan), "%s: status=0x%08x\n", 1681 __func__, atchan->irq_status); 1682 1683 if (!(atchan->irq_status & AT_XDMAC_CIS_LIS) && 1684 !(atchan->irq_status & error_mask)) 1685 return; 1686 1687 if (atchan->irq_status & error_mask) 1688 at_xdmac_handle_error(atchan); 1689 1690 desc = list_first_entry(&atchan->xfers_list, struct at_xdmac_desc, 1691 xfer_node); 1692 dev_vdbg(chan2dev(&atchan->chan), "%s: desc 0x%p\n", __func__, desc); 1693 if (!desc->active_xfer) { 1694 dev_err(chan2dev(&atchan->chan), "Xfer not active: exiting"); 1695 spin_unlock_irq(&atchan->lock); 1696 return; 1697 } 1698 1699 txd = &desc->tx_dma_desc; 1700 dma_cookie_complete(txd); 1701 /* Remove the transfer from the transfer list. */ 1702 list_del(&desc->xfer_node); 1703 spin_unlock_irq(&atchan->lock); 1704 1705 if (txd->flags & DMA_PREP_INTERRUPT) 1706 dmaengine_desc_get_callback_invoke(txd, NULL); 1707 1708 dma_run_dependencies(txd); 1709 1710 spin_lock_irq(&atchan->lock); 1711 /* Move the xfer descriptors into the free descriptors list. */ 1712 list_splice_tail_init(&desc->descs_list, &atchan->free_descs_list); 1713 at_xdmac_advance_work(atchan); 1714 spin_unlock_irq(&atchan->lock); 1715 } 1716 1717 static irqreturn_t at_xdmac_interrupt(int irq, void *dev_id) 1718 { 1719 struct at_xdmac *atxdmac = (struct at_xdmac *)dev_id; 1720 struct at_xdmac_chan *atchan; 1721 u32 imr, status, pending; 1722 u32 chan_imr, chan_status; 1723 int i, ret = IRQ_NONE; 1724 1725 do { 1726 imr = at_xdmac_read(atxdmac, AT_XDMAC_GIM); 1727 status = at_xdmac_read(atxdmac, AT_XDMAC_GIS); 1728 pending = status & imr; 1729 1730 dev_vdbg(atxdmac->dma.dev, 1731 "%s: status=0x%08x, imr=0x%08x, pending=0x%08x\n", 1732 __func__, status, imr, pending); 1733 1734 if (!pending) 1735 break; 1736 1737 /* We have to find which channel has generated the interrupt. */ 1738 for (i = 0; i < atxdmac->dma.chancnt; i++) { 1739 if (!((1 << i) & pending)) 1740 continue; 1741 1742 atchan = &atxdmac->chan[i]; 1743 chan_imr = at_xdmac_chan_read(atchan, AT_XDMAC_CIM); 1744 chan_status = at_xdmac_chan_read(atchan, AT_XDMAC_CIS); 1745 atchan->irq_status = chan_status & chan_imr; 1746 dev_vdbg(atxdmac->dma.dev, 1747 "%s: chan%d: imr=0x%x, status=0x%x\n", 1748 __func__, i, chan_imr, chan_status); 1749 dev_vdbg(chan2dev(&atchan->chan), 1750 "%s: CC=0x%08x CNDA=0x%08x, CNDC=0x%08x, CSA=0x%08x, CDA=0x%08x, CUBC=0x%08x\n", 1751 __func__, 1752 at_xdmac_chan_read(atchan, AT_XDMAC_CC), 1753 at_xdmac_chan_read(atchan, AT_XDMAC_CNDA), 1754 at_xdmac_chan_read(atchan, AT_XDMAC_CNDC), 1755 at_xdmac_chan_read(atchan, AT_XDMAC_CSA), 1756 at_xdmac_chan_read(atchan, AT_XDMAC_CDA), 1757 at_xdmac_chan_read(atchan, AT_XDMAC_CUBC)); 1758 1759 if (atchan->irq_status & (AT_XDMAC_CIS_RBEIS | AT_XDMAC_CIS_WBEIS)) 1760 at_xdmac_write(atxdmac, AT_XDMAC_GD, atchan->mask); 1761 1762 tasklet_schedule(&atchan->tasklet); 1763 ret = IRQ_HANDLED; 1764 } 1765 1766 } while (pending); 1767 1768 return ret; 1769 } 1770 1771 static void at_xdmac_issue_pending(struct dma_chan *chan) 1772 { 1773 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 1774 unsigned long flags; 1775 1776 dev_dbg(chan2dev(&atchan->chan), "%s\n", __func__); 1777 1778 spin_lock_irqsave(&atchan->lock, flags); 1779 at_xdmac_advance_work(atchan); 1780 spin_unlock_irqrestore(&atchan->lock, flags); 1781 1782 return; 1783 } 1784 1785 static int at_xdmac_device_config(struct dma_chan *chan, 1786 struct dma_slave_config *config) 1787 { 1788 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 1789 int ret; 1790 unsigned long flags; 1791 1792 dev_dbg(chan2dev(chan), "%s\n", __func__); 1793 1794 spin_lock_irqsave(&atchan->lock, flags); 1795 ret = at_xdmac_set_slave_config(chan, config); 1796 spin_unlock_irqrestore(&atchan->lock, flags); 1797 1798 return ret; 1799 } 1800 1801 static int at_xdmac_device_pause(struct dma_chan *chan) 1802 { 1803 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 1804 struct at_xdmac *atxdmac = to_at_xdmac(atchan->chan.device); 1805 unsigned long flags; 1806 1807 dev_dbg(chan2dev(chan), "%s\n", __func__); 1808 1809 if (test_and_set_bit(AT_XDMAC_CHAN_IS_PAUSED, &atchan->status)) 1810 return 0; 1811 1812 spin_lock_irqsave(&atchan->lock, flags); 1813 at_xdmac_write(atxdmac, atxdmac->layout->grws, atchan->mask); 1814 while (at_xdmac_chan_read(atchan, AT_XDMAC_CC) 1815 & (AT_XDMAC_CC_WRIP | AT_XDMAC_CC_RDIP)) 1816 cpu_relax(); 1817 spin_unlock_irqrestore(&atchan->lock, flags); 1818 1819 return 0; 1820 } 1821 1822 static int at_xdmac_device_resume(struct dma_chan *chan) 1823 { 1824 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 1825 struct at_xdmac *atxdmac = to_at_xdmac(atchan->chan.device); 1826 unsigned long flags; 1827 1828 dev_dbg(chan2dev(chan), "%s\n", __func__); 1829 1830 spin_lock_irqsave(&atchan->lock, flags); 1831 if (!at_xdmac_chan_is_paused(atchan)) { 1832 spin_unlock_irqrestore(&atchan->lock, flags); 1833 return 0; 1834 } 1835 1836 at_xdmac_write(atxdmac, atxdmac->layout->grwr, atchan->mask); 1837 clear_bit(AT_XDMAC_CHAN_IS_PAUSED, &atchan->status); 1838 spin_unlock_irqrestore(&atchan->lock, flags); 1839 1840 return 0; 1841 } 1842 1843 static int at_xdmac_device_terminate_all(struct dma_chan *chan) 1844 { 1845 struct at_xdmac_desc *desc, *_desc; 1846 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 1847 struct at_xdmac *atxdmac = to_at_xdmac(atchan->chan.device); 1848 unsigned long flags; 1849 1850 dev_dbg(chan2dev(chan), "%s\n", __func__); 1851 1852 spin_lock_irqsave(&atchan->lock, flags); 1853 at_xdmac_write(atxdmac, AT_XDMAC_GD, atchan->mask); 1854 while (at_xdmac_read(atxdmac, AT_XDMAC_GS) & atchan->mask) 1855 cpu_relax(); 1856 1857 /* Cancel all pending transfers. */ 1858 list_for_each_entry_safe(desc, _desc, &atchan->xfers_list, xfer_node) { 1859 list_del(&desc->xfer_node); 1860 list_splice_tail_init(&desc->descs_list, 1861 &atchan->free_descs_list); 1862 } 1863 1864 clear_bit(AT_XDMAC_CHAN_IS_PAUSED, &atchan->status); 1865 clear_bit(AT_XDMAC_CHAN_IS_CYCLIC, &atchan->status); 1866 spin_unlock_irqrestore(&atchan->lock, flags); 1867 1868 return 0; 1869 } 1870 1871 static int at_xdmac_alloc_chan_resources(struct dma_chan *chan) 1872 { 1873 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 1874 struct at_xdmac_desc *desc; 1875 int i; 1876 1877 if (at_xdmac_chan_is_enabled(atchan)) { 1878 dev_err(chan2dev(chan), 1879 "can't allocate channel resources (channel enabled)\n"); 1880 return -EIO; 1881 } 1882 1883 if (!list_empty(&atchan->free_descs_list)) { 1884 dev_err(chan2dev(chan), 1885 "can't allocate channel resources (channel not free from a previous use)\n"); 1886 return -EIO; 1887 } 1888 1889 for (i = 0; i < init_nr_desc_per_channel; i++) { 1890 desc = at_xdmac_alloc_desc(chan, GFP_KERNEL); 1891 if (!desc) { 1892 dev_warn(chan2dev(chan), 1893 "only %d descriptors have been allocated\n", i); 1894 break; 1895 } 1896 list_add_tail(&desc->desc_node, &atchan->free_descs_list); 1897 } 1898 1899 dma_cookie_init(chan); 1900 1901 dev_dbg(chan2dev(chan), "%s: allocated %d descriptors\n", __func__, i); 1902 1903 return i; 1904 } 1905 1906 static void at_xdmac_free_chan_resources(struct dma_chan *chan) 1907 { 1908 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 1909 struct at_xdmac *atxdmac = to_at_xdmac(chan->device); 1910 struct at_xdmac_desc *desc, *_desc; 1911 1912 list_for_each_entry_safe(desc, _desc, &atchan->free_descs_list, desc_node) { 1913 dev_dbg(chan2dev(chan), "%s: freeing descriptor %p\n", __func__, desc); 1914 list_del(&desc->desc_node); 1915 dma_pool_free(atxdmac->at_xdmac_desc_pool, desc, desc->tx_dma_desc.phys); 1916 } 1917 1918 return; 1919 } 1920 1921 static void at_xdmac_axi_config(struct platform_device *pdev) 1922 { 1923 struct at_xdmac *atxdmac = (struct at_xdmac *)platform_get_drvdata(pdev); 1924 bool dev_m2m = false; 1925 u32 dma_requests; 1926 1927 if (!atxdmac->layout->axi_config) 1928 return; /* Not supported */ 1929 1930 if (!of_property_read_u32(pdev->dev.of_node, "dma-requests", 1931 &dma_requests)) { 1932 dev_info(&pdev->dev, "controller in mem2mem mode.\n"); 1933 dev_m2m = true; 1934 } 1935 1936 if (dev_m2m) { 1937 at_xdmac_write(atxdmac, AT_XDMAC_GCFG, AT_XDMAC_GCFG_M2M); 1938 at_xdmac_write(atxdmac, AT_XDMAC_GWAC, AT_XDMAC_GWAC_M2M); 1939 } else { 1940 at_xdmac_write(atxdmac, AT_XDMAC_GCFG, AT_XDMAC_GCFG_P2M); 1941 at_xdmac_write(atxdmac, AT_XDMAC_GWAC, AT_XDMAC_GWAC_P2M); 1942 } 1943 } 1944 1945 static int __maybe_unused atmel_xdmac_prepare(struct device *dev) 1946 { 1947 struct at_xdmac *atxdmac = dev_get_drvdata(dev); 1948 struct dma_chan *chan, *_chan; 1949 1950 list_for_each_entry_safe(chan, _chan, &atxdmac->dma.channels, device_node) { 1951 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 1952 1953 /* Wait for transfer completion, except in cyclic case. */ 1954 if (at_xdmac_chan_is_enabled(atchan) && !at_xdmac_chan_is_cyclic(atchan)) 1955 return -EAGAIN; 1956 } 1957 return 0; 1958 } 1959 1960 static int __maybe_unused atmel_xdmac_suspend(struct device *dev) 1961 { 1962 struct at_xdmac *atxdmac = dev_get_drvdata(dev); 1963 struct dma_chan *chan, *_chan; 1964 1965 list_for_each_entry_safe(chan, _chan, &atxdmac->dma.channels, device_node) { 1966 struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); 1967 1968 atchan->save_cc = at_xdmac_chan_read(atchan, AT_XDMAC_CC); 1969 if (at_xdmac_chan_is_cyclic(atchan)) { 1970 if (!at_xdmac_chan_is_paused(atchan)) 1971 at_xdmac_device_pause(chan); 1972 atchan->save_cim = at_xdmac_chan_read(atchan, AT_XDMAC_CIM); 1973 atchan->save_cnda = at_xdmac_chan_read(atchan, AT_XDMAC_CNDA); 1974 atchan->save_cndc = at_xdmac_chan_read(atchan, AT_XDMAC_CNDC); 1975 } 1976 } 1977 atxdmac->save_gim = at_xdmac_read(atxdmac, AT_XDMAC_GIM); 1978 1979 at_xdmac_off(atxdmac); 1980 clk_disable_unprepare(atxdmac->clk); 1981 return 0; 1982 } 1983 1984 static int __maybe_unused atmel_xdmac_resume(struct device *dev) 1985 { 1986 struct at_xdmac *atxdmac = dev_get_drvdata(dev); 1987 struct at_xdmac_chan *atchan; 1988 struct dma_chan *chan, *_chan; 1989 struct platform_device *pdev = container_of(dev, struct platform_device, dev); 1990 int i; 1991 int ret; 1992 1993 ret = clk_prepare_enable(atxdmac->clk); 1994 if (ret) 1995 return ret; 1996 1997 at_xdmac_axi_config(pdev); 1998 1999 /* Clear pending interrupts. */ 2000 for (i = 0; i < atxdmac->dma.chancnt; i++) { 2001 atchan = &atxdmac->chan[i]; 2002 while (at_xdmac_chan_read(atchan, AT_XDMAC_CIS)) 2003 cpu_relax(); 2004 } 2005 2006 at_xdmac_write(atxdmac, AT_XDMAC_GIE, atxdmac->save_gim); 2007 list_for_each_entry_safe(chan, _chan, &atxdmac->dma.channels, device_node) { 2008 atchan = to_at_xdmac_chan(chan); 2009 at_xdmac_chan_write(atchan, AT_XDMAC_CC, atchan->save_cc); 2010 if (at_xdmac_chan_is_cyclic(atchan)) { 2011 if (at_xdmac_chan_is_paused(atchan)) 2012 at_xdmac_device_resume(chan); 2013 at_xdmac_chan_write(atchan, AT_XDMAC_CNDA, atchan->save_cnda); 2014 at_xdmac_chan_write(atchan, AT_XDMAC_CNDC, atchan->save_cndc); 2015 at_xdmac_chan_write(atchan, AT_XDMAC_CIE, atchan->save_cim); 2016 wmb(); 2017 at_xdmac_write(atxdmac, AT_XDMAC_GE, atchan->mask); 2018 } 2019 } 2020 return 0; 2021 } 2022 2023 static int at_xdmac_probe(struct platform_device *pdev) 2024 { 2025 struct at_xdmac *atxdmac; 2026 int irq, nr_channels, i, ret; 2027 void __iomem *base; 2028 u32 reg; 2029 2030 irq = platform_get_irq(pdev, 0); 2031 if (irq < 0) 2032 return irq; 2033 2034 base = devm_platform_ioremap_resource(pdev, 0); 2035 if (IS_ERR(base)) 2036 return PTR_ERR(base); 2037 2038 /* 2039 * Read number of xdmac channels, read helper function can't be used 2040 * since atxdmac is not yet allocated and we need to know the number 2041 * of channels to do the allocation. 2042 */ 2043 reg = readl_relaxed(base + AT_XDMAC_GTYPE); 2044 nr_channels = AT_XDMAC_NB_CH(reg); 2045 if (nr_channels > AT_XDMAC_MAX_CHAN) { 2046 dev_err(&pdev->dev, "invalid number of channels (%u)\n", 2047 nr_channels); 2048 return -EINVAL; 2049 } 2050 2051 atxdmac = devm_kzalloc(&pdev->dev, 2052 struct_size(atxdmac, chan, nr_channels), 2053 GFP_KERNEL); 2054 if (!atxdmac) { 2055 dev_err(&pdev->dev, "can't allocate at_xdmac structure\n"); 2056 return -ENOMEM; 2057 } 2058 2059 atxdmac->regs = base; 2060 atxdmac->irq = irq; 2061 2062 atxdmac->layout = of_device_get_match_data(&pdev->dev); 2063 if (!atxdmac->layout) 2064 return -ENODEV; 2065 2066 atxdmac->clk = devm_clk_get(&pdev->dev, "dma_clk"); 2067 if (IS_ERR(atxdmac->clk)) { 2068 dev_err(&pdev->dev, "can't get dma_clk\n"); 2069 return PTR_ERR(atxdmac->clk); 2070 } 2071 2072 /* Do not use dev res to prevent races with tasklet */ 2073 ret = request_irq(atxdmac->irq, at_xdmac_interrupt, 0, "at_xdmac", atxdmac); 2074 if (ret) { 2075 dev_err(&pdev->dev, "can't request irq\n"); 2076 return ret; 2077 } 2078 2079 ret = clk_prepare_enable(atxdmac->clk); 2080 if (ret) { 2081 dev_err(&pdev->dev, "can't prepare or enable clock\n"); 2082 goto err_free_irq; 2083 } 2084 2085 atxdmac->at_xdmac_desc_pool = 2086 dmam_pool_create(dev_name(&pdev->dev), &pdev->dev, 2087 sizeof(struct at_xdmac_desc), 4, 0); 2088 if (!atxdmac->at_xdmac_desc_pool) { 2089 dev_err(&pdev->dev, "no memory for descriptors dma pool\n"); 2090 ret = -ENOMEM; 2091 goto err_clk_disable; 2092 } 2093 2094 dma_cap_set(DMA_CYCLIC, atxdmac->dma.cap_mask); 2095 dma_cap_set(DMA_INTERLEAVE, atxdmac->dma.cap_mask); 2096 dma_cap_set(DMA_MEMCPY, atxdmac->dma.cap_mask); 2097 dma_cap_set(DMA_MEMSET, atxdmac->dma.cap_mask); 2098 dma_cap_set(DMA_MEMSET_SG, atxdmac->dma.cap_mask); 2099 dma_cap_set(DMA_SLAVE, atxdmac->dma.cap_mask); 2100 /* 2101 * Without DMA_PRIVATE the driver is not able to allocate more than 2102 * one channel, second allocation fails in private_candidate. 2103 */ 2104 dma_cap_set(DMA_PRIVATE, atxdmac->dma.cap_mask); 2105 atxdmac->dma.dev = &pdev->dev; 2106 atxdmac->dma.device_alloc_chan_resources = at_xdmac_alloc_chan_resources; 2107 atxdmac->dma.device_free_chan_resources = at_xdmac_free_chan_resources; 2108 atxdmac->dma.device_tx_status = at_xdmac_tx_status; 2109 atxdmac->dma.device_issue_pending = at_xdmac_issue_pending; 2110 atxdmac->dma.device_prep_dma_cyclic = at_xdmac_prep_dma_cyclic; 2111 atxdmac->dma.device_prep_interleaved_dma = at_xdmac_prep_interleaved; 2112 atxdmac->dma.device_prep_dma_memcpy = at_xdmac_prep_dma_memcpy; 2113 atxdmac->dma.device_prep_dma_memset = at_xdmac_prep_dma_memset; 2114 atxdmac->dma.device_prep_dma_memset_sg = at_xdmac_prep_dma_memset_sg; 2115 atxdmac->dma.device_prep_slave_sg = at_xdmac_prep_slave_sg; 2116 atxdmac->dma.device_config = at_xdmac_device_config; 2117 atxdmac->dma.device_pause = at_xdmac_device_pause; 2118 atxdmac->dma.device_resume = at_xdmac_device_resume; 2119 atxdmac->dma.device_terminate_all = at_xdmac_device_terminate_all; 2120 atxdmac->dma.src_addr_widths = AT_XDMAC_DMA_BUSWIDTHS; 2121 atxdmac->dma.dst_addr_widths = AT_XDMAC_DMA_BUSWIDTHS; 2122 atxdmac->dma.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV); 2123 atxdmac->dma.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST; 2124 2125 /* Disable all chans and interrupts. */ 2126 at_xdmac_off(atxdmac); 2127 2128 /* Init channels. */ 2129 INIT_LIST_HEAD(&atxdmac->dma.channels); 2130 for (i = 0; i < nr_channels; i++) { 2131 struct at_xdmac_chan *atchan = &atxdmac->chan[i]; 2132 2133 atchan->chan.device = &atxdmac->dma; 2134 list_add_tail(&atchan->chan.device_node, 2135 &atxdmac->dma.channels); 2136 2137 atchan->ch_regs = at_xdmac_chan_reg_base(atxdmac, i); 2138 atchan->mask = 1 << i; 2139 2140 spin_lock_init(&atchan->lock); 2141 INIT_LIST_HEAD(&atchan->xfers_list); 2142 INIT_LIST_HEAD(&atchan->free_descs_list); 2143 tasklet_setup(&atchan->tasklet, at_xdmac_tasklet); 2144 2145 /* Clear pending interrupts. */ 2146 while (at_xdmac_chan_read(atchan, AT_XDMAC_CIS)) 2147 cpu_relax(); 2148 } 2149 platform_set_drvdata(pdev, atxdmac); 2150 2151 ret = dma_async_device_register(&atxdmac->dma); 2152 if (ret) { 2153 dev_err(&pdev->dev, "fail to register DMA engine device\n"); 2154 goto err_clk_disable; 2155 } 2156 2157 ret = of_dma_controller_register(pdev->dev.of_node, 2158 at_xdmac_xlate, atxdmac); 2159 if (ret) { 2160 dev_err(&pdev->dev, "could not register of dma controller\n"); 2161 goto err_dma_unregister; 2162 } 2163 2164 dev_info(&pdev->dev, "%d channels, mapped at 0x%p\n", 2165 nr_channels, atxdmac->regs); 2166 2167 at_xdmac_axi_config(pdev); 2168 2169 return 0; 2170 2171 err_dma_unregister: 2172 dma_async_device_unregister(&atxdmac->dma); 2173 err_clk_disable: 2174 clk_disable_unprepare(atxdmac->clk); 2175 err_free_irq: 2176 free_irq(atxdmac->irq, atxdmac); 2177 return ret; 2178 } 2179 2180 static int at_xdmac_remove(struct platform_device *pdev) 2181 { 2182 struct at_xdmac *atxdmac = (struct at_xdmac *)platform_get_drvdata(pdev); 2183 int i; 2184 2185 at_xdmac_off(atxdmac); 2186 of_dma_controller_free(pdev->dev.of_node); 2187 dma_async_device_unregister(&atxdmac->dma); 2188 clk_disable_unprepare(atxdmac->clk); 2189 2190 free_irq(atxdmac->irq, atxdmac); 2191 2192 for (i = 0; i < atxdmac->dma.chancnt; i++) { 2193 struct at_xdmac_chan *atchan = &atxdmac->chan[i]; 2194 2195 tasklet_kill(&atchan->tasklet); 2196 at_xdmac_free_chan_resources(&atchan->chan); 2197 } 2198 2199 return 0; 2200 } 2201 2202 static const struct dev_pm_ops __maybe_unused atmel_xdmac_dev_pm_ops = { 2203 .prepare = atmel_xdmac_prepare, 2204 SET_LATE_SYSTEM_SLEEP_PM_OPS(atmel_xdmac_suspend, atmel_xdmac_resume) 2205 }; 2206 2207 static const struct of_device_id atmel_xdmac_dt_ids[] = { 2208 { 2209 .compatible = "atmel,sama5d4-dma", 2210 .data = &at_xdmac_sama5d4_layout, 2211 }, { 2212 .compatible = "microchip,sama7g5-dma", 2213 .data = &at_xdmac_sama7g5_layout, 2214 }, { 2215 /* sentinel */ 2216 } 2217 }; 2218 MODULE_DEVICE_TABLE(of, atmel_xdmac_dt_ids); 2219 2220 static struct platform_driver at_xdmac_driver = { 2221 .probe = at_xdmac_probe, 2222 .remove = at_xdmac_remove, 2223 .driver = { 2224 .name = "at_xdmac", 2225 .of_match_table = of_match_ptr(atmel_xdmac_dt_ids), 2226 .pm = pm_ptr(&atmel_xdmac_dev_pm_ops), 2227 } 2228 }; 2229 2230 static int __init at_xdmac_init(void) 2231 { 2232 return platform_driver_register(&at_xdmac_driver); 2233 } 2234 subsys_initcall(at_xdmac_init); 2235 2236 static void __exit at_xdmac_exit(void) 2237 { 2238 platform_driver_unregister(&at_xdmac_driver); 2239 } 2240 module_exit(at_xdmac_exit); 2241 2242 MODULE_DESCRIPTION("Atmel Extended DMA Controller driver"); 2243 MODULE_AUTHOR("Ludovic Desroches <ludovic.desroches@atmel.com>"); 2244 MODULE_LICENSE("GPL"); 2245