Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.5.6.
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Thunderbolt driver - bus logic (NHI independent)
   4 *
   5 * Copyright (c) 2014 Andreas Noever <andreas.noever@gmail.com>
   6 * Copyright (C) 2019, Intel Corporation
   7 */
   8
   9#include <linux/slab.h>
  10#include <linux/errno.h>
  11#include <linux/delay.h>
  12#include <linux/pm_runtime.h>
  13#include <linux/platform_data/x86/apple.h>
  14
  15#include "tb.h"
  16#include "tb_regs.h"
  17#include "tunnel.h"
  18
  19#define TB_TIMEOUT	100 /* ms */
  20
  21/**
  22 * struct tb_cm - Simple Thunderbolt connection manager
  23 * @tunnel_list: List of active tunnels
  24 * @dp_resources: List of available DP resources for DP tunneling
  25 * @hotplug_active: tb_handle_hotplug will stop progressing plug
  26 *		    events and exit if this is not set (it needs to
  27 *		    acquire the lock one more time). Used to drain wq
  28 *		    after cfg has been paused.
  29 * @remove_work: Work used to remove any unplugged routers after
  30 *		 runtime resume
  31 */
  32struct tb_cm {
  33	struct list_head tunnel_list;
  34	struct list_head dp_resources;
  35	bool hotplug_active;
  36	struct delayed_work remove_work;
  37};
  38
  39static inline struct tb *tcm_to_tb(struct tb_cm *tcm)
  40{
  41	return ((void *)tcm - sizeof(struct tb));
  42}
  43
  44struct tb_hotplug_event {
  45	struct work_struct work;
  46	struct tb *tb;
  47	u64 route;
  48	u8 port;
  49	bool unplug;
  50};
  51
  52static void tb_handle_hotplug(struct work_struct *work);
  53
  54static void tb_queue_hotplug(struct tb *tb, u64 route, u8 port, bool unplug)
  55{
  56	struct tb_hotplug_event *ev;
  57
  58	ev = kmalloc(sizeof(*ev), GFP_KERNEL);
  59	if (!ev)
  60		return;
  61
  62	ev->tb = tb;
  63	ev->route = route;
  64	ev->port = port;
  65	ev->unplug = unplug;
  66	INIT_WORK(&ev->work, tb_handle_hotplug);
  67	queue_work(tb->wq, &ev->work);
  68}
  69
  70/* enumeration & hot plug handling */
  71
  72static void tb_add_dp_resources(struct tb_switch *sw)
  73{
  74	struct tb_cm *tcm = tb_priv(sw->tb);
  75	struct tb_port *port;
  76
  77	tb_switch_for_each_port(sw, port) {
  78		if (!tb_port_is_dpin(port))
  79			continue;
  80
  81		if (!tb_switch_query_dp_resource(sw, port))
  82			continue;
  83
  84		list_add_tail(&port->list, &tcm->dp_resources);
  85		tb_port_dbg(port, "DP IN resource available\n");
  86	}
  87}
  88
  89static void tb_remove_dp_resources(struct tb_switch *sw)
  90{
  91	struct tb_cm *tcm = tb_priv(sw->tb);
  92	struct tb_port *port, *tmp;
  93
  94	/* Clear children resources first */
  95	tb_switch_for_each_port(sw, port) {
  96		if (tb_port_has_remote(port))
  97			tb_remove_dp_resources(port->remote->sw);
  98	}
  99
 100	list_for_each_entry_safe(port, tmp, &tcm->dp_resources, list) {
 101		if (port->sw == sw) {
 102			tb_port_dbg(port, "DP OUT resource unavailable\n");
 103			list_del_init(&port->list);
 104		}
 105	}
 106}
 107
 108static void tb_discover_dp_resource(struct tb *tb, struct tb_port *port)
 109{
 110	struct tb_cm *tcm = tb_priv(tb);
 111	struct tb_port *p;
 112
 113	list_for_each_entry(p, &tcm->dp_resources, list) {
 114		if (p == port)
 115			return;
 116	}
 117
 118	tb_port_dbg(port, "DP %s resource available discovered\n",
 119		    tb_port_is_dpin(port) ? "IN" : "OUT");
 120	list_add_tail(&port->list, &tcm->dp_resources);
 121}
 122
 123static void tb_discover_dp_resources(struct tb *tb)
 124{
 125	struct tb_cm *tcm = tb_priv(tb);
 126	struct tb_tunnel *tunnel;
 127
 128	list_for_each_entry(tunnel, &tcm->tunnel_list, list) {
 129		if (tb_tunnel_is_dp(tunnel))
 130			tb_discover_dp_resource(tb, tunnel->dst_port);
 131	}
 132}
 133
 134static void tb_switch_discover_tunnels(struct tb_switch *sw,
 135				       struct list_head *list,
 136				       bool alloc_hopids)
 137{
 138	struct tb *tb = sw->tb;
 139	struct tb_port *port;
 140
 141	tb_switch_for_each_port(sw, port) {
 142		struct tb_tunnel *tunnel = NULL;
 143
 144		switch (port->config.type) {
 145		case TB_TYPE_DP_HDMI_IN:
 146			tunnel = tb_tunnel_discover_dp(tb, port, alloc_hopids);
 147			/*
 148			 * In case of DP tunnel exists, change host router's
 149			 * 1st children TMU mode to HiFi for CL0s to work.
 150			 */
 151			if (tunnel)
 152				tb_switch_enable_tmu_1st_child(tb->root_switch,
 153						TB_SWITCH_TMU_RATE_HIFI);
 154			break;
 155
 156		case TB_TYPE_PCIE_DOWN:
 157			tunnel = tb_tunnel_discover_pci(tb, port, alloc_hopids);
 158			break;
 159
 160		case TB_TYPE_USB3_DOWN:
 161			tunnel = tb_tunnel_discover_usb3(tb, port, alloc_hopids);
 162			break;
 163
 164		default:
 165			break;
 166		}
 167
 168		if (tunnel)
 169			list_add_tail(&tunnel->list, list);
 170	}
 171
 172	tb_switch_for_each_port(sw, port) {
 173		if (tb_port_has_remote(port)) {
 174			tb_switch_discover_tunnels(port->remote->sw, list,
 175						   alloc_hopids);
 176		}
 177	}
 178}
 179
 180static void tb_discover_tunnels(struct tb *tb)
 181{
 182	struct tb_cm *tcm = tb_priv(tb);
 183	struct tb_tunnel *tunnel;
 184
 185	tb_switch_discover_tunnels(tb->root_switch, &tcm->tunnel_list, true);
 186
 187	list_for_each_entry(tunnel, &tcm->tunnel_list, list) {
 188		if (tb_tunnel_is_pci(tunnel)) {
 189			struct tb_switch *parent = tunnel->dst_port->sw;
 190
 191			while (parent != tunnel->src_port->sw) {
 192				parent->boot = true;
 193				parent = tb_switch_parent(parent);
 194			}
 195		} else if (tb_tunnel_is_dp(tunnel)) {
 196			/* Keep the domain from powering down */
 197			pm_runtime_get_sync(&tunnel->src_port->sw->dev);
 198			pm_runtime_get_sync(&tunnel->dst_port->sw->dev);
 199		}
 200	}
 201}
 202
 203static int tb_port_configure_xdomain(struct tb_port *port, struct tb_xdomain *xd)
 204{
 205	if (tb_switch_is_usb4(port->sw))
 206		return usb4_port_configure_xdomain(port, xd);
 207	return tb_lc_configure_xdomain(port);
 208}
 209
 210static void tb_port_unconfigure_xdomain(struct tb_port *port)
 211{
 212	if (tb_switch_is_usb4(port->sw))
 213		usb4_port_unconfigure_xdomain(port);
 214	else
 215		tb_lc_unconfigure_xdomain(port);
 216
 217	tb_port_enable(port->dual_link_port);
 218}
 219
 220static void tb_scan_xdomain(struct tb_port *port)
 221{
 222	struct tb_switch *sw = port->sw;
 223	struct tb *tb = sw->tb;
 224	struct tb_xdomain *xd;
 225	u64 route;
 226
 227	if (!tb_is_xdomain_enabled())
 228		return;
 229
 230	route = tb_downstream_route(port);
 231	xd = tb_xdomain_find_by_route(tb, route);
 232	if (xd) {
 233		tb_xdomain_put(xd);
 234		return;
 235	}
 236
 237	xd = tb_xdomain_alloc(tb, &sw->dev, route, tb->root_switch->uuid,
 238			      NULL);
 239	if (xd) {
 240		tb_port_at(route, sw)->xdomain = xd;
 241		tb_port_configure_xdomain(port, xd);
 242		tb_xdomain_add(xd);
 243	}
 244}
 245
 246static int tb_enable_tmu(struct tb_switch *sw)
 247{
 248	int ret;
 249
 250	/* If it is already enabled in correct mode, don't touch it */
 251	if (tb_switch_tmu_is_enabled(sw, sw->tmu.unidirectional_request))
 252		return 0;
 253
 254	ret = tb_switch_tmu_disable(sw);
 255	if (ret)
 256		return ret;
 257
 258	ret = tb_switch_tmu_post_time(sw);
 259	if (ret)
 260		return ret;
 261
 262	return tb_switch_tmu_enable(sw);
 263}
 264
 265/**
 266 * tb_find_unused_port() - return the first inactive port on @sw
 267 * @sw: Switch to find the port on
 268 * @type: Port type to look for
 269 */
 270static struct tb_port *tb_find_unused_port(struct tb_switch *sw,
 271					   enum tb_port_type type)
 272{
 273	struct tb_port *port;
 274
 275	tb_switch_for_each_port(sw, port) {
 276		if (tb_is_upstream_port(port))
 277			continue;
 278		if (port->config.type != type)
 279			continue;
 280		if (!port->cap_adap)
 281			continue;
 282		if (tb_port_is_enabled(port))
 283			continue;
 284		return port;
 285	}
 286	return NULL;
 287}
 288
 289static struct tb_port *tb_find_usb3_down(struct tb_switch *sw,
 290					 const struct tb_port *port)
 291{
 292	struct tb_port *down;
 293
 294	down = usb4_switch_map_usb3_down(sw, port);
 295	if (down && !tb_usb3_port_is_enabled(down))
 296		return down;
 297	return NULL;
 298}
 299
 300static struct tb_tunnel *tb_find_tunnel(struct tb *tb, enum tb_tunnel_type type,
 301					struct tb_port *src_port,
 302					struct tb_port *dst_port)
 303{
 304	struct tb_cm *tcm = tb_priv(tb);
 305	struct tb_tunnel *tunnel;
 306
 307	list_for_each_entry(tunnel, &tcm->tunnel_list, list) {
 308		if (tunnel->type == type &&
 309		    ((src_port && src_port == tunnel->src_port) ||
 310		     (dst_port && dst_port == tunnel->dst_port))) {
 311			return tunnel;
 312		}
 313	}
 314
 315	return NULL;
 316}
 317
 318static struct tb_tunnel *tb_find_first_usb3_tunnel(struct tb *tb,
 319						   struct tb_port *src_port,
 320						   struct tb_port *dst_port)
 321{
 322	struct tb_port *port, *usb3_down;
 323	struct tb_switch *sw;
 324
 325	/* Pick the router that is deepest in the topology */
 326	if (dst_port->sw->config.depth > src_port->sw->config.depth)
 327		sw = dst_port->sw;
 328	else
 329		sw = src_port->sw;
 330
 331	/* Can't be the host router */
 332	if (sw == tb->root_switch)
 333		return NULL;
 334
 335	/* Find the downstream USB4 port that leads to this router */
 336	port = tb_port_at(tb_route(sw), tb->root_switch);
 337	/* Find the corresponding host router USB3 downstream port */
 338	usb3_down = usb4_switch_map_usb3_down(tb->root_switch, port);
 339	if (!usb3_down)
 340		return NULL;
 341
 342	return tb_find_tunnel(tb, TB_TUNNEL_USB3, usb3_down, NULL);
 343}
 344
 345static int tb_available_bandwidth(struct tb *tb, struct tb_port *src_port,
 346	struct tb_port *dst_port, int *available_up, int *available_down)
 347{
 348	int usb3_consumed_up, usb3_consumed_down, ret;
 349	struct tb_cm *tcm = tb_priv(tb);
 350	struct tb_tunnel *tunnel;
 351	struct tb_port *port;
 352
 353	tb_port_dbg(dst_port, "calculating available bandwidth\n");
 354
 355	tunnel = tb_find_first_usb3_tunnel(tb, src_port, dst_port);
 356	if (tunnel) {
 357		ret = tb_tunnel_consumed_bandwidth(tunnel, &usb3_consumed_up,
 358						   &usb3_consumed_down);
 359		if (ret)
 360			return ret;
 361	} else {
 362		usb3_consumed_up = 0;
 363		usb3_consumed_down = 0;
 364	}
 365
 366	*available_up = *available_down = 40000;
 367
 368	/* Find the minimum available bandwidth over all links */
 369	tb_for_each_port_on_path(src_port, dst_port, port) {
 370		int link_speed, link_width, up_bw, down_bw;
 371
 372		if (!tb_port_is_null(port))
 373			continue;
 374
 375		if (tb_is_upstream_port(port)) {
 376			link_speed = port->sw->link_speed;
 377		} else {
 378			link_speed = tb_port_get_link_speed(port);
 379			if (link_speed < 0)
 380				return link_speed;
 381		}
 382
 383		link_width = port->bonded ? 2 : 1;
 384
 385		up_bw = link_speed * link_width * 1000; /* Mb/s */
 386		/* Leave 10% guard band */
 387		up_bw -= up_bw / 10;
 388		down_bw = up_bw;
 389
 390		tb_port_dbg(port, "link total bandwidth %d Mb/s\n", up_bw);
 391
 392		/*
 393		 * Find all DP tunnels that cross the port and reduce
 394		 * their consumed bandwidth from the available.
 395		 */
 396		list_for_each_entry(tunnel, &tcm->tunnel_list, list) {
 397			int dp_consumed_up, dp_consumed_down;
 398
 399			if (!tb_tunnel_is_dp(tunnel))
 400				continue;
 401
 402			if (!tb_tunnel_port_on_path(tunnel, port))
 403				continue;
 404
 405			ret = tb_tunnel_consumed_bandwidth(tunnel,
 406							   &dp_consumed_up,
 407							   &dp_consumed_down);
 408			if (ret)
 409				return ret;
 410
 411			up_bw -= dp_consumed_up;
 412			down_bw -= dp_consumed_down;
 413		}
 414
 415		/*
 416		 * If USB3 is tunneled from the host router down to the
 417		 * branch leading to port we need to take USB3 consumed
 418		 * bandwidth into account regardless whether it actually
 419		 * crosses the port.
 420		 */
 421		up_bw -= usb3_consumed_up;
 422		down_bw -= usb3_consumed_down;
 423
 424		if (up_bw < *available_up)
 425			*available_up = up_bw;
 426		if (down_bw < *available_down)
 427			*available_down = down_bw;
 428	}
 429
 430	if (*available_up < 0)
 431		*available_up = 0;
 432	if (*available_down < 0)
 433		*available_down = 0;
 434
 435	return 0;
 436}
 437
 438static int tb_release_unused_usb3_bandwidth(struct tb *tb,
 439					    struct tb_port *src_port,
 440					    struct tb_port *dst_port)
 441{
 442	struct tb_tunnel *tunnel;
 443
 444	tunnel = tb_find_first_usb3_tunnel(tb, src_port, dst_port);
 445	return tunnel ? tb_tunnel_release_unused_bandwidth(tunnel) : 0;
 446}
 447
 448static void tb_reclaim_usb3_bandwidth(struct tb *tb, struct tb_port *src_port,
 449				      struct tb_port *dst_port)
 450{
 451	int ret, available_up, available_down;
 452	struct tb_tunnel *tunnel;
 453
 454	tunnel = tb_find_first_usb3_tunnel(tb, src_port, dst_port);
 455	if (!tunnel)
 456		return;
 457
 458	tb_dbg(tb, "reclaiming unused bandwidth for USB3\n");
 459
 460	/*
 461	 * Calculate available bandwidth for the first hop USB3 tunnel.
 462	 * That determines the whole USB3 bandwidth for this branch.
 463	 */
 464	ret = tb_available_bandwidth(tb, tunnel->src_port, tunnel->dst_port,
 465				     &available_up, &available_down);
 466	if (ret) {
 467		tb_warn(tb, "failed to calculate available bandwidth\n");
 468		return;
 469	}
 470
 471	tb_dbg(tb, "available bandwidth for USB3 %d/%d Mb/s\n",
 472	       available_up, available_down);
 473
 474	tb_tunnel_reclaim_available_bandwidth(tunnel, &available_up, &available_down);
 475}
 476
 477static int tb_tunnel_usb3(struct tb *tb, struct tb_switch *sw)
 478{
 479	struct tb_switch *parent = tb_switch_parent(sw);
 480	int ret, available_up, available_down;
 481	struct tb_port *up, *down, *port;
 482	struct tb_cm *tcm = tb_priv(tb);
 483	struct tb_tunnel *tunnel;
 484
 485	if (!tb_acpi_may_tunnel_usb3()) {
 486		tb_dbg(tb, "USB3 tunneling disabled, not creating tunnel\n");
 487		return 0;
 488	}
 489
 490	up = tb_switch_find_port(sw, TB_TYPE_USB3_UP);
 491	if (!up)
 492		return 0;
 493
 494	if (!sw->link_usb4)
 495		return 0;
 496
 497	/*
 498	 * Look up available down port. Since we are chaining it should
 499	 * be found right above this switch.
 500	 */
 501	port = tb_port_at(tb_route(sw), parent);
 502	down = tb_find_usb3_down(parent, port);
 503	if (!down)
 504		return 0;
 505
 506	if (tb_route(parent)) {
 507		struct tb_port *parent_up;
 508		/*
 509		 * Check first that the parent switch has its upstream USB3
 510		 * port enabled. Otherwise the chain is not complete and
 511		 * there is no point setting up a new tunnel.
 512		 */
 513		parent_up = tb_switch_find_port(parent, TB_TYPE_USB3_UP);
 514		if (!parent_up || !tb_port_is_enabled(parent_up))
 515			return 0;
 516
 517		/* Make all unused bandwidth available for the new tunnel */
 518		ret = tb_release_unused_usb3_bandwidth(tb, down, up);
 519		if (ret)
 520			return ret;
 521	}
 522
 523	ret = tb_available_bandwidth(tb, down, up, &available_up,
 524				     &available_down);
 525	if (ret)
 526		goto err_reclaim;
 527
 528	tb_port_dbg(up, "available bandwidth for new USB3 tunnel %d/%d Mb/s\n",
 529		    available_up, available_down);
 530
 531	tunnel = tb_tunnel_alloc_usb3(tb, up, down, available_up,
 532				      available_down);
 533	if (!tunnel) {
 534		ret = -ENOMEM;
 535		goto err_reclaim;
 536	}
 537
 538	if (tb_tunnel_activate(tunnel)) {
 539		tb_port_info(up,
 540			     "USB3 tunnel activation failed, aborting\n");
 541		ret = -EIO;
 542		goto err_free;
 543	}
 544
 545	list_add_tail(&tunnel->list, &tcm->tunnel_list);
 546	if (tb_route(parent))
 547		tb_reclaim_usb3_bandwidth(tb, down, up);
 548
 549	return 0;
 550
 551err_free:
 552	tb_tunnel_free(tunnel);
 553err_reclaim:
 554	if (tb_route(parent))
 555		tb_reclaim_usb3_bandwidth(tb, down, up);
 556
 557	return ret;
 558}
 559
 560static int tb_create_usb3_tunnels(struct tb_switch *sw)
 561{
 562	struct tb_port *port;
 563	int ret;
 564
 565	if (!tb_acpi_may_tunnel_usb3())
 566		return 0;
 567
 568	if (tb_route(sw)) {
 569		ret = tb_tunnel_usb3(sw->tb, sw);
 570		if (ret)
 571			return ret;
 572	}
 573
 574	tb_switch_for_each_port(sw, port) {
 575		if (!tb_port_has_remote(port))
 576			continue;
 577		ret = tb_create_usb3_tunnels(port->remote->sw);
 578		if (ret)
 579			return ret;
 580	}
 581
 582	return 0;
 583}
 584
 585static void tb_scan_port(struct tb_port *port);
 586
 587/*
 588 * tb_scan_switch() - scan for and initialize downstream switches
 589 */
 590static void tb_scan_switch(struct tb_switch *sw)
 591{
 592	struct tb_port *port;
 593
 594	pm_runtime_get_sync(&sw->dev);
 595
 596	tb_switch_for_each_port(sw, port)
 597		tb_scan_port(port);
 598
 599	pm_runtime_mark_last_busy(&sw->dev);
 600	pm_runtime_put_autosuspend(&sw->dev);
 601}
 602
 603/*
 604 * tb_scan_port() - check for and initialize switches below port
 605 */
 606static void tb_scan_port(struct tb_port *port)
 607{
 608	struct tb_cm *tcm = tb_priv(port->sw->tb);
 609	struct tb_port *upstream_port;
 610	struct tb_switch *sw;
 611	int ret;
 612
 613	if (tb_is_upstream_port(port))
 614		return;
 615
 616	if (tb_port_is_dpout(port) && tb_dp_port_hpd_is_active(port) == 1 &&
 617	    !tb_dp_port_is_enabled(port)) {
 618		tb_port_dbg(port, "DP adapter HPD set, queuing hotplug\n");
 619		tb_queue_hotplug(port->sw->tb, tb_route(port->sw), port->port,
 620				 false);
 621		return;
 622	}
 623
 624	if (port->config.type != TB_TYPE_PORT)
 625		return;
 626	if (port->dual_link_port && port->link_nr)
 627		return; /*
 628			 * Downstream switch is reachable through two ports.
 629			 * Only scan on the primary port (link_nr == 0).
 630			 */
 631
 632	if (port->usb4)
 633		pm_runtime_get_sync(&port->usb4->dev);
 634
 635	if (tb_wait_for_port(port, false) <= 0)
 636		goto out_rpm_put;
 637	if (port->remote) {
 638		tb_port_dbg(port, "port already has a remote\n");
 639		goto out_rpm_put;
 640	}
 641
 642	tb_retimer_scan(port, true);
 643
 644	sw = tb_switch_alloc(port->sw->tb, &port->sw->dev,
 645			     tb_downstream_route(port));
 646	if (IS_ERR(sw)) {
 647		/*
 648		 * If there is an error accessing the connected switch
 649		 * it may be connected to another domain. Also we allow
 650		 * the other domain to be connected to a max depth switch.
 651		 */
 652		if (PTR_ERR(sw) == -EIO || PTR_ERR(sw) == -EADDRNOTAVAIL)
 653			tb_scan_xdomain(port);
 654		goto out_rpm_put;
 655	}
 656
 657	if (tb_switch_configure(sw)) {
 658		tb_switch_put(sw);
 659		goto out_rpm_put;
 660	}
 661
 662	/*
 663	 * If there was previously another domain connected remove it
 664	 * first.
 665	 */
 666	if (port->xdomain) {
 667		tb_xdomain_remove(port->xdomain);
 668		tb_port_unconfigure_xdomain(port);
 669		port->xdomain = NULL;
 670	}
 671
 672	/*
 673	 * Do not send uevents until we have discovered all existing
 674	 * tunnels and know which switches were authorized already by
 675	 * the boot firmware.
 676	 */
 677	if (!tcm->hotplug_active)
 678		dev_set_uevent_suppress(&sw->dev, true);
 679
 680	/*
 681	 * At the moment Thunderbolt 2 and beyond (devices with LC) we
 682	 * can support runtime PM.
 683	 */
 684	sw->rpm = sw->generation > 1;
 685
 686	if (tb_switch_add(sw)) {
 687		tb_switch_put(sw);
 688		goto out_rpm_put;
 689	}
 690
 691	/* Link the switches using both links if available */
 692	upstream_port = tb_upstream_port(sw);
 693	port->remote = upstream_port;
 694	upstream_port->remote = port;
 695	if (port->dual_link_port && upstream_port->dual_link_port) {
 696		port->dual_link_port->remote = upstream_port->dual_link_port;
 697		upstream_port->dual_link_port->remote = port->dual_link_port;
 698	}
 699
 700	/* Enable lane bonding if supported */
 701	tb_switch_lane_bonding_enable(sw);
 702	/* Set the link configured */
 703	tb_switch_configure_link(sw);
 704	/*
 705	 * CL0s and CL1 are enabled and supported together.
 706	 * Silently ignore CLx enabling in case CLx is not supported.
 707	 */
 708	ret = tb_switch_enable_clx(sw, TB_CL1);
 709	if (ret && ret != -EOPNOTSUPP)
 710		tb_sw_warn(sw, "failed to enable %s on upstream port\n",
 711			   tb_switch_clx_name(TB_CL1));
 712
 713	if (tb_switch_is_clx_enabled(sw, TB_CL1))
 714		/*
 715		 * To support highest CLx state, we set router's TMU to
 716		 * Normal-Uni mode.
 717		 */
 718		tb_switch_tmu_configure(sw, TB_SWITCH_TMU_RATE_NORMAL, true);
 719	else
 720		/* If CLx disabled, configure router's TMU to HiFi-Bidir mode*/
 721		tb_switch_tmu_configure(sw, TB_SWITCH_TMU_RATE_HIFI, false);
 722
 723	if (tb_enable_tmu(sw))
 724		tb_sw_warn(sw, "failed to enable TMU\n");
 725
 726	/* Scan upstream retimers */
 727	tb_retimer_scan(upstream_port, true);
 728
 729	/*
 730	 * Create USB 3.x tunnels only when the switch is plugged to the
 731	 * domain. This is because we scan the domain also during discovery
 732	 * and want to discover existing USB 3.x tunnels before we create
 733	 * any new.
 734	 */
 735	if (tcm->hotplug_active && tb_tunnel_usb3(sw->tb, sw))
 736		tb_sw_warn(sw, "USB3 tunnel creation failed\n");
 737
 738	tb_add_dp_resources(sw);
 739	tb_scan_switch(sw);
 740
 741out_rpm_put:
 742	if (port->usb4) {
 743		pm_runtime_mark_last_busy(&port->usb4->dev);
 744		pm_runtime_put_autosuspend(&port->usb4->dev);
 745	}
 746}
 747
 748static void tb_deactivate_and_free_tunnel(struct tb_tunnel *tunnel)
 749{
 750	struct tb_port *src_port, *dst_port;
 751	struct tb *tb;
 752
 753	if (!tunnel)
 754		return;
 755
 756	tb_tunnel_deactivate(tunnel);
 757	list_del(&tunnel->list);
 758
 759	tb = tunnel->tb;
 760	src_port = tunnel->src_port;
 761	dst_port = tunnel->dst_port;
 762
 763	switch (tunnel->type) {
 764	case TB_TUNNEL_DP:
 765		/*
 766		 * In case of DP tunnel make sure the DP IN resource is
 767		 * deallocated properly.
 768		 */
 769		tb_switch_dealloc_dp_resource(src_port->sw, src_port);
 770		/* Now we can allow the domain to runtime suspend again */
 771		pm_runtime_mark_last_busy(&dst_port->sw->dev);
 772		pm_runtime_put_autosuspend(&dst_port->sw->dev);
 773		pm_runtime_mark_last_busy(&src_port->sw->dev);
 774		pm_runtime_put_autosuspend(&src_port->sw->dev);
 775		fallthrough;
 776
 777	case TB_TUNNEL_USB3:
 778		tb_reclaim_usb3_bandwidth(tb, src_port, dst_port);
 779		break;
 780
 781	default:
 782		/*
 783		 * PCIe and DMA tunnels do not consume guaranteed
 784		 * bandwidth.
 785		 */
 786		break;
 787	}
 788
 789	tb_tunnel_free(tunnel);
 790}
 791
 792/*
 793 * tb_free_invalid_tunnels() - destroy tunnels of devices that have gone away
 794 */
 795static void tb_free_invalid_tunnels(struct tb *tb)
 796{
 797	struct tb_cm *tcm = tb_priv(tb);
 798	struct tb_tunnel *tunnel;
 799	struct tb_tunnel *n;
 800
 801	list_for_each_entry_safe(tunnel, n, &tcm->tunnel_list, list) {
 802		if (tb_tunnel_is_invalid(tunnel))
 803			tb_deactivate_and_free_tunnel(tunnel);
 804	}
 805}
 806
 807/*
 808 * tb_free_unplugged_children() - traverse hierarchy and free unplugged switches
 809 */
 810static void tb_free_unplugged_children(struct tb_switch *sw)
 811{
 812	struct tb_port *port;
 813
 814	tb_switch_for_each_port(sw, port) {
 815		if (!tb_port_has_remote(port))
 816			continue;
 817
 818		if (port->remote->sw->is_unplugged) {
 819			tb_retimer_remove_all(port);
 820			tb_remove_dp_resources(port->remote->sw);
 821			tb_switch_unconfigure_link(port->remote->sw);
 822			tb_switch_lane_bonding_disable(port->remote->sw);
 823			tb_switch_remove(port->remote->sw);
 824			port->remote = NULL;
 825			if (port->dual_link_port)
 826				port->dual_link_port->remote = NULL;
 827		} else {
 828			tb_free_unplugged_children(port->remote->sw);
 829		}
 830	}
 831}
 832
 833static struct tb_port *tb_find_pcie_down(struct tb_switch *sw,
 834					 const struct tb_port *port)
 835{
 836	struct tb_port *down = NULL;
 837
 838	/*
 839	 * To keep plugging devices consistently in the same PCIe
 840	 * hierarchy, do mapping here for switch downstream PCIe ports.
 841	 */
 842	if (tb_switch_is_usb4(sw)) {
 843		down = usb4_switch_map_pcie_down(sw, port);
 844	} else if (!tb_route(sw)) {
 845		int phy_port = tb_phy_port_from_link(port->port);
 846		int index;
 847
 848		/*
 849		 * Hard-coded Thunderbolt port to PCIe down port mapping
 850		 * per controller.
 851		 */
 852		if (tb_switch_is_cactus_ridge(sw) ||
 853		    tb_switch_is_alpine_ridge(sw))
 854			index = !phy_port ? 6 : 7;
 855		else if (tb_switch_is_falcon_ridge(sw))
 856			index = !phy_port ? 6 : 8;
 857		else if (tb_switch_is_titan_ridge(sw))
 858			index = !phy_port ? 8 : 9;
 859		else
 860			goto out;
 861
 862		/* Validate the hard-coding */
 863		if (WARN_ON(index > sw->config.max_port_number))
 864			goto out;
 865
 866		down = &sw->ports[index];
 867	}
 868
 869	if (down) {
 870		if (WARN_ON(!tb_port_is_pcie_down(down)))
 871			goto out;
 872		if (tb_pci_port_is_enabled(down))
 873			goto out;
 874
 875		return down;
 876	}
 877
 878out:
 879	return tb_find_unused_port(sw, TB_TYPE_PCIE_DOWN);
 880}
 881
 882static struct tb_port *tb_find_dp_out(struct tb *tb, struct tb_port *in)
 883{
 884	struct tb_port *host_port, *port;
 885	struct tb_cm *tcm = tb_priv(tb);
 886
 887	host_port = tb_route(in->sw) ?
 888		tb_port_at(tb_route(in->sw), tb->root_switch) : NULL;
 889
 890	list_for_each_entry(port, &tcm->dp_resources, list) {
 891		if (!tb_port_is_dpout(port))
 892			continue;
 893
 894		if (tb_port_is_enabled(port)) {
 895			tb_port_dbg(port, "in use\n");
 896			continue;
 897		}
 898
 899		tb_port_dbg(port, "DP OUT available\n");
 900
 901		/*
 902		 * Keep the DP tunnel under the topology starting from
 903		 * the same host router downstream port.
 904		 */
 905		if (host_port && tb_route(port->sw)) {
 906			struct tb_port *p;
 907
 908			p = tb_port_at(tb_route(port->sw), tb->root_switch);
 909			if (p != host_port)
 910				continue;
 911		}
 912
 913		return port;
 914	}
 915
 916	return NULL;
 917}
 918
 919static void tb_tunnel_dp(struct tb *tb)
 920{
 921	int available_up, available_down, ret, link_nr;
 922	struct tb_cm *tcm = tb_priv(tb);
 923	struct tb_port *port, *in, *out;
 924	struct tb_tunnel *tunnel;
 925
 926	if (!tb_acpi_may_tunnel_dp()) {
 927		tb_dbg(tb, "DP tunneling disabled, not creating tunnel\n");
 928		return;
 929	}
 930
 931	/*
 932	 * Find pair of inactive DP IN and DP OUT adapters and then
 933	 * establish a DP tunnel between them.
 934	 */
 935	tb_dbg(tb, "looking for DP IN <-> DP OUT pairs:\n");
 936
 937	in = NULL;
 938	out = NULL;
 939	list_for_each_entry(port, &tcm->dp_resources, list) {
 940		if (!tb_port_is_dpin(port))
 941			continue;
 942
 943		if (tb_port_is_enabled(port)) {
 944			tb_port_dbg(port, "in use\n");
 945			continue;
 946		}
 947
 948		tb_port_dbg(port, "DP IN available\n");
 949
 950		out = tb_find_dp_out(tb, port);
 951		if (out) {
 952			in = port;
 953			break;
 954		}
 955	}
 956
 957	if (!in) {
 958		tb_dbg(tb, "no suitable DP IN adapter available, not tunneling\n");
 959		return;
 960	}
 961	if (!out) {
 962		tb_dbg(tb, "no suitable DP OUT adapter available, not tunneling\n");
 963		return;
 964	}
 965
 966	/*
 967	 * This is only applicable to links that are not bonded (so
 968	 * when Thunderbolt 1 hardware is involved somewhere in the
 969	 * topology). For these try to share the DP bandwidth between
 970	 * the two lanes.
 971	 */
 972	link_nr = 1;
 973	list_for_each_entry(tunnel, &tcm->tunnel_list, list) {
 974		if (tb_tunnel_is_dp(tunnel)) {
 975			link_nr = 0;
 976			break;
 977		}
 978	}
 979
 980	/*
 981	 * DP stream needs the domain to be active so runtime resume
 982	 * both ends of the tunnel.
 983	 *
 984	 * This should bring the routers in the middle active as well
 985	 * and keeps the domain from runtime suspending while the DP
 986	 * tunnel is active.
 987	 */
 988	pm_runtime_get_sync(&in->sw->dev);
 989	pm_runtime_get_sync(&out->sw->dev);
 990
 991	if (tb_switch_alloc_dp_resource(in->sw, in)) {
 992		tb_port_dbg(in, "no resource available for DP IN, not tunneling\n");
 993		goto err_rpm_put;
 994	}
 995
 996	/* Make all unused USB3 bandwidth available for the new DP tunnel */
 997	ret = tb_release_unused_usb3_bandwidth(tb, in, out);
 998	if (ret) {
 999		tb_warn(tb, "failed to release unused bandwidth\n");
1000		goto err_dealloc_dp;
1001	}
1002
1003	ret = tb_available_bandwidth(tb, in, out, &available_up,
1004				     &available_down);
1005	if (ret)
1006		goto err_reclaim;
1007
1008	tb_dbg(tb, "available bandwidth for new DP tunnel %u/%u Mb/s\n",
1009	       available_up, available_down);
1010
1011	tunnel = tb_tunnel_alloc_dp(tb, in, out, link_nr, available_up,
1012				    available_down);
1013	if (!tunnel) {
1014		tb_port_dbg(out, "could not allocate DP tunnel\n");
1015		goto err_reclaim;
1016	}
1017
1018	if (tb_tunnel_activate(tunnel)) {
1019		tb_port_info(out, "DP tunnel activation failed, aborting\n");
1020		goto err_free;
1021	}
1022
1023	list_add_tail(&tunnel->list, &tcm->tunnel_list);
1024	tb_reclaim_usb3_bandwidth(tb, in, out);
1025	/*
1026	 * In case of DP tunnel exists, change host router's 1st children
1027	 * TMU mode to HiFi for CL0s to work.
1028	 */
1029	tb_switch_enable_tmu_1st_child(tb->root_switch, TB_SWITCH_TMU_RATE_HIFI);
1030
1031	return;
1032
1033err_free:
1034	tb_tunnel_free(tunnel);
1035err_reclaim:
1036	tb_reclaim_usb3_bandwidth(tb, in, out);
1037err_dealloc_dp:
1038	tb_switch_dealloc_dp_resource(in->sw, in);
1039err_rpm_put:
1040	pm_runtime_mark_last_busy(&out->sw->dev);
1041	pm_runtime_put_autosuspend(&out->sw->dev);
1042	pm_runtime_mark_last_busy(&in->sw->dev);
1043	pm_runtime_put_autosuspend(&in->sw->dev);
1044}
1045
1046static void tb_dp_resource_unavailable(struct tb *tb, struct tb_port *port)
1047{
1048	struct tb_port *in, *out;
1049	struct tb_tunnel *tunnel;
1050
1051	if (tb_port_is_dpin(port)) {
1052		tb_port_dbg(port, "DP IN resource unavailable\n");
1053		in = port;
1054		out = NULL;
1055	} else {
1056		tb_port_dbg(port, "DP OUT resource unavailable\n");
1057		in = NULL;
1058		out = port;
1059	}
1060
1061	tunnel = tb_find_tunnel(tb, TB_TUNNEL_DP, in, out);
1062	tb_deactivate_and_free_tunnel(tunnel);
1063	list_del_init(&port->list);
1064
1065	/*
1066	 * See if there is another DP OUT port that can be used for
1067	 * to create another tunnel.
1068	 */
1069	tb_tunnel_dp(tb);
1070}
1071
1072static void tb_dp_resource_available(struct tb *tb, struct tb_port *port)
1073{
1074	struct tb_cm *tcm = tb_priv(tb);
1075	struct tb_port *p;
1076
1077	if (tb_port_is_enabled(port))
1078		return;
1079
1080	list_for_each_entry(p, &tcm->dp_resources, list) {
1081		if (p == port)
1082			return;
1083	}
1084
1085	tb_port_dbg(port, "DP %s resource available\n",
1086		    tb_port_is_dpin(port) ? "IN" : "OUT");
1087	list_add_tail(&port->list, &tcm->dp_resources);
1088
1089	/* Look for suitable DP IN <-> DP OUT pairs now */
1090	tb_tunnel_dp(tb);
1091}
1092
1093static void tb_disconnect_and_release_dp(struct tb *tb)
1094{
1095	struct tb_cm *tcm = tb_priv(tb);
1096	struct tb_tunnel *tunnel, *n;
1097
1098	/*
1099	 * Tear down all DP tunnels and release their resources. They
1100	 * will be re-established after resume based on plug events.
1101	 */
1102	list_for_each_entry_safe_reverse(tunnel, n, &tcm->tunnel_list, list) {
1103		if (tb_tunnel_is_dp(tunnel))
1104			tb_deactivate_and_free_tunnel(tunnel);
1105	}
1106
1107	while (!list_empty(&tcm->dp_resources)) {
1108		struct tb_port *port;
1109
1110		port = list_first_entry(&tcm->dp_resources,
1111					struct tb_port, list);
1112		list_del_init(&port->list);
1113	}
1114}
1115
1116static int tb_disconnect_pci(struct tb *tb, struct tb_switch *sw)
1117{
1118	struct tb_tunnel *tunnel;
1119	struct tb_port *up;
1120
1121	up = tb_switch_find_port(sw, TB_TYPE_PCIE_UP);
1122	if (WARN_ON(!up))
1123		return -ENODEV;
1124
1125	tunnel = tb_find_tunnel(tb, TB_TUNNEL_PCI, NULL, up);
1126	if (WARN_ON(!tunnel))
1127		return -ENODEV;
1128
1129	tb_switch_xhci_disconnect(sw);
1130
1131	tb_tunnel_deactivate(tunnel);
1132	list_del(&tunnel->list);
1133	tb_tunnel_free(tunnel);
1134	return 0;
1135}
1136
1137static int tb_tunnel_pci(struct tb *tb, struct tb_switch *sw)
1138{
1139	struct tb_port *up, *down, *port;
1140	struct tb_cm *tcm = tb_priv(tb);
1141	struct tb_switch *parent_sw;
1142	struct tb_tunnel *tunnel;
1143
1144	up = tb_switch_find_port(sw, TB_TYPE_PCIE_UP);
1145	if (!up)
1146		return 0;
1147
1148	/*
1149	 * Look up available down port. Since we are chaining it should
1150	 * be found right above this switch.
1151	 */
1152	parent_sw = tb_to_switch(sw->dev.parent);
1153	port = tb_port_at(tb_route(sw), parent_sw);
1154	down = tb_find_pcie_down(parent_sw, port);
1155	if (!down)
1156		return 0;
1157
1158	tunnel = tb_tunnel_alloc_pci(tb, up, down);
1159	if (!tunnel)
1160		return -ENOMEM;
1161
1162	if (tb_tunnel_activate(tunnel)) {
1163		tb_port_info(up,
1164			     "PCIe tunnel activation failed, aborting\n");
1165		tb_tunnel_free(tunnel);
1166		return -EIO;
1167	}
1168
1169	/*
1170	 * PCIe L1 is needed to enable CL0s for Titan Ridge so enable it
1171	 * here.
1172	 */
1173	if (tb_switch_pcie_l1_enable(sw))
1174		tb_sw_warn(sw, "failed to enable PCIe L1 for Titan Ridge\n");
1175
1176	if (tb_switch_xhci_connect(sw))
1177		tb_sw_warn(sw, "failed to connect xHCI\n");
1178
1179	list_add_tail(&tunnel->list, &tcm->tunnel_list);
1180	return 0;
1181}
1182
1183static int tb_approve_xdomain_paths(struct tb *tb, struct tb_xdomain *xd,
1184				    int transmit_path, int transmit_ring,
1185				    int receive_path, int receive_ring)
1186{
1187	struct tb_cm *tcm = tb_priv(tb);
1188	struct tb_port *nhi_port, *dst_port;
1189	struct tb_tunnel *tunnel;
1190	struct tb_switch *sw;
1191
1192	sw = tb_to_switch(xd->dev.parent);
1193	dst_port = tb_port_at(xd->route, sw);
1194	nhi_port = tb_switch_find_port(tb->root_switch, TB_TYPE_NHI);
1195
1196	mutex_lock(&tb->lock);
1197	tunnel = tb_tunnel_alloc_dma(tb, nhi_port, dst_port, transmit_path,
1198				     transmit_ring, receive_path, receive_ring);
1199	if (!tunnel) {
1200		mutex_unlock(&tb->lock);
1201		return -ENOMEM;
1202	}
1203
1204	if (tb_tunnel_activate(tunnel)) {
1205		tb_port_info(nhi_port,
1206			     "DMA tunnel activation failed, aborting\n");
1207		tb_tunnel_free(tunnel);
1208		mutex_unlock(&tb->lock);
1209		return -EIO;
1210	}
1211
1212	list_add_tail(&tunnel->list, &tcm->tunnel_list);
1213	mutex_unlock(&tb->lock);
1214	return 0;
1215}
1216
1217static void __tb_disconnect_xdomain_paths(struct tb *tb, struct tb_xdomain *xd,
1218					  int transmit_path, int transmit_ring,
1219					  int receive_path, int receive_ring)
1220{
1221	struct tb_cm *tcm = tb_priv(tb);
1222	struct tb_port *nhi_port, *dst_port;
1223	struct tb_tunnel *tunnel, *n;
1224	struct tb_switch *sw;
1225
1226	sw = tb_to_switch(xd->dev.parent);
1227	dst_port = tb_port_at(xd->route, sw);
1228	nhi_port = tb_switch_find_port(tb->root_switch, TB_TYPE_NHI);
1229
1230	list_for_each_entry_safe(tunnel, n, &tcm->tunnel_list, list) {
1231		if (!tb_tunnel_is_dma(tunnel))
1232			continue;
1233		if (tunnel->src_port != nhi_port || tunnel->dst_port != dst_port)
1234			continue;
1235
1236		if (tb_tunnel_match_dma(tunnel, transmit_path, transmit_ring,
1237					receive_path, receive_ring))
1238			tb_deactivate_and_free_tunnel(tunnel);
1239	}
1240}
1241
1242static int tb_disconnect_xdomain_paths(struct tb *tb, struct tb_xdomain *xd,
1243				       int transmit_path, int transmit_ring,
1244				       int receive_path, int receive_ring)
1245{
1246	if (!xd->is_unplugged) {
1247		mutex_lock(&tb->lock);
1248		__tb_disconnect_xdomain_paths(tb, xd, transmit_path,
1249					      transmit_ring, receive_path,
1250					      receive_ring);
1251		mutex_unlock(&tb->lock);
1252	}
1253	return 0;
1254}
1255
1256/* hotplug handling */
1257
1258/*
1259 * tb_handle_hotplug() - handle hotplug event
1260 *
1261 * Executes on tb->wq.
1262 */
1263static void tb_handle_hotplug(struct work_struct *work)
1264{
1265	struct tb_hotplug_event *ev = container_of(work, typeof(*ev), work);
1266	struct tb *tb = ev->tb;
1267	struct tb_cm *tcm = tb_priv(tb);
1268	struct tb_switch *sw;
1269	struct tb_port *port;
1270
1271	/* Bring the domain back from sleep if it was suspended */
1272	pm_runtime_get_sync(&tb->dev);
1273
1274	mutex_lock(&tb->lock);
1275	if (!tcm->hotplug_active)
1276		goto out; /* during init, suspend or shutdown */
1277
1278	sw = tb_switch_find_by_route(tb, ev->route);
1279	if (!sw) {
1280		tb_warn(tb,
1281			"hotplug event from non existent switch %llx:%x (unplug: %d)\n",
1282			ev->route, ev->port, ev->unplug);
1283		goto out;
1284	}
1285	if (ev->port > sw->config.max_port_number) {
1286		tb_warn(tb,
1287			"hotplug event from non existent port %llx:%x (unplug: %d)\n",
1288			ev->route, ev->port, ev->unplug);
1289		goto put_sw;
1290	}
1291	port = &sw->ports[ev->port];
1292	if (tb_is_upstream_port(port)) {
1293		tb_dbg(tb, "hotplug event for upstream port %llx:%x (unplug: %d)\n",
1294		       ev->route, ev->port, ev->unplug);
1295		goto put_sw;
1296	}
1297
1298	pm_runtime_get_sync(&sw->dev);
1299
1300	if (ev->unplug) {
1301		tb_retimer_remove_all(port);
1302
1303		if (tb_port_has_remote(port)) {
1304			tb_port_dbg(port, "switch unplugged\n");
1305			tb_sw_set_unplugged(port->remote->sw);
1306			tb_free_invalid_tunnels(tb);
1307			tb_remove_dp_resources(port->remote->sw);
1308			tb_switch_tmu_disable(port->remote->sw);
1309			tb_switch_unconfigure_link(port->remote->sw);
1310			tb_switch_lane_bonding_disable(port->remote->sw);
1311			tb_switch_remove(port->remote->sw);
1312			port->remote = NULL;
1313			if (port->dual_link_port)
1314				port->dual_link_port->remote = NULL;
1315			/* Maybe we can create another DP tunnel */
1316			tb_tunnel_dp(tb);
1317		} else if (port->xdomain) {
1318			struct tb_xdomain *xd = tb_xdomain_get(port->xdomain);
1319
1320			tb_port_dbg(port, "xdomain unplugged\n");
1321			/*
1322			 * Service drivers are unbound during
1323			 * tb_xdomain_remove() so setting XDomain as
1324			 * unplugged here prevents deadlock if they call
1325			 * tb_xdomain_disable_paths(). We will tear down
1326			 * all the tunnels below.
1327			 */
1328			xd->is_unplugged = true;
1329			tb_xdomain_remove(xd);
1330			port->xdomain = NULL;
1331			__tb_disconnect_xdomain_paths(tb, xd, -1, -1, -1, -1);
1332			tb_xdomain_put(xd);
1333			tb_port_unconfigure_xdomain(port);
1334		} else if (tb_port_is_dpout(port) || tb_port_is_dpin(port)) {
1335			tb_dp_resource_unavailable(tb, port);
1336		} else if (!port->port) {
1337			tb_sw_dbg(sw, "xHCI disconnect request\n");
1338			tb_switch_xhci_disconnect(sw);
1339		} else {
1340			tb_port_dbg(port,
1341				   "got unplug event for disconnected port, ignoring\n");
1342		}
1343	} else if (port->remote) {
1344		tb_port_dbg(port, "got plug event for connected port, ignoring\n");
1345	} else if (!port->port && sw->authorized) {
1346		tb_sw_dbg(sw, "xHCI connect request\n");
1347		tb_switch_xhci_connect(sw);
1348	} else {
1349		if (tb_port_is_null(port)) {
1350			tb_port_dbg(port, "hotplug: scanning\n");
1351			tb_scan_port(port);
1352			if (!port->remote)
1353				tb_port_dbg(port, "hotplug: no switch found\n");
1354		} else if (tb_port_is_dpout(port) || tb_port_is_dpin(port)) {
1355			tb_dp_resource_available(tb, port);
1356		}
1357	}
1358
1359	pm_runtime_mark_last_busy(&sw->dev);
1360	pm_runtime_put_autosuspend(&sw->dev);
1361
1362put_sw:
1363	tb_switch_put(sw);
1364out:
1365	mutex_unlock(&tb->lock);
1366
1367	pm_runtime_mark_last_busy(&tb->dev);
1368	pm_runtime_put_autosuspend(&tb->dev);
1369
1370	kfree(ev);
1371}
1372
1373/*
1374 * tb_schedule_hotplug_handler() - callback function for the control channel
1375 *
1376 * Delegates to tb_handle_hotplug.
1377 */
1378static void tb_handle_event(struct tb *tb, enum tb_cfg_pkg_type type,
1379			    const void *buf, size_t size)
1380{
1381	const struct cfg_event_pkg *pkg = buf;
1382	u64 route;
1383
1384	if (type != TB_CFG_PKG_EVENT) {
1385		tb_warn(tb, "unexpected event %#x, ignoring\n", type);
1386		return;
1387	}
1388
1389	route = tb_cfg_get_route(&pkg->header);
1390
1391	if (tb_cfg_ack_plug(tb->ctl, route, pkg->port, pkg->unplug)) {
1392		tb_warn(tb, "could not ack plug event on %llx:%x\n", route,
1393			pkg->port);
1394	}
1395
1396	tb_queue_hotplug(tb, route, pkg->port, pkg->unplug);
1397}
1398
1399static void tb_stop(struct tb *tb)
1400{
1401	struct tb_cm *tcm = tb_priv(tb);
1402	struct tb_tunnel *tunnel;
1403	struct tb_tunnel *n;
1404
1405	cancel_delayed_work(&tcm->remove_work);
1406	/* tunnels are only present after everything has been initialized */
1407	list_for_each_entry_safe(tunnel, n, &tcm->tunnel_list, list) {
1408		/*
1409		 * DMA tunnels require the driver to be functional so we
1410		 * tear them down. Other protocol tunnels can be left
1411		 * intact.
1412		 */
1413		if (tb_tunnel_is_dma(tunnel))
1414			tb_tunnel_deactivate(tunnel);
1415		tb_tunnel_free(tunnel);
1416	}
1417	tb_switch_remove(tb->root_switch);
1418	tcm->hotplug_active = false; /* signal tb_handle_hotplug to quit */
1419}
1420
1421static int tb_scan_finalize_switch(struct device *dev, void *data)
1422{
1423	if (tb_is_switch(dev)) {
1424		struct tb_switch *sw = tb_to_switch(dev);
1425
1426		/*
1427		 * If we found that the switch was already setup by the
1428		 * boot firmware, mark it as authorized now before we
1429		 * send uevent to userspace.
1430		 */
1431		if (sw->boot)
1432			sw->authorized = 1;
1433
1434		dev_set_uevent_suppress(dev, false);
1435		kobject_uevent(&dev->kobj, KOBJ_ADD);
1436		device_for_each_child(dev, NULL, tb_scan_finalize_switch);
1437	}
1438
1439	return 0;
1440}
1441
1442static int tb_start(struct tb *tb)
1443{
1444	struct tb_cm *tcm = tb_priv(tb);
1445	int ret;
1446
1447	tb->root_switch = tb_switch_alloc(tb, &tb->dev, 0);
1448	if (IS_ERR(tb->root_switch))
1449		return PTR_ERR(tb->root_switch);
1450
1451	/*
1452	 * ICM firmware upgrade needs running firmware and in native
1453	 * mode that is not available so disable firmware upgrade of the
1454	 * root switch.
1455	 *
1456	 * However, USB4 routers support NVM firmware upgrade if they
1457	 * implement the necessary router operations.
1458	 */
1459	tb->root_switch->no_nvm_upgrade = !tb_switch_is_usb4(tb->root_switch);
1460	/* All USB4 routers support runtime PM */
1461	tb->root_switch->rpm = tb_switch_is_usb4(tb->root_switch);
1462
1463	ret = tb_switch_configure(tb->root_switch);
1464	if (ret) {
1465		tb_switch_put(tb->root_switch);
1466		return ret;
1467	}
1468
1469	/* Announce the switch to the world */
1470	ret = tb_switch_add(tb->root_switch);
1471	if (ret) {
1472		tb_switch_put(tb->root_switch);
1473		return ret;
1474	}
1475
1476	/*
1477	 * To support highest CLx state, we set host router's TMU to
1478	 * Normal mode.
1479	 */
1480	tb_switch_tmu_configure(tb->root_switch, TB_SWITCH_TMU_RATE_NORMAL,
1481				false);
1482	/* Enable TMU if it is off */
1483	tb_switch_tmu_enable(tb->root_switch);
1484	/* Full scan to discover devices added before the driver was loaded. */
1485	tb_scan_switch(tb->root_switch);
1486	/* Find out tunnels created by the boot firmware */
1487	tb_discover_tunnels(tb);
1488	/* Add DP resources from the DP tunnels created by the boot firmware */
1489	tb_discover_dp_resources(tb);
1490	/*
1491	 * If the boot firmware did not create USB 3.x tunnels create them
1492	 * now for the whole topology.
1493	 */
1494	tb_create_usb3_tunnels(tb->root_switch);
1495	/* Add DP IN resources for the root switch */
1496	tb_add_dp_resources(tb->root_switch);
1497	/* Make the discovered switches available to the userspace */
1498	device_for_each_child(&tb->root_switch->dev, NULL,
1499			      tb_scan_finalize_switch);
1500
1501	/* Allow tb_handle_hotplug to progress events */
1502	tcm->hotplug_active = true;
1503	return 0;
1504}
1505
1506static int tb_suspend_noirq(struct tb *tb)
1507{
1508	struct tb_cm *tcm = tb_priv(tb);
1509
1510	tb_dbg(tb, "suspending...\n");
1511	tb_disconnect_and_release_dp(tb);
1512	tb_switch_suspend(tb->root_switch, false);
1513	tcm->hotplug_active = false; /* signal tb_handle_hotplug to quit */
1514	tb_dbg(tb, "suspend finished\n");
1515
1516	return 0;
1517}
1518
1519static void tb_restore_children(struct tb_switch *sw)
1520{
1521	struct tb_port *port;
1522	int ret;
1523
1524	/* No need to restore if the router is already unplugged */
1525	if (sw->is_unplugged)
1526		return;
1527
1528	/*
1529	 * CL0s and CL1 are enabled and supported together.
1530	 * Silently ignore CLx re-enabling in case CLx is not supported.
1531	 */
1532	ret = tb_switch_enable_clx(sw, TB_CL1);
1533	if (ret && ret != -EOPNOTSUPP)
1534		tb_sw_warn(sw, "failed to re-enable %s on upstream port\n",
1535			   tb_switch_clx_name(TB_CL1));
1536
1537	if (tb_switch_is_clx_enabled(sw, TB_CL1))
1538		/*
1539		 * To support highest CLx state, we set router's TMU to
1540		 * Normal-Uni mode.
1541		 */
1542		tb_switch_tmu_configure(sw, TB_SWITCH_TMU_RATE_NORMAL, true);
1543	else
1544		/* If CLx disabled, configure router's TMU to HiFi-Bidir mode*/
1545		tb_switch_tmu_configure(sw, TB_SWITCH_TMU_RATE_HIFI, false);
1546
1547	if (tb_enable_tmu(sw))
1548		tb_sw_warn(sw, "failed to restore TMU configuration\n");
1549
1550	tb_switch_for_each_port(sw, port) {
1551		if (!tb_port_has_remote(port) && !port->xdomain)
1552			continue;
1553
1554		if (port->remote) {
1555			tb_switch_lane_bonding_enable(port->remote->sw);
1556			tb_switch_configure_link(port->remote->sw);
1557
1558			tb_restore_children(port->remote->sw);
1559		} else if (port->xdomain) {
1560			tb_port_configure_xdomain(port, port->xdomain);
1561		}
1562	}
1563}
1564
1565static int tb_resume_noirq(struct tb *tb)
1566{
1567	struct tb_cm *tcm = tb_priv(tb);
1568	struct tb_tunnel *tunnel, *n;
1569	unsigned int usb3_delay = 0;
1570	LIST_HEAD(tunnels);
1571
1572	tb_dbg(tb, "resuming...\n");
1573
1574	/* remove any pci devices the firmware might have setup */
1575	tb_switch_reset(tb->root_switch);
1576
1577	tb_switch_resume(tb->root_switch);
1578	tb_free_invalid_tunnels(tb);
1579	tb_free_unplugged_children(tb->root_switch);
1580	tb_restore_children(tb->root_switch);
1581
1582	/*
1583	 * If we get here from suspend to disk the boot firmware or the
1584	 * restore kernel might have created tunnels of its own. Since
1585	 * we cannot be sure they are usable for us we find and tear
1586	 * them down.
1587	 */
1588	tb_switch_discover_tunnels(tb->root_switch, &tunnels, false);
1589	list_for_each_entry_safe_reverse(tunnel, n, &tunnels, list) {
1590		if (tb_tunnel_is_usb3(tunnel))
1591			usb3_delay = 500;
1592		tb_tunnel_deactivate(tunnel);
1593		tb_tunnel_free(tunnel);
1594	}
1595
1596	/* Re-create our tunnels now */
1597	list_for_each_entry_safe(tunnel, n, &tcm->tunnel_list, list) {
1598		/* USB3 requires delay before it can be re-activated */
1599		if (tb_tunnel_is_usb3(tunnel)) {
1600			msleep(usb3_delay);
1601			/* Only need to do it once */
1602			usb3_delay = 0;
1603		}
1604		tb_tunnel_restart(tunnel);
1605	}
1606	if (!list_empty(&tcm->tunnel_list)) {
1607		/*
1608		 * the pcie links need some time to get going.
1609		 * 100ms works for me...
1610		 */
1611		tb_dbg(tb, "tunnels restarted, sleeping for 100ms\n");
1612		msleep(100);
1613	}
1614	 /* Allow tb_handle_hotplug to progress events */
1615	tcm->hotplug_active = true;
1616	tb_dbg(tb, "resume finished\n");
1617
1618	return 0;
1619}
1620
1621static int tb_free_unplugged_xdomains(struct tb_switch *sw)
1622{
1623	struct tb_port *port;
1624	int ret = 0;
1625
1626	tb_switch_for_each_port(sw, port) {
1627		if (tb_is_upstream_port(port))
1628			continue;
1629		if (port->xdomain && port->xdomain->is_unplugged) {
1630			tb_retimer_remove_all(port);
1631			tb_xdomain_remove(port->xdomain);
1632			tb_port_unconfigure_xdomain(port);
1633			port->xdomain = NULL;
1634			ret++;
1635		} else if (port->remote) {
1636			ret += tb_free_unplugged_xdomains(port->remote->sw);
1637		}
1638	}
1639
1640	return ret;
1641}
1642
1643static int tb_freeze_noirq(struct tb *tb)
1644{
1645	struct tb_cm *tcm = tb_priv(tb);
1646
1647	tcm->hotplug_active = false;
1648	return 0;
1649}
1650
1651static int tb_thaw_noirq(struct tb *tb)
1652{
1653	struct tb_cm *tcm = tb_priv(tb);
1654
1655	tcm->hotplug_active = true;
1656	return 0;
1657}
1658
1659static void tb_complete(struct tb *tb)
1660{
1661	/*
1662	 * Release any unplugged XDomains and if there is a case where
1663	 * another domain is swapped in place of unplugged XDomain we
1664	 * need to run another rescan.
1665	 */
1666	mutex_lock(&tb->lock);
1667	if (tb_free_unplugged_xdomains(tb->root_switch))
1668		tb_scan_switch(tb->root_switch);
1669	mutex_unlock(&tb->lock);
1670}
1671
1672static int tb_runtime_suspend(struct tb *tb)
1673{
1674	struct tb_cm *tcm = tb_priv(tb);
1675
1676	mutex_lock(&tb->lock);
1677	tb_switch_suspend(tb->root_switch, true);
1678	tcm->hotplug_active = false;
1679	mutex_unlock(&tb->lock);
1680
1681	return 0;
1682}
1683
1684static void tb_remove_work(struct work_struct *work)
1685{
1686	struct tb_cm *tcm = container_of(work, struct tb_cm, remove_work.work);
1687	struct tb *tb = tcm_to_tb(tcm);
1688
1689	mutex_lock(&tb->lock);
1690	if (tb->root_switch) {
1691		tb_free_unplugged_children(tb->root_switch);
1692		tb_free_unplugged_xdomains(tb->root_switch);
1693	}
1694	mutex_unlock(&tb->lock);
1695}
1696
1697static int tb_runtime_resume(struct tb *tb)
1698{
1699	struct tb_cm *tcm = tb_priv(tb);
1700	struct tb_tunnel *tunnel, *n;
1701
1702	mutex_lock(&tb->lock);
1703	tb_switch_resume(tb->root_switch);
1704	tb_free_invalid_tunnels(tb);
1705	tb_restore_children(tb->root_switch);
1706	list_for_each_entry_safe(tunnel, n, &tcm->tunnel_list, list)
1707		tb_tunnel_restart(tunnel);
1708	tcm->hotplug_active = true;
1709	mutex_unlock(&tb->lock);
1710
1711	/*
1712	 * Schedule cleanup of any unplugged devices. Run this in a
1713	 * separate thread to avoid possible deadlock if the device
1714	 * removal runtime resumes the unplugged device.
1715	 */
1716	queue_delayed_work(tb->wq, &tcm->remove_work, msecs_to_jiffies(50));
1717	return 0;
1718}
1719
1720static const struct tb_cm_ops tb_cm_ops = {
1721	.start = tb_start,
1722	.stop = tb_stop,
1723	.suspend_noirq = tb_suspend_noirq,
1724	.resume_noirq = tb_resume_noirq,
1725	.freeze_noirq = tb_freeze_noirq,
1726	.thaw_noirq = tb_thaw_noirq,
1727	.complete = tb_complete,
1728	.runtime_suspend = tb_runtime_suspend,
1729	.runtime_resume = tb_runtime_resume,
1730	.handle_event = tb_handle_event,
1731	.disapprove_switch = tb_disconnect_pci,
1732	.approve_switch = tb_tunnel_pci,
1733	.approve_xdomain_paths = tb_approve_xdomain_paths,
1734	.disconnect_xdomain_paths = tb_disconnect_xdomain_paths,
1735};
1736
1737/*
1738 * During suspend the Thunderbolt controller is reset and all PCIe
1739 * tunnels are lost. The NHI driver will try to reestablish all tunnels
1740 * during resume. This adds device links between the tunneled PCIe
1741 * downstream ports and the NHI so that the device core will make sure
1742 * NHI is resumed first before the rest.
1743 */
1744static void tb_apple_add_links(struct tb_nhi *nhi)
1745{
1746	struct pci_dev *upstream, *pdev;
1747
1748	if (!x86_apple_machine)
1749		return;
1750
1751	switch (nhi->pdev->device) {
1752	case PCI_DEVICE_ID_INTEL_LIGHT_RIDGE:
1753	case PCI_DEVICE_ID_INTEL_CACTUS_RIDGE_4C:
1754	case PCI_DEVICE_ID_INTEL_FALCON_RIDGE_2C_NHI:
1755	case PCI_DEVICE_ID_INTEL_FALCON_RIDGE_4C_NHI:
1756		break;
1757	default:
1758		return;
1759	}
1760
1761	upstream = pci_upstream_bridge(nhi->pdev);
1762	while (upstream) {
1763		if (!pci_is_pcie(upstream))
1764			return;
1765		if (pci_pcie_type(upstream) == PCI_EXP_TYPE_UPSTREAM)
1766			break;
1767		upstream = pci_upstream_bridge(upstream);
1768	}
1769
1770	if (!upstream)
1771		return;
1772
1773	/*
1774	 * For each hotplug downstream port, create add device link
1775	 * back to NHI so that PCIe tunnels can be re-established after
1776	 * sleep.
1777	 */
1778	for_each_pci_bridge(pdev, upstream->subordinate) {
1779		const struct device_link *link;
1780
1781		if (!pci_is_pcie(pdev))
1782			continue;
1783		if (pci_pcie_type(pdev) != PCI_EXP_TYPE_DOWNSTREAM ||
1784		    !pdev->is_hotplug_bridge)
1785			continue;
1786
1787		link = device_link_add(&pdev->dev, &nhi->pdev->dev,
1788				       DL_FLAG_AUTOREMOVE_SUPPLIER |
1789				       DL_FLAG_PM_RUNTIME);
1790		if (link) {
1791			dev_dbg(&nhi->pdev->dev, "created link from %s\n",
1792				dev_name(&pdev->dev));
1793		} else {
1794			dev_warn(&nhi->pdev->dev, "device link creation from %s failed\n",
1795				 dev_name(&pdev->dev));
1796		}
1797	}
1798}
1799
1800struct tb *tb_probe(struct tb_nhi *nhi)
1801{
1802	struct tb_cm *tcm;
1803	struct tb *tb;
1804
1805	tb = tb_domain_alloc(nhi, TB_TIMEOUT, sizeof(*tcm));
1806	if (!tb)
1807		return NULL;
1808
1809	if (tb_acpi_may_tunnel_pcie())
1810		tb->security_level = TB_SECURITY_USER;
1811	else
1812		tb->security_level = TB_SECURITY_NOPCIE;
1813
1814	tb->cm_ops = &tb_cm_ops;
1815
1816	tcm = tb_priv(tb);
1817	INIT_LIST_HEAD(&tcm->tunnel_list);
1818	INIT_LIST_HEAD(&tcm->dp_resources);
1819	INIT_DELAYED_WORK(&tcm->remove_work, tb_remove_work);
1820
1821	tb_dbg(tb, "using software connection manager\n");
1822
1823	tb_apple_add_links(nhi);
1824	tb_acpi_add_links(nhi);
1825
1826	return tb;
1827}