xref: /linux/drivers/dma/ioat/dma.c (revision 599d49de7f69cb5a23e913db24e168ba2f09bd05)
1 /*
2  * Intel I/OAT DMA Linux driver
3  * Copyright(c) 2004 - 2015 Intel Corporation.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms and conditions of the GNU General Public License,
7  * version 2, as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  *
14  * The full GNU General Public License is included in this distribution in
15  * the file called "COPYING".
16  *
17  */
18 
19 /*
20  * This driver supports an Intel I/OAT DMA engine, which does asynchronous
21  * copy operations.
22  */
23 
24 #include <linux/init.h>
25 #include <linux/module.h>
26 #include <linux/slab.h>
27 #include <linux/pci.h>
28 #include <linux/interrupt.h>
29 #include <linux/dmaengine.h>
30 #include <linux/delay.h>
31 #include <linux/dma-mapping.h>
32 #include <linux/workqueue.h>
33 #include <linux/prefetch.h>
34 #include "dma.h"
35 #include "registers.h"
36 #include "hw.h"
37 
38 #include "../dmaengine.h"
39 
40 /**
41  * ioat_dma_do_interrupt - handler used for single vector interrupt mode
42  * @irq: interrupt id
43  * @data: interrupt data
44  */
45 irqreturn_t ioat_dma_do_interrupt(int irq, void *data)
46 {
47 	struct ioatdma_device *instance = data;
48 	struct ioatdma_chan *ioat_chan;
49 	unsigned long attnstatus;
50 	int bit;
51 	u8 intrctrl;
52 
53 	intrctrl = readb(instance->reg_base + IOAT_INTRCTRL_OFFSET);
54 
55 	if (!(intrctrl & IOAT_INTRCTRL_MASTER_INT_EN))
56 		return IRQ_NONE;
57 
58 	if (!(intrctrl & IOAT_INTRCTRL_INT_STATUS)) {
59 		writeb(intrctrl, instance->reg_base + IOAT_INTRCTRL_OFFSET);
60 		return IRQ_NONE;
61 	}
62 
63 	attnstatus = readl(instance->reg_base + IOAT_ATTNSTATUS_OFFSET);
64 	for_each_set_bit(bit, &attnstatus, BITS_PER_LONG) {
65 		ioat_chan = ioat_chan_by_index(instance, bit);
66 		if (test_bit(IOAT_RUN, &ioat_chan->state))
67 			tasklet_schedule(&ioat_chan->cleanup_task);
68 	}
69 
70 	writeb(intrctrl, instance->reg_base + IOAT_INTRCTRL_OFFSET);
71 	return IRQ_HANDLED;
72 }
73 
74 /**
75  * ioat_dma_do_interrupt_msix - handler used for vector-per-channel interrupt mode
76  * @irq: interrupt id
77  * @data: interrupt data
78  */
79 irqreturn_t ioat_dma_do_interrupt_msix(int irq, void *data)
80 {
81 	struct ioatdma_chan *ioat_chan = data;
82 
83 	if (test_bit(IOAT_RUN, &ioat_chan->state))
84 		tasklet_schedule(&ioat_chan->cleanup_task);
85 
86 	return IRQ_HANDLED;
87 }
88 
89 void ioat_stop(struct ioatdma_chan *ioat_chan)
90 {
91 	struct ioatdma_device *ioat_dma = ioat_chan->ioat_dma;
92 	struct pci_dev *pdev = ioat_dma->pdev;
93 	int chan_id = chan_num(ioat_chan);
94 	struct msix_entry *msix;
95 
96 	/* 1/ stop irq from firing tasklets
97 	 * 2/ stop the tasklet from re-arming irqs
98 	 */
99 	clear_bit(IOAT_RUN, &ioat_chan->state);
100 
101 	/* flush inflight interrupts */
102 	switch (ioat_dma->irq_mode) {
103 	case IOAT_MSIX:
104 		msix = &ioat_dma->msix_entries[chan_id];
105 		synchronize_irq(msix->vector);
106 		break;
107 	case IOAT_MSI:
108 	case IOAT_INTX:
109 		synchronize_irq(pdev->irq);
110 		break;
111 	default:
112 		break;
113 	}
114 
115 	/* flush inflight timers */
116 	del_timer_sync(&ioat_chan->timer);
117 
118 	/* flush inflight tasklet runs */
119 	tasklet_kill(&ioat_chan->cleanup_task);
120 
121 	/* final cleanup now that everything is quiesced and can't re-arm */
122 	ioat_dma->cleanup_fn((unsigned long)&ioat_chan->dma_chan);
123 }
124 
125 dma_addr_t ioat_get_current_completion(struct ioatdma_chan *ioat_chan)
126 {
127 	dma_addr_t phys_complete;
128 	u64 completion;
129 
130 	completion = *ioat_chan->completion;
131 	phys_complete = ioat_chansts_to_addr(completion);
132 
133 	dev_dbg(to_dev(ioat_chan), "%s: phys_complete: %#llx\n", __func__,
134 		(unsigned long long) phys_complete);
135 
136 	if (is_ioat_halted(completion)) {
137 		u32 chanerr = readl(ioat_chan->reg_base + IOAT_CHANERR_OFFSET);
138 
139 		dev_err(to_dev(ioat_chan), "Channel halted, chanerr = %x\n",
140 			chanerr);
141 
142 		/* TODO do something to salvage the situation */
143 	}
144 
145 	return phys_complete;
146 }
147 
148 bool ioat_cleanup_preamble(struct ioatdma_chan *ioat_chan,
149 			   dma_addr_t *phys_complete)
150 {
151 	*phys_complete = ioat_get_current_completion(ioat_chan);
152 	if (*phys_complete == ioat_chan->last_completion)
153 		return false;
154 	clear_bit(IOAT_COMPLETION_ACK, &ioat_chan->state);
155 	mod_timer(&ioat_chan->timer, jiffies + COMPLETION_TIMEOUT);
156 
157 	return true;
158 }
159 
160 enum dma_status
161 ioat_dma_tx_status(struct dma_chan *c, dma_cookie_t cookie,
162 		   struct dma_tx_state *txstate)
163 {
164 	struct ioatdma_chan *ioat_chan = to_ioat_chan(c);
165 	struct ioatdma_device *ioat_dma = ioat_chan->ioat_dma;
166 	enum dma_status ret;
167 
168 	ret = dma_cookie_status(c, cookie, txstate);
169 	if (ret == DMA_COMPLETE)
170 		return ret;
171 
172 	ioat_dma->cleanup_fn((unsigned long) c);
173 
174 	return dma_cookie_status(c, cookie, txstate);
175 }
176 
177 void __ioat_issue_pending(struct ioatdma_chan *ioat_chan)
178 {
179 	ioat_chan->dmacount += ioat_ring_pending(ioat_chan);
180 	ioat_chan->issued = ioat_chan->head;
181 	writew(ioat_chan->dmacount,
182 	       ioat_chan->reg_base + IOAT_CHAN_DMACOUNT_OFFSET);
183 	dev_dbg(to_dev(ioat_chan),
184 		"%s: head: %#x tail: %#x issued: %#x count: %#x\n",
185 		__func__, ioat_chan->head, ioat_chan->tail,
186 		ioat_chan->issued, ioat_chan->dmacount);
187 }
188 
189 void ioat_issue_pending(struct dma_chan *c)
190 {
191 	struct ioatdma_chan *ioat_chan = to_ioat_chan(c);
192 
193 	if (ioat_ring_pending(ioat_chan)) {
194 		spin_lock_bh(&ioat_chan->prep_lock);
195 		__ioat_issue_pending(ioat_chan);
196 		spin_unlock_bh(&ioat_chan->prep_lock);
197 	}
198 }
199 
200 /**
201  * ioat_update_pending - log pending descriptors
202  * @ioat: ioat+ channel
203  *
204  * Check if the number of unsubmitted descriptors has exceeded the
205  * watermark.  Called with prep_lock held
206  */
207 static void ioat_update_pending(struct ioatdma_chan *ioat_chan)
208 {
209 	if (ioat_ring_pending(ioat_chan) > ioat_pending_level)
210 		__ioat_issue_pending(ioat_chan);
211 }
212 
213 static void __ioat_start_null_desc(struct ioatdma_chan *ioat_chan)
214 {
215 	struct ioat_ring_ent *desc;
216 	struct ioat_dma_descriptor *hw;
217 
218 	if (ioat_ring_space(ioat_chan) < 1) {
219 		dev_err(to_dev(ioat_chan),
220 			"Unable to start null desc - ring full\n");
221 		return;
222 	}
223 
224 	dev_dbg(to_dev(ioat_chan),
225 		"%s: head: %#x tail: %#x issued: %#x\n",
226 		__func__, ioat_chan->head, ioat_chan->tail, ioat_chan->issued);
227 	desc = ioat_get_ring_ent(ioat_chan, ioat_chan->head);
228 
229 	hw = desc->hw;
230 	hw->ctl = 0;
231 	hw->ctl_f.null = 1;
232 	hw->ctl_f.int_en = 1;
233 	hw->ctl_f.compl_write = 1;
234 	/* set size to non-zero value (channel returns error when size is 0) */
235 	hw->size = NULL_DESC_BUFFER_SIZE;
236 	hw->src_addr = 0;
237 	hw->dst_addr = 0;
238 	async_tx_ack(&desc->txd);
239 	ioat_set_chainaddr(ioat_chan, desc->txd.phys);
240 	dump_desc_dbg(ioat_chan, desc);
241 	/* make sure descriptors are written before we submit */
242 	wmb();
243 	ioat_chan->head += 1;
244 	__ioat_issue_pending(ioat_chan);
245 }
246 
247 void ioat_start_null_desc(struct ioatdma_chan *ioat_chan)
248 {
249 	spin_lock_bh(&ioat_chan->prep_lock);
250 	__ioat_start_null_desc(ioat_chan);
251 	spin_unlock_bh(&ioat_chan->prep_lock);
252 }
253 
254 void __ioat_restart_chan(struct ioatdma_chan *ioat_chan)
255 {
256 	/* set the tail to be re-issued */
257 	ioat_chan->issued = ioat_chan->tail;
258 	ioat_chan->dmacount = 0;
259 	set_bit(IOAT_COMPLETION_PENDING, &ioat_chan->state);
260 	mod_timer(&ioat_chan->timer, jiffies + COMPLETION_TIMEOUT);
261 
262 	dev_dbg(to_dev(ioat_chan),
263 		"%s: head: %#x tail: %#x issued: %#x count: %#x\n",
264 		__func__, ioat_chan->head, ioat_chan->tail,
265 		ioat_chan->issued, ioat_chan->dmacount);
266 
267 	if (ioat_ring_pending(ioat_chan)) {
268 		struct ioat_ring_ent *desc;
269 
270 		desc = ioat_get_ring_ent(ioat_chan, ioat_chan->tail);
271 		ioat_set_chainaddr(ioat_chan, desc->txd.phys);
272 		__ioat_issue_pending(ioat_chan);
273 	} else
274 		__ioat_start_null_desc(ioat_chan);
275 }
276 
277 int ioat_quiesce(struct ioatdma_chan *ioat_chan, unsigned long tmo)
278 {
279 	unsigned long end = jiffies + tmo;
280 	int err = 0;
281 	u32 status;
282 
283 	status = ioat_chansts(ioat_chan);
284 	if (is_ioat_active(status) || is_ioat_idle(status))
285 		ioat_suspend(ioat_chan);
286 	while (is_ioat_active(status) || is_ioat_idle(status)) {
287 		if (tmo && time_after(jiffies, end)) {
288 			err = -ETIMEDOUT;
289 			break;
290 		}
291 		status = ioat_chansts(ioat_chan);
292 		cpu_relax();
293 	}
294 
295 	return err;
296 }
297 
298 int ioat_reset_sync(struct ioatdma_chan *ioat_chan, unsigned long tmo)
299 {
300 	unsigned long end = jiffies + tmo;
301 	int err = 0;
302 
303 	ioat_reset(ioat_chan);
304 	while (ioat_reset_pending(ioat_chan)) {
305 		if (end && time_after(jiffies, end)) {
306 			err = -ETIMEDOUT;
307 			break;
308 		}
309 		cpu_relax();
310 	}
311 
312 	return err;
313 }
314 
315 static dma_cookie_t ioat_tx_submit_unlock(struct dma_async_tx_descriptor *tx)
316 {
317 	struct dma_chan *c = tx->chan;
318 	struct ioatdma_chan *ioat_chan = to_ioat_chan(c);
319 	dma_cookie_t cookie;
320 
321 	cookie = dma_cookie_assign(tx);
322 	dev_dbg(to_dev(ioat_chan), "%s: cookie: %d\n", __func__, cookie);
323 
324 	if (!test_and_set_bit(IOAT_CHAN_ACTIVE, &ioat_chan->state))
325 		mod_timer(&ioat_chan->timer, jiffies + COMPLETION_TIMEOUT);
326 
327 	/* make descriptor updates visible before advancing ioat->head,
328 	 * this is purposefully not smp_wmb() since we are also
329 	 * publishing the descriptor updates to a dma device
330 	 */
331 	wmb();
332 
333 	ioat_chan->head += ioat_chan->produce;
334 
335 	ioat_update_pending(ioat_chan);
336 	spin_unlock_bh(&ioat_chan->prep_lock);
337 
338 	return cookie;
339 }
340 
341 static struct ioat_ring_ent *
342 ioat_alloc_ring_ent(struct dma_chan *chan, gfp_t flags)
343 {
344 	struct ioat_dma_descriptor *hw;
345 	struct ioat_ring_ent *desc;
346 	struct ioatdma_device *ioat_dma;
347 	dma_addr_t phys;
348 
349 	ioat_dma = to_ioatdma_device(chan->device);
350 	hw = pci_pool_alloc(ioat_dma->dma_pool, flags, &phys);
351 	if (!hw)
352 		return NULL;
353 	memset(hw, 0, sizeof(*hw));
354 
355 	desc = kmem_cache_zalloc(ioat_cache, flags);
356 	if (!desc) {
357 		pci_pool_free(ioat_dma->dma_pool, hw, phys);
358 		return NULL;
359 	}
360 
361 	dma_async_tx_descriptor_init(&desc->txd, chan);
362 	desc->txd.tx_submit = ioat_tx_submit_unlock;
363 	desc->hw = hw;
364 	desc->txd.phys = phys;
365 	return desc;
366 }
367 
368 void ioat_free_ring_ent(struct ioat_ring_ent *desc, struct dma_chan *chan)
369 {
370 	struct ioatdma_device *ioat_dma;
371 
372 	ioat_dma = to_ioatdma_device(chan->device);
373 	pci_pool_free(ioat_dma->dma_pool, desc->hw, desc->txd.phys);
374 	kmem_cache_free(ioat_cache, desc);
375 }
376 
377 struct ioat_ring_ent **
378 ioat_alloc_ring(struct dma_chan *c, int order, gfp_t flags)
379 {
380 	struct ioat_ring_ent **ring;
381 	int descs = 1 << order;
382 	int i;
383 
384 	if (order > ioat_get_max_alloc_order())
385 		return NULL;
386 
387 	/* allocate the array to hold the software ring */
388 	ring = kcalloc(descs, sizeof(*ring), flags);
389 	if (!ring)
390 		return NULL;
391 	for (i = 0; i < descs; i++) {
392 		ring[i] = ioat_alloc_ring_ent(c, flags);
393 		if (!ring[i]) {
394 			while (i--)
395 				ioat_free_ring_ent(ring[i], c);
396 			kfree(ring);
397 			return NULL;
398 		}
399 		set_desc_id(ring[i], i);
400 	}
401 
402 	/* link descs */
403 	for (i = 0; i < descs-1; i++) {
404 		struct ioat_ring_ent *next = ring[i+1];
405 		struct ioat_dma_descriptor *hw = ring[i]->hw;
406 
407 		hw->next = next->txd.phys;
408 	}
409 	ring[i]->hw->next = ring[0]->txd.phys;
410 
411 	return ring;
412 }
413 
414 bool reshape_ring(struct ioatdma_chan *ioat_chan, int order)
415 {
416 	/* reshape differs from normal ring allocation in that we want
417 	 * to allocate a new software ring while only
418 	 * extending/truncating the hardware ring
419 	 */
420 	struct dma_chan *c = &ioat_chan->dma_chan;
421 	const u32 curr_size = ioat_ring_size(ioat_chan);
422 	const u16 active = ioat_ring_active(ioat_chan);
423 	const u32 new_size = 1 << order;
424 	struct ioat_ring_ent **ring;
425 	u32 i;
426 
427 	if (order > ioat_get_max_alloc_order())
428 		return false;
429 
430 	/* double check that we have at least 1 free descriptor */
431 	if (active == curr_size)
432 		return false;
433 
434 	/* when shrinking, verify that we can hold the current active
435 	 * set in the new ring
436 	 */
437 	if (active >= new_size)
438 		return false;
439 
440 	/* allocate the array to hold the software ring */
441 	ring = kcalloc(new_size, sizeof(*ring), GFP_NOWAIT);
442 	if (!ring)
443 		return false;
444 
445 	/* allocate/trim descriptors as needed */
446 	if (new_size > curr_size) {
447 		/* copy current descriptors to the new ring */
448 		for (i = 0; i < curr_size; i++) {
449 			u16 curr_idx = (ioat_chan->tail+i) & (curr_size-1);
450 			u16 new_idx = (ioat_chan->tail+i) & (new_size-1);
451 
452 			ring[new_idx] = ioat_chan->ring[curr_idx];
453 			set_desc_id(ring[new_idx], new_idx);
454 		}
455 
456 		/* add new descriptors to the ring */
457 		for (i = curr_size; i < new_size; i++) {
458 			u16 new_idx = (ioat_chan->tail+i) & (new_size-1);
459 
460 			ring[new_idx] = ioat_alloc_ring_ent(c, GFP_NOWAIT);
461 			if (!ring[new_idx]) {
462 				while (i--) {
463 					u16 new_idx = (ioat_chan->tail+i) &
464 						       (new_size-1);
465 
466 					ioat_free_ring_ent(ring[new_idx], c);
467 				}
468 				kfree(ring);
469 				return false;
470 			}
471 			set_desc_id(ring[new_idx], new_idx);
472 		}
473 
474 		/* hw link new descriptors */
475 		for (i = curr_size-1; i < new_size; i++) {
476 			u16 new_idx = (ioat_chan->tail+i) & (new_size-1);
477 			struct ioat_ring_ent *next =
478 				ring[(new_idx+1) & (new_size-1)];
479 			struct ioat_dma_descriptor *hw = ring[new_idx]->hw;
480 
481 			hw->next = next->txd.phys;
482 		}
483 	} else {
484 		struct ioat_dma_descriptor *hw;
485 		struct ioat_ring_ent *next;
486 
487 		/* copy current descriptors to the new ring, dropping the
488 		 * removed descriptors
489 		 */
490 		for (i = 0; i < new_size; i++) {
491 			u16 curr_idx = (ioat_chan->tail+i) & (curr_size-1);
492 			u16 new_idx = (ioat_chan->tail+i) & (new_size-1);
493 
494 			ring[new_idx] = ioat_chan->ring[curr_idx];
495 			set_desc_id(ring[new_idx], new_idx);
496 		}
497 
498 		/* free deleted descriptors */
499 		for (i = new_size; i < curr_size; i++) {
500 			struct ioat_ring_ent *ent;
501 
502 			ent = ioat_get_ring_ent(ioat_chan, ioat_chan->tail+i);
503 			ioat_free_ring_ent(ent, c);
504 		}
505 
506 		/* fix up hardware ring */
507 		hw = ring[(ioat_chan->tail+new_size-1) & (new_size-1)]->hw;
508 		next = ring[(ioat_chan->tail+new_size) & (new_size-1)];
509 		hw->next = next->txd.phys;
510 	}
511 
512 	dev_dbg(to_dev(ioat_chan), "%s: allocated %d descriptors\n",
513 		__func__, new_size);
514 
515 	kfree(ioat_chan->ring);
516 	ioat_chan->ring = ring;
517 	ioat_chan->alloc_order = order;
518 
519 	return true;
520 }
521 
522 /**
523  * ioat_check_space_lock - verify space and grab ring producer lock
524  * @ioat: ioat,3 channel (ring) to operate on
525  * @num_descs: allocation length
526  */
527 int ioat_check_space_lock(struct ioatdma_chan *ioat_chan, int num_descs)
528 {
529 	bool retry;
530 
531  retry:
532 	spin_lock_bh(&ioat_chan->prep_lock);
533 	/* never allow the last descriptor to be consumed, we need at
534 	 * least one free at all times to allow for on-the-fly ring
535 	 * resizing.
536 	 */
537 	if (likely(ioat_ring_space(ioat_chan) > num_descs)) {
538 		dev_dbg(to_dev(ioat_chan), "%s: num_descs: %d (%x:%x:%x)\n",
539 			__func__, num_descs, ioat_chan->head,
540 			ioat_chan->tail, ioat_chan->issued);
541 		ioat_chan->produce = num_descs;
542 		return 0;  /* with ioat->prep_lock held */
543 	}
544 	retry = test_and_set_bit(IOAT_RESHAPE_PENDING, &ioat_chan->state);
545 	spin_unlock_bh(&ioat_chan->prep_lock);
546 
547 	/* is another cpu already trying to expand the ring? */
548 	if (retry)
549 		goto retry;
550 
551 	spin_lock_bh(&ioat_chan->cleanup_lock);
552 	spin_lock_bh(&ioat_chan->prep_lock);
553 	retry = reshape_ring(ioat_chan, ioat_chan->alloc_order + 1);
554 	clear_bit(IOAT_RESHAPE_PENDING, &ioat_chan->state);
555 	spin_unlock_bh(&ioat_chan->prep_lock);
556 	spin_unlock_bh(&ioat_chan->cleanup_lock);
557 
558 	/* if we were able to expand the ring retry the allocation */
559 	if (retry)
560 		goto retry;
561 
562 	dev_dbg_ratelimited(to_dev(ioat_chan),
563 			    "%s: ring full! num_descs: %d (%x:%x:%x)\n",
564 			    __func__, num_descs, ioat_chan->head,
565 			    ioat_chan->tail, ioat_chan->issued);
566 
567 	/* progress reclaim in the allocation failure case we may be
568 	 * called under bh_disabled so we need to trigger the timer
569 	 * event directly
570 	 */
571 	if (time_is_before_jiffies(ioat_chan->timer.expires)
572 	    && timer_pending(&ioat_chan->timer)) {
573 		struct ioatdma_device *ioat_dma = ioat_chan->ioat_dma;
574 
575 		mod_timer(&ioat_chan->timer, jiffies + COMPLETION_TIMEOUT);
576 		ioat_dma->timer_fn((unsigned long)ioat_chan);
577 	}
578 
579 	return -ENOMEM;
580 }
581