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