1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Thunderbolt driver - Tunneling support 4 * 5 * Copyright (c) 2014 Andreas Noever <andreas.noever@gmail.com> 6 * Copyright (C) 2019, Intel Corporation 7 */ 8 9 #include <linux/delay.h> 10 #include <linux/slab.h> 11 #include <linux/list.h> 12 13 #include "tunnel.h" 14 #include "tb.h" 15 16 /* PCIe adapters use always HopID of 8 for both directions */ 17 #define TB_PCI_HOPID 8 18 19 #define TB_PCI_PATH_DOWN 0 20 #define TB_PCI_PATH_UP 1 21 22 /* USB3 adapters use always HopID of 8 for both directions */ 23 #define TB_USB3_HOPID 8 24 25 #define TB_USB3_PATH_DOWN 0 26 #define TB_USB3_PATH_UP 1 27 28 /* DP adapters use HopID 8 for AUX and 9 for Video */ 29 #define TB_DP_AUX_TX_HOPID 8 30 #define TB_DP_AUX_RX_HOPID 8 31 #define TB_DP_VIDEO_HOPID 9 32 33 #define TB_DP_VIDEO_PATH_OUT 0 34 #define TB_DP_AUX_PATH_OUT 1 35 #define TB_DP_AUX_PATH_IN 2 36 37 #define TB_DMA_PATH_OUT 0 38 #define TB_DMA_PATH_IN 1 39 40 static const char * const tb_tunnel_names[] = { "PCI", "DP", "DMA", "USB3" }; 41 42 #define __TB_TUNNEL_PRINT(level, tunnel, fmt, arg...) \ 43 do { \ 44 struct tb_tunnel *__tunnel = (tunnel); \ 45 level(__tunnel->tb, "%llx:%x <-> %llx:%x (%s): " fmt, \ 46 tb_route(__tunnel->src_port->sw), \ 47 __tunnel->src_port->port, \ 48 tb_route(__tunnel->dst_port->sw), \ 49 __tunnel->dst_port->port, \ 50 tb_tunnel_names[__tunnel->type], \ 51 ## arg); \ 52 } while (0) 53 54 #define tb_tunnel_WARN(tunnel, fmt, arg...) \ 55 __TB_TUNNEL_PRINT(tb_WARN, tunnel, fmt, ##arg) 56 #define tb_tunnel_warn(tunnel, fmt, arg...) \ 57 __TB_TUNNEL_PRINT(tb_warn, tunnel, fmt, ##arg) 58 #define tb_tunnel_info(tunnel, fmt, arg...) \ 59 __TB_TUNNEL_PRINT(tb_info, tunnel, fmt, ##arg) 60 #define tb_tunnel_dbg(tunnel, fmt, arg...) \ 61 __TB_TUNNEL_PRINT(tb_dbg, tunnel, fmt, ##arg) 62 63 static struct tb_tunnel *tb_tunnel_alloc(struct tb *tb, size_t npaths, 64 enum tb_tunnel_type type) 65 { 66 struct tb_tunnel *tunnel; 67 68 tunnel = kzalloc(sizeof(*tunnel), GFP_KERNEL); 69 if (!tunnel) 70 return NULL; 71 72 tunnel->paths = kcalloc(npaths, sizeof(tunnel->paths[0]), GFP_KERNEL); 73 if (!tunnel->paths) { 74 tb_tunnel_free(tunnel); 75 return NULL; 76 } 77 78 INIT_LIST_HEAD(&tunnel->list); 79 tunnel->tb = tb; 80 tunnel->npaths = npaths; 81 tunnel->type = type; 82 83 return tunnel; 84 } 85 86 static int tb_pci_activate(struct tb_tunnel *tunnel, bool activate) 87 { 88 int res; 89 90 res = tb_pci_port_enable(tunnel->src_port, activate); 91 if (res) 92 return res; 93 94 if (tb_port_is_pcie_up(tunnel->dst_port)) 95 return tb_pci_port_enable(tunnel->dst_port, activate); 96 97 return 0; 98 } 99 100 static int tb_initial_credits(const struct tb_switch *sw) 101 { 102 /* If the path is complete sw is not NULL */ 103 if (sw) { 104 /* More credits for faster link */ 105 switch (sw->link_speed * sw->link_width) { 106 case 40: 107 return 32; 108 case 20: 109 return 24; 110 } 111 } 112 113 return 16; 114 } 115 116 static void tb_pci_init_path(struct tb_path *path) 117 { 118 path->egress_fc_enable = TB_PATH_SOURCE | TB_PATH_INTERNAL; 119 path->egress_shared_buffer = TB_PATH_NONE; 120 path->ingress_fc_enable = TB_PATH_ALL; 121 path->ingress_shared_buffer = TB_PATH_NONE; 122 path->priority = 3; 123 path->weight = 1; 124 path->drop_packages = 0; 125 path->nfc_credits = 0; 126 path->hops[0].initial_credits = 7; 127 path->hops[1].initial_credits = 128 tb_initial_credits(path->hops[1].in_port->sw); 129 } 130 131 /** 132 * tb_tunnel_discover_pci() - Discover existing PCIe tunnels 133 * @tb: Pointer to the domain structure 134 * @down: PCIe downstream adapter 135 * 136 * If @down adapter is active, follows the tunnel to the PCIe upstream 137 * adapter and back. Returns the discovered tunnel or %NULL if there was 138 * no tunnel. 139 */ 140 struct tb_tunnel *tb_tunnel_discover_pci(struct tb *tb, struct tb_port *down) 141 { 142 struct tb_tunnel *tunnel; 143 struct tb_path *path; 144 145 if (!tb_pci_port_is_enabled(down)) 146 return NULL; 147 148 tunnel = tb_tunnel_alloc(tb, 2, TB_TUNNEL_PCI); 149 if (!tunnel) 150 return NULL; 151 152 tunnel->activate = tb_pci_activate; 153 tunnel->src_port = down; 154 155 /* 156 * Discover both paths even if they are not complete. We will 157 * clean them up by calling tb_tunnel_deactivate() below in that 158 * case. 159 */ 160 path = tb_path_discover(down, TB_PCI_HOPID, NULL, -1, 161 &tunnel->dst_port, "PCIe Up"); 162 if (!path) { 163 /* Just disable the downstream port */ 164 tb_pci_port_enable(down, false); 165 goto err_free; 166 } 167 tunnel->paths[TB_PCI_PATH_UP] = path; 168 tb_pci_init_path(tunnel->paths[TB_PCI_PATH_UP]); 169 170 path = tb_path_discover(tunnel->dst_port, -1, down, TB_PCI_HOPID, NULL, 171 "PCIe Down"); 172 if (!path) 173 goto err_deactivate; 174 tunnel->paths[TB_PCI_PATH_DOWN] = path; 175 tb_pci_init_path(tunnel->paths[TB_PCI_PATH_DOWN]); 176 177 /* Validate that the tunnel is complete */ 178 if (!tb_port_is_pcie_up(tunnel->dst_port)) { 179 tb_port_warn(tunnel->dst_port, 180 "path does not end on a PCIe adapter, cleaning up\n"); 181 goto err_deactivate; 182 } 183 184 if (down != tunnel->src_port) { 185 tb_tunnel_warn(tunnel, "path is not complete, cleaning up\n"); 186 goto err_deactivate; 187 } 188 189 if (!tb_pci_port_is_enabled(tunnel->dst_port)) { 190 tb_tunnel_warn(tunnel, 191 "tunnel is not fully activated, cleaning up\n"); 192 goto err_deactivate; 193 } 194 195 tb_tunnel_dbg(tunnel, "discovered\n"); 196 return tunnel; 197 198 err_deactivate: 199 tb_tunnel_deactivate(tunnel); 200 err_free: 201 tb_tunnel_free(tunnel); 202 203 return NULL; 204 } 205 206 /** 207 * tb_tunnel_alloc_pci() - allocate a pci tunnel 208 * @tb: Pointer to the domain structure 209 * @up: PCIe upstream adapter port 210 * @down: PCIe downstream adapter port 211 * 212 * Allocate a PCI tunnel. The ports must be of type TB_TYPE_PCIE_UP and 213 * TB_TYPE_PCIE_DOWN. 214 * 215 * Return: Returns a tb_tunnel on success or NULL on failure. 216 */ 217 struct tb_tunnel *tb_tunnel_alloc_pci(struct tb *tb, struct tb_port *up, 218 struct tb_port *down) 219 { 220 struct tb_tunnel *tunnel; 221 struct tb_path *path; 222 223 tunnel = tb_tunnel_alloc(tb, 2, TB_TUNNEL_PCI); 224 if (!tunnel) 225 return NULL; 226 227 tunnel->activate = tb_pci_activate; 228 tunnel->src_port = down; 229 tunnel->dst_port = up; 230 231 path = tb_path_alloc(tb, down, TB_PCI_HOPID, up, TB_PCI_HOPID, 0, 232 "PCIe Down"); 233 if (!path) { 234 tb_tunnel_free(tunnel); 235 return NULL; 236 } 237 tb_pci_init_path(path); 238 tunnel->paths[TB_PCI_PATH_DOWN] = path; 239 240 path = tb_path_alloc(tb, up, TB_PCI_HOPID, down, TB_PCI_HOPID, 0, 241 "PCIe Up"); 242 if (!path) { 243 tb_tunnel_free(tunnel); 244 return NULL; 245 } 246 tb_pci_init_path(path); 247 tunnel->paths[TB_PCI_PATH_UP] = path; 248 249 return tunnel; 250 } 251 252 static bool tb_dp_is_usb4(const struct tb_switch *sw) 253 { 254 /* Titan Ridge DP adapters need the same treatment as USB4 */ 255 return tb_switch_is_usb4(sw) || tb_switch_is_titan_ridge(sw); 256 } 257 258 static int tb_dp_cm_handshake(struct tb_port *in, struct tb_port *out) 259 { 260 int timeout = 10; 261 u32 val; 262 int ret; 263 264 /* Both ends need to support this */ 265 if (!tb_dp_is_usb4(in->sw) || !tb_dp_is_usb4(out->sw)) 266 return 0; 267 268 ret = tb_port_read(out, &val, TB_CFG_PORT, 269 out->cap_adap + DP_STATUS_CTRL, 1); 270 if (ret) 271 return ret; 272 273 val |= DP_STATUS_CTRL_UF | DP_STATUS_CTRL_CMHS; 274 275 ret = tb_port_write(out, &val, TB_CFG_PORT, 276 out->cap_adap + DP_STATUS_CTRL, 1); 277 if (ret) 278 return ret; 279 280 do { 281 ret = tb_port_read(out, &val, TB_CFG_PORT, 282 out->cap_adap + DP_STATUS_CTRL, 1); 283 if (ret) 284 return ret; 285 if (!(val & DP_STATUS_CTRL_CMHS)) 286 return 0; 287 usleep_range(10, 100); 288 } while (timeout--); 289 290 return -ETIMEDOUT; 291 } 292 293 static inline u32 tb_dp_cap_get_rate(u32 val) 294 { 295 u32 rate = (val & DP_COMMON_CAP_RATE_MASK) >> DP_COMMON_CAP_RATE_SHIFT; 296 297 switch (rate) { 298 case DP_COMMON_CAP_RATE_RBR: 299 return 1620; 300 case DP_COMMON_CAP_RATE_HBR: 301 return 2700; 302 case DP_COMMON_CAP_RATE_HBR2: 303 return 5400; 304 case DP_COMMON_CAP_RATE_HBR3: 305 return 8100; 306 default: 307 return 0; 308 } 309 } 310 311 static inline u32 tb_dp_cap_set_rate(u32 val, u32 rate) 312 { 313 val &= ~DP_COMMON_CAP_RATE_MASK; 314 switch (rate) { 315 default: 316 WARN(1, "invalid rate %u passed, defaulting to 1620 MB/s\n", rate); 317 /* Fallthrough */ 318 case 1620: 319 val |= DP_COMMON_CAP_RATE_RBR << DP_COMMON_CAP_RATE_SHIFT; 320 break; 321 case 2700: 322 val |= DP_COMMON_CAP_RATE_HBR << DP_COMMON_CAP_RATE_SHIFT; 323 break; 324 case 5400: 325 val |= DP_COMMON_CAP_RATE_HBR2 << DP_COMMON_CAP_RATE_SHIFT; 326 break; 327 case 8100: 328 val |= DP_COMMON_CAP_RATE_HBR3 << DP_COMMON_CAP_RATE_SHIFT; 329 break; 330 } 331 return val; 332 } 333 334 static inline u32 tb_dp_cap_get_lanes(u32 val) 335 { 336 u32 lanes = (val & DP_COMMON_CAP_LANES_MASK) >> DP_COMMON_CAP_LANES_SHIFT; 337 338 switch (lanes) { 339 case DP_COMMON_CAP_1_LANE: 340 return 1; 341 case DP_COMMON_CAP_2_LANES: 342 return 2; 343 case DP_COMMON_CAP_4_LANES: 344 return 4; 345 default: 346 return 0; 347 } 348 } 349 350 static inline u32 tb_dp_cap_set_lanes(u32 val, u32 lanes) 351 { 352 val &= ~DP_COMMON_CAP_LANES_MASK; 353 switch (lanes) { 354 default: 355 WARN(1, "invalid number of lanes %u passed, defaulting to 1\n", 356 lanes); 357 /* Fallthrough */ 358 case 1: 359 val |= DP_COMMON_CAP_1_LANE << DP_COMMON_CAP_LANES_SHIFT; 360 break; 361 case 2: 362 val |= DP_COMMON_CAP_2_LANES << DP_COMMON_CAP_LANES_SHIFT; 363 break; 364 case 4: 365 val |= DP_COMMON_CAP_4_LANES << DP_COMMON_CAP_LANES_SHIFT; 366 break; 367 } 368 return val; 369 } 370 371 static unsigned int tb_dp_bandwidth(unsigned int rate, unsigned int lanes) 372 { 373 /* Tunneling removes the DP 8b/10b encoding */ 374 return rate * lanes * 8 / 10; 375 } 376 377 static int tb_dp_reduce_bandwidth(int max_bw, u32 in_rate, u32 in_lanes, 378 u32 out_rate, u32 out_lanes, u32 *new_rate, 379 u32 *new_lanes) 380 { 381 static const u32 dp_bw[][2] = { 382 /* Mb/s, lanes */ 383 { 8100, 4 }, /* 25920 Mb/s */ 384 { 5400, 4 }, /* 17280 Mb/s */ 385 { 8100, 2 }, /* 12960 Mb/s */ 386 { 2700, 4 }, /* 8640 Mb/s */ 387 { 5400, 2 }, /* 8640 Mb/s */ 388 { 8100, 1 }, /* 6480 Mb/s */ 389 { 1620, 4 }, /* 5184 Mb/s */ 390 { 5400, 1 }, /* 4320 Mb/s */ 391 { 2700, 2 }, /* 4320 Mb/s */ 392 { 1620, 2 }, /* 2592 Mb/s */ 393 { 2700, 1 }, /* 2160 Mb/s */ 394 { 1620, 1 }, /* 1296 Mb/s */ 395 }; 396 unsigned int i; 397 398 /* 399 * Find a combination that can fit into max_bw and does not 400 * exceed the maximum rate and lanes supported by the DP OUT and 401 * DP IN adapters. 402 */ 403 for (i = 0; i < ARRAY_SIZE(dp_bw); i++) { 404 if (dp_bw[i][0] > out_rate || dp_bw[i][1] > out_lanes) 405 continue; 406 407 if (dp_bw[i][0] > in_rate || dp_bw[i][1] > in_lanes) 408 continue; 409 410 if (tb_dp_bandwidth(dp_bw[i][0], dp_bw[i][1]) <= max_bw) { 411 *new_rate = dp_bw[i][0]; 412 *new_lanes = dp_bw[i][1]; 413 return 0; 414 } 415 } 416 417 return -ENOSR; 418 } 419 420 static int tb_dp_xchg_caps(struct tb_tunnel *tunnel) 421 { 422 u32 out_dp_cap, out_rate, out_lanes, in_dp_cap, in_rate, in_lanes, bw; 423 struct tb_port *out = tunnel->dst_port; 424 struct tb_port *in = tunnel->src_port; 425 int ret; 426 427 /* 428 * Copy DP_LOCAL_CAP register to DP_REMOTE_CAP register for 429 * newer generation hardware. 430 */ 431 if (in->sw->generation < 2 || out->sw->generation < 2) 432 return 0; 433 434 /* 435 * Perform connection manager handshake between IN and OUT ports 436 * before capabilities exchange can take place. 437 */ 438 ret = tb_dp_cm_handshake(in, out); 439 if (ret) 440 return ret; 441 442 /* Read both DP_LOCAL_CAP registers */ 443 ret = tb_port_read(in, &in_dp_cap, TB_CFG_PORT, 444 in->cap_adap + DP_LOCAL_CAP, 1); 445 if (ret) 446 return ret; 447 448 ret = tb_port_read(out, &out_dp_cap, TB_CFG_PORT, 449 out->cap_adap + DP_LOCAL_CAP, 1); 450 if (ret) 451 return ret; 452 453 /* Write IN local caps to OUT remote caps */ 454 ret = tb_port_write(out, &in_dp_cap, TB_CFG_PORT, 455 out->cap_adap + DP_REMOTE_CAP, 1); 456 if (ret) 457 return ret; 458 459 in_rate = tb_dp_cap_get_rate(in_dp_cap); 460 in_lanes = tb_dp_cap_get_lanes(in_dp_cap); 461 tb_port_dbg(in, "maximum supported bandwidth %u Mb/s x%u = %u Mb/s\n", 462 in_rate, in_lanes, tb_dp_bandwidth(in_rate, in_lanes)); 463 464 /* 465 * If the tunnel bandwidth is limited (max_bw is set) then see 466 * if we need to reduce bandwidth to fit there. 467 */ 468 out_rate = tb_dp_cap_get_rate(out_dp_cap); 469 out_lanes = tb_dp_cap_get_lanes(out_dp_cap); 470 bw = tb_dp_bandwidth(out_rate, out_lanes); 471 tb_port_dbg(out, "maximum supported bandwidth %u Mb/s x%u = %u Mb/s\n", 472 out_rate, out_lanes, bw); 473 474 if (tunnel->max_bw && bw > tunnel->max_bw) { 475 u32 new_rate, new_lanes, new_bw; 476 477 ret = tb_dp_reduce_bandwidth(tunnel->max_bw, in_rate, in_lanes, 478 out_rate, out_lanes, &new_rate, 479 &new_lanes); 480 if (ret) { 481 tb_port_info(out, "not enough bandwidth for DP tunnel\n"); 482 return ret; 483 } 484 485 new_bw = tb_dp_bandwidth(new_rate, new_lanes); 486 tb_port_dbg(out, "bandwidth reduced to %u Mb/s x%u = %u Mb/s\n", 487 new_rate, new_lanes, new_bw); 488 489 /* 490 * Set new rate and number of lanes before writing it to 491 * the IN port remote caps. 492 */ 493 out_dp_cap = tb_dp_cap_set_rate(out_dp_cap, new_rate); 494 out_dp_cap = tb_dp_cap_set_lanes(out_dp_cap, new_lanes); 495 } 496 497 return tb_port_write(in, &out_dp_cap, TB_CFG_PORT, 498 in->cap_adap + DP_REMOTE_CAP, 1); 499 } 500 501 static int tb_dp_activate(struct tb_tunnel *tunnel, bool active) 502 { 503 int ret; 504 505 if (active) { 506 struct tb_path **paths; 507 int last; 508 509 paths = tunnel->paths; 510 last = paths[TB_DP_VIDEO_PATH_OUT]->path_length - 1; 511 512 tb_dp_port_set_hops(tunnel->src_port, 513 paths[TB_DP_VIDEO_PATH_OUT]->hops[0].in_hop_index, 514 paths[TB_DP_AUX_PATH_OUT]->hops[0].in_hop_index, 515 paths[TB_DP_AUX_PATH_IN]->hops[last].next_hop_index); 516 517 tb_dp_port_set_hops(tunnel->dst_port, 518 paths[TB_DP_VIDEO_PATH_OUT]->hops[last].next_hop_index, 519 paths[TB_DP_AUX_PATH_IN]->hops[0].in_hop_index, 520 paths[TB_DP_AUX_PATH_OUT]->hops[last].next_hop_index); 521 } else { 522 tb_dp_port_hpd_clear(tunnel->src_port); 523 tb_dp_port_set_hops(tunnel->src_port, 0, 0, 0); 524 if (tb_port_is_dpout(tunnel->dst_port)) 525 tb_dp_port_set_hops(tunnel->dst_port, 0, 0, 0); 526 } 527 528 ret = tb_dp_port_enable(tunnel->src_port, active); 529 if (ret) 530 return ret; 531 532 if (tb_port_is_dpout(tunnel->dst_port)) 533 return tb_dp_port_enable(tunnel->dst_port, active); 534 535 return 0; 536 } 537 538 static int tb_dp_consumed_bandwidth(struct tb_tunnel *tunnel) 539 { 540 struct tb_port *in = tunnel->src_port; 541 const struct tb_switch *sw = in->sw; 542 u32 val, rate = 0, lanes = 0; 543 int ret; 544 545 if (tb_dp_is_usb4(sw)) { 546 int timeout = 10; 547 548 /* 549 * Wait for DPRX done. Normally it should be already set 550 * for active tunnel. 551 */ 552 do { 553 ret = tb_port_read(in, &val, TB_CFG_PORT, 554 in->cap_adap + DP_COMMON_CAP, 1); 555 if (ret) 556 return ret; 557 558 if (val & DP_COMMON_CAP_DPRX_DONE) { 559 rate = tb_dp_cap_get_rate(val); 560 lanes = tb_dp_cap_get_lanes(val); 561 break; 562 } 563 msleep(250); 564 } while (timeout--); 565 566 if (!timeout) 567 return -ETIMEDOUT; 568 } else if (sw->generation >= 2) { 569 /* 570 * Read from the copied remote cap so that we take into 571 * account if capabilities were reduced during exchange. 572 */ 573 ret = tb_port_read(in, &val, TB_CFG_PORT, 574 in->cap_adap + DP_REMOTE_CAP, 1); 575 if (ret) 576 return ret; 577 578 rate = tb_dp_cap_get_rate(val); 579 lanes = tb_dp_cap_get_lanes(val); 580 } else { 581 /* No bandwidth management for legacy devices */ 582 return 0; 583 } 584 585 return tb_dp_bandwidth(rate, lanes); 586 } 587 588 static void tb_dp_init_aux_path(struct tb_path *path) 589 { 590 int i; 591 592 path->egress_fc_enable = TB_PATH_SOURCE | TB_PATH_INTERNAL; 593 path->egress_shared_buffer = TB_PATH_NONE; 594 path->ingress_fc_enable = TB_PATH_ALL; 595 path->ingress_shared_buffer = TB_PATH_NONE; 596 path->priority = 2; 597 path->weight = 1; 598 599 for (i = 0; i < path->path_length; i++) 600 path->hops[i].initial_credits = 1; 601 } 602 603 static void tb_dp_init_video_path(struct tb_path *path, bool discover) 604 { 605 u32 nfc_credits = path->hops[0].in_port->config.nfc_credits; 606 607 path->egress_fc_enable = TB_PATH_NONE; 608 path->egress_shared_buffer = TB_PATH_NONE; 609 path->ingress_fc_enable = TB_PATH_NONE; 610 path->ingress_shared_buffer = TB_PATH_NONE; 611 path->priority = 1; 612 path->weight = 1; 613 614 if (discover) { 615 path->nfc_credits = nfc_credits & ADP_CS_4_NFC_BUFFERS_MASK; 616 } else { 617 u32 max_credits; 618 619 max_credits = (nfc_credits & ADP_CS_4_TOTAL_BUFFERS_MASK) >> 620 ADP_CS_4_TOTAL_BUFFERS_SHIFT; 621 /* Leave some credits for AUX path */ 622 path->nfc_credits = min(max_credits - 2, 12U); 623 } 624 } 625 626 /** 627 * tb_tunnel_discover_dp() - Discover existing Display Port tunnels 628 * @tb: Pointer to the domain structure 629 * @in: DP in adapter 630 * 631 * If @in adapter is active, follows the tunnel to the DP out adapter 632 * and back. Returns the discovered tunnel or %NULL if there was no 633 * tunnel. 634 * 635 * Return: DP tunnel or %NULL if no tunnel found. 636 */ 637 struct tb_tunnel *tb_tunnel_discover_dp(struct tb *tb, struct tb_port *in) 638 { 639 struct tb_tunnel *tunnel; 640 struct tb_port *port; 641 struct tb_path *path; 642 643 if (!tb_dp_port_is_enabled(in)) 644 return NULL; 645 646 tunnel = tb_tunnel_alloc(tb, 3, TB_TUNNEL_DP); 647 if (!tunnel) 648 return NULL; 649 650 tunnel->init = tb_dp_xchg_caps; 651 tunnel->activate = tb_dp_activate; 652 tunnel->consumed_bandwidth = tb_dp_consumed_bandwidth; 653 tunnel->src_port = in; 654 655 path = tb_path_discover(in, TB_DP_VIDEO_HOPID, NULL, -1, 656 &tunnel->dst_port, "Video"); 657 if (!path) { 658 /* Just disable the DP IN port */ 659 tb_dp_port_enable(in, false); 660 goto err_free; 661 } 662 tunnel->paths[TB_DP_VIDEO_PATH_OUT] = path; 663 tb_dp_init_video_path(tunnel->paths[TB_DP_VIDEO_PATH_OUT], true); 664 665 path = tb_path_discover(in, TB_DP_AUX_TX_HOPID, NULL, -1, NULL, "AUX TX"); 666 if (!path) 667 goto err_deactivate; 668 tunnel->paths[TB_DP_AUX_PATH_OUT] = path; 669 tb_dp_init_aux_path(tunnel->paths[TB_DP_AUX_PATH_OUT]); 670 671 path = tb_path_discover(tunnel->dst_port, -1, in, TB_DP_AUX_RX_HOPID, 672 &port, "AUX RX"); 673 if (!path) 674 goto err_deactivate; 675 tunnel->paths[TB_DP_AUX_PATH_IN] = path; 676 tb_dp_init_aux_path(tunnel->paths[TB_DP_AUX_PATH_IN]); 677 678 /* Validate that the tunnel is complete */ 679 if (!tb_port_is_dpout(tunnel->dst_port)) { 680 tb_port_warn(in, "path does not end on a DP adapter, cleaning up\n"); 681 goto err_deactivate; 682 } 683 684 if (!tb_dp_port_is_enabled(tunnel->dst_port)) 685 goto err_deactivate; 686 687 if (!tb_dp_port_hpd_is_active(tunnel->dst_port)) 688 goto err_deactivate; 689 690 if (port != tunnel->src_port) { 691 tb_tunnel_warn(tunnel, "path is not complete, cleaning up\n"); 692 goto err_deactivate; 693 } 694 695 tb_tunnel_dbg(tunnel, "discovered\n"); 696 return tunnel; 697 698 err_deactivate: 699 tb_tunnel_deactivate(tunnel); 700 err_free: 701 tb_tunnel_free(tunnel); 702 703 return NULL; 704 } 705 706 /** 707 * tb_tunnel_alloc_dp() - allocate a Display Port tunnel 708 * @tb: Pointer to the domain structure 709 * @in: DP in adapter port 710 * @out: DP out adapter port 711 * @max_bw: Maximum available bandwidth for the DP tunnel (%0 if not limited) 712 * 713 * Allocates a tunnel between @in and @out that is capable of tunneling 714 * Display Port traffic. 715 * 716 * Return: Returns a tb_tunnel on success or NULL on failure. 717 */ 718 struct tb_tunnel *tb_tunnel_alloc_dp(struct tb *tb, struct tb_port *in, 719 struct tb_port *out, int max_bw) 720 { 721 struct tb_tunnel *tunnel; 722 struct tb_path **paths; 723 struct tb_path *path; 724 725 if (WARN_ON(!in->cap_adap || !out->cap_adap)) 726 return NULL; 727 728 tunnel = tb_tunnel_alloc(tb, 3, TB_TUNNEL_DP); 729 if (!tunnel) 730 return NULL; 731 732 tunnel->init = tb_dp_xchg_caps; 733 tunnel->activate = tb_dp_activate; 734 tunnel->consumed_bandwidth = tb_dp_consumed_bandwidth; 735 tunnel->src_port = in; 736 tunnel->dst_port = out; 737 tunnel->max_bw = max_bw; 738 739 paths = tunnel->paths; 740 741 path = tb_path_alloc(tb, in, TB_DP_VIDEO_HOPID, out, TB_DP_VIDEO_HOPID, 742 1, "Video"); 743 if (!path) 744 goto err_free; 745 tb_dp_init_video_path(path, false); 746 paths[TB_DP_VIDEO_PATH_OUT] = path; 747 748 path = tb_path_alloc(tb, in, TB_DP_AUX_TX_HOPID, out, 749 TB_DP_AUX_TX_HOPID, 1, "AUX TX"); 750 if (!path) 751 goto err_free; 752 tb_dp_init_aux_path(path); 753 paths[TB_DP_AUX_PATH_OUT] = path; 754 755 path = tb_path_alloc(tb, out, TB_DP_AUX_RX_HOPID, in, 756 TB_DP_AUX_RX_HOPID, 1, "AUX RX"); 757 if (!path) 758 goto err_free; 759 tb_dp_init_aux_path(path); 760 paths[TB_DP_AUX_PATH_IN] = path; 761 762 return tunnel; 763 764 err_free: 765 tb_tunnel_free(tunnel); 766 return NULL; 767 } 768 769 static u32 tb_dma_credits(struct tb_port *nhi) 770 { 771 u32 max_credits; 772 773 max_credits = (nhi->config.nfc_credits & ADP_CS_4_TOTAL_BUFFERS_MASK) >> 774 ADP_CS_4_TOTAL_BUFFERS_SHIFT; 775 return min(max_credits, 13U); 776 } 777 778 static int tb_dma_activate(struct tb_tunnel *tunnel, bool active) 779 { 780 struct tb_port *nhi = tunnel->src_port; 781 u32 credits; 782 783 credits = active ? tb_dma_credits(nhi) : 0; 784 return tb_port_set_initial_credits(nhi, credits); 785 } 786 787 static void tb_dma_init_path(struct tb_path *path, unsigned int isb, 788 unsigned int efc, u32 credits) 789 { 790 int i; 791 792 path->egress_fc_enable = efc; 793 path->ingress_fc_enable = TB_PATH_ALL; 794 path->egress_shared_buffer = TB_PATH_NONE; 795 path->ingress_shared_buffer = isb; 796 path->priority = 5; 797 path->weight = 1; 798 path->clear_fc = true; 799 800 for (i = 0; i < path->path_length; i++) 801 path->hops[i].initial_credits = credits; 802 } 803 804 /** 805 * tb_tunnel_alloc_dma() - allocate a DMA tunnel 806 * @tb: Pointer to the domain structure 807 * @nhi: Host controller port 808 * @dst: Destination null port which the other domain is connected to 809 * @transmit_ring: NHI ring number used to send packets towards the 810 * other domain 811 * @transmit_path: HopID used for transmitting packets 812 * @receive_ring: NHI ring number used to receive packets from the 813 * other domain 814 * @reveive_path: HopID used for receiving packets 815 * 816 * Return: Returns a tb_tunnel on success or NULL on failure. 817 */ 818 struct tb_tunnel *tb_tunnel_alloc_dma(struct tb *tb, struct tb_port *nhi, 819 struct tb_port *dst, int transmit_ring, 820 int transmit_path, int receive_ring, 821 int receive_path) 822 { 823 struct tb_tunnel *tunnel; 824 struct tb_path *path; 825 u32 credits; 826 827 tunnel = tb_tunnel_alloc(tb, 2, TB_TUNNEL_DMA); 828 if (!tunnel) 829 return NULL; 830 831 tunnel->activate = tb_dma_activate; 832 tunnel->src_port = nhi; 833 tunnel->dst_port = dst; 834 835 credits = tb_dma_credits(nhi); 836 837 path = tb_path_alloc(tb, dst, receive_path, nhi, receive_ring, 0, "DMA RX"); 838 if (!path) { 839 tb_tunnel_free(tunnel); 840 return NULL; 841 } 842 tb_dma_init_path(path, TB_PATH_NONE, TB_PATH_SOURCE | TB_PATH_INTERNAL, 843 credits); 844 tunnel->paths[TB_DMA_PATH_IN] = path; 845 846 path = tb_path_alloc(tb, nhi, transmit_ring, dst, transmit_path, 0, "DMA TX"); 847 if (!path) { 848 tb_tunnel_free(tunnel); 849 return NULL; 850 } 851 tb_dma_init_path(path, TB_PATH_SOURCE, TB_PATH_ALL, credits); 852 tunnel->paths[TB_DMA_PATH_OUT] = path; 853 854 return tunnel; 855 } 856 857 static int tb_usb3_activate(struct tb_tunnel *tunnel, bool activate) 858 { 859 int res; 860 861 res = tb_usb3_port_enable(tunnel->src_port, activate); 862 if (res) 863 return res; 864 865 if (tb_port_is_usb3_up(tunnel->dst_port)) 866 return tb_usb3_port_enable(tunnel->dst_port, activate); 867 868 return 0; 869 } 870 871 static void tb_usb3_init_path(struct tb_path *path) 872 { 873 path->egress_fc_enable = TB_PATH_SOURCE | TB_PATH_INTERNAL; 874 path->egress_shared_buffer = TB_PATH_NONE; 875 path->ingress_fc_enable = TB_PATH_ALL; 876 path->ingress_shared_buffer = TB_PATH_NONE; 877 path->priority = 3; 878 path->weight = 3; 879 path->drop_packages = 0; 880 path->nfc_credits = 0; 881 path->hops[0].initial_credits = 7; 882 path->hops[1].initial_credits = 883 tb_initial_credits(path->hops[1].in_port->sw); 884 } 885 886 /** 887 * tb_tunnel_discover_usb3() - Discover existing USB3 tunnels 888 * @tb: Pointer to the domain structure 889 * @down: USB3 downstream adapter 890 * 891 * If @down adapter is active, follows the tunnel to the USB3 upstream 892 * adapter and back. Returns the discovered tunnel or %NULL if there was 893 * no tunnel. 894 */ 895 struct tb_tunnel *tb_tunnel_discover_usb3(struct tb *tb, struct tb_port *down) 896 { 897 struct tb_tunnel *tunnel; 898 struct tb_path *path; 899 900 if (!tb_usb3_port_is_enabled(down)) 901 return NULL; 902 903 tunnel = tb_tunnel_alloc(tb, 2, TB_TUNNEL_USB3); 904 if (!tunnel) 905 return NULL; 906 907 tunnel->activate = tb_usb3_activate; 908 tunnel->src_port = down; 909 910 /* 911 * Discover both paths even if they are not complete. We will 912 * clean them up by calling tb_tunnel_deactivate() below in that 913 * case. 914 */ 915 path = tb_path_discover(down, TB_USB3_HOPID, NULL, -1, 916 &tunnel->dst_port, "USB3 Down"); 917 if (!path) { 918 /* Just disable the downstream port */ 919 tb_usb3_port_enable(down, false); 920 goto err_free; 921 } 922 tunnel->paths[TB_USB3_PATH_DOWN] = path; 923 tb_usb3_init_path(tunnel->paths[TB_USB3_PATH_DOWN]); 924 925 path = tb_path_discover(tunnel->dst_port, -1, down, TB_USB3_HOPID, NULL, 926 "USB3 Up"); 927 if (!path) 928 goto err_deactivate; 929 tunnel->paths[TB_USB3_PATH_UP] = path; 930 tb_usb3_init_path(tunnel->paths[TB_USB3_PATH_UP]); 931 932 /* Validate that the tunnel is complete */ 933 if (!tb_port_is_usb3_up(tunnel->dst_port)) { 934 tb_port_warn(tunnel->dst_port, 935 "path does not end on an USB3 adapter, cleaning up\n"); 936 goto err_deactivate; 937 } 938 939 if (down != tunnel->src_port) { 940 tb_tunnel_warn(tunnel, "path is not complete, cleaning up\n"); 941 goto err_deactivate; 942 } 943 944 if (!tb_usb3_port_is_enabled(tunnel->dst_port)) { 945 tb_tunnel_warn(tunnel, 946 "tunnel is not fully activated, cleaning up\n"); 947 goto err_deactivate; 948 } 949 950 tb_tunnel_dbg(tunnel, "discovered\n"); 951 return tunnel; 952 953 err_deactivate: 954 tb_tunnel_deactivate(tunnel); 955 err_free: 956 tb_tunnel_free(tunnel); 957 958 return NULL; 959 } 960 961 /** 962 * tb_tunnel_alloc_usb3() - allocate a USB3 tunnel 963 * @tb: Pointer to the domain structure 964 * @up: USB3 upstream adapter port 965 * @down: USB3 downstream adapter port 966 * 967 * Allocate an USB3 tunnel. The ports must be of type @TB_TYPE_USB3_UP and 968 * @TB_TYPE_USB3_DOWN. 969 * 970 * Return: Returns a tb_tunnel on success or %NULL on failure. 971 */ 972 struct tb_tunnel *tb_tunnel_alloc_usb3(struct tb *tb, struct tb_port *up, 973 struct tb_port *down) 974 { 975 struct tb_tunnel *tunnel; 976 struct tb_path *path; 977 978 tunnel = tb_tunnel_alloc(tb, 2, TB_TUNNEL_USB3); 979 if (!tunnel) 980 return NULL; 981 982 tunnel->activate = tb_usb3_activate; 983 tunnel->src_port = down; 984 tunnel->dst_port = up; 985 986 path = tb_path_alloc(tb, down, TB_USB3_HOPID, up, TB_USB3_HOPID, 0, 987 "USB3 Down"); 988 if (!path) { 989 tb_tunnel_free(tunnel); 990 return NULL; 991 } 992 tb_usb3_init_path(path); 993 tunnel->paths[TB_USB3_PATH_DOWN] = path; 994 995 path = tb_path_alloc(tb, up, TB_USB3_HOPID, down, TB_USB3_HOPID, 0, 996 "USB3 Up"); 997 if (!path) { 998 tb_tunnel_free(tunnel); 999 return NULL; 1000 } 1001 tb_usb3_init_path(path); 1002 tunnel->paths[TB_USB3_PATH_UP] = path; 1003 1004 return tunnel; 1005 } 1006 1007 /** 1008 * tb_tunnel_free() - free a tunnel 1009 * @tunnel: Tunnel to be freed 1010 * 1011 * Frees a tunnel. The tunnel does not need to be deactivated. 1012 */ 1013 void tb_tunnel_free(struct tb_tunnel *tunnel) 1014 { 1015 int i; 1016 1017 if (!tunnel) 1018 return; 1019 1020 for (i = 0; i < tunnel->npaths; i++) { 1021 if (tunnel->paths[i]) 1022 tb_path_free(tunnel->paths[i]); 1023 } 1024 1025 kfree(tunnel->paths); 1026 kfree(tunnel); 1027 } 1028 1029 /** 1030 * tb_tunnel_is_invalid - check whether an activated path is still valid 1031 * @tunnel: Tunnel to check 1032 */ 1033 bool tb_tunnel_is_invalid(struct tb_tunnel *tunnel) 1034 { 1035 int i; 1036 1037 for (i = 0; i < tunnel->npaths; i++) { 1038 WARN_ON(!tunnel->paths[i]->activated); 1039 if (tb_path_is_invalid(tunnel->paths[i])) 1040 return true; 1041 } 1042 1043 return false; 1044 } 1045 1046 /** 1047 * tb_tunnel_restart() - activate a tunnel after a hardware reset 1048 * @tunnel: Tunnel to restart 1049 * 1050 * Return: 0 on success and negative errno in case if failure 1051 */ 1052 int tb_tunnel_restart(struct tb_tunnel *tunnel) 1053 { 1054 int res, i; 1055 1056 tb_tunnel_dbg(tunnel, "activating\n"); 1057 1058 /* 1059 * Make sure all paths are properly disabled before enabling 1060 * them again. 1061 */ 1062 for (i = 0; i < tunnel->npaths; i++) { 1063 if (tunnel->paths[i]->activated) { 1064 tb_path_deactivate(tunnel->paths[i]); 1065 tunnel->paths[i]->activated = false; 1066 } 1067 } 1068 1069 if (tunnel->init) { 1070 res = tunnel->init(tunnel); 1071 if (res) 1072 return res; 1073 } 1074 1075 for (i = 0; i < tunnel->npaths; i++) { 1076 res = tb_path_activate(tunnel->paths[i]); 1077 if (res) 1078 goto err; 1079 } 1080 1081 if (tunnel->activate) { 1082 res = tunnel->activate(tunnel, true); 1083 if (res) 1084 goto err; 1085 } 1086 1087 return 0; 1088 1089 err: 1090 tb_tunnel_warn(tunnel, "activation failed\n"); 1091 tb_tunnel_deactivate(tunnel); 1092 return res; 1093 } 1094 1095 /** 1096 * tb_tunnel_activate() - activate a tunnel 1097 * @tunnel: Tunnel to activate 1098 * 1099 * Return: Returns 0 on success or an error code on failure. 1100 */ 1101 int tb_tunnel_activate(struct tb_tunnel *tunnel) 1102 { 1103 int i; 1104 1105 for (i = 0; i < tunnel->npaths; i++) { 1106 if (tunnel->paths[i]->activated) { 1107 tb_tunnel_WARN(tunnel, 1108 "trying to activate an already activated tunnel\n"); 1109 return -EINVAL; 1110 } 1111 } 1112 1113 return tb_tunnel_restart(tunnel); 1114 } 1115 1116 /** 1117 * tb_tunnel_deactivate() - deactivate a tunnel 1118 * @tunnel: Tunnel to deactivate 1119 */ 1120 void tb_tunnel_deactivate(struct tb_tunnel *tunnel) 1121 { 1122 int i; 1123 1124 tb_tunnel_dbg(tunnel, "deactivating\n"); 1125 1126 if (tunnel->activate) 1127 tunnel->activate(tunnel, false); 1128 1129 for (i = 0; i < tunnel->npaths; i++) { 1130 if (tunnel->paths[i] && tunnel->paths[i]->activated) 1131 tb_path_deactivate(tunnel->paths[i]); 1132 } 1133 } 1134 1135 /** 1136 * tb_tunnel_switch_on_path() - Does the tunnel go through switch 1137 * @tunnel: Tunnel to check 1138 * @sw: Switch to check 1139 * 1140 * Returns true if @tunnel goes through @sw (direction does not matter), 1141 * false otherwise. 1142 */ 1143 bool tb_tunnel_switch_on_path(const struct tb_tunnel *tunnel, 1144 const struct tb_switch *sw) 1145 { 1146 int i; 1147 1148 for (i = 0; i < tunnel->npaths; i++) { 1149 if (!tunnel->paths[i]) 1150 continue; 1151 if (tb_path_switch_on_path(tunnel->paths[i], sw)) 1152 return true; 1153 } 1154 1155 return false; 1156 } 1157 1158 static bool tb_tunnel_is_active(const struct tb_tunnel *tunnel) 1159 { 1160 int i; 1161 1162 for (i = 0; i < tunnel->npaths; i++) { 1163 if (!tunnel->paths[i]) 1164 return false; 1165 if (!tunnel->paths[i]->activated) 1166 return false; 1167 } 1168 1169 return true; 1170 } 1171 1172 /** 1173 * tb_tunnel_consumed_bandwidth() - Return bandwidth consumed by the tunnel 1174 * @tunnel: Tunnel to check 1175 * 1176 * Returns bandwidth currently consumed by @tunnel and %0 if the @tunnel 1177 * is not active or does consume bandwidth. 1178 */ 1179 int tb_tunnel_consumed_bandwidth(struct tb_tunnel *tunnel) 1180 { 1181 if (!tb_tunnel_is_active(tunnel)) 1182 return 0; 1183 1184 if (tunnel->consumed_bandwidth) { 1185 int ret = tunnel->consumed_bandwidth(tunnel); 1186 1187 tb_tunnel_dbg(tunnel, "consumed bandwidth %d Mb/s\n", ret); 1188 return ret; 1189 } 1190 1191 return 0; 1192 } 1193