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 #include <linux/ktime.h> 13 #include <linux/string_helpers.h> 14 15 #include "tunnel.h" 16 #include "tb.h" 17 18 /* PCIe adapters use always HopID of 8 for both directions */ 19 #define TB_PCI_HOPID 8 20 21 #define TB_PCI_PATH_DOWN 0 22 #define TB_PCI_PATH_UP 1 23 24 #define TB_PCI_PRIORITY 3 25 #define TB_PCI_WEIGHT 1 26 27 /* USB3 adapters use always HopID of 8 for both directions */ 28 #define TB_USB3_HOPID 8 29 30 #define TB_USB3_PATH_DOWN 0 31 #define TB_USB3_PATH_UP 1 32 33 #define TB_USB3_PRIORITY 3 34 #define TB_USB3_WEIGHT 2 35 36 /* DP adapters use HopID 8 for AUX and 9 for Video */ 37 #define TB_DP_AUX_TX_HOPID 8 38 #define TB_DP_AUX_RX_HOPID 8 39 #define TB_DP_VIDEO_HOPID 9 40 41 #define TB_DP_VIDEO_PATH_OUT 0 42 #define TB_DP_AUX_PATH_OUT 1 43 #define TB_DP_AUX_PATH_IN 2 44 45 #define TB_DP_VIDEO_PRIORITY 1 46 #define TB_DP_VIDEO_WEIGHT 1 47 48 #define TB_DP_AUX_PRIORITY 2 49 #define TB_DP_AUX_WEIGHT 1 50 51 /* Minimum number of credits needed for PCIe path */ 52 #define TB_MIN_PCIE_CREDITS 6U 53 /* 54 * Number of credits we try to allocate for each DMA path if not limited 55 * by the host router baMaxHI. 56 */ 57 #define TB_DMA_CREDITS 14 58 /* Minimum number of credits for DMA path */ 59 #define TB_MIN_DMA_CREDITS 1 60 61 #define TB_DMA_PRIORITY 5 62 #define TB_DMA_WEIGHT 1 63 64 /* 65 * Reserve additional bandwidth for USB 3.x and PCIe bulk traffic 66 * according to USB4 v2 Connection Manager guide. This ends up reserving 67 * 1500 Mb/s for PCIe and 3000 Mb/s for USB 3.x taking weights into 68 * account. 69 */ 70 #define USB4_V2_PCI_MIN_BANDWIDTH (1500 * TB_PCI_WEIGHT) 71 #define USB4_V2_USB3_MIN_BANDWIDTH (1500 * TB_USB3_WEIGHT) 72 73 /* 74 * According to VESA spec, the DPRX negotiation shall compete in 5 75 * seconds after tunnel is established. Since at least i915 can runtime 76 * suspend if there is nothing connected, and that it polls any new 77 * connections every 10 seconds, we use 12 seconds here. 78 * 79 * These are in ms. 80 */ 81 #define TB_DPRX_TIMEOUT 12000 82 #define TB_DPRX_WAIT_TIMEOUT 25 83 #define TB_DPRX_POLL_DELAY 50 84 85 static int dprx_timeout = TB_DPRX_TIMEOUT; 86 module_param(dprx_timeout, int, 0444); 87 MODULE_PARM_DESC(dprx_timeout, 88 "DPRX capability read timeout in ms, -1 waits forever (default: " 89 __MODULE_STRING(TB_DPRX_TIMEOUT) ")"); 90 91 static unsigned int dma_credits = TB_DMA_CREDITS; 92 module_param(dma_credits, uint, 0444); 93 MODULE_PARM_DESC(dma_credits, "specify custom credits for DMA tunnels (default: " 94 __MODULE_STRING(TB_DMA_CREDITS) ")"); 95 96 static bool bw_alloc_mode = true; 97 module_param(bw_alloc_mode, bool, 0444); 98 MODULE_PARM_DESC(bw_alloc_mode, 99 "enable bandwidth allocation mode if supported (default: true)"); 100 101 static const char * const tb_tunnel_names[] = { "PCI", "DP", "DMA", "USB3" }; 102 103 static const char * const tb_event_names[] = { 104 [TB_TUNNEL_ACTIVATED] = "activated", 105 [TB_TUNNEL_CHANGED] = "changed", 106 [TB_TUNNEL_DEACTIVATED] = "deactivated", 107 [TB_TUNNEL_LOW_BANDWIDTH] = "low bandwidth", 108 [TB_TUNNEL_NO_BANDWIDTH] = "insufficient bandwidth", 109 }; 110 111 /* Synchronizes kref_get()/put() of struct tb_tunnel */ 112 static DEFINE_MUTEX(tb_tunnel_lock); 113 114 static inline unsigned int tb_usable_credits(const struct tb_port *port) 115 { 116 return port->total_credits - port->ctl_credits; 117 } 118 119 /** 120 * tb_available_credits() - Available credits for PCIe and DMA 121 * @port: Lane adapter to check 122 * @max_dp_streams: If non-%NULL stores maximum number of simultaneous DP 123 * streams possible through this lane adapter 124 * 125 * Return: Number of available credits. 126 */ 127 static unsigned int tb_available_credits(const struct tb_port *port, 128 size_t *max_dp_streams) 129 { 130 const struct tb_switch *sw = port->sw; 131 int credits, usb3, pcie, spare; 132 size_t ndp; 133 134 usb3 = tb_acpi_may_tunnel_usb3() ? sw->max_usb3_credits : 0; 135 pcie = tb_acpi_may_tunnel_pcie() ? sw->max_pcie_credits : 0; 136 137 if (tb_acpi_is_xdomain_allowed()) { 138 spare = min_not_zero(sw->max_dma_credits, dma_credits); 139 /* Add some credits for potential second DMA tunnel */ 140 spare += TB_MIN_DMA_CREDITS; 141 } else { 142 spare = 0; 143 } 144 145 credits = tb_usable_credits(port); 146 if (tb_acpi_may_tunnel_dp()) { 147 /* 148 * Maximum number of DP streams possible through the 149 * lane adapter. 150 */ 151 if (sw->min_dp_aux_credits + sw->min_dp_main_credits) 152 ndp = (credits - (usb3 + pcie + spare)) / 153 (sw->min_dp_aux_credits + sw->min_dp_main_credits); 154 else 155 ndp = 0; 156 } else { 157 ndp = 0; 158 } 159 credits -= ndp * (sw->min_dp_aux_credits + sw->min_dp_main_credits); 160 credits -= usb3; 161 162 if (max_dp_streams) 163 *max_dp_streams = ndp; 164 165 return credits > 0 ? credits : 0; 166 } 167 168 static void tb_init_pm_support(struct tb_path_hop *hop) 169 { 170 struct tb_port *out_port = hop->out_port; 171 struct tb_port *in_port = hop->in_port; 172 173 if (tb_port_is_null(in_port) && tb_port_is_null(out_port) && 174 usb4_switch_version(in_port->sw) >= 2) 175 hop->pm_support = true; 176 } 177 178 static struct tb_tunnel *tb_tunnel_alloc(struct tb *tb, size_t npaths, 179 enum tb_tunnel_type type) 180 { 181 struct tb_tunnel *tunnel; 182 183 tunnel = kzalloc(sizeof(*tunnel), GFP_KERNEL); 184 if (!tunnel) 185 return NULL; 186 187 tunnel->paths = kcalloc(npaths, sizeof(tunnel->paths[0]), GFP_KERNEL); 188 if (!tunnel->paths) { 189 kfree(tunnel); 190 return NULL; 191 } 192 193 INIT_LIST_HEAD(&tunnel->list); 194 tunnel->tb = tb; 195 tunnel->npaths = npaths; 196 tunnel->type = type; 197 kref_init(&tunnel->kref); 198 199 return tunnel; 200 } 201 202 static void tb_tunnel_get(struct tb_tunnel *tunnel) 203 { 204 mutex_lock(&tb_tunnel_lock); 205 kref_get(&tunnel->kref); 206 mutex_unlock(&tb_tunnel_lock); 207 } 208 209 static void tb_tunnel_destroy(struct kref *kref) 210 { 211 struct tb_tunnel *tunnel = container_of(kref, typeof(*tunnel), kref); 212 int i; 213 214 if (tunnel->destroy) 215 tunnel->destroy(tunnel); 216 217 for (i = 0; i < tunnel->npaths; i++) { 218 if (tunnel->paths[i]) 219 tb_path_free(tunnel->paths[i]); 220 } 221 222 kfree(tunnel->paths); 223 kfree(tunnel); 224 } 225 226 void tb_tunnel_put(struct tb_tunnel *tunnel) 227 { 228 mutex_lock(&tb_tunnel_lock); 229 kref_put(&tunnel->kref, tb_tunnel_destroy); 230 mutex_unlock(&tb_tunnel_lock); 231 } 232 233 /** 234 * tb_tunnel_event() - Notify userspace about tunneling event 235 * @tb: Domain where the event occurred 236 * @event: Event that happened 237 * @type: Type of the tunnel in question 238 * @src_port: Tunnel source port (can be %NULL) 239 * @dst_port: Tunnel destination port (can be %NULL) 240 * 241 * Notifies userspace about tunneling @event in the domain. The tunnel 242 * does not need to exist (e.g the tunnel was not activated because 243 * there is not enough bandwidth). If the @src_port and @dst_port are 244 * given fill in full %TUNNEL_DETAILS environment variable. Otherwise 245 * uses the shorter one (just the tunnel type). 246 */ 247 void tb_tunnel_event(struct tb *tb, enum tb_tunnel_event event, 248 enum tb_tunnel_type type, 249 const struct tb_port *src_port, 250 const struct tb_port *dst_port) 251 { 252 char *envp[3] = { NULL }; 253 254 if (WARN_ON_ONCE(event >= ARRAY_SIZE(tb_event_names))) 255 return; 256 if (WARN_ON_ONCE(type >= ARRAY_SIZE(tb_tunnel_names))) 257 return; 258 259 envp[0] = kasprintf(GFP_KERNEL, "TUNNEL_EVENT=%s", tb_event_names[event]); 260 if (!envp[0]) 261 return; 262 263 if (src_port != NULL && dst_port != NULL) { 264 envp[1] = kasprintf(GFP_KERNEL, "TUNNEL_DETAILS=%llx:%u <-> %llx:%u (%s)", 265 tb_route(src_port->sw), src_port->port, 266 tb_route(dst_port->sw), dst_port->port, 267 tb_tunnel_names[type]); 268 } else { 269 envp[1] = kasprintf(GFP_KERNEL, "TUNNEL_DETAILS=(%s)", 270 tb_tunnel_names[type]); 271 } 272 273 if (envp[1]) 274 tb_domain_event(tb, envp); 275 276 kfree(envp[1]); 277 kfree(envp[0]); 278 } 279 280 static inline void tb_tunnel_set_active(struct tb_tunnel *tunnel, bool active) 281 { 282 if (active) { 283 tunnel->state = TB_TUNNEL_ACTIVE; 284 tb_tunnel_event(tunnel->tb, TB_TUNNEL_ACTIVATED, tunnel->type, 285 tunnel->src_port, tunnel->dst_port); 286 } else { 287 tunnel->state = TB_TUNNEL_INACTIVE; 288 tb_tunnel_event(tunnel->tb, TB_TUNNEL_DEACTIVATED, tunnel->type, 289 tunnel->src_port, tunnel->dst_port); 290 } 291 } 292 293 static inline void tb_tunnel_changed(struct tb_tunnel *tunnel) 294 { 295 tb_tunnel_event(tunnel->tb, TB_TUNNEL_CHANGED, tunnel->type, 296 tunnel->src_port, tunnel->dst_port); 297 } 298 299 static int tb_pci_set_ext_encapsulation(struct tb_tunnel *tunnel, bool enable) 300 { 301 struct tb_port *port = tb_upstream_port(tunnel->dst_port->sw); 302 int ret; 303 304 /* Only supported of both routers are at least USB4 v2 */ 305 if ((usb4_switch_version(tunnel->src_port->sw) < 2) || 306 (usb4_switch_version(tunnel->dst_port->sw) < 2)) 307 return 0; 308 309 if (enable && tb_port_get_link_generation(port) < 4) 310 return 0; 311 312 ret = usb4_pci_port_set_ext_encapsulation(tunnel->src_port, enable); 313 if (ret) 314 return ret; 315 316 /* 317 * Downstream router could be unplugged so disable of encapsulation 318 * in upstream router is still possible. 319 */ 320 ret = usb4_pci_port_set_ext_encapsulation(tunnel->dst_port, enable); 321 if (ret) { 322 if (enable) 323 return ret; 324 if (ret != -ENODEV) 325 return ret; 326 } 327 328 tb_tunnel_dbg(tunnel, "extended encapsulation %s\n", 329 str_enabled_disabled(enable)); 330 return 0; 331 } 332 333 static int tb_pci_activate(struct tb_tunnel *tunnel, bool activate) 334 { 335 int res; 336 337 if (activate) { 338 res = tb_pci_set_ext_encapsulation(tunnel, activate); 339 if (res) 340 return res; 341 } 342 343 if (activate) 344 res = tb_pci_port_enable(tunnel->dst_port, activate); 345 else 346 res = tb_pci_port_enable(tunnel->src_port, activate); 347 if (res) 348 return res; 349 350 351 if (activate) { 352 res = tb_pci_port_enable(tunnel->src_port, activate); 353 if (res) 354 return res; 355 } else { 356 /* Downstream router could be unplugged */ 357 tb_pci_port_enable(tunnel->dst_port, activate); 358 } 359 360 return activate ? 0 : tb_pci_set_ext_encapsulation(tunnel, activate); 361 } 362 363 static int tb_pci_init_credits(struct tb_path_hop *hop) 364 { 365 struct tb_port *port = hop->in_port; 366 struct tb_switch *sw = port->sw; 367 unsigned int credits; 368 369 if (tb_port_use_credit_allocation(port)) { 370 unsigned int available; 371 372 available = tb_available_credits(port, NULL); 373 credits = min(sw->max_pcie_credits, available); 374 375 if (credits < TB_MIN_PCIE_CREDITS) 376 return -ENOSPC; 377 378 credits = max(TB_MIN_PCIE_CREDITS, credits); 379 } else { 380 if (tb_port_is_null(port)) 381 credits = port->bonded ? 32 : 16; 382 else 383 credits = 7; 384 } 385 386 hop->initial_credits = credits; 387 return 0; 388 } 389 390 static int tb_pci_init_path(struct tb_path *path) 391 { 392 struct tb_path_hop *hop; 393 394 path->egress_fc_enable = TB_PATH_SOURCE | TB_PATH_INTERNAL; 395 path->egress_shared_buffer = TB_PATH_NONE; 396 path->ingress_fc_enable = TB_PATH_ALL; 397 path->ingress_shared_buffer = TB_PATH_NONE; 398 path->priority = TB_PCI_PRIORITY; 399 path->weight = TB_PCI_WEIGHT; 400 path->drop_packages = 0; 401 402 tb_path_for_each_hop(path, hop) { 403 int ret; 404 405 ret = tb_pci_init_credits(hop); 406 if (ret) 407 return ret; 408 } 409 410 return 0; 411 } 412 413 /** 414 * tb_tunnel_discover_pci() - Discover existing PCIe tunnels 415 * @tb: Pointer to the domain structure 416 * @down: PCIe downstream adapter 417 * @alloc_hopid: Allocate HopIDs from visited ports 418 * 419 * If @down adapter is active, follows the tunnel to the PCIe upstream 420 * adapter and back. 421 * 422 * Return: Pointer to &struct tb_tunnel or %NULL if there was no tunnel. 423 */ 424 struct tb_tunnel *tb_tunnel_discover_pci(struct tb *tb, struct tb_port *down, 425 bool alloc_hopid) 426 { 427 struct tb_tunnel *tunnel; 428 struct tb_path *path; 429 430 if (!tb_pci_port_is_enabled(down)) 431 return NULL; 432 433 tunnel = tb_tunnel_alloc(tb, 2, TB_TUNNEL_PCI); 434 if (!tunnel) 435 return NULL; 436 437 tunnel->activate = tb_pci_activate; 438 tunnel->src_port = down; 439 440 /* 441 * Discover both paths even if they are not complete. We will 442 * clean them up by calling tb_tunnel_deactivate() below in that 443 * case. 444 */ 445 path = tb_path_discover(down, TB_PCI_HOPID, NULL, -1, 446 &tunnel->dst_port, "PCIe Up", alloc_hopid); 447 if (!path) { 448 /* Just disable the downstream port */ 449 tb_pci_port_enable(down, false); 450 goto err_free; 451 } 452 tunnel->paths[TB_PCI_PATH_UP] = path; 453 if (tb_pci_init_path(tunnel->paths[TB_PCI_PATH_UP])) 454 goto err_free; 455 456 path = tb_path_discover(tunnel->dst_port, -1, down, TB_PCI_HOPID, NULL, 457 "PCIe Down", alloc_hopid); 458 if (!path) 459 goto err_deactivate; 460 tunnel->paths[TB_PCI_PATH_DOWN] = path; 461 if (tb_pci_init_path(tunnel->paths[TB_PCI_PATH_DOWN])) 462 goto err_deactivate; 463 464 /* Validate that the tunnel is complete */ 465 if (!tb_port_is_pcie_up(tunnel->dst_port)) { 466 tb_port_warn(tunnel->dst_port, 467 "path does not end on a PCIe adapter, cleaning up\n"); 468 goto err_deactivate; 469 } 470 471 if (down != tunnel->src_port) { 472 tb_tunnel_warn(tunnel, "path is not complete, cleaning up\n"); 473 goto err_deactivate; 474 } 475 476 if (!tb_pci_port_is_enabled(tunnel->dst_port)) { 477 tb_tunnel_warn(tunnel, 478 "tunnel is not fully activated, cleaning up\n"); 479 goto err_deactivate; 480 } 481 482 tb_tunnel_dbg(tunnel, "discovered\n"); 483 return tunnel; 484 485 err_deactivate: 486 tb_tunnel_deactivate(tunnel); 487 err_free: 488 tb_tunnel_put(tunnel); 489 490 return NULL; 491 } 492 493 /** 494 * tb_tunnel_alloc_pci() - allocate a pci tunnel 495 * @tb: Pointer to the domain structure 496 * @up: PCIe upstream adapter port 497 * @down: PCIe downstream adapter port 498 * 499 * Allocate a PCI tunnel. The ports must be of type TB_TYPE_PCIE_UP and 500 * TB_TYPE_PCIE_DOWN. 501 * 502 * Return: Pointer to @struct tb_tunnel or %NULL on failure. 503 */ 504 struct tb_tunnel *tb_tunnel_alloc_pci(struct tb *tb, struct tb_port *up, 505 struct tb_port *down) 506 { 507 struct tb_tunnel *tunnel; 508 struct tb_path *path; 509 510 tunnel = tb_tunnel_alloc(tb, 2, TB_TUNNEL_PCI); 511 if (!tunnel) 512 return NULL; 513 514 tunnel->activate = tb_pci_activate; 515 tunnel->src_port = down; 516 tunnel->dst_port = up; 517 518 path = tb_path_alloc(tb, down, TB_PCI_HOPID, up, TB_PCI_HOPID, 0, 519 "PCIe Down"); 520 if (!path) 521 goto err_free; 522 tunnel->paths[TB_PCI_PATH_DOWN] = path; 523 if (tb_pci_init_path(path)) 524 goto err_free; 525 526 path = tb_path_alloc(tb, up, TB_PCI_HOPID, down, TB_PCI_HOPID, 0, 527 "PCIe Up"); 528 if (!path) 529 goto err_free; 530 tunnel->paths[TB_PCI_PATH_UP] = path; 531 if (tb_pci_init_path(path)) 532 goto err_free; 533 534 return tunnel; 535 536 err_free: 537 tb_tunnel_put(tunnel); 538 return NULL; 539 } 540 541 /** 542 * tb_tunnel_reserved_pci() - Amount of bandwidth to reserve for PCIe 543 * @port: Lane 0 adapter 544 * @reserved_up: Upstream bandwidth in Mb/s to reserve 545 * @reserved_down: Downstream bandwidth in Mb/s to reserve 546 * 547 * Can be called to any connected lane 0 adapter to find out how much 548 * bandwidth needs to be left in reserve for possible PCIe bulk traffic. 549 * 550 * Return: 551 * * %true - If there is something to be reserved. Writes the amount to 552 * @reserved_down/@reserved_up. 553 * * %false - Nothing to be reserved. Leaves @reserved_down/@reserved_up 554 * unmodified. 555 */ 556 bool tb_tunnel_reserved_pci(struct tb_port *port, int *reserved_up, 557 int *reserved_down) 558 { 559 if (WARN_ON_ONCE(!port->remote)) 560 return false; 561 562 if (!tb_acpi_may_tunnel_pcie()) 563 return false; 564 565 if (tb_port_get_link_generation(port) < 4) 566 return false; 567 568 /* Must have PCIe adapters */ 569 if (tb_is_upstream_port(port)) { 570 if (!tb_switch_find_port(port->sw, TB_TYPE_PCIE_UP)) 571 return false; 572 if (!tb_switch_find_port(port->remote->sw, TB_TYPE_PCIE_DOWN)) 573 return false; 574 } else { 575 if (!tb_switch_find_port(port->sw, TB_TYPE_PCIE_DOWN)) 576 return false; 577 if (!tb_switch_find_port(port->remote->sw, TB_TYPE_PCIE_UP)) 578 return false; 579 } 580 581 *reserved_up = USB4_V2_PCI_MIN_BANDWIDTH; 582 *reserved_down = USB4_V2_PCI_MIN_BANDWIDTH; 583 584 tb_port_dbg(port, "reserving %u/%u Mb/s for PCIe\n", *reserved_up, 585 *reserved_down); 586 return true; 587 } 588 589 static bool tb_dp_is_usb4(const struct tb_switch *sw) 590 { 591 /* Titan Ridge DP adapters need the same treatment as USB4 */ 592 return tb_switch_is_usb4(sw) || tb_switch_is_titan_ridge(sw); 593 } 594 595 static int tb_dp_cm_handshake(struct tb_port *in, struct tb_port *out, 596 int timeout_msec) 597 { 598 ktime_t timeout = ktime_add_ms(ktime_get(), timeout_msec); 599 u32 val; 600 int ret; 601 602 /* Both ends need to support this */ 603 if (!tb_dp_is_usb4(in->sw) || !tb_dp_is_usb4(out->sw)) 604 return 0; 605 606 ret = tb_port_read(out, &val, TB_CFG_PORT, 607 out->cap_adap + DP_STATUS_CTRL, 1); 608 if (ret) 609 return ret; 610 611 val |= DP_STATUS_CTRL_UF | DP_STATUS_CTRL_CMHS; 612 613 ret = tb_port_write(out, &val, TB_CFG_PORT, 614 out->cap_adap + DP_STATUS_CTRL, 1); 615 if (ret) 616 return ret; 617 618 do { 619 ret = tb_port_read(out, &val, TB_CFG_PORT, 620 out->cap_adap + DP_STATUS_CTRL, 1); 621 if (ret) 622 return ret; 623 if (!(val & DP_STATUS_CTRL_CMHS)) 624 return 0; 625 usleep_range(100, 150); 626 } while (ktime_before(ktime_get(), timeout)); 627 628 return -ETIMEDOUT; 629 } 630 631 /* 632 * Returns maximum possible rate from capability supporting only DP 2.0 633 * and below. Used when DP BW allocation mode is not enabled. 634 */ 635 static inline u32 tb_dp_cap_get_rate(u32 val) 636 { 637 u32 rate = (val & DP_COMMON_CAP_RATE_MASK) >> DP_COMMON_CAP_RATE_SHIFT; 638 639 switch (rate) { 640 case DP_COMMON_CAP_RATE_RBR: 641 return 1620; 642 case DP_COMMON_CAP_RATE_HBR: 643 return 2700; 644 case DP_COMMON_CAP_RATE_HBR2: 645 return 5400; 646 case DP_COMMON_CAP_RATE_HBR3: 647 return 8100; 648 default: 649 return 0; 650 } 651 } 652 653 /* 654 * Returns maximum possible rate from capability supporting DP 2.1 655 * UHBR20, 13.5 and 10 rates as well. Use only when DP BW allocation 656 * mode is enabled. 657 */ 658 static inline u32 tb_dp_cap_get_rate_ext(u32 val) 659 { 660 if (val & DP_COMMON_CAP_UHBR20) 661 return 20000; 662 else if (val & DP_COMMON_CAP_UHBR13_5) 663 return 13500; 664 else if (val & DP_COMMON_CAP_UHBR10) 665 return 10000; 666 667 return tb_dp_cap_get_rate(val); 668 } 669 670 static inline bool tb_dp_is_uhbr_rate(unsigned int rate) 671 { 672 return rate >= 10000; 673 } 674 675 static inline u32 tb_dp_cap_set_rate(u32 val, u32 rate) 676 { 677 val &= ~DP_COMMON_CAP_RATE_MASK; 678 switch (rate) { 679 default: 680 WARN(1, "invalid rate %u passed, defaulting to 1620 MB/s\n", rate); 681 fallthrough; 682 case 1620: 683 val |= DP_COMMON_CAP_RATE_RBR << DP_COMMON_CAP_RATE_SHIFT; 684 break; 685 case 2700: 686 val |= DP_COMMON_CAP_RATE_HBR << DP_COMMON_CAP_RATE_SHIFT; 687 break; 688 case 5400: 689 val |= DP_COMMON_CAP_RATE_HBR2 << DP_COMMON_CAP_RATE_SHIFT; 690 break; 691 case 8100: 692 val |= DP_COMMON_CAP_RATE_HBR3 << DP_COMMON_CAP_RATE_SHIFT; 693 break; 694 } 695 return val; 696 } 697 698 static inline u32 tb_dp_cap_get_lanes(u32 val) 699 { 700 u32 lanes = (val & DP_COMMON_CAP_LANES_MASK) >> DP_COMMON_CAP_LANES_SHIFT; 701 702 switch (lanes) { 703 case DP_COMMON_CAP_1_LANE: 704 return 1; 705 case DP_COMMON_CAP_2_LANES: 706 return 2; 707 case DP_COMMON_CAP_4_LANES: 708 return 4; 709 default: 710 return 0; 711 } 712 } 713 714 static inline u32 tb_dp_cap_set_lanes(u32 val, u32 lanes) 715 { 716 val &= ~DP_COMMON_CAP_LANES_MASK; 717 switch (lanes) { 718 default: 719 WARN(1, "invalid number of lanes %u passed, defaulting to 1\n", 720 lanes); 721 fallthrough; 722 case 1: 723 val |= DP_COMMON_CAP_1_LANE << DP_COMMON_CAP_LANES_SHIFT; 724 break; 725 case 2: 726 val |= DP_COMMON_CAP_2_LANES << DP_COMMON_CAP_LANES_SHIFT; 727 break; 728 case 4: 729 val |= DP_COMMON_CAP_4_LANES << DP_COMMON_CAP_LANES_SHIFT; 730 break; 731 } 732 return val; 733 } 734 735 static unsigned int tb_dp_bandwidth(unsigned int rate, unsigned int lanes) 736 { 737 /* Tunneling removes the DP 8b/10b 128/132b encoding */ 738 if (tb_dp_is_uhbr_rate(rate)) 739 return rate * lanes * 128 / 132; 740 return rate * lanes * 8 / 10; 741 } 742 743 static int tb_dp_reduce_bandwidth(int max_bw, u32 in_rate, u32 in_lanes, 744 u32 out_rate, u32 out_lanes, u32 *new_rate, 745 u32 *new_lanes) 746 { 747 static const u32 dp_bw[][2] = { 748 /* Mb/s, lanes */ 749 { 8100, 4 }, /* 25920 Mb/s */ 750 { 5400, 4 }, /* 17280 Mb/s */ 751 { 8100, 2 }, /* 12960 Mb/s */ 752 { 2700, 4 }, /* 8640 Mb/s */ 753 { 5400, 2 }, /* 8640 Mb/s */ 754 { 8100, 1 }, /* 6480 Mb/s */ 755 { 1620, 4 }, /* 5184 Mb/s */ 756 { 5400, 1 }, /* 4320 Mb/s */ 757 { 2700, 2 }, /* 4320 Mb/s */ 758 { 1620, 2 }, /* 2592 Mb/s */ 759 { 2700, 1 }, /* 2160 Mb/s */ 760 { 1620, 1 }, /* 1296 Mb/s */ 761 }; 762 unsigned int i; 763 764 /* 765 * Find a combination that can fit into max_bw and does not 766 * exceed the maximum rate and lanes supported by the DP OUT and 767 * DP IN adapters. 768 */ 769 for (i = 0; i < ARRAY_SIZE(dp_bw); i++) { 770 if (dp_bw[i][0] > out_rate || dp_bw[i][1] > out_lanes) 771 continue; 772 773 if (dp_bw[i][0] > in_rate || dp_bw[i][1] > in_lanes) 774 continue; 775 776 if (tb_dp_bandwidth(dp_bw[i][0], dp_bw[i][1]) <= max_bw) { 777 *new_rate = dp_bw[i][0]; 778 *new_lanes = dp_bw[i][1]; 779 return 0; 780 } 781 } 782 783 return -ENOSR; 784 } 785 786 static int tb_dp_xchg_caps(struct tb_tunnel *tunnel) 787 { 788 u32 out_dp_cap, out_rate, out_lanes, in_dp_cap, in_rate, in_lanes, bw; 789 struct tb_port *out = tunnel->dst_port; 790 struct tb_port *in = tunnel->src_port; 791 int ret, max_bw; 792 793 /* 794 * Copy DP_LOCAL_CAP register to DP_REMOTE_CAP register for 795 * newer generation hardware. 796 */ 797 if (in->sw->generation < 2 || out->sw->generation < 2) 798 return 0; 799 800 /* 801 * Perform connection manager handshake between IN and OUT ports 802 * before capabilities exchange can take place. 803 */ 804 ret = tb_dp_cm_handshake(in, out, 3000); 805 if (ret) 806 return ret; 807 808 /* Read both DP_LOCAL_CAP registers */ 809 ret = tb_port_read(in, &in_dp_cap, TB_CFG_PORT, 810 in->cap_adap + DP_LOCAL_CAP, 1); 811 if (ret) 812 return ret; 813 814 ret = tb_port_read(out, &out_dp_cap, TB_CFG_PORT, 815 out->cap_adap + DP_LOCAL_CAP, 1); 816 if (ret) 817 return ret; 818 819 /* Write IN local caps to OUT remote caps */ 820 ret = tb_port_write(out, &in_dp_cap, TB_CFG_PORT, 821 out->cap_adap + DP_REMOTE_CAP, 1); 822 if (ret) 823 return ret; 824 825 in_rate = tb_dp_cap_get_rate(in_dp_cap); 826 in_lanes = tb_dp_cap_get_lanes(in_dp_cap); 827 tb_tunnel_dbg(tunnel, 828 "DP IN maximum supported bandwidth %u Mb/s x%u = %u Mb/s\n", 829 in_rate, in_lanes, tb_dp_bandwidth(in_rate, in_lanes)); 830 831 /* 832 * If the tunnel bandwidth is limited (max_bw is set) then see 833 * if we need to reduce bandwidth to fit there. 834 */ 835 out_rate = tb_dp_cap_get_rate(out_dp_cap); 836 out_lanes = tb_dp_cap_get_lanes(out_dp_cap); 837 bw = tb_dp_bandwidth(out_rate, out_lanes); 838 tb_tunnel_dbg(tunnel, 839 "DP OUT maximum supported bandwidth %u Mb/s x%u = %u Mb/s\n", 840 out_rate, out_lanes, bw); 841 842 if (tb_tunnel_direction_downstream(tunnel)) 843 max_bw = tunnel->max_down; 844 else 845 max_bw = tunnel->max_up; 846 847 if (max_bw && bw > max_bw) { 848 u32 new_rate, new_lanes, new_bw; 849 850 ret = tb_dp_reduce_bandwidth(max_bw, in_rate, in_lanes, 851 out_rate, out_lanes, &new_rate, 852 &new_lanes); 853 if (ret) { 854 tb_tunnel_info(tunnel, "not enough bandwidth\n"); 855 return ret; 856 } 857 858 new_bw = tb_dp_bandwidth(new_rate, new_lanes); 859 tb_tunnel_dbg(tunnel, 860 "bandwidth reduced to %u Mb/s x%u = %u Mb/s\n", 861 new_rate, new_lanes, new_bw); 862 863 /* 864 * Set new rate and number of lanes before writing it to 865 * the IN port remote caps. 866 */ 867 out_dp_cap = tb_dp_cap_set_rate(out_dp_cap, new_rate); 868 out_dp_cap = tb_dp_cap_set_lanes(out_dp_cap, new_lanes); 869 } 870 871 /* 872 * Titan Ridge does not disable AUX timers when it gets 873 * SET_CONFIG with SET_LTTPR_MODE set. This causes problems with 874 * DP tunneling. 875 */ 876 if (tb_route(out->sw) && tb_switch_is_titan_ridge(out->sw)) { 877 out_dp_cap |= DP_COMMON_CAP_LTTPR_NS; 878 tb_tunnel_dbg(tunnel, "disabling LTTPR\n"); 879 } 880 881 return tb_port_write(in, &out_dp_cap, TB_CFG_PORT, 882 in->cap_adap + DP_REMOTE_CAP, 1); 883 } 884 885 static int tb_dp_bandwidth_alloc_mode_enable(struct tb_tunnel *tunnel) 886 { 887 int ret, estimated_bw, granularity, tmp; 888 struct tb_port *out = tunnel->dst_port; 889 struct tb_port *in = tunnel->src_port; 890 u32 out_dp_cap, out_rate, out_lanes; 891 u32 in_dp_cap, in_rate, in_lanes; 892 u32 rate, lanes; 893 894 if (!bw_alloc_mode) 895 return 0; 896 897 ret = usb4_dp_port_set_cm_bandwidth_mode_supported(in, true); 898 if (ret) 899 return ret; 900 901 ret = usb4_dp_port_set_group_id(in, in->group->index); 902 if (ret) 903 return ret; 904 905 /* 906 * Get the non-reduced rate and lanes based on the lowest 907 * capability of both adapters. 908 */ 909 ret = tb_port_read(in, &in_dp_cap, TB_CFG_PORT, 910 in->cap_adap + DP_LOCAL_CAP, 1); 911 if (ret) 912 return ret; 913 914 ret = tb_port_read(out, &out_dp_cap, TB_CFG_PORT, 915 out->cap_adap + DP_LOCAL_CAP, 1); 916 if (ret) 917 return ret; 918 919 in_rate = tb_dp_cap_get_rate(in_dp_cap); 920 in_lanes = tb_dp_cap_get_lanes(in_dp_cap); 921 out_rate = tb_dp_cap_get_rate(out_dp_cap); 922 out_lanes = tb_dp_cap_get_lanes(out_dp_cap); 923 924 rate = min(in_rate, out_rate); 925 lanes = min(in_lanes, out_lanes); 926 tmp = tb_dp_bandwidth(rate, lanes); 927 928 tb_tunnel_dbg(tunnel, "non-reduced bandwidth %u Mb/s x%u = %u Mb/s\n", 929 rate, lanes, tmp); 930 931 ret = usb4_dp_port_set_nrd(in, rate, lanes); 932 if (ret) 933 return ret; 934 935 /* 936 * Pick up granularity that supports maximum possible bandwidth. 937 * For that we use the UHBR rates too. 938 */ 939 in_rate = tb_dp_cap_get_rate_ext(in_dp_cap); 940 out_rate = tb_dp_cap_get_rate_ext(out_dp_cap); 941 rate = min(in_rate, out_rate); 942 tmp = tb_dp_bandwidth(rate, lanes); 943 944 tb_tunnel_dbg(tunnel, 945 "maximum bandwidth through allocation mode %u Mb/s x%u = %u Mb/s\n", 946 rate, lanes, tmp); 947 948 for (granularity = 250; tmp / granularity > 255 && granularity <= 1000; 949 granularity *= 2) 950 ; 951 952 tb_tunnel_dbg(tunnel, "granularity %d Mb/s\n", granularity); 953 954 /* 955 * Returns -EINVAL if granularity above is outside of the 956 * accepted ranges. 957 */ 958 ret = usb4_dp_port_set_granularity(in, granularity); 959 if (ret) 960 return ret; 961 962 /* 963 * Bandwidth estimation is pretty much what we have in 964 * max_up/down fields. For discovery we just read what the 965 * estimation was set to. 966 */ 967 if (tb_tunnel_direction_downstream(tunnel)) 968 estimated_bw = tunnel->max_down; 969 else 970 estimated_bw = tunnel->max_up; 971 972 tb_tunnel_dbg(tunnel, "estimated bandwidth %d Mb/s\n", estimated_bw); 973 974 ret = usb4_dp_port_set_estimated_bandwidth(in, estimated_bw); 975 if (ret) 976 return ret; 977 978 /* Initial allocation should be 0 according the spec */ 979 ret = usb4_dp_port_allocate_bandwidth(in, 0); 980 if (ret) 981 return ret; 982 983 tb_tunnel_dbg(tunnel, "bandwidth allocation mode enabled\n"); 984 return 0; 985 } 986 987 static int tb_dp_pre_activate(struct tb_tunnel *tunnel) 988 { 989 struct tb_port *in = tunnel->src_port; 990 struct tb_switch *sw = in->sw; 991 struct tb *tb = in->sw->tb; 992 int ret; 993 994 ret = tb_dp_xchg_caps(tunnel); 995 if (ret) 996 return ret; 997 998 if (!tb_switch_is_usb4(sw)) 999 return 0; 1000 1001 if (!usb4_dp_port_bandwidth_mode_supported(in)) 1002 return 0; 1003 1004 tb_tunnel_dbg(tunnel, "bandwidth allocation mode supported\n"); 1005 1006 ret = usb4_dp_port_set_cm_id(in, tb->index); 1007 if (ret) 1008 return ret; 1009 1010 return tb_dp_bandwidth_alloc_mode_enable(tunnel); 1011 } 1012 1013 static void tb_dp_post_deactivate(struct tb_tunnel *tunnel) 1014 { 1015 struct tb_port *in = tunnel->src_port; 1016 1017 if (!usb4_dp_port_bandwidth_mode_supported(in)) 1018 return; 1019 if (usb4_dp_port_bandwidth_mode_enabled(in)) { 1020 usb4_dp_port_set_cm_bandwidth_mode_supported(in, false); 1021 tb_tunnel_dbg(tunnel, "bandwidth allocation mode disabled\n"); 1022 } 1023 } 1024 1025 static ktime_t dprx_timeout_to_ktime(int timeout_msec) 1026 { 1027 return timeout_msec >= 0 ? 1028 ktime_add_ms(ktime_get(), timeout_msec) : KTIME_MAX; 1029 } 1030 1031 static int tb_dp_wait_dprx(struct tb_tunnel *tunnel, int timeout_msec) 1032 { 1033 ktime_t timeout = dprx_timeout_to_ktime(timeout_msec); 1034 struct tb_port *in = tunnel->src_port; 1035 1036 /* 1037 * Wait for DPRX done. Normally it should be already set for 1038 * active tunnel. 1039 */ 1040 do { 1041 u32 val; 1042 int ret; 1043 1044 ret = tb_port_read(in, &val, TB_CFG_PORT, 1045 in->cap_adap + DP_COMMON_CAP, 1); 1046 if (ret) 1047 return ret; 1048 1049 if (val & DP_COMMON_CAP_DPRX_DONE) 1050 return 0; 1051 1052 usleep_range(100, 150); 1053 } while (ktime_before(ktime_get(), timeout)); 1054 1055 tb_tunnel_dbg(tunnel, "DPRX read timeout\n"); 1056 return -ETIMEDOUT; 1057 } 1058 1059 static void tb_dp_dprx_work(struct work_struct *work) 1060 { 1061 struct tb_tunnel *tunnel = container_of(work, typeof(*tunnel), dprx_work.work); 1062 struct tb *tb = tunnel->tb; 1063 1064 if (!tunnel->dprx_canceled) { 1065 mutex_lock(&tb->lock); 1066 if (tb_dp_is_usb4(tunnel->src_port->sw) && 1067 tb_dp_wait_dprx(tunnel, TB_DPRX_WAIT_TIMEOUT)) { 1068 if (ktime_before(ktime_get(), tunnel->dprx_timeout)) { 1069 queue_delayed_work(tb->wq, &tunnel->dprx_work, 1070 msecs_to_jiffies(TB_DPRX_POLL_DELAY)); 1071 mutex_unlock(&tb->lock); 1072 return; 1073 } 1074 } else { 1075 tb_tunnel_set_active(tunnel, true); 1076 } 1077 mutex_unlock(&tb->lock); 1078 } 1079 1080 if (tunnel->callback) 1081 tunnel->callback(tunnel, tunnel->callback_data); 1082 tb_tunnel_put(tunnel); 1083 } 1084 1085 static int tb_dp_dprx_start(struct tb_tunnel *tunnel) 1086 { 1087 /* 1088 * Bump up the reference to keep the tunnel around. It will be 1089 * dropped in tb_dp_dprx_stop() once the tunnel is deactivated. 1090 */ 1091 tb_tunnel_get(tunnel); 1092 1093 tunnel->dprx_started = true; 1094 1095 if (tunnel->callback) { 1096 tunnel->dprx_timeout = dprx_timeout_to_ktime(dprx_timeout); 1097 queue_delayed_work(tunnel->tb->wq, &tunnel->dprx_work, 0); 1098 return -EINPROGRESS; 1099 } 1100 1101 return tb_dp_is_usb4(tunnel->src_port->sw) ? 1102 tb_dp_wait_dprx(tunnel, dprx_timeout) : 0; 1103 } 1104 1105 static void tb_dp_dprx_stop(struct tb_tunnel *tunnel) 1106 { 1107 if (tunnel->dprx_started) { 1108 tunnel->dprx_started = false; 1109 tunnel->dprx_canceled = true; 1110 if (cancel_delayed_work(&tunnel->dprx_work)) 1111 tb_tunnel_put(tunnel); 1112 } 1113 } 1114 1115 static int tb_dp_activate(struct tb_tunnel *tunnel, bool active) 1116 { 1117 int ret; 1118 1119 if (active) { 1120 struct tb_path **paths; 1121 int last; 1122 1123 paths = tunnel->paths; 1124 last = paths[TB_DP_VIDEO_PATH_OUT]->path_length - 1; 1125 1126 tb_dp_port_set_hops(tunnel->src_port, 1127 paths[TB_DP_VIDEO_PATH_OUT]->hops[0].in_hop_index, 1128 paths[TB_DP_AUX_PATH_OUT]->hops[0].in_hop_index, 1129 paths[TB_DP_AUX_PATH_IN]->hops[last].next_hop_index); 1130 1131 tb_dp_port_set_hops(tunnel->dst_port, 1132 paths[TB_DP_VIDEO_PATH_OUT]->hops[last].next_hop_index, 1133 paths[TB_DP_AUX_PATH_IN]->hops[0].in_hop_index, 1134 paths[TB_DP_AUX_PATH_OUT]->hops[last].next_hop_index); 1135 } else { 1136 tb_dp_dprx_stop(tunnel); 1137 tb_dp_port_hpd_clear(tunnel->src_port); 1138 tb_dp_port_set_hops(tunnel->src_port, 0, 0, 0); 1139 if (tb_port_is_dpout(tunnel->dst_port)) 1140 tb_dp_port_set_hops(tunnel->dst_port, 0, 0, 0); 1141 } 1142 1143 ret = tb_dp_port_enable(tunnel->src_port, active); 1144 if (ret) 1145 return ret; 1146 1147 if (tb_port_is_dpout(tunnel->dst_port)) { 1148 ret = tb_dp_port_enable(tunnel->dst_port, active); 1149 if (ret) 1150 return ret; 1151 } 1152 1153 return active ? tb_dp_dprx_start(tunnel) : 0; 1154 } 1155 1156 /** 1157 * tb_dp_bandwidth_mode_maximum_bandwidth() - Maximum possible bandwidth 1158 * @tunnel: DP tunnel to check 1159 * @max_bw_rounded: Maximum bandwidth in Mb/s rounded up to the next granularity 1160 * 1161 * Return: Maximum possible bandwidth for this tunnel in Mb/s, negative errno 1162 * in case of failure. 1163 */ 1164 static int tb_dp_bandwidth_mode_maximum_bandwidth(struct tb_tunnel *tunnel, 1165 int *max_bw_rounded) 1166 { 1167 struct tb_port *in = tunnel->src_port; 1168 int ret, rate, lanes, max_bw; 1169 u32 cap; 1170 1171 /* 1172 * DP IN adapter DP_LOCAL_CAP gets updated to the lowest AUX 1173 * read parameter values so this so we can use this to determine 1174 * the maximum possible bandwidth over this link. 1175 * 1176 * See USB4 v2 spec 1.0 10.4.4.5. 1177 */ 1178 ret = tb_port_read(in, &cap, TB_CFG_PORT, 1179 in->cap_adap + DP_LOCAL_CAP, 1); 1180 if (ret) 1181 return ret; 1182 1183 rate = tb_dp_cap_get_rate_ext(cap); 1184 lanes = tb_dp_cap_get_lanes(cap); 1185 1186 max_bw = tb_dp_bandwidth(rate, lanes); 1187 1188 if (max_bw_rounded) { 1189 ret = usb4_dp_port_granularity(in); 1190 if (ret < 0) 1191 return ret; 1192 *max_bw_rounded = roundup(max_bw, ret); 1193 } 1194 1195 return max_bw; 1196 } 1197 1198 static int tb_dp_bandwidth_mode_consumed_bandwidth(struct tb_tunnel *tunnel, 1199 int *consumed_up, 1200 int *consumed_down) 1201 { 1202 struct tb_port *in = tunnel->src_port; 1203 int ret, allocated_bw, max_bw_rounded; 1204 1205 if (!usb4_dp_port_bandwidth_mode_enabled(in)) 1206 return -EOPNOTSUPP; 1207 1208 if (!tunnel->bw_mode) 1209 return -EOPNOTSUPP; 1210 1211 /* Read what was allocated previously if any */ 1212 ret = usb4_dp_port_allocated_bandwidth(in); 1213 if (ret < 0) 1214 return ret; 1215 allocated_bw = ret; 1216 1217 ret = tb_dp_bandwidth_mode_maximum_bandwidth(tunnel, &max_bw_rounded); 1218 if (ret < 0) 1219 return ret; 1220 if (allocated_bw == max_bw_rounded) 1221 allocated_bw = ret; 1222 1223 if (tb_tunnel_direction_downstream(tunnel)) { 1224 *consumed_up = 0; 1225 *consumed_down = allocated_bw; 1226 } else { 1227 *consumed_up = allocated_bw; 1228 *consumed_down = 0; 1229 } 1230 1231 return 0; 1232 } 1233 1234 static int tb_dp_allocated_bandwidth(struct tb_tunnel *tunnel, int *allocated_up, 1235 int *allocated_down) 1236 { 1237 struct tb_port *in = tunnel->src_port; 1238 1239 /* 1240 * If we have already set the allocated bandwidth then use that. 1241 * Otherwise we read it from the DPRX. 1242 */ 1243 if (usb4_dp_port_bandwidth_mode_enabled(in) && tunnel->bw_mode) { 1244 int ret, allocated_bw, max_bw_rounded; 1245 1246 ret = usb4_dp_port_allocated_bandwidth(in); 1247 if (ret < 0) 1248 return ret; 1249 allocated_bw = ret; 1250 1251 ret = tb_dp_bandwidth_mode_maximum_bandwidth(tunnel, 1252 &max_bw_rounded); 1253 if (ret < 0) 1254 return ret; 1255 if (allocated_bw == max_bw_rounded) 1256 allocated_bw = ret; 1257 1258 if (tb_tunnel_direction_downstream(tunnel)) { 1259 *allocated_up = 0; 1260 *allocated_down = allocated_bw; 1261 } else { 1262 *allocated_up = allocated_bw; 1263 *allocated_down = 0; 1264 } 1265 return 0; 1266 } 1267 1268 return tunnel->consumed_bandwidth(tunnel, allocated_up, 1269 allocated_down); 1270 } 1271 1272 static int tb_dp_alloc_bandwidth(struct tb_tunnel *tunnel, int *alloc_up, 1273 int *alloc_down) 1274 { 1275 struct tb_port *in = tunnel->src_port; 1276 int max_bw_rounded, ret, tmp; 1277 1278 if (!usb4_dp_port_bandwidth_mode_enabled(in)) 1279 return -EOPNOTSUPP; 1280 1281 ret = tb_dp_bandwidth_mode_maximum_bandwidth(tunnel, &max_bw_rounded); 1282 if (ret < 0) 1283 return ret; 1284 1285 if (tb_tunnel_direction_downstream(tunnel)) { 1286 tmp = min(*alloc_down, max_bw_rounded); 1287 ret = usb4_dp_port_allocate_bandwidth(in, tmp); 1288 if (ret) 1289 return ret; 1290 *alloc_down = tmp; 1291 *alloc_up = 0; 1292 } else { 1293 tmp = min(*alloc_up, max_bw_rounded); 1294 ret = usb4_dp_port_allocate_bandwidth(in, tmp); 1295 if (ret) 1296 return ret; 1297 *alloc_down = 0; 1298 *alloc_up = tmp; 1299 } 1300 1301 /* Now we can use BW mode registers to figure out the bandwidth */ 1302 /* TODO: need to handle discovery too */ 1303 tunnel->bw_mode = true; 1304 return 0; 1305 } 1306 1307 /* Read cap from tunnel DP IN */ 1308 static int tb_dp_read_cap(struct tb_tunnel *tunnel, unsigned int cap, u32 *rate, 1309 u32 *lanes) 1310 { 1311 struct tb_port *in = tunnel->src_port; 1312 u32 val; 1313 int ret; 1314 1315 switch (cap) { 1316 case DP_LOCAL_CAP: 1317 case DP_REMOTE_CAP: 1318 case DP_COMMON_CAP: 1319 break; 1320 1321 default: 1322 tb_tunnel_WARN(tunnel, "invalid capability index %#x\n", cap); 1323 return -EINVAL; 1324 } 1325 1326 /* 1327 * Read from the copied remote cap so that we take into account 1328 * if capabilities were reduced during exchange. 1329 */ 1330 ret = tb_port_read(in, &val, TB_CFG_PORT, in->cap_adap + cap, 1); 1331 if (ret) 1332 return ret; 1333 1334 *rate = tb_dp_cap_get_rate(val); 1335 *lanes = tb_dp_cap_get_lanes(val); 1336 return 0; 1337 } 1338 1339 static int tb_dp_maximum_bandwidth(struct tb_tunnel *tunnel, int *max_up, 1340 int *max_down) 1341 { 1342 int ret; 1343 1344 if (!usb4_dp_port_bandwidth_mode_enabled(tunnel->src_port)) 1345 return -EOPNOTSUPP; 1346 1347 ret = tb_dp_bandwidth_mode_maximum_bandwidth(tunnel, NULL); 1348 if (ret < 0) 1349 return ret; 1350 1351 if (tb_tunnel_direction_downstream(tunnel)) { 1352 *max_up = 0; 1353 *max_down = ret; 1354 } else { 1355 *max_up = ret; 1356 *max_down = 0; 1357 } 1358 1359 return 0; 1360 } 1361 1362 static int tb_dp_consumed_bandwidth(struct tb_tunnel *tunnel, int *consumed_up, 1363 int *consumed_down) 1364 { 1365 const struct tb_switch *sw = tunnel->src_port->sw; 1366 u32 rate = 0, lanes = 0; 1367 int ret; 1368 1369 if (tb_dp_is_usb4(sw)) { 1370 ret = tb_dp_wait_dprx(tunnel, 0); 1371 if (ret) { 1372 if (ret == -ETIMEDOUT) { 1373 /* 1374 * While we wait for DPRX complete the 1375 * tunnel consumes as much as it had 1376 * been reserved initially. 1377 */ 1378 ret = tb_dp_read_cap(tunnel, DP_REMOTE_CAP, 1379 &rate, &lanes); 1380 if (ret) 1381 return ret; 1382 } else { 1383 return ret; 1384 } 1385 } else { 1386 /* 1387 * On USB4 routers check if the bandwidth allocation 1388 * mode is enabled first and then read the bandwidth 1389 * through those registers. 1390 */ 1391 ret = tb_dp_bandwidth_mode_consumed_bandwidth(tunnel, consumed_up, 1392 consumed_down); 1393 if (ret < 0) { 1394 if (ret != -EOPNOTSUPP) 1395 return ret; 1396 } else if (!ret) { 1397 return 0; 1398 } 1399 ret = tb_dp_read_cap(tunnel, DP_COMMON_CAP, &rate, &lanes); 1400 if (ret) 1401 return ret; 1402 } 1403 } else if (sw->generation >= 2) { 1404 ret = tb_dp_read_cap(tunnel, DP_REMOTE_CAP, &rate, &lanes); 1405 if (ret) 1406 return ret; 1407 } else { 1408 /* No bandwidth management for legacy devices */ 1409 *consumed_up = 0; 1410 *consumed_down = 0; 1411 return 0; 1412 } 1413 1414 if (tb_tunnel_direction_downstream(tunnel)) { 1415 *consumed_up = 0; 1416 *consumed_down = tb_dp_bandwidth(rate, lanes); 1417 } else { 1418 *consumed_up = tb_dp_bandwidth(rate, lanes); 1419 *consumed_down = 0; 1420 } 1421 1422 return 0; 1423 } 1424 1425 static void tb_dp_init_aux_credits(struct tb_path_hop *hop) 1426 { 1427 struct tb_port *port = hop->in_port; 1428 struct tb_switch *sw = port->sw; 1429 1430 if (tb_port_use_credit_allocation(port)) 1431 hop->initial_credits = sw->min_dp_aux_credits; 1432 else 1433 hop->initial_credits = 1; 1434 } 1435 1436 static void tb_dp_init_aux_path(struct tb_path *path, bool pm_support) 1437 { 1438 struct tb_path_hop *hop; 1439 1440 path->egress_fc_enable = TB_PATH_SOURCE | TB_PATH_INTERNAL; 1441 path->egress_shared_buffer = TB_PATH_NONE; 1442 path->ingress_fc_enable = TB_PATH_ALL; 1443 path->ingress_shared_buffer = TB_PATH_NONE; 1444 path->priority = TB_DP_AUX_PRIORITY; 1445 path->weight = TB_DP_AUX_WEIGHT; 1446 1447 tb_path_for_each_hop(path, hop) { 1448 tb_dp_init_aux_credits(hop); 1449 if (pm_support) 1450 tb_init_pm_support(hop); 1451 } 1452 } 1453 1454 static int tb_dp_init_video_credits(struct tb_path_hop *hop) 1455 { 1456 struct tb_port *port = hop->in_port; 1457 struct tb_switch *sw = port->sw; 1458 1459 if (tb_port_use_credit_allocation(port)) { 1460 unsigned int nfc_credits; 1461 size_t max_dp_streams; 1462 1463 tb_available_credits(port, &max_dp_streams); 1464 /* 1465 * Read the number of currently allocated NFC credits 1466 * from the lane adapter. Since we only use them for DP 1467 * tunneling we can use that to figure out how many DP 1468 * tunnels already go through the lane adapter. 1469 */ 1470 nfc_credits = port->config.nfc_credits & 1471 ADP_CS_4_NFC_BUFFERS_MASK; 1472 if (nfc_credits / sw->min_dp_main_credits > max_dp_streams) 1473 return -ENOSPC; 1474 1475 hop->nfc_credits = sw->min_dp_main_credits; 1476 } else { 1477 hop->nfc_credits = min(port->total_credits - 2, 12U); 1478 } 1479 1480 return 0; 1481 } 1482 1483 static int tb_dp_init_video_path(struct tb_path *path, bool pm_support) 1484 { 1485 struct tb_path_hop *hop; 1486 1487 path->egress_fc_enable = TB_PATH_NONE; 1488 path->egress_shared_buffer = TB_PATH_NONE; 1489 path->ingress_fc_enable = TB_PATH_NONE; 1490 path->ingress_shared_buffer = TB_PATH_NONE; 1491 path->priority = TB_DP_VIDEO_PRIORITY; 1492 path->weight = TB_DP_VIDEO_WEIGHT; 1493 1494 tb_path_for_each_hop(path, hop) { 1495 int ret; 1496 1497 ret = tb_dp_init_video_credits(hop); 1498 if (ret) 1499 return ret; 1500 if (pm_support) 1501 tb_init_pm_support(hop); 1502 } 1503 1504 return 0; 1505 } 1506 1507 static void tb_dp_dump(struct tb_tunnel *tunnel) 1508 { 1509 struct tb_port *in, *out; 1510 u32 dp_cap, rate, lanes; 1511 1512 in = tunnel->src_port; 1513 out = tunnel->dst_port; 1514 1515 if (tb_port_read(in, &dp_cap, TB_CFG_PORT, 1516 in->cap_adap + DP_LOCAL_CAP, 1)) 1517 return; 1518 1519 rate = tb_dp_cap_get_rate(dp_cap); 1520 lanes = tb_dp_cap_get_lanes(dp_cap); 1521 1522 tb_tunnel_dbg(tunnel, 1523 "DP IN maximum supported bandwidth %u Mb/s x%u = %u Mb/s\n", 1524 rate, lanes, tb_dp_bandwidth(rate, lanes)); 1525 1526 if (tb_port_read(out, &dp_cap, TB_CFG_PORT, 1527 out->cap_adap + DP_LOCAL_CAP, 1)) 1528 return; 1529 1530 rate = tb_dp_cap_get_rate(dp_cap); 1531 lanes = tb_dp_cap_get_lanes(dp_cap); 1532 1533 tb_tunnel_dbg(tunnel, 1534 "DP OUT maximum supported bandwidth %u Mb/s x%u = %u Mb/s\n", 1535 rate, lanes, tb_dp_bandwidth(rate, lanes)); 1536 1537 if (tb_port_read(in, &dp_cap, TB_CFG_PORT, 1538 in->cap_adap + DP_REMOTE_CAP, 1)) 1539 return; 1540 1541 rate = tb_dp_cap_get_rate(dp_cap); 1542 lanes = tb_dp_cap_get_lanes(dp_cap); 1543 1544 tb_tunnel_dbg(tunnel, "reduced bandwidth %u Mb/s x%u = %u Mb/s\n", 1545 rate, lanes, tb_dp_bandwidth(rate, lanes)); 1546 } 1547 1548 /** 1549 * tb_tunnel_discover_dp() - Discover existing Display Port tunnels 1550 * @tb: Pointer to the domain structure 1551 * @in: DP in adapter 1552 * @alloc_hopid: Allocate HopIDs from visited ports 1553 * 1554 * If @in adapter is active, follows the tunnel to the DP out adapter 1555 * and back. Returns the discovered tunnel or %NULL if there was no 1556 * tunnel. 1557 * 1558 * Return: Pointer to &struct tb_tunnel or %NULL if no tunnel found. 1559 */ 1560 struct tb_tunnel *tb_tunnel_discover_dp(struct tb *tb, struct tb_port *in, 1561 bool alloc_hopid) 1562 { 1563 struct tb_tunnel *tunnel; 1564 struct tb_port *port; 1565 struct tb_path *path; 1566 1567 if (!tb_dp_port_is_enabled(in)) 1568 return NULL; 1569 1570 tunnel = tb_tunnel_alloc(tb, 3, TB_TUNNEL_DP); 1571 if (!tunnel) 1572 return NULL; 1573 1574 tunnel->pre_activate = tb_dp_pre_activate; 1575 tunnel->activate = tb_dp_activate; 1576 tunnel->post_deactivate = tb_dp_post_deactivate; 1577 tunnel->maximum_bandwidth = tb_dp_maximum_bandwidth; 1578 tunnel->allocated_bandwidth = tb_dp_allocated_bandwidth; 1579 tunnel->alloc_bandwidth = tb_dp_alloc_bandwidth; 1580 tunnel->consumed_bandwidth = tb_dp_consumed_bandwidth; 1581 tunnel->src_port = in; 1582 1583 path = tb_path_discover(in, TB_DP_VIDEO_HOPID, NULL, -1, 1584 &tunnel->dst_port, "Video", alloc_hopid); 1585 if (!path) { 1586 /* Just disable the DP IN port */ 1587 tb_dp_port_enable(in, false); 1588 goto err_free; 1589 } 1590 tunnel->paths[TB_DP_VIDEO_PATH_OUT] = path; 1591 if (tb_dp_init_video_path(tunnel->paths[TB_DP_VIDEO_PATH_OUT], false)) 1592 goto err_free; 1593 1594 path = tb_path_discover(in, TB_DP_AUX_TX_HOPID, NULL, -1, NULL, "AUX TX", 1595 alloc_hopid); 1596 if (!path) 1597 goto err_deactivate; 1598 tunnel->paths[TB_DP_AUX_PATH_OUT] = path; 1599 tb_dp_init_aux_path(tunnel->paths[TB_DP_AUX_PATH_OUT], false); 1600 1601 path = tb_path_discover(tunnel->dst_port, -1, in, TB_DP_AUX_RX_HOPID, 1602 &port, "AUX RX", alloc_hopid); 1603 if (!path) 1604 goto err_deactivate; 1605 tunnel->paths[TB_DP_AUX_PATH_IN] = path; 1606 tb_dp_init_aux_path(tunnel->paths[TB_DP_AUX_PATH_IN], false); 1607 1608 /* Validate that the tunnel is complete */ 1609 if (!tb_port_is_dpout(tunnel->dst_port)) { 1610 tb_port_warn(in, "path does not end on a DP adapter, cleaning up\n"); 1611 goto err_deactivate; 1612 } 1613 1614 if (!tb_dp_port_is_enabled(tunnel->dst_port)) 1615 goto err_deactivate; 1616 1617 if (!tb_dp_port_hpd_is_active(tunnel->dst_port)) 1618 goto err_deactivate; 1619 1620 if (port != tunnel->src_port) { 1621 tb_tunnel_warn(tunnel, "path is not complete, cleaning up\n"); 1622 goto err_deactivate; 1623 } 1624 1625 tb_dp_dump(tunnel); 1626 1627 tb_tunnel_dbg(tunnel, "discovered\n"); 1628 return tunnel; 1629 1630 err_deactivate: 1631 tb_tunnel_deactivate(tunnel); 1632 err_free: 1633 tb_tunnel_put(tunnel); 1634 1635 return NULL; 1636 } 1637 1638 /** 1639 * tb_tunnel_alloc_dp() - allocate a Display Port tunnel 1640 * @tb: Pointer to the domain structure 1641 * @in: DP in adapter port 1642 * @out: DP out adapter port 1643 * @link_nr: Preferred lane adapter when the link is not bonded 1644 * @max_up: Maximum available upstream bandwidth for the DP tunnel. 1645 * %0 if no available bandwidth. 1646 * @max_down: Maximum available downstream bandwidth for the DP tunnel. 1647 * %0 if no available bandwidth. 1648 * @callback: Optional callback that is called when the DP tunnel is 1649 * fully activated (or there is an error) 1650 * @callback_data: Optional data for @callback 1651 * 1652 * Allocates a tunnel between @in and @out that is capable of tunneling 1653 * Display Port traffic. If @callback is not %NULL it will be called 1654 * after tb_tunnel_activate() once the tunnel has been fully activated. 1655 * It can call tb_tunnel_is_active() to check if activation was 1656 * successful (or if it returns %false there was some sort of issue). 1657 * The @callback is called without @tb->lock held. 1658 * 1659 * Return: Pointer to @struct tb_tunnel or %NULL in case of failure. 1660 */ 1661 struct tb_tunnel *tb_tunnel_alloc_dp(struct tb *tb, struct tb_port *in, 1662 struct tb_port *out, int link_nr, 1663 int max_up, int max_down, 1664 void (*callback)(struct tb_tunnel *, void *), 1665 void *callback_data) 1666 { 1667 struct tb_tunnel *tunnel; 1668 struct tb_path **paths; 1669 struct tb_path *path; 1670 bool pm_support; 1671 1672 if (WARN_ON(!in->cap_adap || !out->cap_adap)) 1673 return NULL; 1674 1675 tunnel = tb_tunnel_alloc(tb, 3, TB_TUNNEL_DP); 1676 if (!tunnel) 1677 return NULL; 1678 1679 tunnel->pre_activate = tb_dp_pre_activate; 1680 tunnel->activate = tb_dp_activate; 1681 tunnel->post_deactivate = tb_dp_post_deactivate; 1682 tunnel->maximum_bandwidth = tb_dp_maximum_bandwidth; 1683 tunnel->allocated_bandwidth = tb_dp_allocated_bandwidth; 1684 tunnel->alloc_bandwidth = tb_dp_alloc_bandwidth; 1685 tunnel->consumed_bandwidth = tb_dp_consumed_bandwidth; 1686 tunnel->src_port = in; 1687 tunnel->dst_port = out; 1688 tunnel->max_up = max_up; 1689 tunnel->max_down = max_down; 1690 tunnel->callback = callback; 1691 tunnel->callback_data = callback_data; 1692 INIT_DELAYED_WORK(&tunnel->dprx_work, tb_dp_dprx_work); 1693 1694 paths = tunnel->paths; 1695 pm_support = usb4_switch_version(in->sw) >= 2; 1696 1697 path = tb_path_alloc(tb, in, TB_DP_VIDEO_HOPID, out, TB_DP_VIDEO_HOPID, 1698 link_nr, "Video"); 1699 if (!path) 1700 goto err_free; 1701 tb_dp_init_video_path(path, pm_support); 1702 paths[TB_DP_VIDEO_PATH_OUT] = path; 1703 1704 path = tb_path_alloc(tb, in, TB_DP_AUX_TX_HOPID, out, 1705 TB_DP_AUX_TX_HOPID, link_nr, "AUX TX"); 1706 if (!path) 1707 goto err_free; 1708 tb_dp_init_aux_path(path, pm_support); 1709 paths[TB_DP_AUX_PATH_OUT] = path; 1710 1711 path = tb_path_alloc(tb, out, TB_DP_AUX_RX_HOPID, in, 1712 TB_DP_AUX_RX_HOPID, link_nr, "AUX RX"); 1713 if (!path) 1714 goto err_free; 1715 tb_dp_init_aux_path(path, pm_support); 1716 paths[TB_DP_AUX_PATH_IN] = path; 1717 1718 return tunnel; 1719 1720 err_free: 1721 tb_tunnel_put(tunnel); 1722 return NULL; 1723 } 1724 1725 static unsigned int tb_dma_available_credits(const struct tb_port *port) 1726 { 1727 const struct tb_switch *sw = port->sw; 1728 int credits; 1729 1730 credits = tb_available_credits(port, NULL); 1731 if (tb_acpi_may_tunnel_pcie()) 1732 credits -= sw->max_pcie_credits; 1733 credits -= port->dma_credits; 1734 1735 return credits > 0 ? credits : 0; 1736 } 1737 1738 static int tb_dma_reserve_credits(struct tb_path_hop *hop, unsigned int credits) 1739 { 1740 struct tb_port *port = hop->in_port; 1741 1742 if (tb_port_use_credit_allocation(port)) { 1743 unsigned int available = tb_dma_available_credits(port); 1744 1745 /* 1746 * Need to have at least TB_MIN_DMA_CREDITS, otherwise 1747 * DMA path cannot be established. 1748 */ 1749 if (available < TB_MIN_DMA_CREDITS) 1750 return -ENOSPC; 1751 1752 while (credits > available) 1753 credits--; 1754 1755 tb_port_dbg(port, "reserving %u credits for DMA path\n", 1756 credits); 1757 1758 port->dma_credits += credits; 1759 } else { 1760 if (tb_port_is_null(port)) 1761 credits = port->bonded ? 14 : 6; 1762 else 1763 credits = min(port->total_credits, credits); 1764 } 1765 1766 hop->initial_credits = credits; 1767 return 0; 1768 } 1769 1770 /* Path from lane adapter to NHI */ 1771 static int tb_dma_init_rx_path(struct tb_path *path, unsigned int credits) 1772 { 1773 struct tb_path_hop *hop; 1774 unsigned int i, tmp; 1775 1776 path->egress_fc_enable = TB_PATH_SOURCE | TB_PATH_INTERNAL; 1777 path->ingress_fc_enable = TB_PATH_ALL; 1778 path->egress_shared_buffer = TB_PATH_NONE; 1779 path->ingress_shared_buffer = TB_PATH_NONE; 1780 path->priority = TB_DMA_PRIORITY; 1781 path->weight = TB_DMA_WEIGHT; 1782 path->clear_fc = true; 1783 1784 /* 1785 * First lane adapter is the one connected to the remote host. 1786 * We don't tunnel other traffic over this link so can use all 1787 * the credits (except the ones reserved for control traffic). 1788 */ 1789 hop = &path->hops[0]; 1790 tmp = min(tb_usable_credits(hop->in_port), credits); 1791 hop->initial_credits = tmp; 1792 hop->in_port->dma_credits += tmp; 1793 1794 for (i = 1; i < path->path_length; i++) { 1795 int ret; 1796 1797 ret = tb_dma_reserve_credits(&path->hops[i], credits); 1798 if (ret) 1799 return ret; 1800 } 1801 1802 return 0; 1803 } 1804 1805 /* Path from NHI to lane adapter */ 1806 static int tb_dma_init_tx_path(struct tb_path *path, unsigned int credits) 1807 { 1808 struct tb_path_hop *hop; 1809 1810 path->egress_fc_enable = TB_PATH_ALL; 1811 path->ingress_fc_enable = TB_PATH_ALL; 1812 path->egress_shared_buffer = TB_PATH_NONE; 1813 path->ingress_shared_buffer = TB_PATH_NONE; 1814 path->priority = TB_DMA_PRIORITY; 1815 path->weight = TB_DMA_WEIGHT; 1816 path->clear_fc = true; 1817 1818 tb_path_for_each_hop(path, hop) { 1819 int ret; 1820 1821 ret = tb_dma_reserve_credits(hop, credits); 1822 if (ret) 1823 return ret; 1824 } 1825 1826 return 0; 1827 } 1828 1829 static void tb_dma_release_credits(struct tb_path_hop *hop) 1830 { 1831 struct tb_port *port = hop->in_port; 1832 1833 if (tb_port_use_credit_allocation(port)) { 1834 port->dma_credits -= hop->initial_credits; 1835 1836 tb_port_dbg(port, "released %u DMA path credits\n", 1837 hop->initial_credits); 1838 } 1839 } 1840 1841 static void tb_dma_destroy_path(struct tb_path *path) 1842 { 1843 struct tb_path_hop *hop; 1844 1845 tb_path_for_each_hop(path, hop) 1846 tb_dma_release_credits(hop); 1847 } 1848 1849 static void tb_dma_destroy(struct tb_tunnel *tunnel) 1850 { 1851 int i; 1852 1853 for (i = 0; i < tunnel->npaths; i++) { 1854 if (!tunnel->paths[i]) 1855 continue; 1856 tb_dma_destroy_path(tunnel->paths[i]); 1857 } 1858 } 1859 1860 /** 1861 * tb_tunnel_alloc_dma() - allocate a DMA tunnel 1862 * @tb: Pointer to the domain structure 1863 * @nhi: Host controller port 1864 * @dst: Destination null port which the other domain is connected to 1865 * @transmit_path: HopID used for transmitting packets 1866 * @transmit_ring: NHI ring number used to send packets towards the 1867 * other domain. Set to %-1 if TX path is not needed. 1868 * @receive_path: HopID used for receiving packets 1869 * @receive_ring: NHI ring number used to receive packets from the 1870 * other domain. Set to %-1 if RX path is not needed. 1871 * 1872 * Return: Pointer to @struct tb_tunnel or %NULL in case of failure. 1873 */ 1874 struct tb_tunnel *tb_tunnel_alloc_dma(struct tb *tb, struct tb_port *nhi, 1875 struct tb_port *dst, int transmit_path, 1876 int transmit_ring, int receive_path, 1877 int receive_ring) 1878 { 1879 struct tb_tunnel *tunnel; 1880 size_t npaths = 0, i = 0; 1881 struct tb_path *path; 1882 int credits; 1883 1884 /* Ring 0 is reserved for control channel */ 1885 if (WARN_ON(!receive_ring || !transmit_ring)) 1886 return NULL; 1887 1888 if (receive_ring > 0) 1889 npaths++; 1890 if (transmit_ring > 0) 1891 npaths++; 1892 1893 if (WARN_ON(!npaths)) 1894 return NULL; 1895 1896 tunnel = tb_tunnel_alloc(tb, npaths, TB_TUNNEL_DMA); 1897 if (!tunnel) 1898 return NULL; 1899 1900 tunnel->src_port = nhi; 1901 tunnel->dst_port = dst; 1902 tunnel->destroy = tb_dma_destroy; 1903 1904 credits = min_not_zero(dma_credits, nhi->sw->max_dma_credits); 1905 1906 if (receive_ring > 0) { 1907 path = tb_path_alloc(tb, dst, receive_path, nhi, receive_ring, 0, 1908 "DMA RX"); 1909 if (!path) 1910 goto err_free; 1911 tunnel->paths[i++] = path; 1912 if (tb_dma_init_rx_path(path, credits)) { 1913 tb_tunnel_dbg(tunnel, "not enough buffers for RX path\n"); 1914 goto err_free; 1915 } 1916 } 1917 1918 if (transmit_ring > 0) { 1919 path = tb_path_alloc(tb, nhi, transmit_ring, dst, transmit_path, 0, 1920 "DMA TX"); 1921 if (!path) 1922 goto err_free; 1923 tunnel->paths[i++] = path; 1924 if (tb_dma_init_tx_path(path, credits)) { 1925 tb_tunnel_dbg(tunnel, "not enough buffers for TX path\n"); 1926 goto err_free; 1927 } 1928 } 1929 1930 return tunnel; 1931 1932 err_free: 1933 tb_tunnel_put(tunnel); 1934 return NULL; 1935 } 1936 1937 /** 1938 * tb_tunnel_match_dma() - Match DMA tunnel 1939 * @tunnel: Tunnel to match 1940 * @transmit_path: HopID used for transmitting packets. Pass %-1 to ignore. 1941 * @transmit_ring: NHI ring number used to send packets towards the 1942 * other domain. Pass %-1 to ignore. 1943 * @receive_path: HopID used for receiving packets. Pass %-1 to ignore. 1944 * @receive_ring: NHI ring number used to receive packets from the 1945 * other domain. Pass %-1 to ignore. 1946 * 1947 * This function can be used to match specific DMA tunnel, if there are 1948 * multiple DMA tunnels going through the same XDomain connection. 1949 * 1950 * Return: %true if there is a match, %false otherwise. 1951 */ 1952 bool tb_tunnel_match_dma(const struct tb_tunnel *tunnel, int transmit_path, 1953 int transmit_ring, int receive_path, int receive_ring) 1954 { 1955 const struct tb_path *tx_path = NULL, *rx_path = NULL; 1956 int i; 1957 1958 if (!receive_ring || !transmit_ring) 1959 return false; 1960 1961 for (i = 0; i < tunnel->npaths; i++) { 1962 const struct tb_path *path = tunnel->paths[i]; 1963 1964 if (!path) 1965 continue; 1966 1967 if (tb_port_is_nhi(path->hops[0].in_port)) 1968 tx_path = path; 1969 else if (tb_port_is_nhi(path->hops[path->path_length - 1].out_port)) 1970 rx_path = path; 1971 } 1972 1973 if (transmit_ring > 0 || transmit_path > 0) { 1974 if (!tx_path) 1975 return false; 1976 if (transmit_ring > 0 && 1977 (tx_path->hops[0].in_hop_index != transmit_ring)) 1978 return false; 1979 if (transmit_path > 0 && 1980 (tx_path->hops[tx_path->path_length - 1].next_hop_index != transmit_path)) 1981 return false; 1982 } 1983 1984 if (receive_ring > 0 || receive_path > 0) { 1985 if (!rx_path) 1986 return false; 1987 if (receive_path > 0 && 1988 (rx_path->hops[0].in_hop_index != receive_path)) 1989 return false; 1990 if (receive_ring > 0 && 1991 (rx_path->hops[rx_path->path_length - 1].next_hop_index != receive_ring)) 1992 return false; 1993 } 1994 1995 return true; 1996 } 1997 1998 static int tb_usb3_max_link_rate(struct tb_port *up, struct tb_port *down) 1999 { 2000 int ret, up_max_rate, down_max_rate; 2001 2002 ret = usb4_usb3_port_max_link_rate(up); 2003 if (ret < 0) 2004 return ret; 2005 up_max_rate = ret; 2006 2007 ret = usb4_usb3_port_max_link_rate(down); 2008 if (ret < 0) 2009 return ret; 2010 down_max_rate = ret; 2011 2012 return min(up_max_rate, down_max_rate); 2013 } 2014 2015 static int tb_usb3_pre_activate(struct tb_tunnel *tunnel) 2016 { 2017 tb_tunnel_dbg(tunnel, "allocating initial bandwidth %d/%d Mb/s\n", 2018 tunnel->allocated_up, tunnel->allocated_down); 2019 2020 return usb4_usb3_port_allocate_bandwidth(tunnel->src_port, 2021 &tunnel->allocated_up, 2022 &tunnel->allocated_down); 2023 } 2024 2025 static int tb_usb3_activate(struct tb_tunnel *tunnel, bool activate) 2026 { 2027 int res; 2028 2029 res = tb_usb3_port_enable(tunnel->src_port, activate); 2030 if (res) 2031 return res; 2032 2033 if (tb_port_is_usb3_up(tunnel->dst_port)) 2034 return tb_usb3_port_enable(tunnel->dst_port, activate); 2035 2036 return 0; 2037 } 2038 2039 static int tb_usb3_consumed_bandwidth(struct tb_tunnel *tunnel, 2040 int *consumed_up, int *consumed_down) 2041 { 2042 struct tb_port *port = tb_upstream_port(tunnel->dst_port->sw); 2043 int pcie_weight = tb_acpi_may_tunnel_pcie() ? TB_PCI_WEIGHT : 0; 2044 2045 /* 2046 * PCIe tunneling, if enabled, affects the USB3 bandwidth so 2047 * take that it into account here. 2048 */ 2049 *consumed_up = tunnel->allocated_up * 2050 (TB_USB3_WEIGHT + pcie_weight) / TB_USB3_WEIGHT; 2051 *consumed_down = tunnel->allocated_down * 2052 (TB_USB3_WEIGHT + pcie_weight) / TB_USB3_WEIGHT; 2053 2054 if (tb_port_get_link_generation(port) >= 4) { 2055 *consumed_up = max(*consumed_up, USB4_V2_USB3_MIN_BANDWIDTH); 2056 *consumed_down = max(*consumed_down, USB4_V2_USB3_MIN_BANDWIDTH); 2057 } 2058 2059 return 0; 2060 } 2061 2062 static int tb_usb3_release_unused_bandwidth(struct tb_tunnel *tunnel) 2063 { 2064 int ret; 2065 2066 ret = usb4_usb3_port_release_bandwidth(tunnel->src_port, 2067 &tunnel->allocated_up, 2068 &tunnel->allocated_down); 2069 if (ret) 2070 return ret; 2071 2072 tb_tunnel_dbg(tunnel, "decreased bandwidth allocation to %d/%d Mb/s\n", 2073 tunnel->allocated_up, tunnel->allocated_down); 2074 return 0; 2075 } 2076 2077 static void tb_usb3_reclaim_available_bandwidth(struct tb_tunnel *tunnel, 2078 int *available_up, 2079 int *available_down) 2080 { 2081 int ret, max_rate, allocate_up, allocate_down; 2082 2083 ret = tb_usb3_max_link_rate(tunnel->dst_port, tunnel->src_port); 2084 if (ret < 0) { 2085 tb_tunnel_warn(tunnel, "failed to read maximum link rate\n"); 2086 return; 2087 } 2088 2089 /* 2090 * 90% of the max rate can be allocated for isochronous 2091 * transfers. 2092 */ 2093 max_rate = ret * 90 / 100; 2094 2095 /* No need to reclaim if already at maximum */ 2096 if (tunnel->allocated_up >= max_rate && 2097 tunnel->allocated_down >= max_rate) 2098 return; 2099 2100 /* Don't go lower than what is already allocated */ 2101 allocate_up = min(max_rate, *available_up); 2102 if (allocate_up < tunnel->allocated_up) 2103 allocate_up = tunnel->allocated_up; 2104 2105 allocate_down = min(max_rate, *available_down); 2106 if (allocate_down < tunnel->allocated_down) 2107 allocate_down = tunnel->allocated_down; 2108 2109 /* If no changes no need to do more */ 2110 if (allocate_up == tunnel->allocated_up && 2111 allocate_down == tunnel->allocated_down) 2112 return; 2113 2114 ret = usb4_usb3_port_allocate_bandwidth(tunnel->src_port, &allocate_up, 2115 &allocate_down); 2116 if (ret) { 2117 tb_tunnel_info(tunnel, "failed to allocate bandwidth\n"); 2118 return; 2119 } 2120 2121 tunnel->allocated_up = allocate_up; 2122 *available_up -= tunnel->allocated_up; 2123 2124 tunnel->allocated_down = allocate_down; 2125 *available_down -= tunnel->allocated_down; 2126 2127 tb_tunnel_dbg(tunnel, "increased bandwidth allocation to %d/%d Mb/s\n", 2128 tunnel->allocated_up, tunnel->allocated_down); 2129 } 2130 2131 static void tb_usb3_init_credits(struct tb_path_hop *hop) 2132 { 2133 struct tb_port *port = hop->in_port; 2134 struct tb_switch *sw = port->sw; 2135 unsigned int credits; 2136 2137 if (tb_port_use_credit_allocation(port)) { 2138 credits = sw->max_usb3_credits; 2139 } else { 2140 if (tb_port_is_null(port)) 2141 credits = port->bonded ? 32 : 16; 2142 else 2143 credits = 7; 2144 } 2145 2146 hop->initial_credits = credits; 2147 } 2148 2149 static void tb_usb3_init_path(struct tb_path *path) 2150 { 2151 struct tb_path_hop *hop; 2152 2153 path->egress_fc_enable = TB_PATH_SOURCE | TB_PATH_INTERNAL; 2154 path->egress_shared_buffer = TB_PATH_NONE; 2155 path->ingress_fc_enable = TB_PATH_ALL; 2156 path->ingress_shared_buffer = TB_PATH_NONE; 2157 path->priority = TB_USB3_PRIORITY; 2158 path->weight = TB_USB3_WEIGHT; 2159 path->drop_packages = 0; 2160 2161 tb_path_for_each_hop(path, hop) 2162 tb_usb3_init_credits(hop); 2163 } 2164 2165 /** 2166 * tb_tunnel_discover_usb3() - Discover existing USB3 tunnels 2167 * @tb: Pointer to the domain structure 2168 * @down: USB3 downstream adapter 2169 * @alloc_hopid: Allocate HopIDs from visited ports 2170 * 2171 * If @down adapter is active, follows the tunnel to the USB3 upstream 2172 * adapter and back. 2173 * 2174 * Return: Pointer to &struct tb_tunnel or %NULL if there was no tunnel. 2175 */ 2176 struct tb_tunnel *tb_tunnel_discover_usb3(struct tb *tb, struct tb_port *down, 2177 bool alloc_hopid) 2178 { 2179 struct tb_tunnel *tunnel; 2180 struct tb_path *path; 2181 2182 if (!tb_usb3_port_is_enabled(down)) 2183 return NULL; 2184 2185 tunnel = tb_tunnel_alloc(tb, 2, TB_TUNNEL_USB3); 2186 if (!tunnel) 2187 return NULL; 2188 2189 tunnel->activate = tb_usb3_activate; 2190 tunnel->src_port = down; 2191 2192 /* 2193 * Discover both paths even if they are not complete. We will 2194 * clean them up by calling tb_tunnel_deactivate() below in that 2195 * case. 2196 */ 2197 path = tb_path_discover(down, TB_USB3_HOPID, NULL, -1, 2198 &tunnel->dst_port, "USB3 Down", alloc_hopid); 2199 if (!path) { 2200 /* Just disable the downstream port */ 2201 tb_usb3_port_enable(down, false); 2202 goto err_free; 2203 } 2204 tunnel->paths[TB_USB3_PATH_DOWN] = path; 2205 tb_usb3_init_path(tunnel->paths[TB_USB3_PATH_DOWN]); 2206 2207 path = tb_path_discover(tunnel->dst_port, -1, down, TB_USB3_HOPID, NULL, 2208 "USB3 Up", alloc_hopid); 2209 if (!path) 2210 goto err_deactivate; 2211 tunnel->paths[TB_USB3_PATH_UP] = path; 2212 tb_usb3_init_path(tunnel->paths[TB_USB3_PATH_UP]); 2213 2214 /* Validate that the tunnel is complete */ 2215 if (!tb_port_is_usb3_up(tunnel->dst_port)) { 2216 tb_port_warn(tunnel->dst_port, 2217 "path does not end on an USB3 adapter, cleaning up\n"); 2218 goto err_deactivate; 2219 } 2220 2221 if (down != tunnel->src_port) { 2222 tb_tunnel_warn(tunnel, "path is not complete, cleaning up\n"); 2223 goto err_deactivate; 2224 } 2225 2226 if (!tb_usb3_port_is_enabled(tunnel->dst_port)) { 2227 tb_tunnel_warn(tunnel, 2228 "tunnel is not fully activated, cleaning up\n"); 2229 goto err_deactivate; 2230 } 2231 2232 if (!tb_route(down->sw)) { 2233 int ret; 2234 2235 /* 2236 * Read the initial bandwidth allocation for the first 2237 * hop tunnel. 2238 */ 2239 ret = usb4_usb3_port_allocated_bandwidth(down, 2240 &tunnel->allocated_up, &tunnel->allocated_down); 2241 if (ret) 2242 goto err_deactivate; 2243 2244 tb_tunnel_dbg(tunnel, "currently allocated bandwidth %d/%d Mb/s\n", 2245 tunnel->allocated_up, tunnel->allocated_down); 2246 2247 tunnel->pre_activate = tb_usb3_pre_activate; 2248 tunnel->consumed_bandwidth = tb_usb3_consumed_bandwidth; 2249 tunnel->release_unused_bandwidth = 2250 tb_usb3_release_unused_bandwidth; 2251 tunnel->reclaim_available_bandwidth = 2252 tb_usb3_reclaim_available_bandwidth; 2253 } 2254 2255 tb_tunnel_dbg(tunnel, "discovered\n"); 2256 return tunnel; 2257 2258 err_deactivate: 2259 tb_tunnel_deactivate(tunnel); 2260 err_free: 2261 tb_tunnel_put(tunnel); 2262 2263 return NULL; 2264 } 2265 2266 /** 2267 * tb_tunnel_alloc_usb3() - allocate a USB3 tunnel 2268 * @tb: Pointer to the domain structure 2269 * @up: USB3 upstream adapter port 2270 * @down: USB3 downstream adapter port 2271 * @max_up: Maximum available upstream bandwidth for the USB3 tunnel. 2272 * %0 if no available bandwidth. 2273 * @max_down: Maximum available downstream bandwidth for the USB3 tunnel. 2274 * %0 if no available bandwidth. 2275 * 2276 * Allocate an USB3 tunnel. The ports must be of type @TB_TYPE_USB3_UP and 2277 * @TB_TYPE_USB3_DOWN. 2278 * 2279 * Return: Pointer to @struct tb_tunnel or %NULL in case of failure. 2280 */ 2281 struct tb_tunnel *tb_tunnel_alloc_usb3(struct tb *tb, struct tb_port *up, 2282 struct tb_port *down, int max_up, 2283 int max_down) 2284 { 2285 struct tb_tunnel *tunnel; 2286 struct tb_path *path; 2287 int max_rate = 0; 2288 2289 if (!tb_route(down->sw) && (max_up > 0 || max_down > 0)) { 2290 /* 2291 * For USB3 isochronous transfers, we allow bandwidth which is 2292 * not higher than 90% of maximum supported bandwidth by USB3 2293 * adapters. 2294 */ 2295 max_rate = tb_usb3_max_link_rate(down, up); 2296 if (max_rate < 0) 2297 return NULL; 2298 2299 max_rate = max_rate * 90 / 100; 2300 tb_port_dbg(up, "maximum required bandwidth for USB3 tunnel %d Mb/s\n", 2301 max_rate); 2302 } 2303 2304 tunnel = tb_tunnel_alloc(tb, 2, TB_TUNNEL_USB3); 2305 if (!tunnel) 2306 return NULL; 2307 2308 tunnel->activate = tb_usb3_activate; 2309 tunnel->src_port = down; 2310 tunnel->dst_port = up; 2311 tunnel->max_up = max_up; 2312 tunnel->max_down = max_down; 2313 2314 path = tb_path_alloc(tb, down, TB_USB3_HOPID, up, TB_USB3_HOPID, 0, 2315 "USB3 Down"); 2316 if (!path) 2317 goto err_free; 2318 tb_usb3_init_path(path); 2319 tunnel->paths[TB_USB3_PATH_DOWN] = path; 2320 2321 path = tb_path_alloc(tb, up, TB_USB3_HOPID, down, TB_USB3_HOPID, 0, 2322 "USB3 Up"); 2323 if (!path) 2324 goto err_free; 2325 tb_usb3_init_path(path); 2326 tunnel->paths[TB_USB3_PATH_UP] = path; 2327 2328 if (!tb_route(down->sw)) { 2329 tunnel->allocated_up = min(max_rate, max_up); 2330 tunnel->allocated_down = min(max_rate, max_down); 2331 2332 tunnel->pre_activate = tb_usb3_pre_activate; 2333 tunnel->consumed_bandwidth = tb_usb3_consumed_bandwidth; 2334 tunnel->release_unused_bandwidth = 2335 tb_usb3_release_unused_bandwidth; 2336 tunnel->reclaim_available_bandwidth = 2337 tb_usb3_reclaim_available_bandwidth; 2338 } 2339 2340 return tunnel; 2341 2342 err_free: 2343 tb_tunnel_put(tunnel); 2344 return NULL; 2345 } 2346 2347 /** 2348 * tb_tunnel_is_invalid - check whether an activated path is still valid 2349 * @tunnel: Tunnel to check 2350 * 2351 * Return: %true if path is valid, %false otherwise. 2352 */ 2353 bool tb_tunnel_is_invalid(struct tb_tunnel *tunnel) 2354 { 2355 int i; 2356 2357 for (i = 0; i < tunnel->npaths; i++) { 2358 WARN_ON(!tunnel->paths[i]->activated); 2359 if (tb_path_is_invalid(tunnel->paths[i])) 2360 return true; 2361 } 2362 2363 return false; 2364 } 2365 2366 /** 2367 * tb_tunnel_activate() - activate a tunnel 2368 * @tunnel: Tunnel to activate 2369 * 2370 * Return: 2371 * * %0 - On success. 2372 * * %-EINPROGRESS - If the tunnel activation is still in progress (that's 2373 * for DP tunnels to complete DPRX capabilities read). 2374 * * Negative errno - Another error occurred. 2375 */ 2376 int tb_tunnel_activate(struct tb_tunnel *tunnel) 2377 { 2378 int res, i; 2379 2380 tb_tunnel_dbg(tunnel, "activating\n"); 2381 2382 /* 2383 * Make sure all paths are properly disabled before enabling 2384 * them again. 2385 */ 2386 for (i = 0; i < tunnel->npaths; i++) { 2387 if (tunnel->paths[i]->activated) { 2388 tb_path_deactivate(tunnel->paths[i]); 2389 tunnel->paths[i]->activated = false; 2390 } 2391 } 2392 2393 tunnel->state = TB_TUNNEL_ACTIVATING; 2394 2395 if (tunnel->pre_activate) { 2396 res = tunnel->pre_activate(tunnel); 2397 if (res) 2398 return res; 2399 } 2400 2401 for (i = 0; i < tunnel->npaths; i++) { 2402 res = tb_path_activate(tunnel->paths[i]); 2403 if (res) 2404 goto err; 2405 } 2406 2407 if (tunnel->activate) { 2408 res = tunnel->activate(tunnel, true); 2409 if (res) { 2410 if (res == -EINPROGRESS) 2411 return res; 2412 goto err; 2413 } 2414 } 2415 2416 tb_tunnel_set_active(tunnel, true); 2417 return 0; 2418 2419 err: 2420 tb_tunnel_warn(tunnel, "activation failed\n"); 2421 tb_tunnel_deactivate(tunnel); 2422 return res; 2423 } 2424 2425 /** 2426 * tb_tunnel_deactivate() - deactivate a tunnel 2427 * @tunnel: Tunnel to deactivate 2428 */ 2429 void tb_tunnel_deactivate(struct tb_tunnel *tunnel) 2430 { 2431 int i; 2432 2433 tb_tunnel_dbg(tunnel, "deactivating\n"); 2434 2435 if (tunnel->activate) 2436 tunnel->activate(tunnel, false); 2437 2438 for (i = 0; i < tunnel->npaths; i++) { 2439 if (tunnel->paths[i] && tunnel->paths[i]->activated) 2440 tb_path_deactivate(tunnel->paths[i]); 2441 } 2442 2443 if (tunnel->post_deactivate) 2444 tunnel->post_deactivate(tunnel); 2445 2446 tb_tunnel_set_active(tunnel, false); 2447 } 2448 2449 /** 2450 * tb_tunnel_port_on_path() - Does the tunnel go through port 2451 * @tunnel: Tunnel to check 2452 * @port: Port to check 2453 * 2454 * Return: %true if @tunnel goes through @port (direction does not matter), 2455 * %false otherwise. 2456 */ 2457 bool tb_tunnel_port_on_path(const struct tb_tunnel *tunnel, 2458 const struct tb_port *port) 2459 { 2460 int i; 2461 2462 for (i = 0; i < tunnel->npaths; i++) { 2463 if (!tunnel->paths[i]) 2464 continue; 2465 2466 if (tb_path_port_on_path(tunnel->paths[i], port)) 2467 return true; 2468 } 2469 2470 return false; 2471 } 2472 2473 // Is tb_tunnel_activate() called for the tunnel 2474 static bool tb_tunnel_is_activated(const struct tb_tunnel *tunnel) 2475 { 2476 return tunnel->state == TB_TUNNEL_ACTIVATING || tb_tunnel_is_active(tunnel); 2477 } 2478 2479 /** 2480 * tb_tunnel_maximum_bandwidth() - Return maximum possible bandwidth 2481 * @tunnel: Tunnel to check 2482 * @max_up: Maximum upstream bandwidth in Mb/s 2483 * @max_down: Maximum downstream bandwidth in Mb/s 2484 * 2485 * Return: 2486 * * Maximum possible bandwidth this tunnel can support if not 2487 * limited by other bandwidth clients. 2488 * * %-EOPNOTSUPP - If the tunnel does not support this function. 2489 * * %-ENOTCONN - If the tunnel is not active. 2490 */ 2491 int tb_tunnel_maximum_bandwidth(struct tb_tunnel *tunnel, int *max_up, 2492 int *max_down) 2493 { 2494 if (!tb_tunnel_is_active(tunnel)) 2495 return -ENOTCONN; 2496 2497 if (tunnel->maximum_bandwidth) 2498 return tunnel->maximum_bandwidth(tunnel, max_up, max_down); 2499 return -EOPNOTSUPP; 2500 } 2501 2502 /** 2503 * tb_tunnel_allocated_bandwidth() - Return bandwidth allocated for the tunnel 2504 * @tunnel: Tunnel to check 2505 * @allocated_up: Currently allocated upstream bandwidth in Mb/s is stored here 2506 * @allocated_down: Currently allocated downstream bandwidth in Mb/s is 2507 * stored here 2508 * 2509 * Return: 2510 * * Bandwidth allocated for the tunnel. This may be higher than what the 2511 * tunnel actually consumes. 2512 * * %-EOPNOTSUPP - If the tunnel does not support this function. 2513 * * %-ENOTCONN - If the tunnel is not active. 2514 * * Negative errno - Another error occurred. 2515 */ 2516 int tb_tunnel_allocated_bandwidth(struct tb_tunnel *tunnel, int *allocated_up, 2517 int *allocated_down) 2518 { 2519 if (!tb_tunnel_is_active(tunnel)) 2520 return -ENOTCONN; 2521 2522 if (tunnel->allocated_bandwidth) 2523 return tunnel->allocated_bandwidth(tunnel, allocated_up, 2524 allocated_down); 2525 return -EOPNOTSUPP; 2526 } 2527 2528 /** 2529 * tb_tunnel_alloc_bandwidth() - Change tunnel bandwidth allocation 2530 * @tunnel: Tunnel whose bandwidth allocation to change 2531 * @alloc_up: New upstream bandwidth in Mb/s 2532 * @alloc_down: New downstream bandwidth in Mb/s 2533 * 2534 * Tries to change tunnel bandwidth allocation. 2535 * 2536 * Return: 2537 * * %0 - On success. Updates @alloc_up and @alloc_down to values that were 2538 * actually allocated (it may not be the same as passed originally). 2539 * * Negative errno - In case of failure. 2540 */ 2541 int tb_tunnel_alloc_bandwidth(struct tb_tunnel *tunnel, int *alloc_up, 2542 int *alloc_down) 2543 { 2544 if (!tb_tunnel_is_active(tunnel)) 2545 return -ENOTCONN; 2546 2547 if (tunnel->alloc_bandwidth) { 2548 int ret; 2549 2550 ret = tunnel->alloc_bandwidth(tunnel, alloc_up, alloc_down); 2551 if (ret) 2552 return ret; 2553 2554 tb_tunnel_changed(tunnel); 2555 return 0; 2556 } 2557 2558 return -EOPNOTSUPP; 2559 } 2560 2561 /** 2562 * tb_tunnel_consumed_bandwidth() - Return bandwidth consumed by the tunnel 2563 * @tunnel: Tunnel to check 2564 * @consumed_up: Consumed bandwidth in Mb/s from @dst_port to @src_port. 2565 * Can be %NULL. 2566 * @consumed_down: Consumed bandwidth in Mb/s from @src_port to @dst_port. 2567 * Can be %NULL. 2568 * 2569 * Stores the amount of isochronous bandwidth @tunnel consumes in 2570 * @consumed_up and @consumed_down. 2571 * 2572 * Return: %0 on success, negative errno otherwise. 2573 */ 2574 int tb_tunnel_consumed_bandwidth(struct tb_tunnel *tunnel, int *consumed_up, 2575 int *consumed_down) 2576 { 2577 int up_bw = 0, down_bw = 0; 2578 2579 /* 2580 * Here we need to distinguish between not active tunnel from 2581 * tunnels that are either fully active or activation started. 2582 * The latter is true for DP tunnels where we must report the 2583 * consumed to be the maximum we gave it until DPRX capabilities 2584 * read is done by the graphics driver. 2585 */ 2586 if (tb_tunnel_is_activated(tunnel) && tunnel->consumed_bandwidth) { 2587 int ret; 2588 2589 ret = tunnel->consumed_bandwidth(tunnel, &up_bw, &down_bw); 2590 if (ret) 2591 return ret; 2592 } 2593 2594 if (consumed_up) 2595 *consumed_up = up_bw; 2596 if (consumed_down) 2597 *consumed_down = down_bw; 2598 2599 tb_tunnel_dbg(tunnel, "consumed bandwidth %d/%d Mb/s\n", up_bw, down_bw); 2600 return 0; 2601 } 2602 2603 /** 2604 * tb_tunnel_release_unused_bandwidth() - Release unused bandwidth 2605 * @tunnel: Tunnel whose unused bandwidth to release 2606 * 2607 * If tunnel supports dynamic bandwidth management (USB3 tunnels at the 2608 * moment) this function makes it to release all the unused bandwidth. 2609 * 2610 * Return: %0 on success, negative errno otherwise. 2611 */ 2612 int tb_tunnel_release_unused_bandwidth(struct tb_tunnel *tunnel) 2613 { 2614 if (!tb_tunnel_is_active(tunnel)) 2615 return -ENOTCONN; 2616 2617 if (tunnel->release_unused_bandwidth) { 2618 int ret; 2619 2620 ret = tunnel->release_unused_bandwidth(tunnel); 2621 if (ret) 2622 return ret; 2623 } 2624 2625 return 0; 2626 } 2627 2628 /** 2629 * tb_tunnel_reclaim_available_bandwidth() - Reclaim available bandwidth 2630 * @tunnel: Tunnel reclaiming available bandwidth 2631 * @available_up: Available upstream bandwidth (in Mb/s) 2632 * @available_down: Available downstream bandwidth (in Mb/s) 2633 * 2634 * Reclaims bandwidth from @available_up and @available_down and updates 2635 * the variables accordingly (e.g decreases both according to what was 2636 * reclaimed by the tunnel). If nothing was reclaimed the values are 2637 * kept as is. 2638 */ 2639 void tb_tunnel_reclaim_available_bandwidth(struct tb_tunnel *tunnel, 2640 int *available_up, 2641 int *available_down) 2642 { 2643 if (!tb_tunnel_is_active(tunnel)) 2644 return; 2645 2646 if (tunnel->reclaim_available_bandwidth) 2647 tunnel->reclaim_available_bandwidth(tunnel, available_up, 2648 available_down); 2649 } 2650 2651 const char *tb_tunnel_type_name(const struct tb_tunnel *tunnel) 2652 { 2653 return tb_tunnel_names[tunnel->type]; 2654 } 2655