xref: /openbmc/linux/drivers/dma/sprd-dma.c (revision 160b8e75)
1 /*
2  * Copyright (C) 2017 Spreadtrum Communications Inc.
3  *
4  * SPDX-License-Identifier: GPL-2.0
5  */
6 
7 #include <linux/clk.h>
8 #include <linux/dma-mapping.h>
9 #include <linux/errno.h>
10 #include <linux/init.h>
11 #include <linux/interrupt.h>
12 #include <linux/io.h>
13 #include <linux/kernel.h>
14 #include <linux/module.h>
15 #include <linux/of.h>
16 #include <linux/of_dma.h>
17 #include <linux/of_device.h>
18 #include <linux/pm_runtime.h>
19 #include <linux/slab.h>
20 
21 #include "virt-dma.h"
22 
23 #define SPRD_DMA_CHN_REG_OFFSET		0x1000
24 #define SPRD_DMA_CHN_REG_LENGTH		0x40
25 #define SPRD_DMA_MEMCPY_MIN_SIZE	64
26 
27 /* DMA global registers definition */
28 #define SPRD_DMA_GLB_PAUSE		0x0
29 #define SPRD_DMA_GLB_FRAG_WAIT		0x4
30 #define SPRD_DMA_GLB_REQ_PEND0_EN	0x8
31 #define SPRD_DMA_GLB_REQ_PEND1_EN	0xc
32 #define SPRD_DMA_GLB_INT_RAW_STS	0x10
33 #define SPRD_DMA_GLB_INT_MSK_STS	0x14
34 #define SPRD_DMA_GLB_REQ_STS		0x18
35 #define SPRD_DMA_GLB_CHN_EN_STS		0x1c
36 #define SPRD_DMA_GLB_DEBUG_STS		0x20
37 #define SPRD_DMA_GLB_ARB_SEL_STS	0x24
38 #define SPRD_DMA_GLB_REQ_UID(uid)	(0x4 * ((uid) - 1))
39 #define SPRD_DMA_GLB_REQ_UID_OFFSET	0x2000
40 
41 /* DMA channel registers definition */
42 #define SPRD_DMA_CHN_PAUSE		0x0
43 #define SPRD_DMA_CHN_REQ		0x4
44 #define SPRD_DMA_CHN_CFG		0x8
45 #define SPRD_DMA_CHN_INTC		0xc
46 #define SPRD_DMA_CHN_SRC_ADDR		0x10
47 #define SPRD_DMA_CHN_DES_ADDR		0x14
48 #define SPRD_DMA_CHN_FRG_LEN		0x18
49 #define SPRD_DMA_CHN_BLK_LEN		0x1c
50 #define SPRD_DMA_CHN_TRSC_LEN		0x20
51 #define SPRD_DMA_CHN_TRSF_STEP		0x24
52 #define SPRD_DMA_CHN_WARP_PTR		0x28
53 #define SPRD_DMA_CHN_WARP_TO		0x2c
54 #define SPRD_DMA_CHN_LLIST_PTR		0x30
55 #define SPRD_DMA_CHN_FRAG_STEP		0x34
56 #define SPRD_DMA_CHN_SRC_BLK_STEP	0x38
57 #define SPRD_DMA_CHN_DES_BLK_STEP	0x3c
58 
59 /* SPRD_DMA_CHN_INTC register definition */
60 #define SPRD_DMA_INT_MASK		GENMASK(4, 0)
61 #define SPRD_DMA_INT_CLR_OFFSET		24
62 #define SPRD_DMA_FRAG_INT_EN		BIT(0)
63 #define SPRD_DMA_BLK_INT_EN		BIT(1)
64 #define SPRD_DMA_TRANS_INT_EN		BIT(2)
65 #define SPRD_DMA_LIST_INT_EN		BIT(3)
66 #define SPRD_DMA_CFG_ERR_INT_EN		BIT(4)
67 
68 /* SPRD_DMA_CHN_CFG register definition */
69 #define SPRD_DMA_CHN_EN			BIT(0)
70 #define SPRD_DMA_WAIT_BDONE_OFFSET	24
71 #define SPRD_DMA_DONOT_WAIT_BDONE	1
72 
73 /* SPRD_DMA_CHN_REQ register definition */
74 #define SPRD_DMA_REQ_EN			BIT(0)
75 
76 /* SPRD_DMA_CHN_PAUSE register definition */
77 #define SPRD_DMA_PAUSE_EN		BIT(0)
78 #define SPRD_DMA_PAUSE_STS		BIT(2)
79 #define SPRD_DMA_PAUSE_CNT		0x2000
80 
81 /* DMA_CHN_WARP_* register definition */
82 #define SPRD_DMA_HIGH_ADDR_MASK		GENMASK(31, 28)
83 #define SPRD_DMA_LOW_ADDR_MASK		GENMASK(31, 0)
84 #define SPRD_DMA_HIGH_ADDR_OFFSET	4
85 
86 /* SPRD_DMA_CHN_INTC register definition */
87 #define SPRD_DMA_FRAG_INT_STS		BIT(16)
88 #define SPRD_DMA_BLK_INT_STS		BIT(17)
89 #define SPRD_DMA_TRSC_INT_STS		BIT(18)
90 #define SPRD_DMA_LIST_INT_STS		BIT(19)
91 #define SPRD_DMA_CFGERR_INT_STS		BIT(20)
92 #define SPRD_DMA_CHN_INT_STS					\
93 	(SPRD_DMA_FRAG_INT_STS | SPRD_DMA_BLK_INT_STS |		\
94 	 SPRD_DMA_TRSC_INT_STS | SPRD_DMA_LIST_INT_STS |	\
95 	 SPRD_DMA_CFGERR_INT_STS)
96 
97 /* SPRD_DMA_CHN_FRG_LEN register definition */
98 #define SPRD_DMA_SRC_DATAWIDTH_OFFSET	30
99 #define SPRD_DMA_DES_DATAWIDTH_OFFSET	28
100 #define SPRD_DMA_SWT_MODE_OFFSET	26
101 #define SPRD_DMA_REQ_MODE_OFFSET	24
102 #define SPRD_DMA_REQ_MODE_MASK		GENMASK(1, 0)
103 #define SPRD_DMA_FIX_SEL_OFFSET		21
104 #define SPRD_DMA_FIX_EN_OFFSET		20
105 #define SPRD_DMA_LLIST_END_OFFSET	19
106 #define SPRD_DMA_FRG_LEN_MASK		GENMASK(16, 0)
107 
108 /* SPRD_DMA_CHN_BLK_LEN register definition */
109 #define SPRD_DMA_BLK_LEN_MASK		GENMASK(16, 0)
110 
111 /* SPRD_DMA_CHN_TRSC_LEN register definition */
112 #define SPRD_DMA_TRSC_LEN_MASK		GENMASK(27, 0)
113 
114 /* SPRD_DMA_CHN_TRSF_STEP register definition */
115 #define SPRD_DMA_DEST_TRSF_STEP_OFFSET	16
116 #define SPRD_DMA_SRC_TRSF_STEP_OFFSET	0
117 #define SPRD_DMA_TRSF_STEP_MASK		GENMASK(15, 0)
118 
119 #define SPRD_DMA_SOFTWARE_UID		0
120 
121 /*
122  * enum sprd_dma_req_mode: define the DMA request mode
123  * @SPRD_DMA_FRAG_REQ: fragment request mode
124  * @SPRD_DMA_BLK_REQ: block request mode
125  * @SPRD_DMA_TRANS_REQ: transaction request mode
126  * @SPRD_DMA_LIST_REQ: link-list request mode
127  *
128  * We have 4 types request mode: fragment mode, block mode, transaction mode
129  * and linklist mode. One transaction can contain several blocks, one block can
130  * contain several fragments. Link-list mode means we can save several DMA
131  * configuration into one reserved memory, then DMA can fetch each DMA
132  * configuration automatically to start transfer.
133  */
134 enum sprd_dma_req_mode {
135 	SPRD_DMA_FRAG_REQ,
136 	SPRD_DMA_BLK_REQ,
137 	SPRD_DMA_TRANS_REQ,
138 	SPRD_DMA_LIST_REQ,
139 };
140 
141 /*
142  * enum sprd_dma_int_type: define the DMA interrupt type
143  * @SPRD_DMA_NO_INT: do not need generate DMA interrupts.
144  * @SPRD_DMA_FRAG_INT: fragment done interrupt when one fragment request
145  * is done.
146  * @SPRD_DMA_BLK_INT: block done interrupt when one block request is done.
147  * @SPRD_DMA_BLK_FRAG_INT: block and fragment interrupt when one fragment
148  * or one block request is done.
149  * @SPRD_DMA_TRANS_INT: tansaction done interrupt when one transaction
150  * request is done.
151  * @SPRD_DMA_TRANS_FRAG_INT: transaction and fragment interrupt when one
152  * transaction request or fragment request is done.
153  * @SPRD_DMA_TRANS_BLK_INT: transaction and block interrupt when one
154  * transaction request or block request is done.
155  * @SPRD_DMA_LIST_INT: link-list done interrupt when one link-list request
156  * is done.
157  * @SPRD_DMA_CFGERR_INT: configure error interrupt when configuration is
158  * incorrect.
159  */
160 enum sprd_dma_int_type {
161 	SPRD_DMA_NO_INT,
162 	SPRD_DMA_FRAG_INT,
163 	SPRD_DMA_BLK_INT,
164 	SPRD_DMA_BLK_FRAG_INT,
165 	SPRD_DMA_TRANS_INT,
166 	SPRD_DMA_TRANS_FRAG_INT,
167 	SPRD_DMA_TRANS_BLK_INT,
168 	SPRD_DMA_LIST_INT,
169 	SPRD_DMA_CFGERR_INT,
170 };
171 
172 /* dma channel hardware configuration */
173 struct sprd_dma_chn_hw {
174 	u32 pause;
175 	u32 req;
176 	u32 cfg;
177 	u32 intc;
178 	u32 src_addr;
179 	u32 des_addr;
180 	u32 frg_len;
181 	u32 blk_len;
182 	u32 trsc_len;
183 	u32 trsf_step;
184 	u32 wrap_ptr;
185 	u32 wrap_to;
186 	u32 llist_ptr;
187 	u32 frg_step;
188 	u32 src_blk_step;
189 	u32 des_blk_step;
190 };
191 
192 /* dma request description */
193 struct sprd_dma_desc {
194 	struct virt_dma_desc	vd;
195 	struct sprd_dma_chn_hw	chn_hw;
196 };
197 
198 /* dma channel description */
199 struct sprd_dma_chn {
200 	struct virt_dma_chan	vc;
201 	void __iomem		*chn_base;
202 	u32			chn_num;
203 	u32			dev_id;
204 	struct sprd_dma_desc	*cur_desc;
205 };
206 
207 /* SPRD dma device */
208 struct sprd_dma_dev {
209 	struct dma_device	dma_dev;
210 	void __iomem		*glb_base;
211 	struct clk		*clk;
212 	struct clk		*ashb_clk;
213 	int			irq;
214 	u32			total_chns;
215 	struct sprd_dma_chn	channels[0];
216 };
217 
218 static bool sprd_dma_filter_fn(struct dma_chan *chan, void *param);
219 static struct of_dma_filter_info sprd_dma_info = {
220 	.filter_fn = sprd_dma_filter_fn,
221 };
222 
223 static inline struct sprd_dma_chn *to_sprd_dma_chan(struct dma_chan *c)
224 {
225 	return container_of(c, struct sprd_dma_chn, vc.chan);
226 }
227 
228 static inline struct sprd_dma_dev *to_sprd_dma_dev(struct dma_chan *c)
229 {
230 	struct sprd_dma_chn *schan = to_sprd_dma_chan(c);
231 
232 	return container_of(schan, struct sprd_dma_dev, channels[c->chan_id]);
233 }
234 
235 static inline struct sprd_dma_desc *to_sprd_dma_desc(struct virt_dma_desc *vd)
236 {
237 	return container_of(vd, struct sprd_dma_desc, vd);
238 }
239 
240 static void sprd_dma_chn_update(struct sprd_dma_chn *schan, u32 reg,
241 				u32 mask, u32 val)
242 {
243 	u32 orig = readl(schan->chn_base + reg);
244 	u32 tmp;
245 
246 	tmp = (orig & ~mask) | val;
247 	writel(tmp, schan->chn_base + reg);
248 }
249 
250 static int sprd_dma_enable(struct sprd_dma_dev *sdev)
251 {
252 	int ret;
253 
254 	ret = clk_prepare_enable(sdev->clk);
255 	if (ret)
256 		return ret;
257 
258 	/*
259 	 * The ashb_clk is optional and only for AGCP DMA controller, so we
260 	 * need add one condition to check if the ashb_clk need enable.
261 	 */
262 	if (!IS_ERR(sdev->ashb_clk))
263 		ret = clk_prepare_enable(sdev->ashb_clk);
264 
265 	return ret;
266 }
267 
268 static void sprd_dma_disable(struct sprd_dma_dev *sdev)
269 {
270 	clk_disable_unprepare(sdev->clk);
271 
272 	/*
273 	 * Need to check if we need disable the optional ashb_clk for AGCP DMA.
274 	 */
275 	if (!IS_ERR(sdev->ashb_clk))
276 		clk_disable_unprepare(sdev->ashb_clk);
277 }
278 
279 static void sprd_dma_set_uid(struct sprd_dma_chn *schan)
280 {
281 	struct sprd_dma_dev *sdev = to_sprd_dma_dev(&schan->vc.chan);
282 	u32 dev_id = schan->dev_id;
283 
284 	if (dev_id != SPRD_DMA_SOFTWARE_UID) {
285 		u32 uid_offset = SPRD_DMA_GLB_REQ_UID_OFFSET +
286 				 SPRD_DMA_GLB_REQ_UID(dev_id);
287 
288 		writel(schan->chn_num + 1, sdev->glb_base + uid_offset);
289 	}
290 }
291 
292 static void sprd_dma_unset_uid(struct sprd_dma_chn *schan)
293 {
294 	struct sprd_dma_dev *sdev = to_sprd_dma_dev(&schan->vc.chan);
295 	u32 dev_id = schan->dev_id;
296 
297 	if (dev_id != SPRD_DMA_SOFTWARE_UID) {
298 		u32 uid_offset = SPRD_DMA_GLB_REQ_UID_OFFSET +
299 				 SPRD_DMA_GLB_REQ_UID(dev_id);
300 
301 		writel(0, sdev->glb_base + uid_offset);
302 	}
303 }
304 
305 static void sprd_dma_clear_int(struct sprd_dma_chn *schan)
306 {
307 	sprd_dma_chn_update(schan, SPRD_DMA_CHN_INTC,
308 			    SPRD_DMA_INT_MASK << SPRD_DMA_INT_CLR_OFFSET,
309 			    SPRD_DMA_INT_MASK << SPRD_DMA_INT_CLR_OFFSET);
310 }
311 
312 static void sprd_dma_enable_chn(struct sprd_dma_chn *schan)
313 {
314 	sprd_dma_chn_update(schan, SPRD_DMA_CHN_CFG, SPRD_DMA_CHN_EN,
315 			    SPRD_DMA_CHN_EN);
316 }
317 
318 static void sprd_dma_disable_chn(struct sprd_dma_chn *schan)
319 {
320 	sprd_dma_chn_update(schan, SPRD_DMA_CHN_CFG, SPRD_DMA_CHN_EN, 0);
321 }
322 
323 static void sprd_dma_soft_request(struct sprd_dma_chn *schan)
324 {
325 	sprd_dma_chn_update(schan, SPRD_DMA_CHN_REQ, SPRD_DMA_REQ_EN,
326 			    SPRD_DMA_REQ_EN);
327 }
328 
329 static void sprd_dma_pause_resume(struct sprd_dma_chn *schan, bool enable)
330 {
331 	struct sprd_dma_dev *sdev = to_sprd_dma_dev(&schan->vc.chan);
332 	u32 pause, timeout = SPRD_DMA_PAUSE_CNT;
333 
334 	if (enable) {
335 		sprd_dma_chn_update(schan, SPRD_DMA_CHN_PAUSE,
336 				    SPRD_DMA_PAUSE_EN, SPRD_DMA_PAUSE_EN);
337 
338 		do {
339 			pause = readl(schan->chn_base + SPRD_DMA_CHN_PAUSE);
340 			if (pause & SPRD_DMA_PAUSE_STS)
341 				break;
342 
343 			cpu_relax();
344 		} while (--timeout > 0);
345 
346 		if (!timeout)
347 			dev_warn(sdev->dma_dev.dev,
348 				 "pause dma controller timeout\n");
349 	} else {
350 		sprd_dma_chn_update(schan, SPRD_DMA_CHN_PAUSE,
351 				    SPRD_DMA_PAUSE_EN, 0);
352 	}
353 }
354 
355 static void sprd_dma_stop_and_disable(struct sprd_dma_chn *schan)
356 {
357 	u32 cfg = readl(schan->chn_base + SPRD_DMA_CHN_CFG);
358 
359 	if (!(cfg & SPRD_DMA_CHN_EN))
360 		return;
361 
362 	sprd_dma_pause_resume(schan, true);
363 	sprd_dma_disable_chn(schan);
364 }
365 
366 static unsigned long sprd_dma_get_dst_addr(struct sprd_dma_chn *schan)
367 {
368 	unsigned long addr, addr_high;
369 
370 	addr = readl(schan->chn_base + SPRD_DMA_CHN_DES_ADDR);
371 	addr_high = readl(schan->chn_base + SPRD_DMA_CHN_WARP_TO) &
372 		    SPRD_DMA_HIGH_ADDR_MASK;
373 
374 	return addr | (addr_high << SPRD_DMA_HIGH_ADDR_OFFSET);
375 }
376 
377 static enum sprd_dma_int_type sprd_dma_get_int_type(struct sprd_dma_chn *schan)
378 {
379 	struct sprd_dma_dev *sdev = to_sprd_dma_dev(&schan->vc.chan);
380 	u32 intc_sts = readl(schan->chn_base + SPRD_DMA_CHN_INTC) &
381 		       SPRD_DMA_CHN_INT_STS;
382 
383 	switch (intc_sts) {
384 	case SPRD_DMA_CFGERR_INT_STS:
385 		return SPRD_DMA_CFGERR_INT;
386 
387 	case SPRD_DMA_LIST_INT_STS:
388 		return SPRD_DMA_LIST_INT;
389 
390 	case SPRD_DMA_TRSC_INT_STS:
391 		return SPRD_DMA_TRANS_INT;
392 
393 	case SPRD_DMA_BLK_INT_STS:
394 		return SPRD_DMA_BLK_INT;
395 
396 	case SPRD_DMA_FRAG_INT_STS:
397 		return SPRD_DMA_FRAG_INT;
398 
399 	default:
400 		dev_warn(sdev->dma_dev.dev, "incorrect dma interrupt type\n");
401 		return SPRD_DMA_NO_INT;
402 	}
403 }
404 
405 static enum sprd_dma_req_mode sprd_dma_get_req_type(struct sprd_dma_chn *schan)
406 {
407 	u32 frag_reg = readl(schan->chn_base + SPRD_DMA_CHN_FRG_LEN);
408 
409 	return (frag_reg >> SPRD_DMA_REQ_MODE_OFFSET) & SPRD_DMA_REQ_MODE_MASK;
410 }
411 
412 static void sprd_dma_set_chn_config(struct sprd_dma_chn *schan,
413 				    struct sprd_dma_desc *sdesc)
414 {
415 	struct sprd_dma_chn_hw *cfg = &sdesc->chn_hw;
416 
417 	writel(cfg->pause, schan->chn_base + SPRD_DMA_CHN_PAUSE);
418 	writel(cfg->cfg, schan->chn_base + SPRD_DMA_CHN_CFG);
419 	writel(cfg->intc, schan->chn_base + SPRD_DMA_CHN_INTC);
420 	writel(cfg->src_addr, schan->chn_base + SPRD_DMA_CHN_SRC_ADDR);
421 	writel(cfg->des_addr, schan->chn_base + SPRD_DMA_CHN_DES_ADDR);
422 	writel(cfg->frg_len, schan->chn_base + SPRD_DMA_CHN_FRG_LEN);
423 	writel(cfg->blk_len, schan->chn_base + SPRD_DMA_CHN_BLK_LEN);
424 	writel(cfg->trsc_len, schan->chn_base + SPRD_DMA_CHN_TRSC_LEN);
425 	writel(cfg->trsf_step, schan->chn_base + SPRD_DMA_CHN_TRSF_STEP);
426 	writel(cfg->wrap_ptr, schan->chn_base + SPRD_DMA_CHN_WARP_PTR);
427 	writel(cfg->wrap_to, schan->chn_base + SPRD_DMA_CHN_WARP_TO);
428 	writel(cfg->llist_ptr, schan->chn_base + SPRD_DMA_CHN_LLIST_PTR);
429 	writel(cfg->frg_step, schan->chn_base + SPRD_DMA_CHN_FRAG_STEP);
430 	writel(cfg->src_blk_step, schan->chn_base + SPRD_DMA_CHN_SRC_BLK_STEP);
431 	writel(cfg->des_blk_step, schan->chn_base + SPRD_DMA_CHN_DES_BLK_STEP);
432 	writel(cfg->req, schan->chn_base + SPRD_DMA_CHN_REQ);
433 }
434 
435 static void sprd_dma_start(struct sprd_dma_chn *schan)
436 {
437 	struct virt_dma_desc *vd = vchan_next_desc(&schan->vc);
438 
439 	if (!vd)
440 		return;
441 
442 	list_del(&vd->node);
443 	schan->cur_desc = to_sprd_dma_desc(vd);
444 
445 	/*
446 	 * Copy the DMA configuration from DMA descriptor to this hardware
447 	 * channel.
448 	 */
449 	sprd_dma_set_chn_config(schan, schan->cur_desc);
450 	sprd_dma_set_uid(schan);
451 	sprd_dma_enable_chn(schan);
452 
453 	if (schan->dev_id == SPRD_DMA_SOFTWARE_UID)
454 		sprd_dma_soft_request(schan);
455 }
456 
457 static void sprd_dma_stop(struct sprd_dma_chn *schan)
458 {
459 	sprd_dma_stop_and_disable(schan);
460 	sprd_dma_unset_uid(schan);
461 	sprd_dma_clear_int(schan);
462 }
463 
464 static bool sprd_dma_check_trans_done(struct sprd_dma_desc *sdesc,
465 				      enum sprd_dma_int_type int_type,
466 				      enum sprd_dma_req_mode req_mode)
467 {
468 	if (int_type == SPRD_DMA_NO_INT)
469 		return false;
470 
471 	if (int_type >= req_mode + 1)
472 		return true;
473 	else
474 		return false;
475 }
476 
477 static irqreturn_t dma_irq_handle(int irq, void *dev_id)
478 {
479 	struct sprd_dma_dev *sdev = (struct sprd_dma_dev *)dev_id;
480 	u32 irq_status = readl(sdev->glb_base + SPRD_DMA_GLB_INT_MSK_STS);
481 	struct sprd_dma_chn *schan;
482 	struct sprd_dma_desc *sdesc;
483 	enum sprd_dma_req_mode req_type;
484 	enum sprd_dma_int_type int_type;
485 	bool trans_done = false;
486 	u32 i;
487 
488 	while (irq_status) {
489 		i = __ffs(irq_status);
490 		irq_status &= (irq_status - 1);
491 		schan = &sdev->channels[i];
492 
493 		spin_lock(&schan->vc.lock);
494 		int_type = sprd_dma_get_int_type(schan);
495 		req_type = sprd_dma_get_req_type(schan);
496 		sprd_dma_clear_int(schan);
497 
498 		sdesc = schan->cur_desc;
499 
500 		/* Check if the dma request descriptor is done. */
501 		trans_done = sprd_dma_check_trans_done(sdesc, int_type,
502 						       req_type);
503 		if (trans_done == true) {
504 			vchan_cookie_complete(&sdesc->vd);
505 			schan->cur_desc = NULL;
506 			sprd_dma_start(schan);
507 		}
508 		spin_unlock(&schan->vc.lock);
509 	}
510 
511 	return IRQ_HANDLED;
512 }
513 
514 static int sprd_dma_alloc_chan_resources(struct dma_chan *chan)
515 {
516 	struct sprd_dma_chn *schan = to_sprd_dma_chan(chan);
517 	int ret;
518 
519 	ret = pm_runtime_get_sync(chan->device->dev);
520 	if (ret < 0)
521 		return ret;
522 
523 	schan->dev_id = SPRD_DMA_SOFTWARE_UID;
524 	return 0;
525 }
526 
527 static void sprd_dma_free_chan_resources(struct dma_chan *chan)
528 {
529 	struct sprd_dma_chn *schan = to_sprd_dma_chan(chan);
530 	unsigned long flags;
531 
532 	spin_lock_irqsave(&schan->vc.lock, flags);
533 	sprd_dma_stop(schan);
534 	spin_unlock_irqrestore(&schan->vc.lock, flags);
535 
536 	vchan_free_chan_resources(&schan->vc);
537 	pm_runtime_put(chan->device->dev);
538 }
539 
540 static enum dma_status sprd_dma_tx_status(struct dma_chan *chan,
541 					  dma_cookie_t cookie,
542 					  struct dma_tx_state *txstate)
543 {
544 	struct sprd_dma_chn *schan = to_sprd_dma_chan(chan);
545 	struct virt_dma_desc *vd;
546 	unsigned long flags;
547 	enum dma_status ret;
548 	u32 pos;
549 
550 	ret = dma_cookie_status(chan, cookie, txstate);
551 	if (ret == DMA_COMPLETE || !txstate)
552 		return ret;
553 
554 	spin_lock_irqsave(&schan->vc.lock, flags);
555 	vd = vchan_find_desc(&schan->vc, cookie);
556 	if (vd) {
557 		struct sprd_dma_desc *sdesc = to_sprd_dma_desc(vd);
558 		struct sprd_dma_chn_hw *hw = &sdesc->chn_hw;
559 
560 		if (hw->trsc_len > 0)
561 			pos = hw->trsc_len;
562 		else if (hw->blk_len > 0)
563 			pos = hw->blk_len;
564 		else if (hw->frg_len > 0)
565 			pos = hw->frg_len;
566 		else
567 			pos = 0;
568 	} else if (schan->cur_desc && schan->cur_desc->vd.tx.cookie == cookie) {
569 		pos = sprd_dma_get_dst_addr(schan);
570 	} else {
571 		pos = 0;
572 	}
573 	spin_unlock_irqrestore(&schan->vc.lock, flags);
574 
575 	dma_set_residue(txstate, pos);
576 	return ret;
577 }
578 
579 static void sprd_dma_issue_pending(struct dma_chan *chan)
580 {
581 	struct sprd_dma_chn *schan = to_sprd_dma_chan(chan);
582 	unsigned long flags;
583 
584 	spin_lock_irqsave(&schan->vc.lock, flags);
585 	if (vchan_issue_pending(&schan->vc) && !schan->cur_desc)
586 		sprd_dma_start(schan);
587 	spin_unlock_irqrestore(&schan->vc.lock, flags);
588 }
589 
590 static int sprd_dma_config(struct dma_chan *chan, struct sprd_dma_desc *sdesc,
591 			   dma_addr_t dest, dma_addr_t src, size_t len)
592 {
593 	struct sprd_dma_dev *sdev = to_sprd_dma_dev(chan);
594 	struct sprd_dma_chn_hw *hw = &sdesc->chn_hw;
595 	u32 datawidth, src_step, des_step, fragment_len;
596 	u32 block_len, req_mode, irq_mode, transcation_len;
597 	u32 fix_mode = 0, fix_en = 0;
598 
599 	if (IS_ALIGNED(len, 4)) {
600 		datawidth = 2;
601 		src_step = 4;
602 		des_step = 4;
603 	} else if (IS_ALIGNED(len, 2)) {
604 		datawidth = 1;
605 		src_step = 2;
606 		des_step = 2;
607 	} else {
608 		datawidth = 0;
609 		src_step = 1;
610 		des_step = 1;
611 	}
612 
613 	fragment_len = SPRD_DMA_MEMCPY_MIN_SIZE;
614 	if (len <= SPRD_DMA_BLK_LEN_MASK) {
615 		block_len = len;
616 		transcation_len = 0;
617 		req_mode = SPRD_DMA_BLK_REQ;
618 		irq_mode = SPRD_DMA_BLK_INT;
619 	} else {
620 		block_len = SPRD_DMA_MEMCPY_MIN_SIZE;
621 		transcation_len = len;
622 		req_mode = SPRD_DMA_TRANS_REQ;
623 		irq_mode = SPRD_DMA_TRANS_INT;
624 	}
625 
626 	hw->cfg = SPRD_DMA_DONOT_WAIT_BDONE << SPRD_DMA_WAIT_BDONE_OFFSET;
627 	hw->wrap_ptr = (u32)((src >> SPRD_DMA_HIGH_ADDR_OFFSET) &
628 			     SPRD_DMA_HIGH_ADDR_MASK);
629 	hw->wrap_to = (u32)((dest >> SPRD_DMA_HIGH_ADDR_OFFSET) &
630 			    SPRD_DMA_HIGH_ADDR_MASK);
631 
632 	hw->src_addr = (u32)(src & SPRD_DMA_LOW_ADDR_MASK);
633 	hw->des_addr = (u32)(dest & SPRD_DMA_LOW_ADDR_MASK);
634 
635 	if ((src_step != 0 && des_step != 0) || (src_step | des_step) == 0) {
636 		fix_en = 0;
637 	} else {
638 		fix_en = 1;
639 		if (src_step)
640 			fix_mode = 1;
641 		else
642 			fix_mode = 0;
643 	}
644 
645 	hw->frg_len = datawidth << SPRD_DMA_SRC_DATAWIDTH_OFFSET |
646 		datawidth << SPRD_DMA_DES_DATAWIDTH_OFFSET |
647 		req_mode << SPRD_DMA_REQ_MODE_OFFSET |
648 		fix_mode << SPRD_DMA_FIX_SEL_OFFSET |
649 		fix_en << SPRD_DMA_FIX_EN_OFFSET |
650 		(fragment_len & SPRD_DMA_FRG_LEN_MASK);
651 	hw->blk_len = block_len & SPRD_DMA_BLK_LEN_MASK;
652 
653 	hw->intc = SPRD_DMA_CFG_ERR_INT_EN;
654 
655 	switch (irq_mode) {
656 	case SPRD_DMA_NO_INT:
657 		break;
658 
659 	case SPRD_DMA_FRAG_INT:
660 		hw->intc |= SPRD_DMA_FRAG_INT_EN;
661 		break;
662 
663 	case SPRD_DMA_BLK_INT:
664 		hw->intc |= SPRD_DMA_BLK_INT_EN;
665 		break;
666 
667 	case SPRD_DMA_BLK_FRAG_INT:
668 		hw->intc |= SPRD_DMA_BLK_INT_EN | SPRD_DMA_FRAG_INT_EN;
669 		break;
670 
671 	case SPRD_DMA_TRANS_INT:
672 		hw->intc |= SPRD_DMA_TRANS_INT_EN;
673 		break;
674 
675 	case SPRD_DMA_TRANS_FRAG_INT:
676 		hw->intc |= SPRD_DMA_TRANS_INT_EN | SPRD_DMA_FRAG_INT_EN;
677 		break;
678 
679 	case SPRD_DMA_TRANS_BLK_INT:
680 		hw->intc |= SPRD_DMA_TRANS_INT_EN | SPRD_DMA_BLK_INT_EN;
681 		break;
682 
683 	case SPRD_DMA_LIST_INT:
684 		hw->intc |= SPRD_DMA_LIST_INT_EN;
685 		break;
686 
687 	case SPRD_DMA_CFGERR_INT:
688 		hw->intc |= SPRD_DMA_CFG_ERR_INT_EN;
689 		break;
690 
691 	default:
692 		dev_err(sdev->dma_dev.dev, "invalid irq mode\n");
693 		return -EINVAL;
694 	}
695 
696 	if (transcation_len == 0)
697 		hw->trsc_len = block_len & SPRD_DMA_TRSC_LEN_MASK;
698 	else
699 		hw->trsc_len = transcation_len & SPRD_DMA_TRSC_LEN_MASK;
700 
701 	hw->trsf_step = (des_step & SPRD_DMA_TRSF_STEP_MASK) <<
702 			SPRD_DMA_DEST_TRSF_STEP_OFFSET |
703 			(src_step & SPRD_DMA_TRSF_STEP_MASK) <<
704 			SPRD_DMA_SRC_TRSF_STEP_OFFSET;
705 
706 	hw->frg_step = 0;
707 	hw->src_blk_step = 0;
708 	hw->des_blk_step = 0;
709 	hw->src_blk_step = 0;
710 	return 0;
711 }
712 
713 static struct dma_async_tx_descriptor *
714 sprd_dma_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
715 			 size_t len, unsigned long flags)
716 {
717 	struct sprd_dma_chn *schan = to_sprd_dma_chan(chan);
718 	struct sprd_dma_desc *sdesc;
719 	int ret;
720 
721 	sdesc = kzalloc(sizeof(*sdesc), GFP_NOWAIT);
722 	if (!sdesc)
723 		return NULL;
724 
725 	ret = sprd_dma_config(chan, sdesc, dest, src, len);
726 	if (ret) {
727 		kfree(sdesc);
728 		return NULL;
729 	}
730 
731 	return vchan_tx_prep(&schan->vc, &sdesc->vd, flags);
732 }
733 
734 static int sprd_dma_pause(struct dma_chan *chan)
735 {
736 	struct sprd_dma_chn *schan = to_sprd_dma_chan(chan);
737 	unsigned long flags;
738 
739 	spin_lock_irqsave(&schan->vc.lock, flags);
740 	sprd_dma_pause_resume(schan, true);
741 	spin_unlock_irqrestore(&schan->vc.lock, flags);
742 
743 	return 0;
744 }
745 
746 static int sprd_dma_resume(struct dma_chan *chan)
747 {
748 	struct sprd_dma_chn *schan = to_sprd_dma_chan(chan);
749 	unsigned long flags;
750 
751 	spin_lock_irqsave(&schan->vc.lock, flags);
752 	sprd_dma_pause_resume(schan, false);
753 	spin_unlock_irqrestore(&schan->vc.lock, flags);
754 
755 	return 0;
756 }
757 
758 static int sprd_dma_terminate_all(struct dma_chan *chan)
759 {
760 	struct sprd_dma_chn *schan = to_sprd_dma_chan(chan);
761 	unsigned long flags;
762 	LIST_HEAD(head);
763 
764 	spin_lock_irqsave(&schan->vc.lock, flags);
765 	sprd_dma_stop(schan);
766 
767 	vchan_get_all_descriptors(&schan->vc, &head);
768 	spin_unlock_irqrestore(&schan->vc.lock, flags);
769 
770 	vchan_dma_desc_free_list(&schan->vc, &head);
771 	return 0;
772 }
773 
774 static void sprd_dma_free_desc(struct virt_dma_desc *vd)
775 {
776 	struct sprd_dma_desc *sdesc = to_sprd_dma_desc(vd);
777 
778 	kfree(sdesc);
779 }
780 
781 static bool sprd_dma_filter_fn(struct dma_chan *chan, void *param)
782 {
783 	struct sprd_dma_chn *schan = to_sprd_dma_chan(chan);
784 	struct sprd_dma_dev *sdev = to_sprd_dma_dev(&schan->vc.chan);
785 	u32 req = *(u32 *)param;
786 
787 	if (req < sdev->total_chns)
788 		return req == schan->chn_num + 1;
789 	else
790 		return false;
791 }
792 
793 static int sprd_dma_probe(struct platform_device *pdev)
794 {
795 	struct device_node *np = pdev->dev.of_node;
796 	struct sprd_dma_dev *sdev;
797 	struct sprd_dma_chn *dma_chn;
798 	struct resource *res;
799 	u32 chn_count;
800 	int ret, i;
801 
802 	ret = device_property_read_u32(&pdev->dev, "#dma-channels", &chn_count);
803 	if (ret) {
804 		dev_err(&pdev->dev, "get dma channels count failed\n");
805 		return ret;
806 	}
807 
808 	sdev = devm_kzalloc(&pdev->dev, sizeof(*sdev) +
809 			    sizeof(*dma_chn) * chn_count,
810 			    GFP_KERNEL);
811 	if (!sdev)
812 		return -ENOMEM;
813 
814 	sdev->clk = devm_clk_get(&pdev->dev, "enable");
815 	if (IS_ERR(sdev->clk)) {
816 		dev_err(&pdev->dev, "get enable clock failed\n");
817 		return PTR_ERR(sdev->clk);
818 	}
819 
820 	/* ashb clock is optional for AGCP DMA */
821 	sdev->ashb_clk = devm_clk_get(&pdev->dev, "ashb_eb");
822 	if (IS_ERR(sdev->ashb_clk))
823 		dev_warn(&pdev->dev, "no optional ashb eb clock\n");
824 
825 	/*
826 	 * We have three DMA controllers: AP DMA, AON DMA and AGCP DMA. For AGCP
827 	 * DMA controller, it can or do not request the irq, which will save
828 	 * system power without resuming system by DMA interrupts if AGCP DMA
829 	 * does not request the irq. Thus the DMA interrupts property should
830 	 * be optional.
831 	 */
832 	sdev->irq = platform_get_irq(pdev, 0);
833 	if (sdev->irq > 0) {
834 		ret = devm_request_irq(&pdev->dev, sdev->irq, dma_irq_handle,
835 				       0, "sprd_dma", (void *)sdev);
836 		if (ret < 0) {
837 			dev_err(&pdev->dev, "request dma irq failed\n");
838 			return ret;
839 		}
840 	} else {
841 		dev_warn(&pdev->dev, "no interrupts for the dma controller\n");
842 	}
843 
844 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
845 	sdev->glb_base = devm_ioremap_nocache(&pdev->dev, res->start,
846 					      resource_size(res));
847 	if (!sdev->glb_base)
848 		return -ENOMEM;
849 
850 	dma_cap_set(DMA_MEMCPY, sdev->dma_dev.cap_mask);
851 	sdev->total_chns = chn_count;
852 	sdev->dma_dev.chancnt = chn_count;
853 	INIT_LIST_HEAD(&sdev->dma_dev.channels);
854 	INIT_LIST_HEAD(&sdev->dma_dev.global_node);
855 	sdev->dma_dev.dev = &pdev->dev;
856 	sdev->dma_dev.device_alloc_chan_resources = sprd_dma_alloc_chan_resources;
857 	sdev->dma_dev.device_free_chan_resources = sprd_dma_free_chan_resources;
858 	sdev->dma_dev.device_tx_status = sprd_dma_tx_status;
859 	sdev->dma_dev.device_issue_pending = sprd_dma_issue_pending;
860 	sdev->dma_dev.device_prep_dma_memcpy = sprd_dma_prep_dma_memcpy;
861 	sdev->dma_dev.device_pause = sprd_dma_pause;
862 	sdev->dma_dev.device_resume = sprd_dma_resume;
863 	sdev->dma_dev.device_terminate_all = sprd_dma_terminate_all;
864 
865 	for (i = 0; i < chn_count; i++) {
866 		dma_chn = &sdev->channels[i];
867 		dma_chn->chn_num = i;
868 		dma_chn->cur_desc = NULL;
869 		/* get each channel's registers base address. */
870 		dma_chn->chn_base = sdev->glb_base + SPRD_DMA_CHN_REG_OFFSET +
871 				    SPRD_DMA_CHN_REG_LENGTH * i;
872 
873 		dma_chn->vc.desc_free = sprd_dma_free_desc;
874 		vchan_init(&dma_chn->vc, &sdev->dma_dev);
875 	}
876 
877 	platform_set_drvdata(pdev, sdev);
878 	ret = sprd_dma_enable(sdev);
879 	if (ret)
880 		return ret;
881 
882 	pm_runtime_set_active(&pdev->dev);
883 	pm_runtime_enable(&pdev->dev);
884 
885 	ret = pm_runtime_get_sync(&pdev->dev);
886 	if (ret < 0)
887 		goto err_rpm;
888 
889 	ret = dma_async_device_register(&sdev->dma_dev);
890 	if (ret < 0) {
891 		dev_err(&pdev->dev, "register dma device failed:%d\n", ret);
892 		goto err_register;
893 	}
894 
895 	sprd_dma_info.dma_cap = sdev->dma_dev.cap_mask;
896 	ret = of_dma_controller_register(np, of_dma_simple_xlate,
897 					 &sprd_dma_info);
898 	if (ret)
899 		goto err_of_register;
900 
901 	pm_runtime_put(&pdev->dev);
902 	return 0;
903 
904 err_of_register:
905 	dma_async_device_unregister(&sdev->dma_dev);
906 err_register:
907 	pm_runtime_put_noidle(&pdev->dev);
908 	pm_runtime_disable(&pdev->dev);
909 err_rpm:
910 	sprd_dma_disable(sdev);
911 	return ret;
912 }
913 
914 static int sprd_dma_remove(struct platform_device *pdev)
915 {
916 	struct sprd_dma_dev *sdev = platform_get_drvdata(pdev);
917 	struct sprd_dma_chn *c, *cn;
918 	int ret;
919 
920 	ret = pm_runtime_get_sync(&pdev->dev);
921 	if (ret < 0)
922 		return ret;
923 
924 	/* explicitly free the irq */
925 	if (sdev->irq > 0)
926 		devm_free_irq(&pdev->dev, sdev->irq, sdev);
927 
928 	list_for_each_entry_safe(c, cn, &sdev->dma_dev.channels,
929 				 vc.chan.device_node) {
930 		list_del(&c->vc.chan.device_node);
931 		tasklet_kill(&c->vc.task);
932 	}
933 
934 	of_dma_controller_free(pdev->dev.of_node);
935 	dma_async_device_unregister(&sdev->dma_dev);
936 	sprd_dma_disable(sdev);
937 
938 	pm_runtime_put_noidle(&pdev->dev);
939 	pm_runtime_disable(&pdev->dev);
940 	return 0;
941 }
942 
943 static const struct of_device_id sprd_dma_match[] = {
944 	{ .compatible = "sprd,sc9860-dma", },
945 	{},
946 };
947 
948 static int __maybe_unused sprd_dma_runtime_suspend(struct device *dev)
949 {
950 	struct sprd_dma_dev *sdev = dev_get_drvdata(dev);
951 
952 	sprd_dma_disable(sdev);
953 	return 0;
954 }
955 
956 static int __maybe_unused sprd_dma_runtime_resume(struct device *dev)
957 {
958 	struct sprd_dma_dev *sdev = dev_get_drvdata(dev);
959 	int ret;
960 
961 	ret = sprd_dma_enable(sdev);
962 	if (ret)
963 		dev_err(sdev->dma_dev.dev, "enable dma failed\n");
964 
965 	return ret;
966 }
967 
968 static const struct dev_pm_ops sprd_dma_pm_ops = {
969 	SET_RUNTIME_PM_OPS(sprd_dma_runtime_suspend,
970 			   sprd_dma_runtime_resume,
971 			   NULL)
972 };
973 
974 static struct platform_driver sprd_dma_driver = {
975 	.probe = sprd_dma_probe,
976 	.remove = sprd_dma_remove,
977 	.driver = {
978 		.name = "sprd-dma",
979 		.of_match_table = sprd_dma_match,
980 		.pm = &sprd_dma_pm_ops,
981 	},
982 };
983 module_platform_driver(sprd_dma_driver);
984 
985 MODULE_LICENSE("GPL v2");
986 MODULE_DESCRIPTION("DMA driver for Spreadtrum");
987 MODULE_AUTHOR("Baolin Wang <baolin.wang@spreadtrum.com>");
988 MODULE_ALIAS("platform:sprd-dma");
989