blob: 4c2b41beaf638203ce0ea3069fa659fa1f4349ce [file] [log] [blame]
rjw1f884582022-01-06 17:20:42 +08001/*
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 <linux/sizes.h>
35#include "dma.h"
36#include "registers.h"
37#include "hw.h"
38
39#include "../dmaengine.h"
40
41int completion_timeout = 200;
42module_param(completion_timeout, int, 0644);
43MODULE_PARM_DESC(completion_timeout,
44 "set ioat completion timeout [msec] (default 200 [msec])");
45int idle_timeout = 2000;
46module_param(idle_timeout, int, 0644);
47MODULE_PARM_DESC(idle_timeout,
48 "set ioat idel timeout [msec] (default 2000 [msec])");
49
50#define IDLE_TIMEOUT msecs_to_jiffies(idle_timeout)
51#define COMPLETION_TIMEOUT msecs_to_jiffies(completion_timeout)
52
53static char *chanerr_str[] = {
54 "DMA Transfer Source Address Error",
55 "DMA Transfer Destination Address Error",
56 "Next Descriptor Address Error",
57 "Descriptor Error",
58 "Chan Address Value Error",
59 "CHANCMD Error",
60 "Chipset Uncorrectable Data Integrity Error",
61 "DMA Uncorrectable Data Integrity Error",
62 "Read Data Error",
63 "Write Data Error",
64 "Descriptor Control Error",
65 "Descriptor Transfer Size Error",
66 "Completion Address Error",
67 "Interrupt Configuration Error",
68 "Super extended descriptor Address Error",
69 "Unaffiliated Error",
70 "CRC or XOR P Error",
71 "XOR Q Error",
72 "Descriptor Count Error",
73 "DIF All F detect Error",
74 "Guard Tag verification Error",
75 "Application Tag verification Error",
76 "Reference Tag verification Error",
77 "Bundle Bit Error",
78 "Result DIF All F detect Error",
79 "Result Guard Tag verification Error",
80 "Result Application Tag verification Error",
81 "Result Reference Tag verification Error",
82};
83
84static void ioat_eh(struct ioatdma_chan *ioat_chan);
85
86static void ioat_print_chanerrs(struct ioatdma_chan *ioat_chan, u32 chanerr)
87{
88 int i;
89
90 for (i = 0; i < ARRAY_SIZE(chanerr_str); i++) {
91 if ((chanerr >> i) & 1) {
92 dev_err(to_dev(ioat_chan), "Err(%d): %s\n",
93 i, chanerr_str[i]);
94 }
95 }
96}
97
98/**
99 * ioat_dma_do_interrupt - handler used for single vector interrupt mode
100 * @irq: interrupt id
101 * @data: interrupt data
102 */
103irqreturn_t ioat_dma_do_interrupt(int irq, void *data)
104{
105 struct ioatdma_device *instance = data;
106 struct ioatdma_chan *ioat_chan;
107 unsigned long attnstatus;
108 int bit;
109 u8 intrctrl;
110
111 intrctrl = readb(instance->reg_base + IOAT_INTRCTRL_OFFSET);
112
113 if (!(intrctrl & IOAT_INTRCTRL_MASTER_INT_EN))
114 return IRQ_NONE;
115
116 if (!(intrctrl & IOAT_INTRCTRL_INT_STATUS)) {
117 writeb(intrctrl, instance->reg_base + IOAT_INTRCTRL_OFFSET);
118 return IRQ_NONE;
119 }
120
121 attnstatus = readl(instance->reg_base + IOAT_ATTNSTATUS_OFFSET);
122 for_each_set_bit(bit, &attnstatus, BITS_PER_LONG) {
123 ioat_chan = ioat_chan_by_index(instance, bit);
124 if (test_bit(IOAT_RUN, &ioat_chan->state))
125 tasklet_schedule(&ioat_chan->cleanup_task);
126 }
127
128 writeb(intrctrl, instance->reg_base + IOAT_INTRCTRL_OFFSET);
129 return IRQ_HANDLED;
130}
131
132/**
133 * ioat_dma_do_interrupt_msix - handler used for vector-per-channel interrupt mode
134 * @irq: interrupt id
135 * @data: interrupt data
136 */
137irqreturn_t ioat_dma_do_interrupt_msix(int irq, void *data)
138{
139 struct ioatdma_chan *ioat_chan = data;
140
141 if (test_bit(IOAT_RUN, &ioat_chan->state))
142 tasklet_schedule(&ioat_chan->cleanup_task);
143
144 return IRQ_HANDLED;
145}
146
147void ioat_stop(struct ioatdma_chan *ioat_chan)
148{
149 struct ioatdma_device *ioat_dma = ioat_chan->ioat_dma;
150 struct pci_dev *pdev = ioat_dma->pdev;
151 int chan_id = chan_num(ioat_chan);
152 struct msix_entry *msix;
153
154 /* 1/ stop irq from firing tasklets
155 * 2/ stop the tasklet from re-arming irqs
156 */
157 clear_bit(IOAT_RUN, &ioat_chan->state);
158
159 /* flush inflight interrupts */
160 switch (ioat_dma->irq_mode) {
161 case IOAT_MSIX:
162 msix = &ioat_dma->msix_entries[chan_id];
163 synchronize_irq(msix->vector);
164 break;
165 case IOAT_MSI:
166 case IOAT_INTX:
167 synchronize_irq(pdev->irq);
168 break;
169 default:
170 break;
171 }
172
173 /* flush inflight timers */
174 del_timer_sync(&ioat_chan->timer);
175
176 /* flush inflight tasklet runs */
177 tasklet_kill(&ioat_chan->cleanup_task);
178
179 /* final cleanup now that everything is quiesced and can't re-arm */
180 ioat_cleanup_event((unsigned long)&ioat_chan->dma_chan);
181}
182
183static void __ioat_issue_pending(struct ioatdma_chan *ioat_chan)
184{
185 ioat_chan->dmacount += ioat_ring_pending(ioat_chan);
186 ioat_chan->issued = ioat_chan->head;
187 writew(ioat_chan->dmacount,
188 ioat_chan->reg_base + IOAT_CHAN_DMACOUNT_OFFSET);
189 dev_dbg(to_dev(ioat_chan),
190 "%s: head: %#x tail: %#x issued: %#x count: %#x\n",
191 __func__, ioat_chan->head, ioat_chan->tail,
192 ioat_chan->issued, ioat_chan->dmacount);
193}
194
195void ioat_issue_pending(struct dma_chan *c)
196{
197 struct ioatdma_chan *ioat_chan = to_ioat_chan(c);
198
199 if (ioat_ring_pending(ioat_chan)) {
200 spin_lock_bh(&ioat_chan->prep_lock);
201 __ioat_issue_pending(ioat_chan);
202 spin_unlock_bh(&ioat_chan->prep_lock);
203 }
204}
205
206/**
207 * ioat_update_pending - log pending descriptors
208 * @ioat: ioat+ channel
209 *
210 * Check if the number of unsubmitted descriptors has exceeded the
211 * watermark. Called with prep_lock held
212 */
213static void ioat_update_pending(struct ioatdma_chan *ioat_chan)
214{
215 if (ioat_ring_pending(ioat_chan) > ioat_pending_level)
216 __ioat_issue_pending(ioat_chan);
217}
218
219static void __ioat_start_null_desc(struct ioatdma_chan *ioat_chan)
220{
221 struct ioat_ring_ent *desc;
222 struct ioat_dma_descriptor *hw;
223
224 if (ioat_ring_space(ioat_chan) < 1) {
225 dev_err(to_dev(ioat_chan),
226 "Unable to start null desc - ring full\n");
227 return;
228 }
229
230 dev_dbg(to_dev(ioat_chan),
231 "%s: head: %#x tail: %#x issued: %#x\n",
232 __func__, ioat_chan->head, ioat_chan->tail, ioat_chan->issued);
233 desc = ioat_get_ring_ent(ioat_chan, ioat_chan->head);
234
235 hw = desc->hw;
236 hw->ctl = 0;
237 hw->ctl_f.null = 1;
238 hw->ctl_f.int_en = 1;
239 hw->ctl_f.compl_write = 1;
240 /* set size to non-zero value (channel returns error when size is 0) */
241 hw->size = NULL_DESC_BUFFER_SIZE;
242 hw->src_addr = 0;
243 hw->dst_addr = 0;
244 async_tx_ack(&desc->txd);
245 ioat_set_chainaddr(ioat_chan, desc->txd.phys);
246 dump_desc_dbg(ioat_chan, desc);
247 /* make sure descriptors are written before we submit */
248 wmb();
249 ioat_chan->head += 1;
250 __ioat_issue_pending(ioat_chan);
251}
252
253void ioat_start_null_desc(struct ioatdma_chan *ioat_chan)
254{
255 spin_lock_bh(&ioat_chan->prep_lock);
256 if (!test_bit(IOAT_CHAN_DOWN, &ioat_chan->state))
257 __ioat_start_null_desc(ioat_chan);
258 spin_unlock_bh(&ioat_chan->prep_lock);
259}
260
261static void __ioat_restart_chan(struct ioatdma_chan *ioat_chan)
262{
263 /* set the tail to be re-issued */
264 ioat_chan->issued = ioat_chan->tail;
265 ioat_chan->dmacount = 0;
266 mod_timer(&ioat_chan->timer, jiffies + COMPLETION_TIMEOUT);
267
268 dev_dbg(to_dev(ioat_chan),
269 "%s: head: %#x tail: %#x issued: %#x count: %#x\n",
270 __func__, ioat_chan->head, ioat_chan->tail,
271 ioat_chan->issued, ioat_chan->dmacount);
272
273 if (ioat_ring_pending(ioat_chan)) {
274 struct ioat_ring_ent *desc;
275
276 desc = ioat_get_ring_ent(ioat_chan, ioat_chan->tail);
277 ioat_set_chainaddr(ioat_chan, desc->txd.phys);
278 __ioat_issue_pending(ioat_chan);
279 } else
280 __ioat_start_null_desc(ioat_chan);
281}
282
283static int ioat_quiesce(struct ioatdma_chan *ioat_chan, unsigned long tmo)
284{
285 unsigned long end = jiffies + tmo;
286 int err = 0;
287 u32 status;
288
289 status = ioat_chansts(ioat_chan);
290 if (is_ioat_active(status) || is_ioat_idle(status))
291 ioat_suspend(ioat_chan);
292 while (is_ioat_active(status) || is_ioat_idle(status)) {
293 if (tmo && time_after(jiffies, end)) {
294 err = -ETIMEDOUT;
295 break;
296 }
297 status = ioat_chansts(ioat_chan);
298 cpu_relax();
299 }
300
301 return err;
302}
303
304static int ioat_reset_sync(struct ioatdma_chan *ioat_chan, unsigned long tmo)
305{
306 unsigned long end = jiffies + tmo;
307 int err = 0;
308
309 ioat_reset(ioat_chan);
310 while (ioat_reset_pending(ioat_chan)) {
311 if (end && time_after(jiffies, end)) {
312 err = -ETIMEDOUT;
313 break;
314 }
315 cpu_relax();
316 }
317
318 return err;
319}
320
321static dma_cookie_t ioat_tx_submit_unlock(struct dma_async_tx_descriptor *tx)
322 __releases(&ioat_chan->prep_lock)
323{
324 struct dma_chan *c = tx->chan;
325 struct ioatdma_chan *ioat_chan = to_ioat_chan(c);
326 dma_cookie_t cookie;
327
328 cookie = dma_cookie_assign(tx);
329 dev_dbg(to_dev(ioat_chan), "%s: cookie: %d\n", __func__, cookie);
330
331 if (!test_and_set_bit(IOAT_CHAN_ACTIVE, &ioat_chan->state))
332 mod_timer(&ioat_chan->timer, jiffies + COMPLETION_TIMEOUT);
333
334 /* make descriptor updates visible before advancing ioat->head,
335 * this is purposefully not smp_wmb() since we are also
336 * publishing the descriptor updates to a dma device
337 */
338 wmb();
339
340 ioat_chan->head += ioat_chan->produce;
341
342 ioat_update_pending(ioat_chan);
343 spin_unlock_bh(&ioat_chan->prep_lock);
344
345 return cookie;
346}
347
348static struct ioat_ring_ent *
349ioat_alloc_ring_ent(struct dma_chan *chan, int idx, gfp_t flags)
350{
351 struct ioat_dma_descriptor *hw;
352 struct ioat_ring_ent *desc;
353 struct ioatdma_chan *ioat_chan = to_ioat_chan(chan);
354 int chunk;
355 dma_addr_t phys;
356 u8 *pos;
357 off_t offs;
358
359 chunk = idx / IOAT_DESCS_PER_2M;
360 idx &= (IOAT_DESCS_PER_2M - 1);
361 offs = idx * IOAT_DESC_SZ;
362 pos = (u8 *)ioat_chan->descs[chunk].virt + offs;
363 phys = ioat_chan->descs[chunk].hw + offs;
364 hw = (struct ioat_dma_descriptor *)pos;
365 memset(hw, 0, sizeof(*hw));
366
367 desc = kmem_cache_zalloc(ioat_cache, flags);
368 if (!desc)
369 return NULL;
370
371 dma_async_tx_descriptor_init(&desc->txd, chan);
372 desc->txd.tx_submit = ioat_tx_submit_unlock;
373 desc->hw = hw;
374 desc->txd.phys = phys;
375 return desc;
376}
377
378void ioat_free_ring_ent(struct ioat_ring_ent *desc, struct dma_chan *chan)
379{
380 kmem_cache_free(ioat_cache, desc);
381}
382
383struct ioat_ring_ent **
384ioat_alloc_ring(struct dma_chan *c, int order, gfp_t flags)
385{
386 struct ioatdma_chan *ioat_chan = to_ioat_chan(c);
387 struct ioat_ring_ent **ring;
388 int total_descs = 1 << order;
389 int i, chunks;
390
391 /* allocate the array to hold the software ring */
392 ring = kcalloc(total_descs, sizeof(*ring), flags);
393 if (!ring)
394 return NULL;
395
396 ioat_chan->desc_chunks = chunks = (total_descs * IOAT_DESC_SZ) / SZ_2M;
397
398 for (i = 0; i < chunks; i++) {
399 struct ioat_descs *descs = &ioat_chan->descs[i];
400
401 descs->virt = dma_alloc_coherent(to_dev(ioat_chan),
402 SZ_2M, &descs->hw, flags);
403 if (!descs->virt) {
404 int idx;
405
406 for (idx = 0; idx < i; idx++) {
407 descs = &ioat_chan->descs[idx];
408 dma_free_coherent(to_dev(ioat_chan), SZ_2M,
409 descs->virt, descs->hw);
410 descs->virt = NULL;
411 descs->hw = 0;
412 }
413
414 ioat_chan->desc_chunks = 0;
415 kfree(ring);
416 return NULL;
417 }
418 }
419
420 for (i = 0; i < total_descs; i++) {
421 ring[i] = ioat_alloc_ring_ent(c, i, flags);
422 if (!ring[i]) {
423 int idx;
424
425 while (i--)
426 ioat_free_ring_ent(ring[i], c);
427
428 for (idx = 0; idx < ioat_chan->desc_chunks; idx++) {
429 dma_free_coherent(to_dev(ioat_chan),
430 SZ_2M,
431 ioat_chan->descs[idx].virt,
432 ioat_chan->descs[idx].hw);
433 ioat_chan->descs[idx].virt = NULL;
434 ioat_chan->descs[idx].hw = 0;
435 }
436
437 ioat_chan->desc_chunks = 0;
438 kfree(ring);
439 return NULL;
440 }
441 set_desc_id(ring[i], i);
442 }
443
444 /* link descs */
445 for (i = 0; i < total_descs-1; i++) {
446 struct ioat_ring_ent *next = ring[i+1];
447 struct ioat_dma_descriptor *hw = ring[i]->hw;
448
449 hw->next = next->txd.phys;
450 }
451 ring[i]->hw->next = ring[0]->txd.phys;
452
453 return ring;
454}
455
456/**
457 * ioat_check_space_lock - verify space and grab ring producer lock
458 * @ioat: ioat,3 channel (ring) to operate on
459 * @num_descs: allocation length
460 */
461int ioat_check_space_lock(struct ioatdma_chan *ioat_chan, int num_descs)
462 __acquires(&ioat_chan->prep_lock)
463{
464 spin_lock_bh(&ioat_chan->prep_lock);
465 /* never allow the last descriptor to be consumed, we need at
466 * least one free at all times to allow for on-the-fly ring
467 * resizing.
468 */
469 if (likely(ioat_ring_space(ioat_chan) > num_descs)) {
470 dev_dbg(to_dev(ioat_chan), "%s: num_descs: %d (%x:%x:%x)\n",
471 __func__, num_descs, ioat_chan->head,
472 ioat_chan->tail, ioat_chan->issued);
473 ioat_chan->produce = num_descs;
474 return 0; /* with ioat->prep_lock held */
475 }
476 spin_unlock_bh(&ioat_chan->prep_lock);
477
478 dev_dbg_ratelimited(to_dev(ioat_chan),
479 "%s: ring full! num_descs: %d (%x:%x:%x)\n",
480 __func__, num_descs, ioat_chan->head,
481 ioat_chan->tail, ioat_chan->issued);
482
483 /* progress reclaim in the allocation failure case we may be
484 * called under bh_disabled so we need to trigger the timer
485 * event directly
486 */
487 if (time_is_before_jiffies(ioat_chan->timer.expires)
488 && timer_pending(&ioat_chan->timer)) {
489 mod_timer(&ioat_chan->timer, jiffies + COMPLETION_TIMEOUT);
490 ioat_timer_event((unsigned long)ioat_chan);
491 }
492
493 return -ENOMEM;
494}
495
496static bool desc_has_ext(struct ioat_ring_ent *desc)
497{
498 struct ioat_dma_descriptor *hw = desc->hw;
499
500 if (hw->ctl_f.op == IOAT_OP_XOR ||
501 hw->ctl_f.op == IOAT_OP_XOR_VAL) {
502 struct ioat_xor_descriptor *xor = desc->xor;
503
504 if (src_cnt_to_sw(xor->ctl_f.src_cnt) > 5)
505 return true;
506 } else if (hw->ctl_f.op == IOAT_OP_PQ ||
507 hw->ctl_f.op == IOAT_OP_PQ_VAL) {
508 struct ioat_pq_descriptor *pq = desc->pq;
509
510 if (src_cnt_to_sw(pq->ctl_f.src_cnt) > 3)
511 return true;
512 }
513
514 return false;
515}
516
517static void
518ioat_free_sed(struct ioatdma_device *ioat_dma, struct ioat_sed_ent *sed)
519{
520 if (!sed)
521 return;
522
523 dma_pool_free(ioat_dma->sed_hw_pool[sed->hw_pool], sed->hw, sed->dma);
524 kmem_cache_free(ioat_sed_cache, sed);
525}
526
527static u64 ioat_get_current_completion(struct ioatdma_chan *ioat_chan)
528{
529 u64 phys_complete;
530 u64 completion;
531
532 completion = *ioat_chan->completion;
533 phys_complete = ioat_chansts_to_addr(completion);
534
535 dev_dbg(to_dev(ioat_chan), "%s: phys_complete: %#llx\n", __func__,
536 (unsigned long long) phys_complete);
537
538 return phys_complete;
539}
540
541static bool ioat_cleanup_preamble(struct ioatdma_chan *ioat_chan,
542 u64 *phys_complete)
543{
544 *phys_complete = ioat_get_current_completion(ioat_chan);
545 if (*phys_complete == ioat_chan->last_completion)
546 return false;
547
548 clear_bit(IOAT_COMPLETION_ACK, &ioat_chan->state);
549 mod_timer(&ioat_chan->timer, jiffies + COMPLETION_TIMEOUT);
550
551 return true;
552}
553
554static void
555desc_get_errstat(struct ioatdma_chan *ioat_chan, struct ioat_ring_ent *desc)
556{
557 struct ioat_dma_descriptor *hw = desc->hw;
558
559 switch (hw->ctl_f.op) {
560 case IOAT_OP_PQ_VAL:
561 case IOAT_OP_PQ_VAL_16S:
562 {
563 struct ioat_pq_descriptor *pq = desc->pq;
564
565 /* check if there's error written */
566 if (!pq->dwbes_f.wbes)
567 return;
568
569 /* need to set a chanerr var for checking to clear later */
570
571 if (pq->dwbes_f.p_val_err)
572 *desc->result |= SUM_CHECK_P_RESULT;
573
574 if (pq->dwbes_f.q_val_err)
575 *desc->result |= SUM_CHECK_Q_RESULT;
576
577 return;
578 }
579 default:
580 return;
581 }
582}
583
584/**
585 * __cleanup - reclaim used descriptors
586 * @ioat: channel (ring) to clean
587 */
588static void __cleanup(struct ioatdma_chan *ioat_chan, dma_addr_t phys_complete)
589{
590 struct ioatdma_device *ioat_dma = ioat_chan->ioat_dma;
591 struct ioat_ring_ent *desc;
592 bool seen_current = false;
593 int idx = ioat_chan->tail, i;
594 u16 active;
595
596 dev_dbg(to_dev(ioat_chan), "%s: head: %#x tail: %#x issued: %#x\n",
597 __func__, ioat_chan->head, ioat_chan->tail, ioat_chan->issued);
598
599 /*
600 * At restart of the channel, the completion address and the
601 * channel status will be 0 due to starting a new chain. Since
602 * it's new chain and the first descriptor "fails", there is
603 * nothing to clean up. We do not want to reap the entire submitted
604 * chain due to this 0 address value and then BUG.
605 */
606 if (!phys_complete)
607 return;
608
609 active = ioat_ring_active(ioat_chan);
610 for (i = 0; i < active && !seen_current; i++) {
611 struct dma_async_tx_descriptor *tx;
612
613 smp_read_barrier_depends();
614 prefetch(ioat_get_ring_ent(ioat_chan, idx + i + 1));
615 desc = ioat_get_ring_ent(ioat_chan, idx + i);
616 dump_desc_dbg(ioat_chan, desc);
617
618 /* set err stat if we are using dwbes */
619 if (ioat_dma->cap & IOAT_CAP_DWBES)
620 desc_get_errstat(ioat_chan, desc);
621
622 tx = &desc->txd;
623 if (tx->cookie) {
624 dma_cookie_complete(tx);
625 dma_descriptor_unmap(tx);
626 dmaengine_desc_get_callback_invoke(tx, NULL);
627 tx->callback = NULL;
628 tx->callback_result = NULL;
629 }
630
631 if (tx->phys == phys_complete)
632 seen_current = true;
633
634 /* skip extended descriptors */
635 if (desc_has_ext(desc)) {
636 BUG_ON(i + 1 >= active);
637 i++;
638 }
639
640 /* cleanup super extended descriptors */
641 if (desc->sed) {
642 ioat_free_sed(ioat_dma, desc->sed);
643 desc->sed = NULL;
644 }
645 }
646
647 /* finish all descriptor reads before incrementing tail */
648 smp_mb();
649 ioat_chan->tail = idx + i;
650 /* no active descs have written a completion? */
651 BUG_ON(active && !seen_current);
652 ioat_chan->last_completion = phys_complete;
653
654 if (active - i == 0) {
655 dev_dbg(to_dev(ioat_chan), "%s: cancel completion timeout\n",
656 __func__);
657 mod_timer(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
658 }
659
660 /* microsecond delay by sysfs variable per pending descriptor */
661 if (ioat_chan->intr_coalesce != ioat_chan->prev_intr_coalesce) {
662 writew(min((ioat_chan->intr_coalesce * (active - i)),
663 IOAT_INTRDELAY_MASK),
664 ioat_chan->ioat_dma->reg_base + IOAT_INTRDELAY_OFFSET);
665 ioat_chan->prev_intr_coalesce = ioat_chan->intr_coalesce;
666 }
667}
668
669static void ioat_cleanup(struct ioatdma_chan *ioat_chan)
670{
671 u64 phys_complete;
672
673 spin_lock_bh(&ioat_chan->cleanup_lock);
674
675 if (ioat_cleanup_preamble(ioat_chan, &phys_complete))
676 __cleanup(ioat_chan, phys_complete);
677
678 if (is_ioat_halted(*ioat_chan->completion)) {
679 u32 chanerr = readl(ioat_chan->reg_base + IOAT_CHANERR_OFFSET);
680
681 if (chanerr &
682 (IOAT_CHANERR_HANDLE_MASK | IOAT_CHANERR_RECOVER_MASK)) {
683 mod_timer(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
684 ioat_eh(ioat_chan);
685 }
686 }
687
688 spin_unlock_bh(&ioat_chan->cleanup_lock);
689}
690
691void ioat_cleanup_event(unsigned long data)
692{
693 struct ioatdma_chan *ioat_chan = to_ioat_chan((void *)data);
694
695 ioat_cleanup(ioat_chan);
696 if (!test_bit(IOAT_RUN, &ioat_chan->state))
697 return;
698 writew(IOAT_CHANCTRL_RUN, ioat_chan->reg_base + IOAT_CHANCTRL_OFFSET);
699}
700
701static void ioat_restart_channel(struct ioatdma_chan *ioat_chan)
702{
703 u64 phys_complete;
704
705 ioat_quiesce(ioat_chan, 0);
706 if (ioat_cleanup_preamble(ioat_chan, &phys_complete))
707 __cleanup(ioat_chan, phys_complete);
708
709 __ioat_restart_chan(ioat_chan);
710}
711
712
713static void ioat_abort_descs(struct ioatdma_chan *ioat_chan)
714{
715 struct ioatdma_device *ioat_dma = ioat_chan->ioat_dma;
716 struct ioat_ring_ent *desc;
717 u16 active;
718 int idx = ioat_chan->tail, i;
719
720 /*
721 * We assume that the failed descriptor has been processed.
722 * Now we are just returning all the remaining submitted
723 * descriptors to abort.
724 */
725 active = ioat_ring_active(ioat_chan);
726
727 /* we skip the failed descriptor that tail points to */
728 for (i = 1; i < active; i++) {
729 struct dma_async_tx_descriptor *tx;
730
731 smp_read_barrier_depends();
732 prefetch(ioat_get_ring_ent(ioat_chan, idx + i + 1));
733 desc = ioat_get_ring_ent(ioat_chan, idx + i);
734
735 tx = &desc->txd;
736 if (tx->cookie) {
737 struct dmaengine_result res;
738
739 dma_cookie_complete(tx);
740 dma_descriptor_unmap(tx);
741 res.result = DMA_TRANS_ABORTED;
742 dmaengine_desc_get_callback_invoke(tx, &res);
743 tx->callback = NULL;
744 tx->callback_result = NULL;
745 }
746
747 /* skip extended descriptors */
748 if (desc_has_ext(desc)) {
749 WARN_ON(i + 1 >= active);
750 i++;
751 }
752
753 /* cleanup super extended descriptors */
754 if (desc->sed) {
755 ioat_free_sed(ioat_dma, desc->sed);
756 desc->sed = NULL;
757 }
758 }
759
760 smp_mb(); /* finish all descriptor reads before incrementing tail */
761 ioat_chan->tail = idx + active;
762
763 desc = ioat_get_ring_ent(ioat_chan, ioat_chan->tail);
764 ioat_chan->last_completion = *ioat_chan->completion = desc->txd.phys;
765}
766
767static void ioat_eh(struct ioatdma_chan *ioat_chan)
768{
769 struct pci_dev *pdev = to_pdev(ioat_chan);
770 struct ioat_dma_descriptor *hw;
771 struct dma_async_tx_descriptor *tx;
772 u64 phys_complete;
773 struct ioat_ring_ent *desc;
774 u32 err_handled = 0;
775 u32 chanerr_int;
776 u32 chanerr;
777 bool abort = false;
778 struct dmaengine_result res;
779
780 /* cleanup so tail points to descriptor that caused the error */
781 if (ioat_cleanup_preamble(ioat_chan, &phys_complete))
782 __cleanup(ioat_chan, phys_complete);
783
784 chanerr = readl(ioat_chan->reg_base + IOAT_CHANERR_OFFSET);
785 pci_read_config_dword(pdev, IOAT_PCI_CHANERR_INT_OFFSET, &chanerr_int);
786
787 dev_dbg(to_dev(ioat_chan), "%s: error = %x:%x\n",
788 __func__, chanerr, chanerr_int);
789
790 desc = ioat_get_ring_ent(ioat_chan, ioat_chan->tail);
791 hw = desc->hw;
792 dump_desc_dbg(ioat_chan, desc);
793
794 switch (hw->ctl_f.op) {
795 case IOAT_OP_XOR_VAL:
796 if (chanerr & IOAT_CHANERR_XOR_P_OR_CRC_ERR) {
797 *desc->result |= SUM_CHECK_P_RESULT;
798 err_handled |= IOAT_CHANERR_XOR_P_OR_CRC_ERR;
799 }
800 break;
801 case IOAT_OP_PQ_VAL:
802 case IOAT_OP_PQ_VAL_16S:
803 if (chanerr & IOAT_CHANERR_XOR_P_OR_CRC_ERR) {
804 *desc->result |= SUM_CHECK_P_RESULT;
805 err_handled |= IOAT_CHANERR_XOR_P_OR_CRC_ERR;
806 }
807 if (chanerr & IOAT_CHANERR_XOR_Q_ERR) {
808 *desc->result |= SUM_CHECK_Q_RESULT;
809 err_handled |= IOAT_CHANERR_XOR_Q_ERR;
810 }
811 break;
812 }
813
814 if (chanerr & IOAT_CHANERR_RECOVER_MASK) {
815 if (chanerr & IOAT_CHANERR_READ_DATA_ERR) {
816 res.result = DMA_TRANS_READ_FAILED;
817 err_handled |= IOAT_CHANERR_READ_DATA_ERR;
818 } else if (chanerr & IOAT_CHANERR_WRITE_DATA_ERR) {
819 res.result = DMA_TRANS_WRITE_FAILED;
820 err_handled |= IOAT_CHANERR_WRITE_DATA_ERR;
821 }
822
823 abort = true;
824 } else
825 res.result = DMA_TRANS_NOERROR;
826
827 /* fault on unhandled error or spurious halt */
828 if (chanerr ^ err_handled || chanerr == 0) {
829 dev_err(to_dev(ioat_chan), "%s: fatal error (%x:%x)\n",
830 __func__, chanerr, err_handled);
831 dev_err(to_dev(ioat_chan), "Errors handled:\n");
832 ioat_print_chanerrs(ioat_chan, err_handled);
833 dev_err(to_dev(ioat_chan), "Errors not handled:\n");
834 ioat_print_chanerrs(ioat_chan, (chanerr & ~err_handled));
835
836 BUG();
837 }
838
839 /* cleanup the faulty descriptor since we are continuing */
840 tx = &desc->txd;
841 if (tx->cookie) {
842 dma_cookie_complete(tx);
843 dma_descriptor_unmap(tx);
844 dmaengine_desc_get_callback_invoke(tx, &res);
845 tx->callback = NULL;
846 tx->callback_result = NULL;
847 }
848
849 /* mark faulting descriptor as complete */
850 *ioat_chan->completion = desc->txd.phys;
851
852 spin_lock_bh(&ioat_chan->prep_lock);
853 /* we need abort all descriptors */
854 if (abort) {
855 ioat_abort_descs(ioat_chan);
856 /* clean up the channel, we could be in weird state */
857 ioat_reset_hw(ioat_chan);
858 }
859
860 writel(chanerr, ioat_chan->reg_base + IOAT_CHANERR_OFFSET);
861 pci_write_config_dword(pdev, IOAT_PCI_CHANERR_INT_OFFSET, chanerr_int);
862
863 ioat_restart_channel(ioat_chan);
864 spin_unlock_bh(&ioat_chan->prep_lock);
865}
866
867static void check_active(struct ioatdma_chan *ioat_chan)
868{
869 if (ioat_ring_active(ioat_chan)) {
870 mod_timer(&ioat_chan->timer, jiffies + COMPLETION_TIMEOUT);
871 return;
872 }
873
874 if (test_and_clear_bit(IOAT_CHAN_ACTIVE, &ioat_chan->state))
875 mod_timer(&ioat_chan->timer, jiffies + IDLE_TIMEOUT);
876}
877
878void ioat_timer_event(unsigned long data)
879{
880 struct ioatdma_chan *ioat_chan = to_ioat_chan((void *)data);
881 dma_addr_t phys_complete;
882 u64 status;
883
884 status = ioat_chansts(ioat_chan);
885
886 /* when halted due to errors check for channel
887 * programming errors before advancing the completion state
888 */
889 if (is_ioat_halted(status)) {
890 u32 chanerr;
891
892 chanerr = readl(ioat_chan->reg_base + IOAT_CHANERR_OFFSET);
893 dev_err(to_dev(ioat_chan), "%s: Channel halted (%x)\n",
894 __func__, chanerr);
895 dev_err(to_dev(ioat_chan), "Errors:\n");
896 ioat_print_chanerrs(ioat_chan, chanerr);
897
898 if (test_bit(IOAT_RUN, &ioat_chan->state)) {
899 spin_lock_bh(&ioat_chan->cleanup_lock);
900 spin_lock_bh(&ioat_chan->prep_lock);
901 set_bit(IOAT_CHAN_DOWN, &ioat_chan->state);
902 spin_unlock_bh(&ioat_chan->prep_lock);
903
904 ioat_abort_descs(ioat_chan);
905 dev_warn(to_dev(ioat_chan), "Reset channel...\n");
906 ioat_reset_hw(ioat_chan);
907 dev_warn(to_dev(ioat_chan), "Restart channel...\n");
908 ioat_restart_channel(ioat_chan);
909
910 spin_lock_bh(&ioat_chan->prep_lock);
911 clear_bit(IOAT_CHAN_DOWN, &ioat_chan->state);
912 spin_unlock_bh(&ioat_chan->prep_lock);
913 spin_unlock_bh(&ioat_chan->cleanup_lock);
914 }
915
916 return;
917 }
918
919 spin_lock_bh(&ioat_chan->cleanup_lock);
920
921 /* handle the no-actives case */
922 if (!ioat_ring_active(ioat_chan)) {
923 spin_lock_bh(&ioat_chan->prep_lock);
924 check_active(ioat_chan);
925 spin_unlock_bh(&ioat_chan->prep_lock);
926 spin_unlock_bh(&ioat_chan->cleanup_lock);
927 return;
928 }
929
930 /* if we haven't made progress and we have already
931 * acknowledged a pending completion once, then be more
932 * forceful with a restart
933 */
934 if (ioat_cleanup_preamble(ioat_chan, &phys_complete))
935 __cleanup(ioat_chan, phys_complete);
936 else if (test_bit(IOAT_COMPLETION_ACK, &ioat_chan->state)) {
937 u32 chanerr;
938
939 chanerr = readl(ioat_chan->reg_base + IOAT_CHANERR_OFFSET);
940 dev_err(to_dev(ioat_chan), "CHANSTS: %#Lx CHANERR: %#x\n",
941 status, chanerr);
942 dev_err(to_dev(ioat_chan), "Errors:\n");
943 ioat_print_chanerrs(ioat_chan, chanerr);
944
945 dev_dbg(to_dev(ioat_chan), "Active descriptors: %d\n",
946 ioat_ring_active(ioat_chan));
947
948 spin_lock_bh(&ioat_chan->prep_lock);
949 set_bit(IOAT_CHAN_DOWN, &ioat_chan->state);
950 spin_unlock_bh(&ioat_chan->prep_lock);
951
952 ioat_abort_descs(ioat_chan);
953 dev_warn(to_dev(ioat_chan), "Resetting channel...\n");
954 ioat_reset_hw(ioat_chan);
955 dev_warn(to_dev(ioat_chan), "Restarting channel...\n");
956 ioat_restart_channel(ioat_chan);
957
958 spin_lock_bh(&ioat_chan->prep_lock);
959 clear_bit(IOAT_CHAN_DOWN, &ioat_chan->state);
960 spin_unlock_bh(&ioat_chan->prep_lock);
961 spin_unlock_bh(&ioat_chan->cleanup_lock);
962 return;
963 } else
964 set_bit(IOAT_COMPLETION_ACK, &ioat_chan->state);
965
966 mod_timer(&ioat_chan->timer, jiffies + COMPLETION_TIMEOUT);
967 spin_unlock_bh(&ioat_chan->cleanup_lock);
968}
969
970enum dma_status
971ioat_tx_status(struct dma_chan *c, dma_cookie_t cookie,
972 struct dma_tx_state *txstate)
973{
974 struct ioatdma_chan *ioat_chan = to_ioat_chan(c);
975 enum dma_status ret;
976
977 ret = dma_cookie_status(c, cookie, txstate);
978 if (ret == DMA_COMPLETE)
979 return ret;
980
981 ioat_cleanup(ioat_chan);
982
983 return dma_cookie_status(c, cookie, txstate);
984}
985
986int ioat_reset_hw(struct ioatdma_chan *ioat_chan)
987{
988 /* throw away whatever the channel was doing and get it
989 * initialized, with ioat3 specific workarounds
990 */
991 struct ioatdma_device *ioat_dma = ioat_chan->ioat_dma;
992 struct pci_dev *pdev = ioat_dma->pdev;
993 u32 chanerr;
994 u16 dev_id;
995 int err;
996
997 ioat_quiesce(ioat_chan, msecs_to_jiffies(100));
998
999 chanerr = readl(ioat_chan->reg_base + IOAT_CHANERR_OFFSET);
1000 writel(chanerr, ioat_chan->reg_base + IOAT_CHANERR_OFFSET);
1001
1002 if (ioat_dma->version < IOAT_VER_3_3) {
1003 /* clear any pending errors */
1004 err = pci_read_config_dword(pdev,
1005 IOAT_PCI_CHANERR_INT_OFFSET, &chanerr);
1006 if (err) {
1007 dev_err(&pdev->dev,
1008 "channel error register unreachable\n");
1009 return err;
1010 }
1011 pci_write_config_dword(pdev,
1012 IOAT_PCI_CHANERR_INT_OFFSET, chanerr);
1013
1014 /* Clear DMAUNCERRSTS Cfg-Reg Parity Error status bit
1015 * (workaround for spurious config parity error after restart)
1016 */
1017 pci_read_config_word(pdev, IOAT_PCI_DEVICE_ID_OFFSET, &dev_id);
1018 if (dev_id == PCI_DEVICE_ID_INTEL_IOAT_TBG0) {
1019 pci_write_config_dword(pdev,
1020 IOAT_PCI_DMAUNCERRSTS_OFFSET,
1021 0x10);
1022 }
1023 }
1024
1025 if (is_bwd_ioat(pdev) && (ioat_dma->irq_mode == IOAT_MSIX)) {
1026 ioat_dma->msixtba0 = readq(ioat_dma->reg_base + 0x1000);
1027 ioat_dma->msixdata0 = readq(ioat_dma->reg_base + 0x1008);
1028 ioat_dma->msixpba = readq(ioat_dma->reg_base + 0x1800);
1029 }
1030
1031
1032 err = ioat_reset_sync(ioat_chan, msecs_to_jiffies(200));
1033 if (!err) {
1034 if (is_bwd_ioat(pdev) && (ioat_dma->irq_mode == IOAT_MSIX)) {
1035 writeq(ioat_dma->msixtba0, ioat_dma->reg_base + 0x1000);
1036 writeq(ioat_dma->msixdata0, ioat_dma->reg_base + 0x1008);
1037 writeq(ioat_dma->msixpba, ioat_dma->reg_base + 0x1800);
1038 }
1039 }
1040
1041 if (err)
1042 dev_err(&pdev->dev, "Failed to reset: %d\n", err);
1043
1044 return err;
1045}