nhi.c (37070B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Thunderbolt driver - NHI driver 4 * 5 * The NHI (native host interface) is the pci device that allows us to send and 6 * receive frames from the thunderbolt bus. 7 * 8 * Copyright (c) 2014 Andreas Noever <andreas.noever@gmail.com> 9 * Copyright (C) 2018, Intel Corporation 10 */ 11 12#include <linux/pm_runtime.h> 13#include <linux/slab.h> 14#include <linux/errno.h> 15#include <linux/pci.h> 16#include <linux/dma-mapping.h> 17#include <linux/interrupt.h> 18#include <linux/iommu.h> 19#include <linux/module.h> 20#include <linux/delay.h> 21#include <linux/property.h> 22#include <linux/string_helpers.h> 23 24#include "nhi.h" 25#include "nhi_regs.h" 26#include "tb.h" 27 28#define RING_TYPE(ring) ((ring)->is_tx ? "TX ring" : "RX ring") 29 30#define RING_FIRST_USABLE_HOPID 1 31 32/* 33 * Minimal number of vectors when we use MSI-X. Two for control channel 34 * Rx/Tx and the rest four are for cross domain DMA paths. 35 */ 36#define MSIX_MIN_VECS 6 37#define MSIX_MAX_VECS 16 38 39#define NHI_MAILBOX_TIMEOUT 500 /* ms */ 40 41#define QUIRK_AUTO_CLEAR_INT BIT(0) 42 43static int ring_interrupt_index(struct tb_ring *ring) 44{ 45 int bit = ring->hop; 46 if (!ring->is_tx) 47 bit += ring->nhi->hop_count; 48 return bit; 49} 50 51/* 52 * ring_interrupt_active() - activate/deactivate interrupts for a single ring 53 * 54 * ring->nhi->lock must be held. 55 */ 56static void ring_interrupt_active(struct tb_ring *ring, bool active) 57{ 58 int reg = REG_RING_INTERRUPT_BASE + 59 ring_interrupt_index(ring) / 32 * 4; 60 int bit = ring_interrupt_index(ring) & 31; 61 int mask = 1 << bit; 62 u32 old, new; 63 64 if (ring->irq > 0) { 65 u32 step, shift, ivr, misc; 66 void __iomem *ivr_base; 67 int index; 68 69 if (ring->is_tx) 70 index = ring->hop; 71 else 72 index = ring->hop + ring->nhi->hop_count; 73 74 if (ring->nhi->quirks & QUIRK_AUTO_CLEAR_INT) { 75 /* 76 * Ask the hardware to clear interrupt status 77 * bits automatically since we already know 78 * which interrupt was triggered. 79 */ 80 misc = ioread32(ring->nhi->iobase + REG_DMA_MISC); 81 if (!(misc & REG_DMA_MISC_INT_AUTO_CLEAR)) { 82 misc |= REG_DMA_MISC_INT_AUTO_CLEAR; 83 iowrite32(misc, ring->nhi->iobase + REG_DMA_MISC); 84 } 85 } 86 87 ivr_base = ring->nhi->iobase + REG_INT_VEC_ALLOC_BASE; 88 step = index / REG_INT_VEC_ALLOC_REGS * REG_INT_VEC_ALLOC_BITS; 89 shift = index % REG_INT_VEC_ALLOC_REGS * REG_INT_VEC_ALLOC_BITS; 90 ivr = ioread32(ivr_base + step); 91 ivr &= ~(REG_INT_VEC_ALLOC_MASK << shift); 92 if (active) 93 ivr |= ring->vector << shift; 94 iowrite32(ivr, ivr_base + step); 95 } 96 97 old = ioread32(ring->nhi->iobase + reg); 98 if (active) 99 new = old | mask; 100 else 101 new = old & ~mask; 102 103 dev_dbg(&ring->nhi->pdev->dev, 104 "%s interrupt at register %#x bit %d (%#x -> %#x)\n", 105 active ? "enabling" : "disabling", reg, bit, old, new); 106 107 if (new == old) 108 dev_WARN(&ring->nhi->pdev->dev, 109 "interrupt for %s %d is already %s\n", 110 RING_TYPE(ring), ring->hop, 111 active ? "enabled" : "disabled"); 112 iowrite32(new, ring->nhi->iobase + reg); 113} 114 115/* 116 * nhi_disable_interrupts() - disable interrupts for all rings 117 * 118 * Use only during init and shutdown. 119 */ 120static void nhi_disable_interrupts(struct tb_nhi *nhi) 121{ 122 int i = 0; 123 /* disable interrupts */ 124 for (i = 0; i < RING_INTERRUPT_REG_COUNT(nhi); i++) 125 iowrite32(0, nhi->iobase + REG_RING_INTERRUPT_BASE + 4 * i); 126 127 /* clear interrupt status bits */ 128 for (i = 0; i < RING_NOTIFY_REG_COUNT(nhi); i++) 129 ioread32(nhi->iobase + REG_RING_NOTIFY_BASE + 4 * i); 130} 131 132/* ring helper methods */ 133 134static void __iomem *ring_desc_base(struct tb_ring *ring) 135{ 136 void __iomem *io = ring->nhi->iobase; 137 io += ring->is_tx ? REG_TX_RING_BASE : REG_RX_RING_BASE; 138 io += ring->hop * 16; 139 return io; 140} 141 142static void __iomem *ring_options_base(struct tb_ring *ring) 143{ 144 void __iomem *io = ring->nhi->iobase; 145 io += ring->is_tx ? REG_TX_OPTIONS_BASE : REG_RX_OPTIONS_BASE; 146 io += ring->hop * 32; 147 return io; 148} 149 150static void ring_iowrite_cons(struct tb_ring *ring, u16 cons) 151{ 152 /* 153 * The other 16-bits in the register is read-only and writes to it 154 * are ignored by the hardware so we can save one ioread32() by 155 * filling the read-only bits with zeroes. 156 */ 157 iowrite32(cons, ring_desc_base(ring) + 8); 158} 159 160static void ring_iowrite_prod(struct tb_ring *ring, u16 prod) 161{ 162 /* See ring_iowrite_cons() above for explanation */ 163 iowrite32(prod << 16, ring_desc_base(ring) + 8); 164} 165 166static void ring_iowrite32desc(struct tb_ring *ring, u32 value, u32 offset) 167{ 168 iowrite32(value, ring_desc_base(ring) + offset); 169} 170 171static void ring_iowrite64desc(struct tb_ring *ring, u64 value, u32 offset) 172{ 173 iowrite32(value, ring_desc_base(ring) + offset); 174 iowrite32(value >> 32, ring_desc_base(ring) + offset + 4); 175} 176 177static void ring_iowrite32options(struct tb_ring *ring, u32 value, u32 offset) 178{ 179 iowrite32(value, ring_options_base(ring) + offset); 180} 181 182static bool ring_full(struct tb_ring *ring) 183{ 184 return ((ring->head + 1) % ring->size) == ring->tail; 185} 186 187static bool ring_empty(struct tb_ring *ring) 188{ 189 return ring->head == ring->tail; 190} 191 192/* 193 * ring_write_descriptors() - post frames from ring->queue to the controller 194 * 195 * ring->lock is held. 196 */ 197static void ring_write_descriptors(struct tb_ring *ring) 198{ 199 struct ring_frame *frame, *n; 200 struct ring_desc *descriptor; 201 list_for_each_entry_safe(frame, n, &ring->queue, list) { 202 if (ring_full(ring)) 203 break; 204 list_move_tail(&frame->list, &ring->in_flight); 205 descriptor = &ring->descriptors[ring->head]; 206 descriptor->phys = frame->buffer_phy; 207 descriptor->time = 0; 208 descriptor->flags = RING_DESC_POSTED | RING_DESC_INTERRUPT; 209 if (ring->is_tx) { 210 descriptor->length = frame->size; 211 descriptor->eof = frame->eof; 212 descriptor->sof = frame->sof; 213 } 214 ring->head = (ring->head + 1) % ring->size; 215 if (ring->is_tx) 216 ring_iowrite_prod(ring, ring->head); 217 else 218 ring_iowrite_cons(ring, ring->head); 219 } 220} 221 222/* 223 * ring_work() - progress completed frames 224 * 225 * If the ring is shutting down then all frames are marked as canceled and 226 * their callbacks are invoked. 227 * 228 * Otherwise we collect all completed frame from the ring buffer, write new 229 * frame to the ring buffer and invoke the callbacks for the completed frames. 230 */ 231static void ring_work(struct work_struct *work) 232{ 233 struct tb_ring *ring = container_of(work, typeof(*ring), work); 234 struct ring_frame *frame; 235 bool canceled = false; 236 unsigned long flags; 237 LIST_HEAD(done); 238 239 spin_lock_irqsave(&ring->lock, flags); 240 241 if (!ring->running) { 242 /* Move all frames to done and mark them as canceled. */ 243 list_splice_tail_init(&ring->in_flight, &done); 244 list_splice_tail_init(&ring->queue, &done); 245 canceled = true; 246 goto invoke_callback; 247 } 248 249 while (!ring_empty(ring)) { 250 if (!(ring->descriptors[ring->tail].flags 251 & RING_DESC_COMPLETED)) 252 break; 253 frame = list_first_entry(&ring->in_flight, typeof(*frame), 254 list); 255 list_move_tail(&frame->list, &done); 256 if (!ring->is_tx) { 257 frame->size = ring->descriptors[ring->tail].length; 258 frame->eof = ring->descriptors[ring->tail].eof; 259 frame->sof = ring->descriptors[ring->tail].sof; 260 frame->flags = ring->descriptors[ring->tail].flags; 261 } 262 ring->tail = (ring->tail + 1) % ring->size; 263 } 264 ring_write_descriptors(ring); 265 266invoke_callback: 267 /* allow callbacks to schedule new work */ 268 spin_unlock_irqrestore(&ring->lock, flags); 269 while (!list_empty(&done)) { 270 frame = list_first_entry(&done, typeof(*frame), list); 271 /* 272 * The callback may reenqueue or delete frame. 273 * Do not hold on to it. 274 */ 275 list_del_init(&frame->list); 276 if (frame->callback) 277 frame->callback(ring, frame, canceled); 278 } 279} 280 281int __tb_ring_enqueue(struct tb_ring *ring, struct ring_frame *frame) 282{ 283 unsigned long flags; 284 int ret = 0; 285 286 spin_lock_irqsave(&ring->lock, flags); 287 if (ring->running) { 288 list_add_tail(&frame->list, &ring->queue); 289 ring_write_descriptors(ring); 290 } else { 291 ret = -ESHUTDOWN; 292 } 293 spin_unlock_irqrestore(&ring->lock, flags); 294 return ret; 295} 296EXPORT_SYMBOL_GPL(__tb_ring_enqueue); 297 298/** 299 * tb_ring_poll() - Poll one completed frame from the ring 300 * @ring: Ring to poll 301 * 302 * This function can be called when @start_poll callback of the @ring 303 * has been called. It will read one completed frame from the ring and 304 * return it to the caller. Returns %NULL if there is no more completed 305 * frames. 306 */ 307struct ring_frame *tb_ring_poll(struct tb_ring *ring) 308{ 309 struct ring_frame *frame = NULL; 310 unsigned long flags; 311 312 spin_lock_irqsave(&ring->lock, flags); 313 if (!ring->running) 314 goto unlock; 315 if (ring_empty(ring)) 316 goto unlock; 317 318 if (ring->descriptors[ring->tail].flags & RING_DESC_COMPLETED) { 319 frame = list_first_entry(&ring->in_flight, typeof(*frame), 320 list); 321 list_del_init(&frame->list); 322 323 if (!ring->is_tx) { 324 frame->size = ring->descriptors[ring->tail].length; 325 frame->eof = ring->descriptors[ring->tail].eof; 326 frame->sof = ring->descriptors[ring->tail].sof; 327 frame->flags = ring->descriptors[ring->tail].flags; 328 } 329 330 ring->tail = (ring->tail + 1) % ring->size; 331 } 332 333unlock: 334 spin_unlock_irqrestore(&ring->lock, flags); 335 return frame; 336} 337EXPORT_SYMBOL_GPL(tb_ring_poll); 338 339static void __ring_interrupt_mask(struct tb_ring *ring, bool mask) 340{ 341 int idx = ring_interrupt_index(ring); 342 int reg = REG_RING_INTERRUPT_BASE + idx / 32 * 4; 343 int bit = idx % 32; 344 u32 val; 345 346 val = ioread32(ring->nhi->iobase + reg); 347 if (mask) 348 val &= ~BIT(bit); 349 else 350 val |= BIT(bit); 351 iowrite32(val, ring->nhi->iobase + reg); 352} 353 354/* Both @nhi->lock and @ring->lock should be held */ 355static void __ring_interrupt(struct tb_ring *ring) 356{ 357 if (!ring->running) 358 return; 359 360 if (ring->start_poll) { 361 __ring_interrupt_mask(ring, true); 362 ring->start_poll(ring->poll_data); 363 } else { 364 schedule_work(&ring->work); 365 } 366} 367 368/** 369 * tb_ring_poll_complete() - Re-start interrupt for the ring 370 * @ring: Ring to re-start the interrupt 371 * 372 * This will re-start (unmask) the ring interrupt once the user is done 373 * with polling. 374 */ 375void tb_ring_poll_complete(struct tb_ring *ring) 376{ 377 unsigned long flags; 378 379 spin_lock_irqsave(&ring->nhi->lock, flags); 380 spin_lock(&ring->lock); 381 if (ring->start_poll) 382 __ring_interrupt_mask(ring, false); 383 spin_unlock(&ring->lock); 384 spin_unlock_irqrestore(&ring->nhi->lock, flags); 385} 386EXPORT_SYMBOL_GPL(tb_ring_poll_complete); 387 388static void ring_clear_msix(const struct tb_ring *ring) 389{ 390 if (ring->nhi->quirks & QUIRK_AUTO_CLEAR_INT) 391 return; 392 393 if (ring->is_tx) 394 ioread32(ring->nhi->iobase + REG_RING_NOTIFY_BASE); 395 else 396 ioread32(ring->nhi->iobase + REG_RING_NOTIFY_BASE + 397 4 * (ring->nhi->hop_count / 32)); 398} 399 400static irqreturn_t ring_msix(int irq, void *data) 401{ 402 struct tb_ring *ring = data; 403 404 spin_lock(&ring->nhi->lock); 405 ring_clear_msix(ring); 406 spin_lock(&ring->lock); 407 __ring_interrupt(ring); 408 spin_unlock(&ring->lock); 409 spin_unlock(&ring->nhi->lock); 410 411 return IRQ_HANDLED; 412} 413 414static int ring_request_msix(struct tb_ring *ring, bool no_suspend) 415{ 416 struct tb_nhi *nhi = ring->nhi; 417 unsigned long irqflags; 418 int ret; 419 420 if (!nhi->pdev->msix_enabled) 421 return 0; 422 423 ret = ida_simple_get(&nhi->msix_ida, 0, MSIX_MAX_VECS, GFP_KERNEL); 424 if (ret < 0) 425 return ret; 426 427 ring->vector = ret; 428 429 ret = pci_irq_vector(ring->nhi->pdev, ring->vector); 430 if (ret < 0) 431 goto err_ida_remove; 432 433 ring->irq = ret; 434 435 irqflags = no_suspend ? IRQF_NO_SUSPEND : 0; 436 ret = request_irq(ring->irq, ring_msix, irqflags, "thunderbolt", ring); 437 if (ret) 438 goto err_ida_remove; 439 440 return 0; 441 442err_ida_remove: 443 ida_simple_remove(&nhi->msix_ida, ring->vector); 444 445 return ret; 446} 447 448static void ring_release_msix(struct tb_ring *ring) 449{ 450 if (ring->irq <= 0) 451 return; 452 453 free_irq(ring->irq, ring); 454 ida_simple_remove(&ring->nhi->msix_ida, ring->vector); 455 ring->vector = 0; 456 ring->irq = 0; 457} 458 459static int nhi_alloc_hop(struct tb_nhi *nhi, struct tb_ring *ring) 460{ 461 int ret = 0; 462 463 spin_lock_irq(&nhi->lock); 464 465 if (ring->hop < 0) { 466 unsigned int i; 467 468 /* 469 * Automatically allocate HopID from the non-reserved 470 * range 1 .. hop_count - 1. 471 */ 472 for (i = RING_FIRST_USABLE_HOPID; i < nhi->hop_count; i++) { 473 if (ring->is_tx) { 474 if (!nhi->tx_rings[i]) { 475 ring->hop = i; 476 break; 477 } 478 } else { 479 if (!nhi->rx_rings[i]) { 480 ring->hop = i; 481 break; 482 } 483 } 484 } 485 } 486 487 if (ring->hop < 0 || ring->hop >= nhi->hop_count) { 488 dev_warn(&nhi->pdev->dev, "invalid hop: %d\n", ring->hop); 489 ret = -EINVAL; 490 goto err_unlock; 491 } 492 if (ring->is_tx && nhi->tx_rings[ring->hop]) { 493 dev_warn(&nhi->pdev->dev, "TX hop %d already allocated\n", 494 ring->hop); 495 ret = -EBUSY; 496 goto err_unlock; 497 } else if (!ring->is_tx && nhi->rx_rings[ring->hop]) { 498 dev_warn(&nhi->pdev->dev, "RX hop %d already allocated\n", 499 ring->hop); 500 ret = -EBUSY; 501 goto err_unlock; 502 } 503 504 if (ring->is_tx) 505 nhi->tx_rings[ring->hop] = ring; 506 else 507 nhi->rx_rings[ring->hop] = ring; 508 509err_unlock: 510 spin_unlock_irq(&nhi->lock); 511 512 return ret; 513} 514 515static struct tb_ring *tb_ring_alloc(struct tb_nhi *nhi, u32 hop, int size, 516 bool transmit, unsigned int flags, 517 int e2e_tx_hop, u16 sof_mask, u16 eof_mask, 518 void (*start_poll)(void *), 519 void *poll_data) 520{ 521 struct tb_ring *ring = NULL; 522 523 dev_dbg(&nhi->pdev->dev, "allocating %s ring %d of size %d\n", 524 transmit ? "TX" : "RX", hop, size); 525 526 ring = kzalloc(sizeof(*ring), GFP_KERNEL); 527 if (!ring) 528 return NULL; 529 530 spin_lock_init(&ring->lock); 531 INIT_LIST_HEAD(&ring->queue); 532 INIT_LIST_HEAD(&ring->in_flight); 533 INIT_WORK(&ring->work, ring_work); 534 535 ring->nhi = nhi; 536 ring->hop = hop; 537 ring->is_tx = transmit; 538 ring->size = size; 539 ring->flags = flags; 540 ring->e2e_tx_hop = e2e_tx_hop; 541 ring->sof_mask = sof_mask; 542 ring->eof_mask = eof_mask; 543 ring->head = 0; 544 ring->tail = 0; 545 ring->running = false; 546 ring->start_poll = start_poll; 547 ring->poll_data = poll_data; 548 549 ring->descriptors = dma_alloc_coherent(&ring->nhi->pdev->dev, 550 size * sizeof(*ring->descriptors), 551 &ring->descriptors_dma, GFP_KERNEL | __GFP_ZERO); 552 if (!ring->descriptors) 553 goto err_free_ring; 554 555 if (ring_request_msix(ring, flags & RING_FLAG_NO_SUSPEND)) 556 goto err_free_descs; 557 558 if (nhi_alloc_hop(nhi, ring)) 559 goto err_release_msix; 560 561 return ring; 562 563err_release_msix: 564 ring_release_msix(ring); 565err_free_descs: 566 dma_free_coherent(&ring->nhi->pdev->dev, 567 ring->size * sizeof(*ring->descriptors), 568 ring->descriptors, ring->descriptors_dma); 569err_free_ring: 570 kfree(ring); 571 572 return NULL; 573} 574 575/** 576 * tb_ring_alloc_tx() - Allocate DMA ring for transmit 577 * @nhi: Pointer to the NHI the ring is to be allocated 578 * @hop: HopID (ring) to allocate 579 * @size: Number of entries in the ring 580 * @flags: Flags for the ring 581 */ 582struct tb_ring *tb_ring_alloc_tx(struct tb_nhi *nhi, int hop, int size, 583 unsigned int flags) 584{ 585 return tb_ring_alloc(nhi, hop, size, true, flags, 0, 0, 0, NULL, NULL); 586} 587EXPORT_SYMBOL_GPL(tb_ring_alloc_tx); 588 589/** 590 * tb_ring_alloc_rx() - Allocate DMA ring for receive 591 * @nhi: Pointer to the NHI the ring is to be allocated 592 * @hop: HopID (ring) to allocate. Pass %-1 for automatic allocation. 593 * @size: Number of entries in the ring 594 * @flags: Flags for the ring 595 * @e2e_tx_hop: Transmit HopID when E2E is enabled in @flags 596 * @sof_mask: Mask of PDF values that start a frame 597 * @eof_mask: Mask of PDF values that end a frame 598 * @start_poll: If not %NULL the ring will call this function when an 599 * interrupt is triggered and masked, instead of callback 600 * in each Rx frame. 601 * @poll_data: Optional data passed to @start_poll 602 */ 603struct tb_ring *tb_ring_alloc_rx(struct tb_nhi *nhi, int hop, int size, 604 unsigned int flags, int e2e_tx_hop, 605 u16 sof_mask, u16 eof_mask, 606 void (*start_poll)(void *), void *poll_data) 607{ 608 return tb_ring_alloc(nhi, hop, size, false, flags, e2e_tx_hop, sof_mask, eof_mask, 609 start_poll, poll_data); 610} 611EXPORT_SYMBOL_GPL(tb_ring_alloc_rx); 612 613/** 614 * tb_ring_start() - enable a ring 615 * @ring: Ring to start 616 * 617 * Must not be invoked in parallel with tb_ring_stop(). 618 */ 619void tb_ring_start(struct tb_ring *ring) 620{ 621 u16 frame_size; 622 u32 flags; 623 624 spin_lock_irq(&ring->nhi->lock); 625 spin_lock(&ring->lock); 626 if (ring->nhi->going_away) 627 goto err; 628 if (ring->running) { 629 dev_WARN(&ring->nhi->pdev->dev, "ring already started\n"); 630 goto err; 631 } 632 dev_dbg(&ring->nhi->pdev->dev, "starting %s %d\n", 633 RING_TYPE(ring), ring->hop); 634 635 if (ring->flags & RING_FLAG_FRAME) { 636 /* Means 4096 */ 637 frame_size = 0; 638 flags = RING_FLAG_ENABLE; 639 } else { 640 frame_size = TB_FRAME_SIZE; 641 flags = RING_FLAG_ENABLE | RING_FLAG_RAW; 642 } 643 644 ring_iowrite64desc(ring, ring->descriptors_dma, 0); 645 if (ring->is_tx) { 646 ring_iowrite32desc(ring, ring->size, 12); 647 ring_iowrite32options(ring, 0, 4); /* time releated ? */ 648 ring_iowrite32options(ring, flags, 0); 649 } else { 650 u32 sof_eof_mask = ring->sof_mask << 16 | ring->eof_mask; 651 652 ring_iowrite32desc(ring, (frame_size << 16) | ring->size, 12); 653 ring_iowrite32options(ring, sof_eof_mask, 4); 654 ring_iowrite32options(ring, flags, 0); 655 } 656 657 /* 658 * Now that the ring valid bit is set we can configure E2E if 659 * enabled for the ring. 660 */ 661 if (ring->flags & RING_FLAG_E2E) { 662 if (!ring->is_tx) { 663 u32 hop; 664 665 hop = ring->e2e_tx_hop << REG_RX_OPTIONS_E2E_HOP_SHIFT; 666 hop &= REG_RX_OPTIONS_E2E_HOP_MASK; 667 flags |= hop; 668 669 dev_dbg(&ring->nhi->pdev->dev, 670 "enabling E2E for %s %d with TX HopID %d\n", 671 RING_TYPE(ring), ring->hop, ring->e2e_tx_hop); 672 } else { 673 dev_dbg(&ring->nhi->pdev->dev, "enabling E2E for %s %d\n", 674 RING_TYPE(ring), ring->hop); 675 } 676 677 flags |= RING_FLAG_E2E_FLOW_CONTROL; 678 ring_iowrite32options(ring, flags, 0); 679 } 680 681 ring_interrupt_active(ring, true); 682 ring->running = true; 683err: 684 spin_unlock(&ring->lock); 685 spin_unlock_irq(&ring->nhi->lock); 686} 687EXPORT_SYMBOL_GPL(tb_ring_start); 688 689/** 690 * tb_ring_stop() - shutdown a ring 691 * @ring: Ring to stop 692 * 693 * Must not be invoked from a callback. 694 * 695 * This method will disable the ring. Further calls to 696 * tb_ring_tx/tb_ring_rx will return -ESHUTDOWN until ring_stop has been 697 * called. 698 * 699 * All enqueued frames will be canceled and their callbacks will be executed 700 * with frame->canceled set to true (on the callback thread). This method 701 * returns only after all callback invocations have finished. 702 */ 703void tb_ring_stop(struct tb_ring *ring) 704{ 705 spin_lock_irq(&ring->nhi->lock); 706 spin_lock(&ring->lock); 707 dev_dbg(&ring->nhi->pdev->dev, "stopping %s %d\n", 708 RING_TYPE(ring), ring->hop); 709 if (ring->nhi->going_away) 710 goto err; 711 if (!ring->running) { 712 dev_WARN(&ring->nhi->pdev->dev, "%s %d already stopped\n", 713 RING_TYPE(ring), ring->hop); 714 goto err; 715 } 716 ring_interrupt_active(ring, false); 717 718 ring_iowrite32options(ring, 0, 0); 719 ring_iowrite64desc(ring, 0, 0); 720 ring_iowrite32desc(ring, 0, 8); 721 ring_iowrite32desc(ring, 0, 12); 722 ring->head = 0; 723 ring->tail = 0; 724 ring->running = false; 725 726err: 727 spin_unlock(&ring->lock); 728 spin_unlock_irq(&ring->nhi->lock); 729 730 /* 731 * schedule ring->work to invoke callbacks on all remaining frames. 732 */ 733 schedule_work(&ring->work); 734 flush_work(&ring->work); 735} 736EXPORT_SYMBOL_GPL(tb_ring_stop); 737 738/* 739 * tb_ring_free() - free ring 740 * 741 * When this method returns all invocations of ring->callback will have 742 * finished. 743 * 744 * Ring must be stopped. 745 * 746 * Must NOT be called from ring_frame->callback! 747 */ 748void tb_ring_free(struct tb_ring *ring) 749{ 750 spin_lock_irq(&ring->nhi->lock); 751 /* 752 * Dissociate the ring from the NHI. This also ensures that 753 * nhi_interrupt_work cannot reschedule ring->work. 754 */ 755 if (ring->is_tx) 756 ring->nhi->tx_rings[ring->hop] = NULL; 757 else 758 ring->nhi->rx_rings[ring->hop] = NULL; 759 760 if (ring->running) { 761 dev_WARN(&ring->nhi->pdev->dev, "%s %d still running\n", 762 RING_TYPE(ring), ring->hop); 763 } 764 spin_unlock_irq(&ring->nhi->lock); 765 766 ring_release_msix(ring); 767 768 dma_free_coherent(&ring->nhi->pdev->dev, 769 ring->size * sizeof(*ring->descriptors), 770 ring->descriptors, ring->descriptors_dma); 771 772 ring->descriptors = NULL; 773 ring->descriptors_dma = 0; 774 775 776 dev_dbg(&ring->nhi->pdev->dev, "freeing %s %d\n", RING_TYPE(ring), 777 ring->hop); 778 779 /* 780 * ring->work can no longer be scheduled (it is scheduled only 781 * by nhi_interrupt_work, ring_stop and ring_msix). Wait for it 782 * to finish before freeing the ring. 783 */ 784 flush_work(&ring->work); 785 kfree(ring); 786} 787EXPORT_SYMBOL_GPL(tb_ring_free); 788 789/** 790 * nhi_mailbox_cmd() - Send a command through NHI mailbox 791 * @nhi: Pointer to the NHI structure 792 * @cmd: Command to send 793 * @data: Data to be send with the command 794 * 795 * Sends mailbox command to the firmware running on NHI. Returns %0 in 796 * case of success and negative errno in case of failure. 797 */ 798int nhi_mailbox_cmd(struct tb_nhi *nhi, enum nhi_mailbox_cmd cmd, u32 data) 799{ 800 ktime_t timeout; 801 u32 val; 802 803 iowrite32(data, nhi->iobase + REG_INMAIL_DATA); 804 805 val = ioread32(nhi->iobase + REG_INMAIL_CMD); 806 val &= ~(REG_INMAIL_CMD_MASK | REG_INMAIL_ERROR); 807 val |= REG_INMAIL_OP_REQUEST | cmd; 808 iowrite32(val, nhi->iobase + REG_INMAIL_CMD); 809 810 timeout = ktime_add_ms(ktime_get(), NHI_MAILBOX_TIMEOUT); 811 do { 812 val = ioread32(nhi->iobase + REG_INMAIL_CMD); 813 if (!(val & REG_INMAIL_OP_REQUEST)) 814 break; 815 usleep_range(10, 20); 816 } while (ktime_before(ktime_get(), timeout)); 817 818 if (val & REG_INMAIL_OP_REQUEST) 819 return -ETIMEDOUT; 820 if (val & REG_INMAIL_ERROR) 821 return -EIO; 822 823 return 0; 824} 825 826/** 827 * nhi_mailbox_mode() - Return current firmware operation mode 828 * @nhi: Pointer to the NHI structure 829 * 830 * The function reads current firmware operation mode using NHI mailbox 831 * registers and returns it to the caller. 832 */ 833enum nhi_fw_mode nhi_mailbox_mode(struct tb_nhi *nhi) 834{ 835 u32 val; 836 837 val = ioread32(nhi->iobase + REG_OUTMAIL_CMD); 838 val &= REG_OUTMAIL_CMD_OPMODE_MASK; 839 val >>= REG_OUTMAIL_CMD_OPMODE_SHIFT; 840 841 return (enum nhi_fw_mode)val; 842} 843 844static void nhi_interrupt_work(struct work_struct *work) 845{ 846 struct tb_nhi *nhi = container_of(work, typeof(*nhi), interrupt_work); 847 int value = 0; /* Suppress uninitialized usage warning. */ 848 int bit; 849 int hop = -1; 850 int type = 0; /* current interrupt type 0: TX, 1: RX, 2: RX overflow */ 851 struct tb_ring *ring; 852 853 spin_lock_irq(&nhi->lock); 854 855 /* 856 * Starting at REG_RING_NOTIFY_BASE there are three status bitfields 857 * (TX, RX, RX overflow). We iterate over the bits and read a new 858 * dwords as required. The registers are cleared on read. 859 */ 860 for (bit = 0; bit < 3 * nhi->hop_count; bit++) { 861 if (bit % 32 == 0) 862 value = ioread32(nhi->iobase 863 + REG_RING_NOTIFY_BASE 864 + 4 * (bit / 32)); 865 if (++hop == nhi->hop_count) { 866 hop = 0; 867 type++; 868 } 869 if ((value & (1 << (bit % 32))) == 0) 870 continue; 871 if (type == 2) { 872 dev_warn(&nhi->pdev->dev, 873 "RX overflow for ring %d\n", 874 hop); 875 continue; 876 } 877 if (type == 0) 878 ring = nhi->tx_rings[hop]; 879 else 880 ring = nhi->rx_rings[hop]; 881 if (ring == NULL) { 882 dev_warn(&nhi->pdev->dev, 883 "got interrupt for inactive %s ring %d\n", 884 type ? "RX" : "TX", 885 hop); 886 continue; 887 } 888 889 spin_lock(&ring->lock); 890 __ring_interrupt(ring); 891 spin_unlock(&ring->lock); 892 } 893 spin_unlock_irq(&nhi->lock); 894} 895 896static irqreturn_t nhi_msi(int irq, void *data) 897{ 898 struct tb_nhi *nhi = data; 899 schedule_work(&nhi->interrupt_work); 900 return IRQ_HANDLED; 901} 902 903static int __nhi_suspend_noirq(struct device *dev, bool wakeup) 904{ 905 struct pci_dev *pdev = to_pci_dev(dev); 906 struct tb *tb = pci_get_drvdata(pdev); 907 struct tb_nhi *nhi = tb->nhi; 908 int ret; 909 910 ret = tb_domain_suspend_noirq(tb); 911 if (ret) 912 return ret; 913 914 if (nhi->ops && nhi->ops->suspend_noirq) { 915 ret = nhi->ops->suspend_noirq(tb->nhi, wakeup); 916 if (ret) 917 return ret; 918 } 919 920 return 0; 921} 922 923static int nhi_suspend_noirq(struct device *dev) 924{ 925 return __nhi_suspend_noirq(dev, device_may_wakeup(dev)); 926} 927 928static int nhi_freeze_noirq(struct device *dev) 929{ 930 struct pci_dev *pdev = to_pci_dev(dev); 931 struct tb *tb = pci_get_drvdata(pdev); 932 933 return tb_domain_freeze_noirq(tb); 934} 935 936static int nhi_thaw_noirq(struct device *dev) 937{ 938 struct pci_dev *pdev = to_pci_dev(dev); 939 struct tb *tb = pci_get_drvdata(pdev); 940 941 return tb_domain_thaw_noirq(tb); 942} 943 944static bool nhi_wake_supported(struct pci_dev *pdev) 945{ 946 u8 val; 947 948 /* 949 * If power rails are sustainable for wakeup from S4 this 950 * property is set by the BIOS. 951 */ 952 if (device_property_read_u8(&pdev->dev, "WAKE_SUPPORTED", &val)) 953 return !!val; 954 955 return true; 956} 957 958static int nhi_poweroff_noirq(struct device *dev) 959{ 960 struct pci_dev *pdev = to_pci_dev(dev); 961 bool wakeup; 962 963 wakeup = device_may_wakeup(dev) && nhi_wake_supported(pdev); 964 return __nhi_suspend_noirq(dev, wakeup); 965} 966 967static void nhi_enable_int_throttling(struct tb_nhi *nhi) 968{ 969 /* Throttling is specified in 256ns increments */ 970 u32 throttle = DIV_ROUND_UP(128 * NSEC_PER_USEC, 256); 971 unsigned int i; 972 973 /* 974 * Configure interrupt throttling for all vectors even if we 975 * only use few. 976 */ 977 for (i = 0; i < MSIX_MAX_VECS; i++) { 978 u32 reg = REG_INT_THROTTLING_RATE + i * 4; 979 iowrite32(throttle, nhi->iobase + reg); 980 } 981} 982 983static int nhi_resume_noirq(struct device *dev) 984{ 985 struct pci_dev *pdev = to_pci_dev(dev); 986 struct tb *tb = pci_get_drvdata(pdev); 987 struct tb_nhi *nhi = tb->nhi; 988 int ret; 989 990 /* 991 * Check that the device is still there. It may be that the user 992 * unplugged last device which causes the host controller to go 993 * away on PCs. 994 */ 995 if (!pci_device_is_present(pdev)) { 996 nhi->going_away = true; 997 } else { 998 if (nhi->ops && nhi->ops->resume_noirq) { 999 ret = nhi->ops->resume_noirq(nhi); 1000 if (ret) 1001 return ret; 1002 } 1003 nhi_enable_int_throttling(tb->nhi); 1004 } 1005 1006 return tb_domain_resume_noirq(tb); 1007} 1008 1009static int nhi_suspend(struct device *dev) 1010{ 1011 struct pci_dev *pdev = to_pci_dev(dev); 1012 struct tb *tb = pci_get_drvdata(pdev); 1013 1014 return tb_domain_suspend(tb); 1015} 1016 1017static void nhi_complete(struct device *dev) 1018{ 1019 struct pci_dev *pdev = to_pci_dev(dev); 1020 struct tb *tb = pci_get_drvdata(pdev); 1021 1022 /* 1023 * If we were runtime suspended when system suspend started, 1024 * schedule runtime resume now. It should bring the domain back 1025 * to functional state. 1026 */ 1027 if (pm_runtime_suspended(&pdev->dev)) 1028 pm_runtime_resume(&pdev->dev); 1029 else 1030 tb_domain_complete(tb); 1031} 1032 1033static int nhi_runtime_suspend(struct device *dev) 1034{ 1035 struct pci_dev *pdev = to_pci_dev(dev); 1036 struct tb *tb = pci_get_drvdata(pdev); 1037 struct tb_nhi *nhi = tb->nhi; 1038 int ret; 1039 1040 ret = tb_domain_runtime_suspend(tb); 1041 if (ret) 1042 return ret; 1043 1044 if (nhi->ops && nhi->ops->runtime_suspend) { 1045 ret = nhi->ops->runtime_suspend(tb->nhi); 1046 if (ret) 1047 return ret; 1048 } 1049 return 0; 1050} 1051 1052static int nhi_runtime_resume(struct device *dev) 1053{ 1054 struct pci_dev *pdev = to_pci_dev(dev); 1055 struct tb *tb = pci_get_drvdata(pdev); 1056 struct tb_nhi *nhi = tb->nhi; 1057 int ret; 1058 1059 if (nhi->ops && nhi->ops->runtime_resume) { 1060 ret = nhi->ops->runtime_resume(nhi); 1061 if (ret) 1062 return ret; 1063 } 1064 1065 nhi_enable_int_throttling(nhi); 1066 return tb_domain_runtime_resume(tb); 1067} 1068 1069static void nhi_shutdown(struct tb_nhi *nhi) 1070{ 1071 int i; 1072 1073 dev_dbg(&nhi->pdev->dev, "shutdown\n"); 1074 1075 for (i = 0; i < nhi->hop_count; i++) { 1076 if (nhi->tx_rings[i]) 1077 dev_WARN(&nhi->pdev->dev, 1078 "TX ring %d is still active\n", i); 1079 if (nhi->rx_rings[i]) 1080 dev_WARN(&nhi->pdev->dev, 1081 "RX ring %d is still active\n", i); 1082 } 1083 nhi_disable_interrupts(nhi); 1084 /* 1085 * We have to release the irq before calling flush_work. Otherwise an 1086 * already executing IRQ handler could call schedule_work again. 1087 */ 1088 if (!nhi->pdev->msix_enabled) { 1089 devm_free_irq(&nhi->pdev->dev, nhi->pdev->irq, nhi); 1090 flush_work(&nhi->interrupt_work); 1091 } 1092 ida_destroy(&nhi->msix_ida); 1093 1094 if (nhi->ops && nhi->ops->shutdown) 1095 nhi->ops->shutdown(nhi); 1096} 1097 1098static void nhi_check_quirks(struct tb_nhi *nhi) 1099{ 1100 /* 1101 * Intel hardware supports auto clear of the interrupt status 1102 * reqister right after interrupt is being issued. 1103 */ 1104 if (nhi->pdev->vendor == PCI_VENDOR_ID_INTEL) 1105 nhi->quirks |= QUIRK_AUTO_CLEAR_INT; 1106} 1107 1108static int nhi_check_iommu_pdev(struct pci_dev *pdev, void *data) 1109{ 1110 if (!pdev->external_facing || 1111 !device_iommu_capable(&pdev->dev, IOMMU_CAP_PRE_BOOT_PROTECTION)) 1112 return 0; 1113 *(bool *)data = true; 1114 return 1; /* Stop walking */ 1115} 1116 1117static void nhi_check_iommu(struct tb_nhi *nhi) 1118{ 1119 struct pci_bus *bus = nhi->pdev->bus; 1120 bool port_ok = false; 1121 1122 /* 1123 * Ideally what we'd do here is grab every PCI device that 1124 * represents a tunnelling adapter for this NHI and check their 1125 * status directly, but unfortunately USB4 seems to make it 1126 * obnoxiously difficult to reliably make any correlation. 1127 * 1128 * So for now we'll have to bodge it... Hoping that the system 1129 * is at least sane enough that an adapter is in the same PCI 1130 * segment as its NHI, if we can find *something* on that segment 1131 * which meets the requirements for Kernel DMA Protection, we'll 1132 * take that to imply that firmware is aware and has (hopefully) 1133 * done the right thing in general. We need to know that the PCI 1134 * layer has seen the ExternalFacingPort property which will then 1135 * inform the IOMMU layer to enforce the complete "untrusted DMA" 1136 * flow, but also that the IOMMU driver itself can be trusted not 1137 * to have been subverted by a pre-boot DMA attack. 1138 */ 1139 while (bus->parent) 1140 bus = bus->parent; 1141 1142 pci_walk_bus(bus, nhi_check_iommu_pdev, &port_ok); 1143 1144 nhi->iommu_dma_protection = port_ok; 1145 dev_dbg(&nhi->pdev->dev, "IOMMU DMA protection is %s\n", 1146 str_enabled_disabled(port_ok)); 1147} 1148 1149static int nhi_init_msi(struct tb_nhi *nhi) 1150{ 1151 struct pci_dev *pdev = nhi->pdev; 1152 int res, irq, nvec; 1153 1154 /* In case someone left them on. */ 1155 nhi_disable_interrupts(nhi); 1156 1157 nhi_enable_int_throttling(nhi); 1158 1159 ida_init(&nhi->msix_ida); 1160 1161 /* 1162 * The NHI has 16 MSI-X vectors or a single MSI. We first try to 1163 * get all MSI-X vectors and if we succeed, each ring will have 1164 * one MSI-X. If for some reason that does not work out, we 1165 * fallback to a single MSI. 1166 */ 1167 nvec = pci_alloc_irq_vectors(pdev, MSIX_MIN_VECS, MSIX_MAX_VECS, 1168 PCI_IRQ_MSIX); 1169 if (nvec < 0) { 1170 nvec = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSI); 1171 if (nvec < 0) 1172 return nvec; 1173 1174 INIT_WORK(&nhi->interrupt_work, nhi_interrupt_work); 1175 1176 irq = pci_irq_vector(nhi->pdev, 0); 1177 if (irq < 0) 1178 return irq; 1179 1180 res = devm_request_irq(&pdev->dev, irq, nhi_msi, 1181 IRQF_NO_SUSPEND, "thunderbolt", nhi); 1182 if (res) { 1183 dev_err(&pdev->dev, "request_irq failed, aborting\n"); 1184 return res; 1185 } 1186 } 1187 1188 return 0; 1189} 1190 1191static bool nhi_imr_valid(struct pci_dev *pdev) 1192{ 1193 u8 val; 1194 1195 if (!device_property_read_u8(&pdev->dev, "IMR_VALID", &val)) 1196 return !!val; 1197 1198 return true; 1199} 1200 1201static struct tb *nhi_select_cm(struct tb_nhi *nhi) 1202{ 1203 struct tb *tb; 1204 1205 /* 1206 * USB4 case is simple. If we got control of any of the 1207 * capabilities, we use software CM. 1208 */ 1209 if (tb_acpi_is_native()) 1210 return tb_probe(nhi); 1211 1212 /* 1213 * Either firmware based CM is running (we did not get control 1214 * from the firmware) or this is pre-USB4 PC so try first 1215 * firmware CM and then fallback to software CM. 1216 */ 1217 tb = icm_probe(nhi); 1218 if (!tb) 1219 tb = tb_probe(nhi); 1220 1221 return tb; 1222} 1223 1224static int nhi_probe(struct pci_dev *pdev, const struct pci_device_id *id) 1225{ 1226 struct tb_nhi *nhi; 1227 struct tb *tb; 1228 int res; 1229 1230 if (!nhi_imr_valid(pdev)) { 1231 dev_warn(&pdev->dev, "firmware image not valid, aborting\n"); 1232 return -ENODEV; 1233 } 1234 1235 res = pcim_enable_device(pdev); 1236 if (res) { 1237 dev_err(&pdev->dev, "cannot enable PCI device, aborting\n"); 1238 return res; 1239 } 1240 1241 res = pcim_iomap_regions(pdev, 1 << 0, "thunderbolt"); 1242 if (res) { 1243 dev_err(&pdev->dev, "cannot obtain PCI resources, aborting\n"); 1244 return res; 1245 } 1246 1247 nhi = devm_kzalloc(&pdev->dev, sizeof(*nhi), GFP_KERNEL); 1248 if (!nhi) 1249 return -ENOMEM; 1250 1251 nhi->pdev = pdev; 1252 nhi->ops = (const struct tb_nhi_ops *)id->driver_data; 1253 /* cannot fail - table is allocated in pcim_iomap_regions */ 1254 nhi->iobase = pcim_iomap_table(pdev)[0]; 1255 nhi->hop_count = ioread32(nhi->iobase + REG_HOP_COUNT) & 0x3ff; 1256 dev_dbg(&pdev->dev, "total paths: %d\n", nhi->hop_count); 1257 1258 nhi->tx_rings = devm_kcalloc(&pdev->dev, nhi->hop_count, 1259 sizeof(*nhi->tx_rings), GFP_KERNEL); 1260 nhi->rx_rings = devm_kcalloc(&pdev->dev, nhi->hop_count, 1261 sizeof(*nhi->rx_rings), GFP_KERNEL); 1262 if (!nhi->tx_rings || !nhi->rx_rings) 1263 return -ENOMEM; 1264 1265 nhi_check_quirks(nhi); 1266 nhi_check_iommu(nhi); 1267 1268 res = nhi_init_msi(nhi); 1269 if (res) { 1270 dev_err(&pdev->dev, "cannot enable MSI, aborting\n"); 1271 return res; 1272 } 1273 1274 spin_lock_init(&nhi->lock); 1275 1276 res = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)); 1277 if (res) { 1278 dev_err(&pdev->dev, "failed to set DMA mask\n"); 1279 return res; 1280 } 1281 1282 pci_set_master(pdev); 1283 1284 if (nhi->ops && nhi->ops->init) { 1285 res = nhi->ops->init(nhi); 1286 if (res) 1287 return res; 1288 } 1289 1290 tb = nhi_select_cm(nhi); 1291 if (!tb) { 1292 dev_err(&nhi->pdev->dev, 1293 "failed to determine connection manager, aborting\n"); 1294 return -ENODEV; 1295 } 1296 1297 dev_dbg(&nhi->pdev->dev, "NHI initialized, starting thunderbolt\n"); 1298 1299 res = tb_domain_add(tb); 1300 if (res) { 1301 /* 1302 * At this point the RX/TX rings might already have been 1303 * activated. Do a proper shutdown. 1304 */ 1305 tb_domain_put(tb); 1306 nhi_shutdown(nhi); 1307 return res; 1308 } 1309 pci_set_drvdata(pdev, tb); 1310 1311 device_wakeup_enable(&pdev->dev); 1312 1313 pm_runtime_allow(&pdev->dev); 1314 pm_runtime_set_autosuspend_delay(&pdev->dev, TB_AUTOSUSPEND_DELAY); 1315 pm_runtime_use_autosuspend(&pdev->dev); 1316 pm_runtime_put_autosuspend(&pdev->dev); 1317 1318 return 0; 1319} 1320 1321static void nhi_remove(struct pci_dev *pdev) 1322{ 1323 struct tb *tb = pci_get_drvdata(pdev); 1324 struct tb_nhi *nhi = tb->nhi; 1325 1326 pm_runtime_get_sync(&pdev->dev); 1327 pm_runtime_dont_use_autosuspend(&pdev->dev); 1328 pm_runtime_forbid(&pdev->dev); 1329 1330 tb_domain_remove(tb); 1331 nhi_shutdown(nhi); 1332} 1333 1334/* 1335 * The tunneled pci bridges are siblings of us. Use resume_noirq to reenable 1336 * the tunnels asap. A corresponding pci quirk blocks the downstream bridges 1337 * resume_noirq until we are done. 1338 */ 1339static const struct dev_pm_ops nhi_pm_ops = { 1340 .suspend_noirq = nhi_suspend_noirq, 1341 .resume_noirq = nhi_resume_noirq, 1342 .freeze_noirq = nhi_freeze_noirq, /* 1343 * we just disable hotplug, the 1344 * pci-tunnels stay alive. 1345 */ 1346 .thaw_noirq = nhi_thaw_noirq, 1347 .restore_noirq = nhi_resume_noirq, 1348 .suspend = nhi_suspend, 1349 .poweroff_noirq = nhi_poweroff_noirq, 1350 .poweroff = nhi_suspend, 1351 .complete = nhi_complete, 1352 .runtime_suspend = nhi_runtime_suspend, 1353 .runtime_resume = nhi_runtime_resume, 1354}; 1355 1356static struct pci_device_id nhi_ids[] = { 1357 /* 1358 * We have to specify class, the TB bridges use the same device and 1359 * vendor (sub)id on gen 1 and gen 2 controllers. 1360 */ 1361 { 1362 .class = PCI_CLASS_SYSTEM_OTHER << 8, .class_mask = ~0, 1363 .vendor = PCI_VENDOR_ID_INTEL, 1364 .device = PCI_DEVICE_ID_INTEL_LIGHT_RIDGE, 1365 .subvendor = 0x2222, .subdevice = 0x1111, 1366 }, 1367 { 1368 .class = PCI_CLASS_SYSTEM_OTHER << 8, .class_mask = ~0, 1369 .vendor = PCI_VENDOR_ID_INTEL, 1370 .device = PCI_DEVICE_ID_INTEL_CACTUS_RIDGE_4C, 1371 .subvendor = 0x2222, .subdevice = 0x1111, 1372 }, 1373 { 1374 .class = PCI_CLASS_SYSTEM_OTHER << 8, .class_mask = ~0, 1375 .vendor = PCI_VENDOR_ID_INTEL, 1376 .device = PCI_DEVICE_ID_INTEL_FALCON_RIDGE_2C_NHI, 1377 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, 1378 }, 1379 { 1380 .class = PCI_CLASS_SYSTEM_OTHER << 8, .class_mask = ~0, 1381 .vendor = PCI_VENDOR_ID_INTEL, 1382 .device = PCI_DEVICE_ID_INTEL_FALCON_RIDGE_4C_NHI, 1383 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, 1384 }, 1385 1386 /* Thunderbolt 3 */ 1387 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_2C_NHI) }, 1388 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_4C_NHI) }, 1389 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_USBONLY_NHI) }, 1390 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_LP_NHI) }, 1391 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_LP_USBONLY_NHI) }, 1392 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_2C_NHI) }, 1393 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_4C_NHI) }, 1394 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_USBONLY_NHI) }, 1395 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_TITAN_RIDGE_2C_NHI) }, 1396 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_TITAN_RIDGE_4C_NHI) }, 1397 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICL_NHI0), 1398 .driver_data = (kernel_ulong_t)&icl_nhi_ops }, 1399 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICL_NHI1), 1400 .driver_data = (kernel_ulong_t)&icl_nhi_ops }, 1401 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_TGL_NHI0), 1402 .driver_data = (kernel_ulong_t)&icl_nhi_ops }, 1403 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_TGL_NHI1), 1404 .driver_data = (kernel_ulong_t)&icl_nhi_ops }, 1405 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_TGL_H_NHI0), 1406 .driver_data = (kernel_ulong_t)&icl_nhi_ops }, 1407 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_TGL_H_NHI1), 1408 .driver_data = (kernel_ulong_t)&icl_nhi_ops }, 1409 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ADL_NHI0), 1410 .driver_data = (kernel_ulong_t)&icl_nhi_ops }, 1411 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ADL_NHI1), 1412 .driver_data = (kernel_ulong_t)&icl_nhi_ops }, 1413 1414 /* Any USB4 compliant host */ 1415 { PCI_DEVICE_CLASS(PCI_CLASS_SERIAL_USB_USB4, ~0) }, 1416 1417 { 0,} 1418}; 1419 1420MODULE_DEVICE_TABLE(pci, nhi_ids); 1421MODULE_LICENSE("GPL"); 1422 1423static struct pci_driver nhi_driver = { 1424 .name = "thunderbolt", 1425 .id_table = nhi_ids, 1426 .probe = nhi_probe, 1427 .remove = nhi_remove, 1428 .shutdown = nhi_remove, 1429 .driver.pm = &nhi_pm_ops, 1430}; 1431 1432static int __init nhi_init(void) 1433{ 1434 int ret; 1435 1436 ret = tb_domain_init(); 1437 if (ret) 1438 return ret; 1439 ret = pci_register_driver(&nhi_driver); 1440 if (ret) 1441 tb_domain_exit(); 1442 return ret; 1443} 1444 1445static void __exit nhi_unload(void) 1446{ 1447 pci_unregister_driver(&nhi_driver); 1448 tb_domain_exit(); 1449} 1450 1451rootfs_initcall(nhi_init); 1452module_exit(nhi_unload);