xref: /openbmc/linux/drivers/dma/stm32-mdma.c (revision 3fc41476)
1 /*
2  *
3  * Copyright (C) STMicroelectronics SA 2017
4  * Author(s): M'boumba Cedric Madianga <cedric.madianga@gmail.com>
5  *            Pierre-Yves Mordret <pierre-yves.mordret@st.com>
6  *
7  * License terms: GPL V2.0.
8  *
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU General Public License version 2 as published by
11  * the Free Software Foundation.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
16  * details.
17  *
18  * Driver for STM32 MDMA controller
19  *
20  * Inspired by stm32-dma.c and dma-jz4780.c
21  *
22  */
23 
24 #include <linux/clk.h>
25 #include <linux/delay.h>
26 #include <linux/dmaengine.h>
27 #include <linux/dma-mapping.h>
28 #include <linux/dmapool.h>
29 #include <linux/err.h>
30 #include <linux/init.h>
31 #include <linux/iopoll.h>
32 #include <linux/jiffies.h>
33 #include <linux/list.h>
34 #include <linux/log2.h>
35 #include <linux/module.h>
36 #include <linux/of.h>
37 #include <linux/of_device.h>
38 #include <linux/of_dma.h>
39 #include <linux/platform_device.h>
40 #include <linux/pm_runtime.h>
41 #include <linux/reset.h>
42 #include <linux/slab.h>
43 
44 #include "virt-dma.h"
45 
46 /*  MDMA Generic getter/setter */
47 #define STM32_MDMA_SHIFT(n)		(ffs(n) - 1)
48 #define STM32_MDMA_SET(n, mask)		(((n) << STM32_MDMA_SHIFT(mask)) & \
49 					 (mask))
50 #define STM32_MDMA_GET(n, mask)		(((n) & (mask)) >> \
51 					 STM32_MDMA_SHIFT(mask))
52 
53 #define STM32_MDMA_GISR0		0x0000 /* MDMA Int Status Reg 1 */
54 #define STM32_MDMA_GISR1		0x0004 /* MDMA Int Status Reg 2 */
55 
56 /* MDMA Channel x interrupt/status register */
57 #define STM32_MDMA_CISR(x)		(0x40 + 0x40 * (x)) /* x = 0..62 */
58 #define STM32_MDMA_CISR_CRQA		BIT(16)
59 #define STM32_MDMA_CISR_TCIF		BIT(4)
60 #define STM32_MDMA_CISR_BTIF		BIT(3)
61 #define STM32_MDMA_CISR_BRTIF		BIT(2)
62 #define STM32_MDMA_CISR_CTCIF		BIT(1)
63 #define STM32_MDMA_CISR_TEIF		BIT(0)
64 
65 /* MDMA Channel x interrupt flag clear register */
66 #define STM32_MDMA_CIFCR(x)		(0x44 + 0x40 * (x))
67 #define STM32_MDMA_CIFCR_CLTCIF		BIT(4)
68 #define STM32_MDMA_CIFCR_CBTIF		BIT(3)
69 #define STM32_MDMA_CIFCR_CBRTIF		BIT(2)
70 #define STM32_MDMA_CIFCR_CCTCIF		BIT(1)
71 #define STM32_MDMA_CIFCR_CTEIF		BIT(0)
72 #define STM32_MDMA_CIFCR_CLEAR_ALL	(STM32_MDMA_CIFCR_CLTCIF \
73 					| STM32_MDMA_CIFCR_CBTIF \
74 					| STM32_MDMA_CIFCR_CBRTIF \
75 					| STM32_MDMA_CIFCR_CCTCIF \
76 					| STM32_MDMA_CIFCR_CTEIF)
77 
78 /* MDMA Channel x error status register */
79 #define STM32_MDMA_CESR(x)		(0x48 + 0x40 * (x))
80 #define STM32_MDMA_CESR_BSE		BIT(11)
81 #define STM32_MDMA_CESR_ASR		BIT(10)
82 #define STM32_MDMA_CESR_TEMD		BIT(9)
83 #define STM32_MDMA_CESR_TELD		BIT(8)
84 #define STM32_MDMA_CESR_TED		BIT(7)
85 #define STM32_MDMA_CESR_TEA_MASK	GENMASK(6, 0)
86 
87 /* MDMA Channel x control register */
88 #define STM32_MDMA_CCR(x)		(0x4C + 0x40 * (x))
89 #define STM32_MDMA_CCR_SWRQ		BIT(16)
90 #define STM32_MDMA_CCR_WEX		BIT(14)
91 #define STM32_MDMA_CCR_HEX		BIT(13)
92 #define STM32_MDMA_CCR_BEX		BIT(12)
93 #define STM32_MDMA_CCR_PL_MASK		GENMASK(7, 6)
94 #define STM32_MDMA_CCR_PL(n)		STM32_MDMA_SET(n, \
95 						       STM32_MDMA_CCR_PL_MASK)
96 #define STM32_MDMA_CCR_TCIE		BIT(5)
97 #define STM32_MDMA_CCR_BTIE		BIT(4)
98 #define STM32_MDMA_CCR_BRTIE		BIT(3)
99 #define STM32_MDMA_CCR_CTCIE		BIT(2)
100 #define STM32_MDMA_CCR_TEIE		BIT(1)
101 #define STM32_MDMA_CCR_EN		BIT(0)
102 #define STM32_MDMA_CCR_IRQ_MASK		(STM32_MDMA_CCR_TCIE \
103 					| STM32_MDMA_CCR_BTIE \
104 					| STM32_MDMA_CCR_BRTIE \
105 					| STM32_MDMA_CCR_CTCIE \
106 					| STM32_MDMA_CCR_TEIE)
107 
108 /* MDMA Channel x transfer configuration register */
109 #define STM32_MDMA_CTCR(x)		(0x50 + 0x40 * (x))
110 #define STM32_MDMA_CTCR_BWM		BIT(31)
111 #define STM32_MDMA_CTCR_SWRM		BIT(30)
112 #define STM32_MDMA_CTCR_TRGM_MSK	GENMASK(29, 28)
113 #define STM32_MDMA_CTCR_TRGM(n)		STM32_MDMA_SET((n), \
114 						       STM32_MDMA_CTCR_TRGM_MSK)
115 #define STM32_MDMA_CTCR_TRGM_GET(n)	STM32_MDMA_GET((n), \
116 						       STM32_MDMA_CTCR_TRGM_MSK)
117 #define STM32_MDMA_CTCR_PAM_MASK	GENMASK(27, 26)
118 #define STM32_MDMA_CTCR_PAM(n)		STM32_MDMA_SET(n, \
119 						       STM32_MDMA_CTCR_PAM_MASK)
120 #define STM32_MDMA_CTCR_PKE		BIT(25)
121 #define STM32_MDMA_CTCR_TLEN_MSK	GENMASK(24, 18)
122 #define STM32_MDMA_CTCR_TLEN(n)		STM32_MDMA_SET((n), \
123 						       STM32_MDMA_CTCR_TLEN_MSK)
124 #define STM32_MDMA_CTCR_TLEN_GET(n)	STM32_MDMA_GET((n), \
125 						       STM32_MDMA_CTCR_TLEN_MSK)
126 #define STM32_MDMA_CTCR_LEN2_MSK	GENMASK(25, 18)
127 #define STM32_MDMA_CTCR_LEN2(n)		STM32_MDMA_SET((n), \
128 						       STM32_MDMA_CTCR_LEN2_MSK)
129 #define STM32_MDMA_CTCR_LEN2_GET(n)	STM32_MDMA_GET((n), \
130 						       STM32_MDMA_CTCR_LEN2_MSK)
131 #define STM32_MDMA_CTCR_DBURST_MASK	GENMASK(17, 15)
132 #define STM32_MDMA_CTCR_DBURST(n)	STM32_MDMA_SET(n, \
133 						    STM32_MDMA_CTCR_DBURST_MASK)
134 #define STM32_MDMA_CTCR_SBURST_MASK	GENMASK(14, 12)
135 #define STM32_MDMA_CTCR_SBURST(n)	STM32_MDMA_SET(n, \
136 						    STM32_MDMA_CTCR_SBURST_MASK)
137 #define STM32_MDMA_CTCR_DINCOS_MASK	GENMASK(11, 10)
138 #define STM32_MDMA_CTCR_DINCOS(n)	STM32_MDMA_SET((n), \
139 						    STM32_MDMA_CTCR_DINCOS_MASK)
140 #define STM32_MDMA_CTCR_SINCOS_MASK	GENMASK(9, 8)
141 #define STM32_MDMA_CTCR_SINCOS(n)	STM32_MDMA_SET((n), \
142 						    STM32_MDMA_CTCR_SINCOS_MASK)
143 #define STM32_MDMA_CTCR_DSIZE_MASK	GENMASK(7, 6)
144 #define STM32_MDMA_CTCR_DSIZE(n)	STM32_MDMA_SET(n, \
145 						     STM32_MDMA_CTCR_DSIZE_MASK)
146 #define STM32_MDMA_CTCR_SSIZE_MASK	GENMASK(5, 4)
147 #define STM32_MDMA_CTCR_SSIZE(n)	STM32_MDMA_SET(n, \
148 						     STM32_MDMA_CTCR_SSIZE_MASK)
149 #define STM32_MDMA_CTCR_DINC_MASK	GENMASK(3, 2)
150 #define STM32_MDMA_CTCR_DINC(n)		STM32_MDMA_SET((n), \
151 						      STM32_MDMA_CTCR_DINC_MASK)
152 #define STM32_MDMA_CTCR_SINC_MASK	GENMASK(1, 0)
153 #define STM32_MDMA_CTCR_SINC(n)		STM32_MDMA_SET((n), \
154 						      STM32_MDMA_CTCR_SINC_MASK)
155 #define STM32_MDMA_CTCR_CFG_MASK	(STM32_MDMA_CTCR_SINC_MASK \
156 					| STM32_MDMA_CTCR_DINC_MASK \
157 					| STM32_MDMA_CTCR_SINCOS_MASK \
158 					| STM32_MDMA_CTCR_DINCOS_MASK \
159 					| STM32_MDMA_CTCR_LEN2_MSK \
160 					| STM32_MDMA_CTCR_TRGM_MSK)
161 
162 /* MDMA Channel x block number of data register */
163 #define STM32_MDMA_CBNDTR(x)		(0x54 + 0x40 * (x))
164 #define STM32_MDMA_CBNDTR_BRC_MK	GENMASK(31, 20)
165 #define STM32_MDMA_CBNDTR_BRC(n)	STM32_MDMA_SET(n, \
166 						       STM32_MDMA_CBNDTR_BRC_MK)
167 #define STM32_MDMA_CBNDTR_BRC_GET(n)	STM32_MDMA_GET((n), \
168 						       STM32_MDMA_CBNDTR_BRC_MK)
169 
170 #define STM32_MDMA_CBNDTR_BRDUM		BIT(19)
171 #define STM32_MDMA_CBNDTR_BRSUM		BIT(18)
172 #define STM32_MDMA_CBNDTR_BNDT_MASK	GENMASK(16, 0)
173 #define STM32_MDMA_CBNDTR_BNDT(n)	STM32_MDMA_SET(n, \
174 						    STM32_MDMA_CBNDTR_BNDT_MASK)
175 
176 /* MDMA Channel x source address register */
177 #define STM32_MDMA_CSAR(x)		(0x58 + 0x40 * (x))
178 
179 /* MDMA Channel x destination address register */
180 #define STM32_MDMA_CDAR(x)		(0x5C + 0x40 * (x))
181 
182 /* MDMA Channel x block repeat address update register */
183 #define STM32_MDMA_CBRUR(x)		(0x60 + 0x40 * (x))
184 #define STM32_MDMA_CBRUR_DUV_MASK	GENMASK(31, 16)
185 #define STM32_MDMA_CBRUR_DUV(n)		STM32_MDMA_SET(n, \
186 						      STM32_MDMA_CBRUR_DUV_MASK)
187 #define STM32_MDMA_CBRUR_SUV_MASK	GENMASK(15, 0)
188 #define STM32_MDMA_CBRUR_SUV(n)		STM32_MDMA_SET(n, \
189 						      STM32_MDMA_CBRUR_SUV_MASK)
190 
191 /* MDMA Channel x link address register */
192 #define STM32_MDMA_CLAR(x)		(0x64 + 0x40 * (x))
193 
194 /* MDMA Channel x trigger and bus selection register */
195 #define STM32_MDMA_CTBR(x)		(0x68 + 0x40 * (x))
196 #define STM32_MDMA_CTBR_DBUS		BIT(17)
197 #define STM32_MDMA_CTBR_SBUS		BIT(16)
198 #define STM32_MDMA_CTBR_TSEL_MASK	GENMASK(7, 0)
199 #define STM32_MDMA_CTBR_TSEL(n)		STM32_MDMA_SET(n, \
200 						      STM32_MDMA_CTBR_TSEL_MASK)
201 
202 /* MDMA Channel x mask address register */
203 #define STM32_MDMA_CMAR(x)		(0x70 + 0x40 * (x))
204 
205 /* MDMA Channel x mask data register */
206 #define STM32_MDMA_CMDR(x)		(0x74 + 0x40 * (x))
207 
208 #define STM32_MDMA_MAX_BUF_LEN		128
209 #define STM32_MDMA_MAX_BLOCK_LEN	65536
210 #define STM32_MDMA_MAX_CHANNELS		63
211 #define STM32_MDMA_MAX_REQUESTS		256
212 #define STM32_MDMA_MAX_BURST		128
213 #define STM32_MDMA_VERY_HIGH_PRIORITY	0x11
214 
215 enum stm32_mdma_trigger_mode {
216 	STM32_MDMA_BUFFER,
217 	STM32_MDMA_BLOCK,
218 	STM32_MDMA_BLOCK_REP,
219 	STM32_MDMA_LINKED_LIST,
220 };
221 
222 enum stm32_mdma_width {
223 	STM32_MDMA_BYTE,
224 	STM32_MDMA_HALF_WORD,
225 	STM32_MDMA_WORD,
226 	STM32_MDMA_DOUBLE_WORD,
227 };
228 
229 enum stm32_mdma_inc_mode {
230 	STM32_MDMA_FIXED = 0,
231 	STM32_MDMA_INC = 2,
232 	STM32_MDMA_DEC = 3,
233 };
234 
235 struct stm32_mdma_chan_config {
236 	u32 request;
237 	u32 priority_level;
238 	u32 transfer_config;
239 	u32 mask_addr;
240 	u32 mask_data;
241 };
242 
243 struct stm32_mdma_hwdesc {
244 	u32 ctcr;
245 	u32 cbndtr;
246 	u32 csar;
247 	u32 cdar;
248 	u32 cbrur;
249 	u32 clar;
250 	u32 ctbr;
251 	u32 dummy;
252 	u32 cmar;
253 	u32 cmdr;
254 } __aligned(64);
255 
256 struct stm32_mdma_desc_node {
257 	struct stm32_mdma_hwdesc *hwdesc;
258 	dma_addr_t hwdesc_phys;
259 };
260 
261 struct stm32_mdma_desc {
262 	struct virt_dma_desc vdesc;
263 	u32 ccr;
264 	bool cyclic;
265 	u32 count;
266 	struct stm32_mdma_desc_node node[];
267 };
268 
269 struct stm32_mdma_chan {
270 	struct virt_dma_chan vchan;
271 	struct dma_pool *desc_pool;
272 	u32 id;
273 	struct stm32_mdma_desc *desc;
274 	u32 curr_hwdesc;
275 	struct dma_slave_config dma_config;
276 	struct stm32_mdma_chan_config chan_config;
277 	bool busy;
278 	u32 mem_burst;
279 	u32 mem_width;
280 };
281 
282 struct stm32_mdma_device {
283 	struct dma_device ddev;
284 	void __iomem *base;
285 	struct clk *clk;
286 	int irq;
287 	struct reset_control *rst;
288 	u32 nr_channels;
289 	u32 nr_requests;
290 	u32 nr_ahb_addr_masks;
291 	struct stm32_mdma_chan chan[STM32_MDMA_MAX_CHANNELS];
292 	u32 ahb_addr_masks[];
293 };
294 
295 static struct stm32_mdma_device *stm32_mdma_get_dev(
296 	struct stm32_mdma_chan *chan)
297 {
298 	return container_of(chan->vchan.chan.device, struct stm32_mdma_device,
299 			    ddev);
300 }
301 
302 static struct stm32_mdma_chan *to_stm32_mdma_chan(struct dma_chan *c)
303 {
304 	return container_of(c, struct stm32_mdma_chan, vchan.chan);
305 }
306 
307 static struct stm32_mdma_desc *to_stm32_mdma_desc(struct virt_dma_desc *vdesc)
308 {
309 	return container_of(vdesc, struct stm32_mdma_desc, vdesc);
310 }
311 
312 static struct device *chan2dev(struct stm32_mdma_chan *chan)
313 {
314 	return &chan->vchan.chan.dev->device;
315 }
316 
317 static struct device *mdma2dev(struct stm32_mdma_device *mdma_dev)
318 {
319 	return mdma_dev->ddev.dev;
320 }
321 
322 static u32 stm32_mdma_read(struct stm32_mdma_device *dmadev, u32 reg)
323 {
324 	return readl_relaxed(dmadev->base + reg);
325 }
326 
327 static void stm32_mdma_write(struct stm32_mdma_device *dmadev, u32 reg, u32 val)
328 {
329 	writel_relaxed(val, dmadev->base + reg);
330 }
331 
332 static void stm32_mdma_set_bits(struct stm32_mdma_device *dmadev, u32 reg,
333 				u32 mask)
334 {
335 	void __iomem *addr = dmadev->base + reg;
336 
337 	writel_relaxed(readl_relaxed(addr) | mask, addr);
338 }
339 
340 static void stm32_mdma_clr_bits(struct stm32_mdma_device *dmadev, u32 reg,
341 				u32 mask)
342 {
343 	void __iomem *addr = dmadev->base + reg;
344 
345 	writel_relaxed(readl_relaxed(addr) & ~mask, addr);
346 }
347 
348 static struct stm32_mdma_desc *stm32_mdma_alloc_desc(
349 		struct stm32_mdma_chan *chan, u32 count)
350 {
351 	struct stm32_mdma_desc *desc;
352 	int i;
353 
354 	desc = kzalloc(offsetof(typeof(*desc), node[count]), GFP_NOWAIT);
355 	if (!desc)
356 		return NULL;
357 
358 	for (i = 0; i < count; i++) {
359 		desc->node[i].hwdesc =
360 			dma_pool_alloc(chan->desc_pool, GFP_NOWAIT,
361 				       &desc->node[i].hwdesc_phys);
362 		if (!desc->node[i].hwdesc)
363 			goto err;
364 	}
365 
366 	desc->count = count;
367 
368 	return desc;
369 
370 err:
371 	dev_err(chan2dev(chan), "Failed to allocate descriptor\n");
372 	while (--i >= 0)
373 		dma_pool_free(chan->desc_pool, desc->node[i].hwdesc,
374 			      desc->node[i].hwdesc_phys);
375 	kfree(desc);
376 	return NULL;
377 }
378 
379 static void stm32_mdma_desc_free(struct virt_dma_desc *vdesc)
380 {
381 	struct stm32_mdma_desc *desc = to_stm32_mdma_desc(vdesc);
382 	struct stm32_mdma_chan *chan = to_stm32_mdma_chan(vdesc->tx.chan);
383 	int i;
384 
385 	for (i = 0; i < desc->count; i++)
386 		dma_pool_free(chan->desc_pool, desc->node[i].hwdesc,
387 			      desc->node[i].hwdesc_phys);
388 	kfree(desc);
389 }
390 
391 static int stm32_mdma_get_width(struct stm32_mdma_chan *chan,
392 				enum dma_slave_buswidth width)
393 {
394 	switch (width) {
395 	case DMA_SLAVE_BUSWIDTH_1_BYTE:
396 	case DMA_SLAVE_BUSWIDTH_2_BYTES:
397 	case DMA_SLAVE_BUSWIDTH_4_BYTES:
398 	case DMA_SLAVE_BUSWIDTH_8_BYTES:
399 		return ffs(width) - 1;
400 	default:
401 		dev_err(chan2dev(chan), "Dma bus width %i not supported\n",
402 			width);
403 		return -EINVAL;
404 	}
405 }
406 
407 static enum dma_slave_buswidth stm32_mdma_get_max_width(dma_addr_t addr,
408 							u32 buf_len, u32 tlen)
409 {
410 	enum dma_slave_buswidth max_width = DMA_SLAVE_BUSWIDTH_8_BYTES;
411 
412 	for (max_width = DMA_SLAVE_BUSWIDTH_8_BYTES;
413 	     max_width > DMA_SLAVE_BUSWIDTH_1_BYTE;
414 	     max_width >>= 1) {
415 		/*
416 		 * Address and buffer length both have to be aligned on
417 		 * bus width
418 		 */
419 		if ((((buf_len | addr) & (max_width - 1)) == 0) &&
420 		    tlen >= max_width)
421 			break;
422 	}
423 
424 	return max_width;
425 }
426 
427 static u32 stm32_mdma_get_best_burst(u32 buf_len, u32 tlen, u32 max_burst,
428 				     enum dma_slave_buswidth width)
429 {
430 	u32 best_burst;
431 
432 	best_burst = min((u32)1 << __ffs(tlen | buf_len),
433 			 max_burst * width) / width;
434 
435 	return (best_burst > 0) ? best_burst : 1;
436 }
437 
438 static int stm32_mdma_disable_chan(struct stm32_mdma_chan *chan)
439 {
440 	struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
441 	u32 ccr, cisr, id, reg;
442 	int ret;
443 
444 	id = chan->id;
445 	reg = STM32_MDMA_CCR(id);
446 
447 	/* Disable interrupts */
448 	stm32_mdma_clr_bits(dmadev, reg, STM32_MDMA_CCR_IRQ_MASK);
449 
450 	ccr = stm32_mdma_read(dmadev, reg);
451 	if (ccr & STM32_MDMA_CCR_EN) {
452 		stm32_mdma_clr_bits(dmadev, reg, STM32_MDMA_CCR_EN);
453 
454 		/* Ensure that any ongoing transfer has been completed */
455 		ret = readl_relaxed_poll_timeout_atomic(
456 				dmadev->base + STM32_MDMA_CISR(id), cisr,
457 				(cisr & STM32_MDMA_CISR_CTCIF), 10, 1000);
458 		if (ret) {
459 			dev_err(chan2dev(chan), "%s: timeout!\n", __func__);
460 			return -EBUSY;
461 		}
462 	}
463 
464 	return 0;
465 }
466 
467 static void stm32_mdma_stop(struct stm32_mdma_chan *chan)
468 {
469 	struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
470 	u32 status;
471 	int ret;
472 
473 	/* Disable DMA */
474 	ret = stm32_mdma_disable_chan(chan);
475 	if (ret < 0)
476 		return;
477 
478 	/* Clear interrupt status if it is there */
479 	status = stm32_mdma_read(dmadev, STM32_MDMA_CISR(chan->id));
480 	if (status) {
481 		dev_dbg(chan2dev(chan), "%s(): clearing interrupt: 0x%08x\n",
482 			__func__, status);
483 		stm32_mdma_set_bits(dmadev, STM32_MDMA_CIFCR(chan->id), status);
484 	}
485 
486 	chan->busy = false;
487 }
488 
489 static void stm32_mdma_set_bus(struct stm32_mdma_device *dmadev, u32 *ctbr,
490 			       u32 ctbr_mask, u32 src_addr)
491 {
492 	u32 mask;
493 	int i;
494 
495 	/* Check if memory device is on AHB or AXI */
496 	*ctbr &= ~ctbr_mask;
497 	mask = src_addr & 0xF0000000;
498 	for (i = 0; i < dmadev->nr_ahb_addr_masks; i++) {
499 		if (mask == dmadev->ahb_addr_masks[i]) {
500 			*ctbr |= ctbr_mask;
501 			break;
502 		}
503 	}
504 }
505 
506 static int stm32_mdma_set_xfer_param(struct stm32_mdma_chan *chan,
507 				     enum dma_transfer_direction direction,
508 				     u32 *mdma_ccr, u32 *mdma_ctcr,
509 				     u32 *mdma_ctbr, dma_addr_t addr,
510 				     u32 buf_len)
511 {
512 	struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
513 	struct stm32_mdma_chan_config *chan_config = &chan->chan_config;
514 	enum dma_slave_buswidth src_addr_width, dst_addr_width;
515 	phys_addr_t src_addr, dst_addr;
516 	int src_bus_width, dst_bus_width;
517 	u32 src_maxburst, dst_maxburst, src_best_burst, dst_best_burst;
518 	u32 ccr, ctcr, ctbr, tlen;
519 
520 	src_addr_width = chan->dma_config.src_addr_width;
521 	dst_addr_width = chan->dma_config.dst_addr_width;
522 	src_maxburst = chan->dma_config.src_maxburst;
523 	dst_maxburst = chan->dma_config.dst_maxburst;
524 
525 	ccr = stm32_mdma_read(dmadev, STM32_MDMA_CCR(chan->id));
526 	ctcr = stm32_mdma_read(dmadev, STM32_MDMA_CTCR(chan->id));
527 	ctbr = stm32_mdma_read(dmadev, STM32_MDMA_CTBR(chan->id));
528 
529 	/* Enable HW request mode */
530 	ctcr &= ~STM32_MDMA_CTCR_SWRM;
531 
532 	/* Set DINC, SINC, DINCOS, SINCOS, TRGM and TLEN retrieve from DT */
533 	ctcr &= ~STM32_MDMA_CTCR_CFG_MASK;
534 	ctcr |= chan_config->transfer_config & STM32_MDMA_CTCR_CFG_MASK;
535 
536 	/*
537 	 * For buffer transfer length (TLEN) we have to set
538 	 * the number of bytes - 1 in CTCR register
539 	 */
540 	tlen = STM32_MDMA_CTCR_LEN2_GET(ctcr);
541 	ctcr &= ~STM32_MDMA_CTCR_LEN2_MSK;
542 	ctcr |= STM32_MDMA_CTCR_TLEN((tlen - 1));
543 
544 	/* Disable Pack Enable */
545 	ctcr &= ~STM32_MDMA_CTCR_PKE;
546 
547 	/* Check burst size constraints */
548 	if (src_maxburst * src_addr_width > STM32_MDMA_MAX_BURST ||
549 	    dst_maxburst * dst_addr_width > STM32_MDMA_MAX_BURST) {
550 		dev_err(chan2dev(chan),
551 			"burst size * bus width higher than %d bytes\n",
552 			STM32_MDMA_MAX_BURST);
553 		return -EINVAL;
554 	}
555 
556 	if ((!is_power_of_2(src_maxburst) && src_maxburst > 0) ||
557 	    (!is_power_of_2(dst_maxburst) && dst_maxburst > 0)) {
558 		dev_err(chan2dev(chan), "burst size must be a power of 2\n");
559 		return -EINVAL;
560 	}
561 
562 	/*
563 	 * Configure channel control:
564 	 * - Clear SW request as in this case this is a HW one
565 	 * - Clear WEX, HEX and BEX bits
566 	 * - Set priority level
567 	 */
568 	ccr &= ~(STM32_MDMA_CCR_SWRQ | STM32_MDMA_CCR_WEX | STM32_MDMA_CCR_HEX |
569 		 STM32_MDMA_CCR_BEX | STM32_MDMA_CCR_PL_MASK);
570 	ccr |= STM32_MDMA_CCR_PL(chan_config->priority_level);
571 
572 	/* Configure Trigger selection */
573 	ctbr &= ~STM32_MDMA_CTBR_TSEL_MASK;
574 	ctbr |= STM32_MDMA_CTBR_TSEL(chan_config->request);
575 
576 	switch (direction) {
577 	case DMA_MEM_TO_DEV:
578 		dst_addr = chan->dma_config.dst_addr;
579 
580 		/* Set device data size */
581 		dst_bus_width = stm32_mdma_get_width(chan, dst_addr_width);
582 		if (dst_bus_width < 0)
583 			return dst_bus_width;
584 		ctcr &= ~STM32_MDMA_CTCR_DSIZE_MASK;
585 		ctcr |= STM32_MDMA_CTCR_DSIZE(dst_bus_width);
586 
587 		/* Set device burst value */
588 		dst_best_burst = stm32_mdma_get_best_burst(buf_len, tlen,
589 							   dst_maxburst,
590 							   dst_addr_width);
591 		chan->mem_burst = dst_best_burst;
592 		ctcr &= ~STM32_MDMA_CTCR_DBURST_MASK;
593 		ctcr |= STM32_MDMA_CTCR_DBURST((ilog2(dst_best_burst)));
594 
595 		/* Set memory data size */
596 		src_addr_width = stm32_mdma_get_max_width(addr, buf_len, tlen);
597 		chan->mem_width = src_addr_width;
598 		src_bus_width = stm32_mdma_get_width(chan, src_addr_width);
599 		if (src_bus_width < 0)
600 			return src_bus_width;
601 		ctcr &= ~STM32_MDMA_CTCR_SSIZE_MASK |
602 			STM32_MDMA_CTCR_SINCOS_MASK;
603 		ctcr |= STM32_MDMA_CTCR_SSIZE(src_bus_width) |
604 			STM32_MDMA_CTCR_SINCOS(src_bus_width);
605 
606 		/* Set memory burst value */
607 		src_maxburst = STM32_MDMA_MAX_BUF_LEN / src_addr_width;
608 		src_best_burst = stm32_mdma_get_best_burst(buf_len, tlen,
609 							   src_maxburst,
610 							   src_addr_width);
611 		chan->mem_burst = src_best_burst;
612 		ctcr &= ~STM32_MDMA_CTCR_SBURST_MASK;
613 		ctcr |= STM32_MDMA_CTCR_SBURST((ilog2(src_best_burst)));
614 
615 		/* Select bus */
616 		stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_DBUS,
617 				   dst_addr);
618 
619 		if (dst_bus_width != src_bus_width)
620 			ctcr |= STM32_MDMA_CTCR_PKE;
621 
622 		/* Set destination address */
623 		stm32_mdma_write(dmadev, STM32_MDMA_CDAR(chan->id), dst_addr);
624 		break;
625 
626 	case DMA_DEV_TO_MEM:
627 		src_addr = chan->dma_config.src_addr;
628 
629 		/* Set device data size */
630 		src_bus_width = stm32_mdma_get_width(chan, src_addr_width);
631 		if (src_bus_width < 0)
632 			return src_bus_width;
633 		ctcr &= ~STM32_MDMA_CTCR_SSIZE_MASK;
634 		ctcr |= STM32_MDMA_CTCR_SSIZE(src_bus_width);
635 
636 		/* Set device burst value */
637 		src_best_burst = stm32_mdma_get_best_burst(buf_len, tlen,
638 							   src_maxburst,
639 							   src_addr_width);
640 		ctcr &= ~STM32_MDMA_CTCR_SBURST_MASK;
641 		ctcr |= STM32_MDMA_CTCR_SBURST((ilog2(src_best_burst)));
642 
643 		/* Set memory data size */
644 		dst_addr_width = stm32_mdma_get_max_width(addr, buf_len, tlen);
645 		chan->mem_width = dst_addr_width;
646 		dst_bus_width = stm32_mdma_get_width(chan, dst_addr_width);
647 		if (dst_bus_width < 0)
648 			return dst_bus_width;
649 		ctcr &= ~(STM32_MDMA_CTCR_DSIZE_MASK |
650 			STM32_MDMA_CTCR_DINCOS_MASK);
651 		ctcr |= STM32_MDMA_CTCR_DSIZE(dst_bus_width) |
652 			STM32_MDMA_CTCR_DINCOS(dst_bus_width);
653 
654 		/* Set memory burst value */
655 		dst_maxburst = STM32_MDMA_MAX_BUF_LEN / dst_addr_width;
656 		dst_best_burst = stm32_mdma_get_best_burst(buf_len, tlen,
657 							   dst_maxburst,
658 							   dst_addr_width);
659 		ctcr &= ~STM32_MDMA_CTCR_DBURST_MASK;
660 		ctcr |= STM32_MDMA_CTCR_DBURST((ilog2(dst_best_burst)));
661 
662 		/* Select bus */
663 		stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_SBUS,
664 				   src_addr);
665 
666 		if (dst_bus_width != src_bus_width)
667 			ctcr |= STM32_MDMA_CTCR_PKE;
668 
669 		/* Set source address */
670 		stm32_mdma_write(dmadev, STM32_MDMA_CSAR(chan->id), src_addr);
671 		break;
672 
673 	default:
674 		dev_err(chan2dev(chan), "Dma direction is not supported\n");
675 		return -EINVAL;
676 	}
677 
678 	*mdma_ccr = ccr;
679 	*mdma_ctcr = ctcr;
680 	*mdma_ctbr = ctbr;
681 
682 	return 0;
683 }
684 
685 static void stm32_mdma_dump_hwdesc(struct stm32_mdma_chan *chan,
686 				   struct stm32_mdma_desc_node *node)
687 {
688 	dev_dbg(chan2dev(chan), "hwdesc:  %pad\n", &node->hwdesc_phys);
689 	dev_dbg(chan2dev(chan), "CTCR:    0x%08x\n", node->hwdesc->ctcr);
690 	dev_dbg(chan2dev(chan), "CBNDTR:  0x%08x\n", node->hwdesc->cbndtr);
691 	dev_dbg(chan2dev(chan), "CSAR:    0x%08x\n", node->hwdesc->csar);
692 	dev_dbg(chan2dev(chan), "CDAR:    0x%08x\n", node->hwdesc->cdar);
693 	dev_dbg(chan2dev(chan), "CBRUR:   0x%08x\n", node->hwdesc->cbrur);
694 	dev_dbg(chan2dev(chan), "CLAR:    0x%08x\n", node->hwdesc->clar);
695 	dev_dbg(chan2dev(chan), "CTBR:    0x%08x\n", node->hwdesc->ctbr);
696 	dev_dbg(chan2dev(chan), "CMAR:    0x%08x\n", node->hwdesc->cmar);
697 	dev_dbg(chan2dev(chan), "CMDR:    0x%08x\n\n", node->hwdesc->cmdr);
698 }
699 
700 static void stm32_mdma_setup_hwdesc(struct stm32_mdma_chan *chan,
701 				    struct stm32_mdma_desc *desc,
702 				    enum dma_transfer_direction dir, u32 count,
703 				    dma_addr_t src_addr, dma_addr_t dst_addr,
704 				    u32 len, u32 ctcr, u32 ctbr, bool is_last,
705 				    bool is_first, bool is_cyclic)
706 {
707 	struct stm32_mdma_chan_config *config = &chan->chan_config;
708 	struct stm32_mdma_hwdesc *hwdesc;
709 	u32 next = count + 1;
710 
711 	hwdesc = desc->node[count].hwdesc;
712 	hwdesc->ctcr = ctcr;
713 	hwdesc->cbndtr &= ~(STM32_MDMA_CBNDTR_BRC_MK |
714 			STM32_MDMA_CBNDTR_BRDUM |
715 			STM32_MDMA_CBNDTR_BRSUM |
716 			STM32_MDMA_CBNDTR_BNDT_MASK);
717 	hwdesc->cbndtr |= STM32_MDMA_CBNDTR_BNDT(len);
718 	hwdesc->csar = src_addr;
719 	hwdesc->cdar = dst_addr;
720 	hwdesc->cbrur = 0;
721 	hwdesc->ctbr = ctbr;
722 	hwdesc->cmar = config->mask_addr;
723 	hwdesc->cmdr = config->mask_data;
724 
725 	if (is_last) {
726 		if (is_cyclic)
727 			hwdesc->clar = desc->node[0].hwdesc_phys;
728 		else
729 			hwdesc->clar = 0;
730 	} else {
731 		hwdesc->clar = desc->node[next].hwdesc_phys;
732 	}
733 
734 	stm32_mdma_dump_hwdesc(chan, &desc->node[count]);
735 }
736 
737 static int stm32_mdma_setup_xfer(struct stm32_mdma_chan *chan,
738 				 struct stm32_mdma_desc *desc,
739 				 struct scatterlist *sgl, u32 sg_len,
740 				 enum dma_transfer_direction direction)
741 {
742 	struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
743 	struct dma_slave_config *dma_config = &chan->dma_config;
744 	struct scatterlist *sg;
745 	dma_addr_t src_addr, dst_addr;
746 	u32 ccr, ctcr, ctbr;
747 	int i, ret = 0;
748 
749 	for_each_sg(sgl, sg, sg_len, i) {
750 		if (sg_dma_len(sg) > STM32_MDMA_MAX_BLOCK_LEN) {
751 			dev_err(chan2dev(chan), "Invalid block len\n");
752 			return -EINVAL;
753 		}
754 
755 		if (direction == DMA_MEM_TO_DEV) {
756 			src_addr = sg_dma_address(sg);
757 			dst_addr = dma_config->dst_addr;
758 			ret = stm32_mdma_set_xfer_param(chan, direction, &ccr,
759 							&ctcr, &ctbr, src_addr,
760 							sg_dma_len(sg));
761 			stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_SBUS,
762 					   src_addr);
763 		} else {
764 			src_addr = dma_config->src_addr;
765 			dst_addr = sg_dma_address(sg);
766 			ret = stm32_mdma_set_xfer_param(chan, direction, &ccr,
767 							&ctcr, &ctbr, dst_addr,
768 							sg_dma_len(sg));
769 			stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_DBUS,
770 					   dst_addr);
771 		}
772 
773 		if (ret < 0)
774 			return ret;
775 
776 		stm32_mdma_setup_hwdesc(chan, desc, direction, i, src_addr,
777 					dst_addr, sg_dma_len(sg), ctcr, ctbr,
778 					i == sg_len - 1, i == 0, false);
779 	}
780 
781 	/* Enable interrupts */
782 	ccr &= ~STM32_MDMA_CCR_IRQ_MASK;
783 	ccr |= STM32_MDMA_CCR_TEIE | STM32_MDMA_CCR_CTCIE;
784 	if (sg_len > 1)
785 		ccr |= STM32_MDMA_CCR_BTIE;
786 	desc->ccr = ccr;
787 
788 	return 0;
789 }
790 
791 static struct dma_async_tx_descriptor *
792 stm32_mdma_prep_slave_sg(struct dma_chan *c, struct scatterlist *sgl,
793 			 u32 sg_len, enum dma_transfer_direction direction,
794 			 unsigned long flags, void *context)
795 {
796 	struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
797 	struct stm32_mdma_desc *desc;
798 	int i, ret;
799 
800 	/*
801 	 * Once DMA is in setup cyclic mode the channel we cannot assign this
802 	 * channel anymore. The DMA channel needs to be aborted or terminated
803 	 * for allowing another request.
804 	 */
805 	if (chan->desc && chan->desc->cyclic) {
806 		dev_err(chan2dev(chan),
807 			"Request not allowed when dma in cyclic mode\n");
808 		return NULL;
809 	}
810 
811 	desc = stm32_mdma_alloc_desc(chan, sg_len);
812 	if (!desc)
813 		return NULL;
814 
815 	ret = stm32_mdma_setup_xfer(chan, desc, sgl, sg_len, direction);
816 	if (ret < 0)
817 		goto xfer_setup_err;
818 
819 	desc->cyclic = false;
820 
821 	return vchan_tx_prep(&chan->vchan, &desc->vdesc, flags);
822 
823 xfer_setup_err:
824 	for (i = 0; i < desc->count; i++)
825 		dma_pool_free(chan->desc_pool, desc->node[i].hwdesc,
826 			      desc->node[i].hwdesc_phys);
827 	kfree(desc);
828 	return NULL;
829 }
830 
831 static struct dma_async_tx_descriptor *
832 stm32_mdma_prep_dma_cyclic(struct dma_chan *c, dma_addr_t buf_addr,
833 			   size_t buf_len, size_t period_len,
834 			   enum dma_transfer_direction direction,
835 			   unsigned long flags)
836 {
837 	struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
838 	struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
839 	struct dma_slave_config *dma_config = &chan->dma_config;
840 	struct stm32_mdma_desc *desc;
841 	dma_addr_t src_addr, dst_addr;
842 	u32 ccr, ctcr, ctbr, count;
843 	int i, ret;
844 
845 	/*
846 	 * Once DMA is in setup cyclic mode the channel we cannot assign this
847 	 * channel anymore. The DMA channel needs to be aborted or terminated
848 	 * for allowing another request.
849 	 */
850 	if (chan->desc && chan->desc->cyclic) {
851 		dev_err(chan2dev(chan),
852 			"Request not allowed when dma in cyclic mode\n");
853 		return NULL;
854 	}
855 
856 	if (!buf_len || !period_len || period_len > STM32_MDMA_MAX_BLOCK_LEN) {
857 		dev_err(chan2dev(chan), "Invalid buffer/period len\n");
858 		return NULL;
859 	}
860 
861 	if (buf_len % period_len) {
862 		dev_err(chan2dev(chan), "buf_len not multiple of period_len\n");
863 		return NULL;
864 	}
865 
866 	count = buf_len / period_len;
867 
868 	desc = stm32_mdma_alloc_desc(chan, count);
869 	if (!desc)
870 		return NULL;
871 
872 	/* Select bus */
873 	if (direction == DMA_MEM_TO_DEV) {
874 		src_addr = buf_addr;
875 		ret = stm32_mdma_set_xfer_param(chan, direction, &ccr, &ctcr,
876 						&ctbr, src_addr, period_len);
877 		stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_SBUS,
878 				   src_addr);
879 	} else {
880 		dst_addr = buf_addr;
881 		ret = stm32_mdma_set_xfer_param(chan, direction, &ccr, &ctcr,
882 						&ctbr, dst_addr, period_len);
883 		stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_DBUS,
884 				   dst_addr);
885 	}
886 
887 	if (ret < 0)
888 		goto xfer_setup_err;
889 
890 	/* Enable interrupts */
891 	ccr &= ~STM32_MDMA_CCR_IRQ_MASK;
892 	ccr |= STM32_MDMA_CCR_TEIE | STM32_MDMA_CCR_CTCIE | STM32_MDMA_CCR_BTIE;
893 	desc->ccr = ccr;
894 
895 	/* Configure hwdesc list */
896 	for (i = 0; i < count; i++) {
897 		if (direction == DMA_MEM_TO_DEV) {
898 			src_addr = buf_addr + i * period_len;
899 			dst_addr = dma_config->dst_addr;
900 		} else {
901 			src_addr = dma_config->src_addr;
902 			dst_addr = buf_addr + i * period_len;
903 		}
904 
905 		stm32_mdma_setup_hwdesc(chan, desc, direction, i, src_addr,
906 					dst_addr, period_len, ctcr, ctbr,
907 					i == count - 1, i == 0, true);
908 	}
909 
910 	desc->cyclic = true;
911 
912 	return vchan_tx_prep(&chan->vchan, &desc->vdesc, flags);
913 
914 xfer_setup_err:
915 	for (i = 0; i < desc->count; i++)
916 		dma_pool_free(chan->desc_pool, desc->node[i].hwdesc,
917 			      desc->node[i].hwdesc_phys);
918 	kfree(desc);
919 	return NULL;
920 }
921 
922 static struct dma_async_tx_descriptor *
923 stm32_mdma_prep_dma_memcpy(struct dma_chan *c, dma_addr_t dest, dma_addr_t src,
924 			   size_t len, unsigned long flags)
925 {
926 	struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
927 	struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
928 	enum dma_slave_buswidth max_width;
929 	struct stm32_mdma_desc *desc;
930 	struct stm32_mdma_hwdesc *hwdesc;
931 	u32 ccr, ctcr, ctbr, cbndtr, count, max_burst, mdma_burst;
932 	u32 best_burst, tlen;
933 	size_t xfer_count, offset;
934 	int src_bus_width, dst_bus_width;
935 	int i;
936 
937 	/*
938 	 * Once DMA is in setup cyclic mode the channel we cannot assign this
939 	 * channel anymore. The DMA channel needs to be aborted or terminated
940 	 * to allow another request
941 	 */
942 	if (chan->desc && chan->desc->cyclic) {
943 		dev_err(chan2dev(chan),
944 			"Request not allowed when dma in cyclic mode\n");
945 		return NULL;
946 	}
947 
948 	count = DIV_ROUND_UP(len, STM32_MDMA_MAX_BLOCK_LEN);
949 	desc = stm32_mdma_alloc_desc(chan, count);
950 	if (!desc)
951 		return NULL;
952 
953 	ccr = stm32_mdma_read(dmadev, STM32_MDMA_CCR(chan->id));
954 	ctcr = stm32_mdma_read(dmadev, STM32_MDMA_CTCR(chan->id));
955 	ctbr = stm32_mdma_read(dmadev, STM32_MDMA_CTBR(chan->id));
956 	cbndtr = stm32_mdma_read(dmadev, STM32_MDMA_CBNDTR(chan->id));
957 
958 	/* Enable sw req, some interrupts and clear other bits */
959 	ccr &= ~(STM32_MDMA_CCR_WEX | STM32_MDMA_CCR_HEX |
960 		 STM32_MDMA_CCR_BEX | STM32_MDMA_CCR_PL_MASK |
961 		 STM32_MDMA_CCR_IRQ_MASK);
962 	ccr |= STM32_MDMA_CCR_TEIE;
963 
964 	/* Enable SW request mode, dest/src inc and clear other bits */
965 	ctcr &= ~(STM32_MDMA_CTCR_BWM | STM32_MDMA_CTCR_TRGM_MSK |
966 		  STM32_MDMA_CTCR_PAM_MASK | STM32_MDMA_CTCR_PKE |
967 		  STM32_MDMA_CTCR_TLEN_MSK | STM32_MDMA_CTCR_DBURST_MASK |
968 		  STM32_MDMA_CTCR_SBURST_MASK | STM32_MDMA_CTCR_DINCOS_MASK |
969 		  STM32_MDMA_CTCR_SINCOS_MASK | STM32_MDMA_CTCR_DSIZE_MASK |
970 		  STM32_MDMA_CTCR_SSIZE_MASK | STM32_MDMA_CTCR_DINC_MASK |
971 		  STM32_MDMA_CTCR_SINC_MASK);
972 	ctcr |= STM32_MDMA_CTCR_SWRM | STM32_MDMA_CTCR_SINC(STM32_MDMA_INC) |
973 		STM32_MDMA_CTCR_DINC(STM32_MDMA_INC);
974 
975 	/* Reset HW request */
976 	ctbr &= ~STM32_MDMA_CTBR_TSEL_MASK;
977 
978 	/* Select bus */
979 	stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_SBUS, src);
980 	stm32_mdma_set_bus(dmadev, &ctbr, STM32_MDMA_CTBR_DBUS, dest);
981 
982 	/* Clear CBNDTR registers */
983 	cbndtr &= ~(STM32_MDMA_CBNDTR_BRC_MK | STM32_MDMA_CBNDTR_BRDUM |
984 			STM32_MDMA_CBNDTR_BRSUM | STM32_MDMA_CBNDTR_BNDT_MASK);
985 
986 	if (len <= STM32_MDMA_MAX_BLOCK_LEN) {
987 		cbndtr |= STM32_MDMA_CBNDTR_BNDT(len);
988 		if (len <= STM32_MDMA_MAX_BUF_LEN) {
989 			/* Setup a buffer transfer */
990 			ccr |= STM32_MDMA_CCR_TCIE | STM32_MDMA_CCR_CTCIE;
991 			ctcr |= STM32_MDMA_CTCR_TRGM(STM32_MDMA_BUFFER);
992 		} else {
993 			/* Setup a block transfer */
994 			ccr |= STM32_MDMA_CCR_BTIE | STM32_MDMA_CCR_CTCIE;
995 			ctcr |= STM32_MDMA_CTCR_TRGM(STM32_MDMA_BLOCK);
996 		}
997 
998 		tlen = STM32_MDMA_MAX_BUF_LEN;
999 		ctcr |= STM32_MDMA_CTCR_TLEN((tlen - 1));
1000 
1001 		/* Set source best burst size */
1002 		max_width = stm32_mdma_get_max_width(src, len, tlen);
1003 		src_bus_width = stm32_mdma_get_width(chan, max_width);
1004 
1005 		max_burst = tlen / max_width;
1006 		best_burst = stm32_mdma_get_best_burst(len, tlen, max_burst,
1007 						       max_width);
1008 		mdma_burst = ilog2(best_burst);
1009 
1010 		ctcr |= STM32_MDMA_CTCR_SBURST(mdma_burst) |
1011 			STM32_MDMA_CTCR_SSIZE(src_bus_width) |
1012 			STM32_MDMA_CTCR_SINCOS(src_bus_width);
1013 
1014 		/* Set destination best burst size */
1015 		max_width = stm32_mdma_get_max_width(dest, len, tlen);
1016 		dst_bus_width = stm32_mdma_get_width(chan, max_width);
1017 
1018 		max_burst = tlen / max_width;
1019 		best_burst = stm32_mdma_get_best_burst(len, tlen, max_burst,
1020 						       max_width);
1021 		mdma_burst = ilog2(best_burst);
1022 
1023 		ctcr |= STM32_MDMA_CTCR_DBURST(mdma_burst) |
1024 			STM32_MDMA_CTCR_DSIZE(dst_bus_width) |
1025 			STM32_MDMA_CTCR_DINCOS(dst_bus_width);
1026 
1027 		if (dst_bus_width != src_bus_width)
1028 			ctcr |= STM32_MDMA_CTCR_PKE;
1029 
1030 		/* Prepare hardware descriptor */
1031 		hwdesc = desc->node[0].hwdesc;
1032 		hwdesc->ctcr = ctcr;
1033 		hwdesc->cbndtr = cbndtr;
1034 		hwdesc->csar = src;
1035 		hwdesc->cdar = dest;
1036 		hwdesc->cbrur = 0;
1037 		hwdesc->clar = 0;
1038 		hwdesc->ctbr = ctbr;
1039 		hwdesc->cmar = 0;
1040 		hwdesc->cmdr = 0;
1041 
1042 		stm32_mdma_dump_hwdesc(chan, &desc->node[0]);
1043 	} else {
1044 		/* Setup a LLI transfer */
1045 		ctcr |= STM32_MDMA_CTCR_TRGM(STM32_MDMA_LINKED_LIST) |
1046 			STM32_MDMA_CTCR_TLEN((STM32_MDMA_MAX_BUF_LEN - 1));
1047 		ccr |= STM32_MDMA_CCR_BTIE | STM32_MDMA_CCR_CTCIE;
1048 		tlen = STM32_MDMA_MAX_BUF_LEN;
1049 
1050 		for (i = 0, offset = 0; offset < len;
1051 		     i++, offset += xfer_count) {
1052 			xfer_count = min_t(size_t, len - offset,
1053 					   STM32_MDMA_MAX_BLOCK_LEN);
1054 
1055 			/* Set source best burst size */
1056 			max_width = stm32_mdma_get_max_width(src, len, tlen);
1057 			src_bus_width = stm32_mdma_get_width(chan, max_width);
1058 
1059 			max_burst = tlen / max_width;
1060 			best_burst = stm32_mdma_get_best_burst(len, tlen,
1061 							       max_burst,
1062 							       max_width);
1063 			mdma_burst = ilog2(best_burst);
1064 
1065 			ctcr |= STM32_MDMA_CTCR_SBURST(mdma_burst) |
1066 				STM32_MDMA_CTCR_SSIZE(src_bus_width) |
1067 				STM32_MDMA_CTCR_SINCOS(src_bus_width);
1068 
1069 			/* Set destination best burst size */
1070 			max_width = stm32_mdma_get_max_width(dest, len, tlen);
1071 			dst_bus_width = stm32_mdma_get_width(chan, max_width);
1072 
1073 			max_burst = tlen / max_width;
1074 			best_burst = stm32_mdma_get_best_burst(len, tlen,
1075 							       max_burst,
1076 							       max_width);
1077 			mdma_burst = ilog2(best_burst);
1078 
1079 			ctcr |= STM32_MDMA_CTCR_DBURST(mdma_burst) |
1080 				STM32_MDMA_CTCR_DSIZE(dst_bus_width) |
1081 				STM32_MDMA_CTCR_DINCOS(dst_bus_width);
1082 
1083 			if (dst_bus_width != src_bus_width)
1084 				ctcr |= STM32_MDMA_CTCR_PKE;
1085 
1086 			/* Prepare hardware descriptor */
1087 			stm32_mdma_setup_hwdesc(chan, desc, DMA_MEM_TO_MEM, i,
1088 						src + offset, dest + offset,
1089 						xfer_count, ctcr, ctbr,
1090 						i == count - 1, i == 0, false);
1091 		}
1092 	}
1093 
1094 	desc->ccr = ccr;
1095 
1096 	desc->cyclic = false;
1097 
1098 	return vchan_tx_prep(&chan->vchan, &desc->vdesc, flags);
1099 }
1100 
1101 static void stm32_mdma_dump_reg(struct stm32_mdma_chan *chan)
1102 {
1103 	struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
1104 
1105 	dev_dbg(chan2dev(chan), "CCR:     0x%08x\n",
1106 		stm32_mdma_read(dmadev, STM32_MDMA_CCR(chan->id)));
1107 	dev_dbg(chan2dev(chan), "CTCR:    0x%08x\n",
1108 		stm32_mdma_read(dmadev, STM32_MDMA_CTCR(chan->id)));
1109 	dev_dbg(chan2dev(chan), "CBNDTR:  0x%08x\n",
1110 		stm32_mdma_read(dmadev, STM32_MDMA_CBNDTR(chan->id)));
1111 	dev_dbg(chan2dev(chan), "CSAR:    0x%08x\n",
1112 		stm32_mdma_read(dmadev, STM32_MDMA_CSAR(chan->id)));
1113 	dev_dbg(chan2dev(chan), "CDAR:    0x%08x\n",
1114 		stm32_mdma_read(dmadev, STM32_MDMA_CDAR(chan->id)));
1115 	dev_dbg(chan2dev(chan), "CBRUR:   0x%08x\n",
1116 		stm32_mdma_read(dmadev, STM32_MDMA_CBRUR(chan->id)));
1117 	dev_dbg(chan2dev(chan), "CLAR:    0x%08x\n",
1118 		stm32_mdma_read(dmadev, STM32_MDMA_CLAR(chan->id)));
1119 	dev_dbg(chan2dev(chan), "CTBR:    0x%08x\n",
1120 		stm32_mdma_read(dmadev, STM32_MDMA_CTBR(chan->id)));
1121 	dev_dbg(chan2dev(chan), "CMAR:    0x%08x\n",
1122 		stm32_mdma_read(dmadev, STM32_MDMA_CMAR(chan->id)));
1123 	dev_dbg(chan2dev(chan), "CMDR:    0x%08x\n",
1124 		stm32_mdma_read(dmadev, STM32_MDMA_CMDR(chan->id)));
1125 }
1126 
1127 static void stm32_mdma_start_transfer(struct stm32_mdma_chan *chan)
1128 {
1129 	struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
1130 	struct virt_dma_desc *vdesc;
1131 	struct stm32_mdma_hwdesc *hwdesc;
1132 	u32 id = chan->id;
1133 	u32 status, reg;
1134 
1135 	vdesc = vchan_next_desc(&chan->vchan);
1136 	if (!vdesc) {
1137 		chan->desc = NULL;
1138 		return;
1139 	}
1140 
1141 	chan->desc = to_stm32_mdma_desc(vdesc);
1142 	hwdesc = chan->desc->node[0].hwdesc;
1143 	chan->curr_hwdesc = 0;
1144 
1145 	stm32_mdma_write(dmadev, STM32_MDMA_CCR(id), chan->desc->ccr);
1146 	stm32_mdma_write(dmadev, STM32_MDMA_CTCR(id), hwdesc->ctcr);
1147 	stm32_mdma_write(dmadev, STM32_MDMA_CBNDTR(id), hwdesc->cbndtr);
1148 	stm32_mdma_write(dmadev, STM32_MDMA_CSAR(id), hwdesc->csar);
1149 	stm32_mdma_write(dmadev, STM32_MDMA_CDAR(id), hwdesc->cdar);
1150 	stm32_mdma_write(dmadev, STM32_MDMA_CBRUR(id), hwdesc->cbrur);
1151 	stm32_mdma_write(dmadev, STM32_MDMA_CLAR(id), hwdesc->clar);
1152 	stm32_mdma_write(dmadev, STM32_MDMA_CTBR(id), hwdesc->ctbr);
1153 	stm32_mdma_write(dmadev, STM32_MDMA_CMAR(id), hwdesc->cmar);
1154 	stm32_mdma_write(dmadev, STM32_MDMA_CMDR(id), hwdesc->cmdr);
1155 
1156 	/* Clear interrupt status if it is there */
1157 	status = stm32_mdma_read(dmadev, STM32_MDMA_CISR(id));
1158 	if (status)
1159 		stm32_mdma_set_bits(dmadev, STM32_MDMA_CIFCR(id), status);
1160 
1161 	stm32_mdma_dump_reg(chan);
1162 
1163 	/* Start DMA */
1164 	stm32_mdma_set_bits(dmadev, STM32_MDMA_CCR(id), STM32_MDMA_CCR_EN);
1165 
1166 	/* Set SW request in case of MEM2MEM transfer */
1167 	if (hwdesc->ctcr & STM32_MDMA_CTCR_SWRM) {
1168 		reg = STM32_MDMA_CCR(id);
1169 		stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CCR_SWRQ);
1170 	}
1171 
1172 	chan->busy = true;
1173 
1174 	dev_dbg(chan2dev(chan), "vchan %pK: started\n", &chan->vchan);
1175 }
1176 
1177 static void stm32_mdma_issue_pending(struct dma_chan *c)
1178 {
1179 	struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
1180 	unsigned long flags;
1181 
1182 	spin_lock_irqsave(&chan->vchan.lock, flags);
1183 
1184 	if (!vchan_issue_pending(&chan->vchan))
1185 		goto end;
1186 
1187 	dev_dbg(chan2dev(chan), "vchan %pK: issued\n", &chan->vchan);
1188 
1189 	if (!chan->desc && !chan->busy)
1190 		stm32_mdma_start_transfer(chan);
1191 
1192 end:
1193 	spin_unlock_irqrestore(&chan->vchan.lock, flags);
1194 }
1195 
1196 static int stm32_mdma_pause(struct dma_chan *c)
1197 {
1198 	struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
1199 	unsigned long flags;
1200 	int ret;
1201 
1202 	spin_lock_irqsave(&chan->vchan.lock, flags);
1203 	ret = stm32_mdma_disable_chan(chan);
1204 	spin_unlock_irqrestore(&chan->vchan.lock, flags);
1205 
1206 	if (!ret)
1207 		dev_dbg(chan2dev(chan), "vchan %pK: pause\n", &chan->vchan);
1208 
1209 	return ret;
1210 }
1211 
1212 static int stm32_mdma_resume(struct dma_chan *c)
1213 {
1214 	struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
1215 	struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
1216 	struct stm32_mdma_hwdesc *hwdesc;
1217 	unsigned long flags;
1218 	u32 status, reg;
1219 
1220 	hwdesc = chan->desc->node[chan->curr_hwdesc].hwdesc;
1221 
1222 	spin_lock_irqsave(&chan->vchan.lock, flags);
1223 
1224 	/* Re-configure control register */
1225 	stm32_mdma_write(dmadev, STM32_MDMA_CCR(chan->id), chan->desc->ccr);
1226 
1227 	/* Clear interrupt status if it is there */
1228 	status = stm32_mdma_read(dmadev, STM32_MDMA_CISR(chan->id));
1229 	if (status)
1230 		stm32_mdma_set_bits(dmadev, STM32_MDMA_CIFCR(chan->id), status);
1231 
1232 	stm32_mdma_dump_reg(chan);
1233 
1234 	/* Re-start DMA */
1235 	reg = STM32_MDMA_CCR(chan->id);
1236 	stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CCR_EN);
1237 
1238 	/* Set SW request in case of MEM2MEM transfer */
1239 	if (hwdesc->ctcr & STM32_MDMA_CTCR_SWRM)
1240 		stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CCR_SWRQ);
1241 
1242 	spin_unlock_irqrestore(&chan->vchan.lock, flags);
1243 
1244 	dev_dbg(chan2dev(chan), "vchan %pK: resume\n", &chan->vchan);
1245 
1246 	return 0;
1247 }
1248 
1249 static int stm32_mdma_terminate_all(struct dma_chan *c)
1250 {
1251 	struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
1252 	unsigned long flags;
1253 	LIST_HEAD(head);
1254 
1255 	spin_lock_irqsave(&chan->vchan.lock, flags);
1256 	if (chan->busy) {
1257 		stm32_mdma_stop(chan);
1258 		chan->desc = NULL;
1259 	}
1260 	vchan_get_all_descriptors(&chan->vchan, &head);
1261 	spin_unlock_irqrestore(&chan->vchan.lock, flags);
1262 
1263 	vchan_dma_desc_free_list(&chan->vchan, &head);
1264 
1265 	return 0;
1266 }
1267 
1268 static void stm32_mdma_synchronize(struct dma_chan *c)
1269 {
1270 	struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
1271 
1272 	vchan_synchronize(&chan->vchan);
1273 }
1274 
1275 static int stm32_mdma_slave_config(struct dma_chan *c,
1276 				   struct dma_slave_config *config)
1277 {
1278 	struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
1279 
1280 	memcpy(&chan->dma_config, config, sizeof(*config));
1281 
1282 	return 0;
1283 }
1284 
1285 static size_t stm32_mdma_desc_residue(struct stm32_mdma_chan *chan,
1286 				      struct stm32_mdma_desc *desc,
1287 				      u32 curr_hwdesc)
1288 {
1289 	struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
1290 	struct stm32_mdma_hwdesc *hwdesc = desc->node[0].hwdesc;
1291 	u32 cbndtr, residue, modulo, burst_size;
1292 	int i;
1293 
1294 	residue = 0;
1295 	for (i = curr_hwdesc + 1; i < desc->count; i++) {
1296 		hwdesc = desc->node[i].hwdesc;
1297 		residue += STM32_MDMA_CBNDTR_BNDT(hwdesc->cbndtr);
1298 	}
1299 	cbndtr = stm32_mdma_read(dmadev, STM32_MDMA_CBNDTR(chan->id));
1300 	residue += cbndtr & STM32_MDMA_CBNDTR_BNDT_MASK;
1301 
1302 	if (!chan->mem_burst)
1303 		return residue;
1304 
1305 	burst_size = chan->mem_burst * chan->mem_width;
1306 	modulo = residue % burst_size;
1307 	if (modulo)
1308 		residue = residue - modulo + burst_size;
1309 
1310 	return residue;
1311 }
1312 
1313 static enum dma_status stm32_mdma_tx_status(struct dma_chan *c,
1314 					    dma_cookie_t cookie,
1315 					    struct dma_tx_state *state)
1316 {
1317 	struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
1318 	struct virt_dma_desc *vdesc;
1319 	enum dma_status status;
1320 	unsigned long flags;
1321 	u32 residue = 0;
1322 
1323 	status = dma_cookie_status(c, cookie, state);
1324 	if ((status == DMA_COMPLETE) || (!state))
1325 		return status;
1326 
1327 	spin_lock_irqsave(&chan->vchan.lock, flags);
1328 
1329 	vdesc = vchan_find_desc(&chan->vchan, cookie);
1330 	if (chan->desc && cookie == chan->desc->vdesc.tx.cookie)
1331 		residue = stm32_mdma_desc_residue(chan, chan->desc,
1332 						  chan->curr_hwdesc);
1333 	else if (vdesc)
1334 		residue = stm32_mdma_desc_residue(chan,
1335 						  to_stm32_mdma_desc(vdesc), 0);
1336 	dma_set_residue(state, residue);
1337 
1338 	spin_unlock_irqrestore(&chan->vchan.lock, flags);
1339 
1340 	return status;
1341 }
1342 
1343 static void stm32_mdma_xfer_end(struct stm32_mdma_chan *chan)
1344 {
1345 	list_del(&chan->desc->vdesc.node);
1346 	vchan_cookie_complete(&chan->desc->vdesc);
1347 	chan->desc = NULL;
1348 	chan->busy = false;
1349 
1350 	/* Start the next transfer if this driver has a next desc */
1351 	stm32_mdma_start_transfer(chan);
1352 }
1353 
1354 static irqreturn_t stm32_mdma_irq_handler(int irq, void *devid)
1355 {
1356 	struct stm32_mdma_device *dmadev = devid;
1357 	struct stm32_mdma_chan *chan = devid;
1358 	u32 reg, id, ien, status, flag;
1359 
1360 	/* Find out which channel generates the interrupt */
1361 	status = readl_relaxed(dmadev->base + STM32_MDMA_GISR0);
1362 	if (status) {
1363 		id = __ffs(status);
1364 	} else {
1365 		status = readl_relaxed(dmadev->base + STM32_MDMA_GISR1);
1366 		if (!status) {
1367 			dev_dbg(mdma2dev(dmadev), "spurious it\n");
1368 			return IRQ_NONE;
1369 		}
1370 		id = __ffs(status);
1371 		/*
1372 		 * As GISR0 provides status for channel id from 0 to 31,
1373 		 * so GISR1 provides status for channel id from 32 to 62
1374 		 */
1375 		id += 32;
1376 	}
1377 
1378 	chan = &dmadev->chan[id];
1379 	if (!chan) {
1380 		dev_err(chan2dev(chan), "MDMA channel not initialized\n");
1381 		goto exit;
1382 	}
1383 
1384 	/* Handle interrupt for the channel */
1385 	spin_lock(&chan->vchan.lock);
1386 	status = stm32_mdma_read(dmadev, STM32_MDMA_CISR(chan->id));
1387 	ien = stm32_mdma_read(dmadev, STM32_MDMA_CCR(chan->id));
1388 	ien &= STM32_MDMA_CCR_IRQ_MASK;
1389 	ien >>= 1;
1390 
1391 	if (!(status & ien)) {
1392 		spin_unlock(&chan->vchan.lock);
1393 		dev_dbg(chan2dev(chan),
1394 			"spurious it (status=0x%04x, ien=0x%04x)\n",
1395 			status, ien);
1396 		return IRQ_NONE;
1397 	}
1398 
1399 	flag = __ffs(status & ien);
1400 	reg = STM32_MDMA_CIFCR(chan->id);
1401 
1402 	switch (1 << flag) {
1403 	case STM32_MDMA_CISR_TEIF:
1404 		id = chan->id;
1405 		status = readl_relaxed(dmadev->base + STM32_MDMA_CESR(id));
1406 		dev_err(chan2dev(chan), "Transfer Err: stat=0x%08x\n", status);
1407 		stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CIFCR_CTEIF);
1408 		break;
1409 
1410 	case STM32_MDMA_CISR_CTCIF:
1411 		stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CIFCR_CCTCIF);
1412 		stm32_mdma_xfer_end(chan);
1413 		break;
1414 
1415 	case STM32_MDMA_CISR_BRTIF:
1416 		stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CIFCR_CBRTIF);
1417 		break;
1418 
1419 	case STM32_MDMA_CISR_BTIF:
1420 		stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CIFCR_CBTIF);
1421 		chan->curr_hwdesc++;
1422 		if (chan->desc && chan->desc->cyclic) {
1423 			if (chan->curr_hwdesc == chan->desc->count)
1424 				chan->curr_hwdesc = 0;
1425 			vchan_cyclic_callback(&chan->desc->vdesc);
1426 		}
1427 		break;
1428 
1429 	case STM32_MDMA_CISR_TCIF:
1430 		stm32_mdma_set_bits(dmadev, reg, STM32_MDMA_CIFCR_CLTCIF);
1431 		break;
1432 
1433 	default:
1434 		dev_err(chan2dev(chan), "it %d unhandled (status=0x%04x)\n",
1435 			1 << flag, status);
1436 	}
1437 
1438 	spin_unlock(&chan->vchan.lock);
1439 
1440 exit:
1441 	return IRQ_HANDLED;
1442 }
1443 
1444 static int stm32_mdma_alloc_chan_resources(struct dma_chan *c)
1445 {
1446 	struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
1447 	struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
1448 	int ret;
1449 
1450 	chan->desc_pool = dmam_pool_create(dev_name(&c->dev->device),
1451 					   c->device->dev,
1452 					   sizeof(struct stm32_mdma_hwdesc),
1453 					  __alignof__(struct stm32_mdma_hwdesc),
1454 					   0);
1455 	if (!chan->desc_pool) {
1456 		dev_err(chan2dev(chan), "failed to allocate descriptor pool\n");
1457 		return -ENOMEM;
1458 	}
1459 
1460 	ret = pm_runtime_get_sync(dmadev->ddev.dev);
1461 	if (ret < 0)
1462 		return ret;
1463 
1464 	ret = stm32_mdma_disable_chan(chan);
1465 	if (ret < 0)
1466 		pm_runtime_put(dmadev->ddev.dev);
1467 
1468 	return ret;
1469 }
1470 
1471 static void stm32_mdma_free_chan_resources(struct dma_chan *c)
1472 {
1473 	struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
1474 	struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
1475 	unsigned long flags;
1476 
1477 	dev_dbg(chan2dev(chan), "Freeing channel %d\n", chan->id);
1478 
1479 	if (chan->busy) {
1480 		spin_lock_irqsave(&chan->vchan.lock, flags);
1481 		stm32_mdma_stop(chan);
1482 		chan->desc = NULL;
1483 		spin_unlock_irqrestore(&chan->vchan.lock, flags);
1484 	}
1485 
1486 	pm_runtime_put(dmadev->ddev.dev);
1487 	vchan_free_chan_resources(to_virt_chan(c));
1488 	dmam_pool_destroy(chan->desc_pool);
1489 	chan->desc_pool = NULL;
1490 }
1491 
1492 static struct dma_chan *stm32_mdma_of_xlate(struct of_phandle_args *dma_spec,
1493 					    struct of_dma *ofdma)
1494 {
1495 	struct stm32_mdma_device *dmadev = ofdma->of_dma_data;
1496 	struct stm32_mdma_chan *chan;
1497 	struct dma_chan *c;
1498 	struct stm32_mdma_chan_config config;
1499 
1500 	if (dma_spec->args_count < 5) {
1501 		dev_err(mdma2dev(dmadev), "Bad number of args\n");
1502 		return NULL;
1503 	}
1504 
1505 	config.request = dma_spec->args[0];
1506 	config.priority_level = dma_spec->args[1];
1507 	config.transfer_config = dma_spec->args[2];
1508 	config.mask_addr = dma_spec->args[3];
1509 	config.mask_data = dma_spec->args[4];
1510 
1511 	if (config.request >= dmadev->nr_requests) {
1512 		dev_err(mdma2dev(dmadev), "Bad request line\n");
1513 		return NULL;
1514 	}
1515 
1516 	if (config.priority_level > STM32_MDMA_VERY_HIGH_PRIORITY) {
1517 		dev_err(mdma2dev(dmadev), "Priority level not supported\n");
1518 		return NULL;
1519 	}
1520 
1521 	c = dma_get_any_slave_channel(&dmadev->ddev);
1522 	if (!c) {
1523 		dev_err(mdma2dev(dmadev), "No more channels available\n");
1524 		return NULL;
1525 	}
1526 
1527 	chan = to_stm32_mdma_chan(c);
1528 	chan->chan_config = config;
1529 
1530 	return c;
1531 }
1532 
1533 static const struct of_device_id stm32_mdma_of_match[] = {
1534 	{ .compatible = "st,stm32h7-mdma", },
1535 	{ /* sentinel */ },
1536 };
1537 MODULE_DEVICE_TABLE(of, stm32_mdma_of_match);
1538 
1539 static int stm32_mdma_probe(struct platform_device *pdev)
1540 {
1541 	struct stm32_mdma_chan *chan;
1542 	struct stm32_mdma_device *dmadev;
1543 	struct dma_device *dd;
1544 	struct device_node *of_node;
1545 	struct resource *res;
1546 	u32 nr_channels, nr_requests;
1547 	int i, count, ret;
1548 
1549 	of_node = pdev->dev.of_node;
1550 	if (!of_node)
1551 		return -ENODEV;
1552 
1553 	ret = device_property_read_u32(&pdev->dev, "dma-channels",
1554 				       &nr_channels);
1555 	if (ret) {
1556 		nr_channels = STM32_MDMA_MAX_CHANNELS;
1557 		dev_warn(&pdev->dev, "MDMA defaulting on %i channels\n",
1558 			 nr_channels);
1559 	}
1560 
1561 	ret = device_property_read_u32(&pdev->dev, "dma-requests",
1562 				       &nr_requests);
1563 	if (ret) {
1564 		nr_requests = STM32_MDMA_MAX_REQUESTS;
1565 		dev_warn(&pdev->dev, "MDMA defaulting on %i request lines\n",
1566 			 nr_requests);
1567 	}
1568 
1569 	count = device_property_read_u32_array(&pdev->dev, "st,ahb-addr-masks",
1570 					       NULL, 0);
1571 	if (count < 0)
1572 		count = 0;
1573 
1574 	dmadev = devm_kzalloc(&pdev->dev, sizeof(*dmadev) + sizeof(u32) * count,
1575 			      GFP_KERNEL);
1576 	if (!dmadev)
1577 		return -ENOMEM;
1578 
1579 	dmadev->nr_channels = nr_channels;
1580 	dmadev->nr_requests = nr_requests;
1581 	device_property_read_u32_array(&pdev->dev, "st,ahb-addr-masks",
1582 				       dmadev->ahb_addr_masks,
1583 				       count);
1584 	dmadev->nr_ahb_addr_masks = count;
1585 
1586 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1587 	dmadev->base = devm_ioremap_resource(&pdev->dev, res);
1588 	if (IS_ERR(dmadev->base))
1589 		return PTR_ERR(dmadev->base);
1590 
1591 	dmadev->clk = devm_clk_get(&pdev->dev, NULL);
1592 	if (IS_ERR(dmadev->clk)) {
1593 		ret = PTR_ERR(dmadev->clk);
1594 		if (ret == -EPROBE_DEFER)
1595 			dev_info(&pdev->dev, "Missing controller clock\n");
1596 		return ret;
1597 	}
1598 
1599 	ret = clk_prepare_enable(dmadev->clk);
1600 	if (ret < 0) {
1601 		dev_err(&pdev->dev, "clk_prep_enable error: %d\n", ret);
1602 		return ret;
1603 	}
1604 
1605 	dmadev->rst = devm_reset_control_get(&pdev->dev, NULL);
1606 	if (!IS_ERR(dmadev->rst)) {
1607 		reset_control_assert(dmadev->rst);
1608 		udelay(2);
1609 		reset_control_deassert(dmadev->rst);
1610 	}
1611 
1612 	dd = &dmadev->ddev;
1613 	dma_cap_set(DMA_SLAVE, dd->cap_mask);
1614 	dma_cap_set(DMA_PRIVATE, dd->cap_mask);
1615 	dma_cap_set(DMA_CYCLIC, dd->cap_mask);
1616 	dma_cap_set(DMA_MEMCPY, dd->cap_mask);
1617 	dd->device_alloc_chan_resources = stm32_mdma_alloc_chan_resources;
1618 	dd->device_free_chan_resources = stm32_mdma_free_chan_resources;
1619 	dd->device_tx_status = stm32_mdma_tx_status;
1620 	dd->device_issue_pending = stm32_mdma_issue_pending;
1621 	dd->device_prep_slave_sg = stm32_mdma_prep_slave_sg;
1622 	dd->device_prep_dma_cyclic = stm32_mdma_prep_dma_cyclic;
1623 	dd->device_prep_dma_memcpy = stm32_mdma_prep_dma_memcpy;
1624 	dd->device_config = stm32_mdma_slave_config;
1625 	dd->device_pause = stm32_mdma_pause;
1626 	dd->device_resume = stm32_mdma_resume;
1627 	dd->device_terminate_all = stm32_mdma_terminate_all;
1628 	dd->device_synchronize = stm32_mdma_synchronize;
1629 	dd->src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) |
1630 		BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) |
1631 		BIT(DMA_SLAVE_BUSWIDTH_4_BYTES) |
1632 		BIT(DMA_SLAVE_BUSWIDTH_8_BYTES);
1633 	dd->dst_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) |
1634 		BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) |
1635 		BIT(DMA_SLAVE_BUSWIDTH_4_BYTES) |
1636 		BIT(DMA_SLAVE_BUSWIDTH_8_BYTES);
1637 	dd->directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV) |
1638 		BIT(DMA_MEM_TO_MEM);
1639 	dd->residue_granularity = DMA_RESIDUE_GRANULARITY_BURST;
1640 	dd->max_burst = STM32_MDMA_MAX_BURST;
1641 	dd->dev = &pdev->dev;
1642 	INIT_LIST_HEAD(&dd->channels);
1643 
1644 	for (i = 0; i < dmadev->nr_channels; i++) {
1645 		chan = &dmadev->chan[i];
1646 		chan->id = i;
1647 		chan->vchan.desc_free = stm32_mdma_desc_free;
1648 		vchan_init(&chan->vchan, dd);
1649 	}
1650 
1651 	dmadev->irq = platform_get_irq(pdev, 0);
1652 	if (dmadev->irq < 0) {
1653 		dev_err(&pdev->dev, "failed to get IRQ\n");
1654 		return dmadev->irq;
1655 	}
1656 
1657 	ret = devm_request_irq(&pdev->dev, dmadev->irq, stm32_mdma_irq_handler,
1658 			       0, dev_name(&pdev->dev), dmadev);
1659 	if (ret) {
1660 		dev_err(&pdev->dev, "failed to request IRQ\n");
1661 		return ret;
1662 	}
1663 
1664 	ret = dmaenginem_async_device_register(dd);
1665 	if (ret)
1666 		return ret;
1667 
1668 	ret = of_dma_controller_register(of_node, stm32_mdma_of_xlate, dmadev);
1669 	if (ret < 0) {
1670 		dev_err(&pdev->dev,
1671 			"STM32 MDMA DMA OF registration failed %d\n", ret);
1672 		goto err_unregister;
1673 	}
1674 
1675 	platform_set_drvdata(pdev, dmadev);
1676 	pm_runtime_set_active(&pdev->dev);
1677 	pm_runtime_enable(&pdev->dev);
1678 	pm_runtime_get_noresume(&pdev->dev);
1679 	pm_runtime_put(&pdev->dev);
1680 
1681 	dev_info(&pdev->dev, "STM32 MDMA driver registered\n");
1682 
1683 	return 0;
1684 
1685 err_unregister:
1686 	return ret;
1687 }
1688 
1689 #ifdef CONFIG_PM
1690 static int stm32_mdma_runtime_suspend(struct device *dev)
1691 {
1692 	struct stm32_mdma_device *dmadev = dev_get_drvdata(dev);
1693 
1694 	clk_disable_unprepare(dmadev->clk);
1695 
1696 	return 0;
1697 }
1698 
1699 static int stm32_mdma_runtime_resume(struct device *dev)
1700 {
1701 	struct stm32_mdma_device *dmadev = dev_get_drvdata(dev);
1702 	int ret;
1703 
1704 	ret = clk_prepare_enable(dmadev->clk);
1705 	if (ret) {
1706 		dev_err(dev, "failed to prepare_enable clock\n");
1707 		return ret;
1708 	}
1709 
1710 	return 0;
1711 }
1712 #endif
1713 
1714 static const struct dev_pm_ops stm32_mdma_pm_ops = {
1715 	SET_RUNTIME_PM_OPS(stm32_mdma_runtime_suspend,
1716 			   stm32_mdma_runtime_resume, NULL)
1717 };
1718 
1719 static struct platform_driver stm32_mdma_driver = {
1720 	.probe = stm32_mdma_probe,
1721 	.driver = {
1722 		.name = "stm32-mdma",
1723 		.of_match_table = stm32_mdma_of_match,
1724 		.pm = &stm32_mdma_pm_ops,
1725 	},
1726 };
1727 
1728 static int __init stm32_mdma_init(void)
1729 {
1730 	return platform_driver_register(&stm32_mdma_driver);
1731 }
1732 
1733 subsys_initcall(stm32_mdma_init);
1734 
1735 MODULE_DESCRIPTION("Driver for STM32 MDMA controller");
1736 MODULE_AUTHOR("M'boumba Cedric Madianga <cedric.madianga@gmail.com>");
1737 MODULE_AUTHOR("Pierre-Yves Mordret <pierre-yves.mordret@st.com>");
1738 MODULE_LICENSE("GPL v2");
1739