1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * Thunderbolt driver - switch/port utility functions
4 *
5 * Copyright (c) 2014 Andreas Noever <andreas.noever@gmail.com>
6 * Copyright (C) 2018, Intel Corporation
7 */
8
9 #include <linux/delay.h>
10 #include <linux/hex.h>
11 #include <linux/idr.h>
12 #include <linux/module.h>
13 #include <linux/nvmem-provider.h>
14 #include <linux/pm_runtime.h>
15 #include <linux/sched/signal.h>
16 #include <linux/sizes.h>
17 #include <linux/slab.h>
18 #include <linux/string_helpers.h>
19
20 #include "tb.h"
21
22 /* Switch NVM support */
23
24 struct nvm_auth_status {
25 struct list_head list;
26 uuid_t uuid;
27 u32 status;
28 };
29
30 /*
31 * Hold NVM authentication failure status per switch This information
32 * needs to stay around even when the switch gets power cycled so we
33 * keep it separately.
34 */
35 static LIST_HEAD(nvm_auth_status_cache);
36 static DEFINE_MUTEX(nvm_auth_status_lock);
37
__nvm_get_auth_status(const struct tb_switch * sw)38 static struct nvm_auth_status *__nvm_get_auth_status(const struct tb_switch *sw)
39 {
40 struct nvm_auth_status *st;
41
42 list_for_each_entry(st, &nvm_auth_status_cache, list) {
43 if (uuid_equal(&st->uuid, sw->uuid))
44 return st;
45 }
46
47 return NULL;
48 }
49
nvm_get_auth_status(const struct tb_switch * sw,u32 * status)50 static void nvm_get_auth_status(const struct tb_switch *sw, u32 *status)
51 {
52 struct nvm_auth_status *st;
53
54 mutex_lock(&nvm_auth_status_lock);
55 st = __nvm_get_auth_status(sw);
56 mutex_unlock(&nvm_auth_status_lock);
57
58 *status = st ? st->status : 0;
59 }
60
nvm_set_auth_status(const struct tb_switch * sw,u32 status)61 static void nvm_set_auth_status(const struct tb_switch *sw, u32 status)
62 {
63 struct nvm_auth_status *st;
64
65 if (WARN_ON(!sw->uuid))
66 return;
67
68 mutex_lock(&nvm_auth_status_lock);
69 st = __nvm_get_auth_status(sw);
70
71 if (!st) {
72 st = kzalloc_obj(*st);
73 if (!st)
74 goto unlock;
75
76 memcpy(&st->uuid, sw->uuid, sizeof(st->uuid));
77 INIT_LIST_HEAD(&st->list);
78 list_add_tail(&st->list, &nvm_auth_status_cache);
79 }
80
81 st->status = status;
82 unlock:
83 mutex_unlock(&nvm_auth_status_lock);
84 }
85
nvm_clear_auth_status(const struct tb_switch * sw)86 static void nvm_clear_auth_status(const struct tb_switch *sw)
87 {
88 struct nvm_auth_status *st;
89
90 mutex_lock(&nvm_auth_status_lock);
91 st = __nvm_get_auth_status(sw);
92 if (st) {
93 list_del(&st->list);
94 kfree(st);
95 }
96 mutex_unlock(&nvm_auth_status_lock);
97 }
98
nvm_validate_and_write(struct tb_switch * sw)99 static int nvm_validate_and_write(struct tb_switch *sw)
100 {
101 unsigned int image_size;
102 const u8 *buf;
103 int ret;
104
105 ret = tb_nvm_validate(sw->nvm);
106 if (ret)
107 return ret;
108
109 ret = tb_nvm_write_headers(sw->nvm);
110 if (ret)
111 return ret;
112
113 buf = sw->nvm->buf_data_start;
114 image_size = sw->nvm->buf_data_size;
115
116 if (tb_switch_is_usb4(sw))
117 ret = usb4_switch_nvm_write(sw, 0, buf, image_size);
118 else
119 ret = dma_port_flash_write(sw->dma_port, 0, buf, image_size);
120 if (ret)
121 return ret;
122
123 sw->nvm->flushed = true;
124 return 0;
125 }
126
nvm_authenticate_host_dma_port(struct tb_switch * sw)127 static int nvm_authenticate_host_dma_port(struct tb_switch *sw)
128 {
129 int ret = 0;
130
131 /*
132 * Root switch NVM upgrade requires that we disconnect the
133 * existing paths first (in case it is not in safe mode
134 * already).
135 */
136 if (!sw->safe_mode) {
137 u32 status;
138
139 ret = tb_domain_disconnect_all_paths(sw->tb);
140 if (ret)
141 return ret;
142 /*
143 * The host controller goes away pretty soon after this if
144 * everything goes well so getting timeout is expected.
145 */
146 ret = dma_port_flash_update_auth(sw->dma_port);
147 if (!ret || ret == -ETIMEDOUT)
148 return 0;
149
150 /*
151 * Any error from update auth operation requires power
152 * cycling of the host router.
153 */
154 tb_sw_warn(sw, "failed to authenticate NVM, power cycling\n");
155 if (dma_port_flash_update_auth_status(sw->dma_port, &status) > 0)
156 nvm_set_auth_status(sw, status);
157 }
158
159 /*
160 * From safe mode we can get out by just power cycling the
161 * switch.
162 */
163 dma_port_power_cycle(sw->dma_port);
164 return ret;
165 }
166
nvm_authenticate_device_dma_port(struct tb_switch * sw)167 static int nvm_authenticate_device_dma_port(struct tb_switch *sw)
168 {
169 int ret, retries = 10;
170
171 ret = dma_port_flash_update_auth(sw->dma_port);
172 switch (ret) {
173 case 0:
174 case -ETIMEDOUT:
175 case -EACCES:
176 case -EINVAL:
177 /* Power cycle is required */
178 break;
179 default:
180 return ret;
181 }
182
183 /*
184 * Poll here for the authentication status. It takes some time
185 * for the device to respond (we get timeout for a while). Once
186 * we get response the device needs to be power cycled in order
187 * to the new NVM to be taken into use.
188 */
189 do {
190 u32 status;
191
192 ret = dma_port_flash_update_auth_status(sw->dma_port, &status);
193 if (ret < 0 && ret != -ETIMEDOUT)
194 return ret;
195 if (ret > 0) {
196 if (status) {
197 tb_sw_warn(sw, "failed to authenticate NVM\n");
198 nvm_set_auth_status(sw, status);
199 }
200
201 tb_sw_info(sw, "power cycling the switch now\n");
202 dma_port_power_cycle(sw->dma_port);
203 return 0;
204 }
205
206 msleep(500);
207 } while (--retries);
208
209 return -ETIMEDOUT;
210 }
211
nvm_readable(struct tb_switch * sw)212 static inline bool nvm_readable(struct tb_switch *sw)
213 {
214 if (tb_switch_is_usb4(sw)) {
215 /*
216 * USB4 devices must support NVM operations but it is
217 * optional for hosts. Therefore we query the NVM sector
218 * size here and if it is supported assume NVM
219 * operations are implemented.
220 */
221 return usb4_switch_nvm_sector_size(sw) > 0;
222 }
223
224 /* Thunderbolt 2 and 3 devices support NVM through DMA port */
225 return !!sw->dma_port;
226 }
227
nvm_upgradeable(struct tb_switch * sw)228 static inline bool nvm_upgradeable(struct tb_switch *sw)
229 {
230 if (sw->no_nvm_upgrade)
231 return false;
232 return nvm_readable(sw);
233 }
234
nvm_authenticate(struct tb_switch * sw,bool auth_only)235 static int nvm_authenticate(struct tb_switch *sw, bool auth_only)
236 {
237 struct tb_nhi *nhi = sw->tb->nhi;
238 int ret;
239
240 if (tb_switch_is_usb4(sw)) {
241 if (auth_only) {
242 ret = usb4_switch_nvm_set_offset(sw, 0);
243 if (ret)
244 return ret;
245 }
246 sw->nvm->authenticating = true;
247 return usb4_switch_nvm_authenticate(sw);
248 }
249 if (auth_only)
250 return -EOPNOTSUPP;
251
252 sw->nvm->authenticating = true;
253 if (!tb_route(sw)) {
254 if (nhi->ops->pre_nvm_auth)
255 nhi->ops->pre_nvm_auth(nhi);
256 ret = nvm_authenticate_host_dma_port(sw);
257 } else {
258 ret = nvm_authenticate_device_dma_port(sw);
259 }
260
261 return ret;
262 }
263
264 /**
265 * tb_switch_nvm_read() - Read router NVM
266 * @sw: Router whose NVM to read
267 * @address: Start address on the NVM
268 * @buf: Buffer where the read data is copied
269 * @size: Size of the buffer in bytes
270 *
271 * Reads from router NVM and returns the requested data in @buf. Locking
272 * is up to the caller.
273 *
274 * Return: %0 on success, negative errno otherwise.
275 */
tb_switch_nvm_read(struct tb_switch * sw,unsigned int address,void * buf,size_t size)276 int tb_switch_nvm_read(struct tb_switch *sw, unsigned int address, void *buf,
277 size_t size)
278 {
279 if (tb_switch_is_usb4(sw))
280 return usb4_switch_nvm_read(sw, address, buf, size);
281 return dma_port_flash_read(sw->dma_port, address, buf, size);
282 }
283
nvm_read(void * priv,unsigned int offset,void * val,size_t bytes)284 static int nvm_read(void *priv, unsigned int offset, void *val, size_t bytes)
285 {
286 struct tb_nvm *nvm = priv;
287 struct tb_switch *sw = tb_to_switch(nvm->dev);
288 int ret;
289
290 pm_runtime_get_sync(&sw->dev);
291
292 if (!mutex_trylock(&sw->tb->lock)) {
293 ret = restart_syscall();
294 goto out;
295 }
296
297 ret = tb_switch_nvm_read(sw, offset, val, bytes);
298 mutex_unlock(&sw->tb->lock);
299
300 out:
301 pm_runtime_mark_last_busy(&sw->dev);
302 pm_runtime_put_autosuspend(&sw->dev);
303
304 return ret;
305 }
306
nvm_write(void * priv,unsigned int offset,void * val,size_t bytes)307 static int nvm_write(void *priv, unsigned int offset, void *val, size_t bytes)
308 {
309 struct tb_nvm *nvm = priv;
310 struct tb_switch *sw = tb_to_switch(nvm->dev);
311 int ret;
312
313 if (!mutex_trylock(&sw->tb->lock))
314 return restart_syscall();
315
316 /*
317 * Since writing the NVM image might require some special steps,
318 * for example when CSS headers are written, we cache the image
319 * locally here and handle the special cases when the user asks
320 * us to authenticate the image.
321 */
322 ret = tb_nvm_write_buf(nvm, offset, val, bytes);
323 mutex_unlock(&sw->tb->lock);
324
325 return ret;
326 }
327
tb_switch_nvm_init(struct tb_switch * sw)328 static int tb_switch_nvm_init(struct tb_switch *sw)
329 {
330 struct tb_nvm *nvm;
331 int ret;
332
333 if (!nvm_readable(sw))
334 return 0;
335
336 nvm = tb_nvm_alloc(&sw->dev);
337 if (IS_ERR(nvm)) {
338 ret = PTR_ERR(nvm) == -EOPNOTSUPP ? 0 : PTR_ERR(nvm);
339 goto err_nvm;
340 }
341
342 ret = tb_nvm_read_version(nvm);
343 if (ret)
344 goto err_nvm;
345
346 sw->nvm = nvm;
347 return 0;
348
349 err_nvm:
350 tb_sw_dbg(sw, "NVM upgrade disabled\n");
351 sw->no_nvm_upgrade = true;
352 if (!IS_ERR(nvm))
353 tb_nvm_free(nvm);
354
355 return ret;
356 }
357
tb_switch_nvm_add(struct tb_switch * sw)358 static int tb_switch_nvm_add(struct tb_switch *sw)
359 {
360 struct tb_nvm *nvm = sw->nvm;
361 int ret;
362
363 if (!nvm)
364 return 0;
365
366 /*
367 * If the switch is in safe-mode the only accessible portion of
368 * the NVM is the non-active one where userspace is expected to
369 * write new functional NVM.
370 */
371 if (!sw->safe_mode) {
372 ret = tb_nvm_add_active(nvm, nvm_read);
373 if (ret)
374 goto err_nvm;
375 tb_sw_dbg(sw, "NVM version %x.%x\n", nvm->major, nvm->minor);
376 }
377
378 if (!sw->no_nvm_upgrade) {
379 ret = tb_nvm_add_non_active(nvm, nvm_write);
380 if (ret)
381 goto err_nvm;
382 }
383
384 return 0;
385
386 err_nvm:
387 tb_sw_dbg(sw, "NVM upgrade disabled\n");
388 sw->no_nvm_upgrade = true;
389 tb_nvm_free(nvm);
390
391 return ret;
392 }
393
tb_switch_nvm_remove(struct tb_switch * sw)394 static void tb_switch_nvm_remove(struct tb_switch *sw)
395 {
396 struct tb_nvm *nvm;
397
398 nvm = sw->nvm;
399 sw->nvm = NULL;
400
401 if (!nvm)
402 return;
403
404 /* Remove authentication status in case the switch is unplugged */
405 if (!nvm->authenticating)
406 nvm_clear_auth_status(sw);
407
408 tb_nvm_free(nvm);
409 }
410
411 /* port utility functions */
412
tb_port_type(const struct tb_regs_port_header * port)413 static const char *tb_port_type(const struct tb_regs_port_header *port)
414 {
415 switch (port->type >> 16) {
416 case 0:
417 switch ((u8) port->type) {
418 case 0:
419 return "Inactive";
420 case 1:
421 return "Port";
422 case 2:
423 return "NHI";
424 default:
425 return "unknown";
426 }
427 case 0x2:
428 return "Ethernet";
429 case 0x8:
430 return "SATA";
431 case 0xe:
432 return "DP/HDMI";
433 case 0x10:
434 return "PCIe";
435 case 0x20:
436 return "USB";
437 default:
438 return "unknown";
439 }
440 }
441
tb_dump_port(struct tb * tb,const struct tb_port * port)442 static void tb_dump_port(struct tb *tb, const struct tb_port *port)
443 {
444 const struct tb_regs_port_header *regs = &port->config;
445
446 tb_dbg(tb,
447 " Port %d: %x:%x (Revision: %d, TB Version: %d, Type: %s (%#x))\n",
448 regs->port_number, regs->vendor_id, regs->device_id,
449 regs->revision, regs->thunderbolt_version, tb_port_type(regs),
450 regs->type);
451 tb_dbg(tb, " Max hop id (in/out): %d/%d\n",
452 regs->max_in_hop_id, regs->max_out_hop_id);
453 tb_dbg(tb, " Max counters: %d\n", regs->max_counters);
454 tb_dbg(tb, " NFC Credits: %#x\n", regs->nfc_credits);
455 tb_dbg(tb, " Credits (total/control): %u/%u\n", port->total_credits,
456 port->ctl_credits);
457 }
458
459 /**
460 * tb_port_state() - get connectedness state of a port
461 * @port: the port to check
462 *
463 * The port must have a TB_CAP_PHY (i.e. it should be a real port).
464 *
465 * Return: &enum tb_port_state or negative error code on failure.
466 */
tb_port_state(struct tb_port * port)467 int tb_port_state(struct tb_port *port)
468 {
469 struct tb_cap_phy phy;
470 int res;
471 if (port->cap_phy == 0) {
472 tb_port_WARN(port, "does not have a PHY\n");
473 return -EINVAL;
474 }
475 res = tb_port_read(port, &phy, TB_CFG_PORT, port->cap_phy, 2);
476 if (res)
477 return res;
478 return phy.state;
479 }
480
481 /**
482 * tb_wait_for_port() - wait for a port to become ready
483 * @port: Port to wait
484 * @wait_if_unplugged: Wait also when port is unplugged
485 *
486 * Wait up to 1 second for a port to reach state TB_PORT_UP. If
487 * wait_if_unplugged is set then we also wait if the port is in state
488 * TB_PORT_UNPLUGGED (it takes a while for the device to be registered after
489 * switch resume). Otherwise we only wait if a device is registered but the link
490 * has not yet been established.
491 *
492 * Return:
493 * * %0 - If the port is not connected or failed to reach
494 * state %TB_PORT_UP within one second.
495 * * %1 - If the port is connected and in state %TB_PORT_UP.
496 * * Negative errno - An error occurred.
497 */
tb_wait_for_port(struct tb_port * port,bool wait_if_unplugged)498 int tb_wait_for_port(struct tb_port *port, bool wait_if_unplugged)
499 {
500 int retries = 10;
501 int state;
502 if (!port->cap_phy) {
503 tb_port_WARN(port, "does not have PHY\n");
504 return -EINVAL;
505 }
506 if (tb_is_upstream_port(port)) {
507 tb_port_WARN(port, "is the upstream port\n");
508 return -EINVAL;
509 }
510
511 while (retries--) {
512 state = tb_port_state(port);
513 switch (state) {
514 case TB_PORT_DISABLED:
515 tb_port_dbg(port, "is disabled (state: 0)\n");
516 return 0;
517
518 case TB_PORT_UNPLUGGED:
519 if (wait_if_unplugged) {
520 /* used during resume */
521 tb_port_dbg(port,
522 "is unplugged (state: 7), retrying...\n");
523 msleep(100);
524 break;
525 }
526 tb_port_dbg(port, "is unplugged (state: 7)\n");
527 return 0;
528
529 case TB_PORT_UP:
530 case TB_PORT_TX_CL0S:
531 case TB_PORT_RX_CL0S:
532 case TB_PORT_CL1:
533 case TB_PORT_CL2:
534 tb_port_dbg(port, "is connected, link is up (state: %d)\n", state);
535 return 1;
536
537 default:
538 if (state < 0)
539 return state;
540
541 /*
542 * After plug-in the state is TB_PORT_CONNECTING. Give it some
543 * time.
544 */
545 tb_port_dbg(port,
546 "is connected, link is not up (state: %d), retrying...\n",
547 state);
548 msleep(100);
549 }
550
551 }
552 tb_port_warn(port,
553 "failed to reach state TB_PORT_UP. Ignoring port...\n");
554 return 0;
555 }
556
557 /**
558 * tb_port_add_nfc_credits() - add/remove non flow controlled credits to port
559 * @port: Port to add/remove NFC credits
560 * @credits: Credits to add/remove
561 *
562 * Change the number of NFC credits allocated to @port by @credits. To remove
563 * NFC credits pass a negative amount of credits.
564 *
565 * Return: %0 on success, negative errno otherwise.
566 */
tb_port_add_nfc_credits(struct tb_port * port,int credits)567 int tb_port_add_nfc_credits(struct tb_port *port, int credits)
568 {
569 u32 nfc_credits;
570
571 if (credits == 0 || port->sw->is_unplugged)
572 return 0;
573
574 /*
575 * USB4 restricts programming NFC buffers to lane adapters only
576 * so skip other ports.
577 */
578 if (tb_switch_is_usb4(port->sw) && !tb_port_is_null(port))
579 return 0;
580
581 nfc_credits = port->config.nfc_credits & ADP_CS_4_NFC_BUFFERS_MASK;
582 if (credits < 0)
583 credits = max_t(int, -nfc_credits, credits);
584
585 nfc_credits += credits;
586
587 tb_port_dbg(port, "adding %d NFC credits to %lu", credits,
588 port->config.nfc_credits & ADP_CS_4_NFC_BUFFERS_MASK);
589
590 port->config.nfc_credits &= ~ADP_CS_4_NFC_BUFFERS_MASK;
591 port->config.nfc_credits |= nfc_credits;
592
593 return tb_port_write(port, &port->config.nfc_credits,
594 TB_CFG_PORT, ADP_CS_4, 1);
595 }
596
597 /**
598 * tb_port_clear_counter() - clear a counter in TB_CFG_COUNTER
599 * @port: Port whose counters to clear
600 * @counter: Counter index to clear
601 *
602 * Return: %0 on success, negative errno otherwise.
603 */
tb_port_clear_counter(struct tb_port * port,int counter)604 int tb_port_clear_counter(struct tb_port *port, int counter)
605 {
606 u32 zero[3] = { 0, 0, 0 };
607 tb_port_dbg(port, "clearing counter %d\n", counter);
608 return tb_port_write(port, zero, TB_CFG_COUNTERS, 3 * counter, 3);
609 }
610
611 /**
612 * tb_port_unlock() - Unlock downstream port
613 * @port: Port to unlock
614 *
615 * Needed for USB4 but can be called for any CIO/USB4 ports. Makes the
616 * downstream router accessible for CM.
617 *
618 * Return: %0 on success, negative errno otherwise.
619 */
tb_port_unlock(struct tb_port * port)620 int tb_port_unlock(struct tb_port *port)
621 {
622 if (tb_switch_is_icm(port->sw))
623 return 0;
624 if (!tb_port_is_null(port))
625 return -EINVAL;
626 if (tb_switch_is_usb4(port->sw))
627 return usb4_port_unlock(port);
628 return 0;
629 }
630
__tb_port_enable(struct tb_port * port,bool enable)631 static int __tb_port_enable(struct tb_port *port, bool enable)
632 {
633 int ret;
634 u32 phy;
635
636 if (!tb_port_is_null(port))
637 return -EINVAL;
638
639 ret = tb_port_read(port, &phy, TB_CFG_PORT,
640 port->cap_phy + LANE_ADP_CS_1, 1);
641 if (ret)
642 return ret;
643
644 if (enable)
645 phy &= ~LANE_ADP_CS_1_LD;
646 else
647 phy |= LANE_ADP_CS_1_LD;
648
649
650 ret = tb_port_write(port, &phy, TB_CFG_PORT,
651 port->cap_phy + LANE_ADP_CS_1, 1);
652 if (ret)
653 return ret;
654
655 tb_port_dbg(port, "lane %s\n", str_enabled_disabled(enable));
656 return 0;
657 }
658
659 /**
660 * tb_port_enable() - Enable lane adapter
661 * @port: Port to enable (can be %NULL)
662 *
663 * This is used for lane 0 and 1 adapters to enable it.
664 *
665 * Return: %0 on success, negative errno otherwise.
666 */
tb_port_enable(struct tb_port * port)667 int tb_port_enable(struct tb_port *port)
668 {
669 return __tb_port_enable(port, true);
670 }
671
672 /**
673 * tb_port_disable() - Disable lane adapter
674 * @port: Port to disable (can be %NULL)
675 *
676 * This is used for lane 0 and 1 adapters to disable it.
677 *
678 * Return: %0 on success, negative errno otherwise.
679 */
tb_port_disable(struct tb_port * port)680 int tb_port_disable(struct tb_port *port)
681 {
682 return __tb_port_enable(port, false);
683 }
684
685 /**
686 * tb_port_reset() - Reset the port
687 * @port: Port to reset
688 *
689 * Resets @port. For USB4 ports this issues a USB4 port reset and for
690 * legacy ports the link controller port is reset.
691 *
692 * Return: %0 on success, negative errno otherwise.
693 */
tb_port_reset(struct tb_port * port)694 int tb_port_reset(struct tb_port *port)
695 {
696 if (tb_switch_is_usb4(port->sw))
697 return port->cap_usb4 ? usb4_port_reset(port) : 0;
698 return tb_lc_reset_port(port);
699 }
700
701 /*
702 * tb_init_port() - initialize a port
703 *
704 * This is a helper method for tb_switch_alloc. Does not check or initialize
705 * any downstream switches.
706 *
707 * Return: %0 on success, negative errno otherwise.
708 */
tb_init_port(struct tb_port * port)709 static int tb_init_port(struct tb_port *port)
710 {
711 int res;
712 int cap;
713
714 INIT_LIST_HEAD(&port->list);
715
716 /* Control adapter does not have configuration space */
717 if (!port->port)
718 return 0;
719
720 res = tb_port_read(port, &port->config, TB_CFG_PORT, 0, 8);
721 if (res) {
722 if (res == -ENODEV) {
723 tb_dbg(port->sw->tb, " Port %d: not implemented\n",
724 port->port);
725 port->disabled = true;
726 return 0;
727 }
728 return res;
729 }
730
731 /* Port 0 is the switch itself and has no PHY. */
732 if (port->config.type == TB_TYPE_PORT) {
733 cap = tb_port_find_cap(port, TB_PORT_CAP_PHY);
734
735 if (cap > 0)
736 port->cap_phy = cap;
737 else
738 tb_port_WARN(port, "non switch port without a PHY\n");
739
740 cap = tb_port_find_cap(port, TB_PORT_CAP_USB4);
741 if (cap > 0)
742 port->cap_usb4 = cap;
743
744 /*
745 * USB4 port buffers allocated for the control path
746 * can be read from the path config space. Legacy
747 * devices use hard-coded value.
748 */
749 if (port->cap_usb4) {
750 struct tb_regs_hop hop;
751
752 if (!tb_port_read(port, &hop, TB_CFG_HOPS, 0, 2))
753 port->ctl_credits = hop.initial_credits;
754 }
755 if (!port->ctl_credits)
756 port->ctl_credits = 2;
757
758 } else {
759 cap = tb_port_find_cap(port, TB_PORT_CAP_ADAP);
760 if (cap > 0)
761 port->cap_adap = cap;
762 }
763
764 port->total_credits =
765 (port->config.nfc_credits & ADP_CS_4_TOTAL_BUFFERS_MASK) >>
766 ADP_CS_4_TOTAL_BUFFERS_SHIFT;
767
768 tb_dump_port(port->sw->tb, port);
769 return 0;
770 }
771
tb_port_alloc_hopid(struct tb_port * port,bool in,int min_hopid,int max_hopid)772 static int tb_port_alloc_hopid(struct tb_port *port, bool in, int min_hopid,
773 int max_hopid)
774 {
775 int port_max_hopid;
776 struct ida *ida;
777 int ret;
778
779 if (in) {
780 port_max_hopid = port->config.max_in_hop_id;
781 ida = &port->in_hopids;
782 } else {
783 port_max_hopid = port->config.max_out_hop_id;
784 ida = &port->out_hopids;
785 }
786
787 /*
788 * NHI can use HopIDs 1-max for other adapters HopIDs 0-7 are
789 * reserved.
790 */
791 if (!tb_port_is_nhi(port) && min_hopid < TB_PATH_MIN_HOPID)
792 min_hopid = TB_PATH_MIN_HOPID;
793
794 if (max_hopid < 0 || max_hopid > port_max_hopid)
795 max_hopid = port_max_hopid;
796
797 ret = ida_alloc_range(ida, min_hopid, max_hopid, GFP_KERNEL);
798 if (ret >= 0)
799 tb_switch_get(port->sw);
800
801 return ret;
802 }
803
804 /**
805 * tb_port_alloc_in_hopid() - Allocate input HopID from port
806 * @port: Port to allocate HopID for
807 * @min_hopid: Minimum acceptable input HopID
808 * @max_hopid: Maximum acceptable input HopID
809 *
810 * Return: HopID between @min_hopid and @max_hopid or negative errno in
811 * case of error.
812 */
tb_port_alloc_in_hopid(struct tb_port * port,int min_hopid,int max_hopid)813 int tb_port_alloc_in_hopid(struct tb_port *port, int min_hopid, int max_hopid)
814 {
815 return tb_port_alloc_hopid(port, true, min_hopid, max_hopid);
816 }
817
818 /**
819 * tb_port_alloc_out_hopid() - Allocate output HopID from port
820 * @port: Port to allocate HopID for
821 * @min_hopid: Minimum acceptable output HopID
822 * @max_hopid: Maximum acceptable output HopID
823 *
824 * Return: HopID between @min_hopid and @max_hopid or negative errno in
825 * case of error.
826 */
tb_port_alloc_out_hopid(struct tb_port * port,int min_hopid,int max_hopid)827 int tb_port_alloc_out_hopid(struct tb_port *port, int min_hopid, int max_hopid)
828 {
829 return tb_port_alloc_hopid(port, false, min_hopid, max_hopid);
830 }
831
832 /**
833 * tb_port_release_in_hopid() - Release allocated input HopID from port
834 * @port: Port whose HopID to release
835 * @hopid: HopID to release
836 */
tb_port_release_in_hopid(struct tb_port * port,int hopid)837 void tb_port_release_in_hopid(struct tb_port *port, int hopid)
838 {
839 ida_free(&port->in_hopids, hopid);
840 tb_switch_put(port->sw);
841 }
842
843 /**
844 * tb_port_release_out_hopid() - Release allocated output HopID from port
845 * @port: Port whose HopID to release
846 * @hopid: HopID to release
847 */
tb_port_release_out_hopid(struct tb_port * port,int hopid)848 void tb_port_release_out_hopid(struct tb_port *port, int hopid)
849 {
850 ida_free(&port->out_hopids, hopid);
851 tb_switch_put(port->sw);
852 }
853
tb_switch_is_reachable(const struct tb_switch * parent,const struct tb_switch * sw)854 static inline bool tb_switch_is_reachable(const struct tb_switch *parent,
855 const struct tb_switch *sw)
856 {
857 u64 mask = (1ULL << parent->config.depth * 8) - 1;
858 return (tb_route(parent) & mask) == (tb_route(sw) & mask);
859 }
860
861 /**
862 * tb_next_port_on_path() - Return next port for given port on a path
863 * @start: Start port of the walk
864 * @end: End port of the walk
865 * @prev: Previous port (%NULL if this is the first)
866 *
867 * This function can be used to walk from one port to another if they
868 * are connected through zero or more switches. If the @prev is dual
869 * link port, the function follows that link and returns another end on
870 * that same link.
871 *
872 * Domain tb->lock must be held when this function is called.
873 *
874 * Return: Pointer to &struct tb_port, %NULL if the @end port has been reached.
875 */
tb_next_port_on_path(struct tb_port * start,struct tb_port * end,struct tb_port * prev)876 struct tb_port *tb_next_port_on_path(struct tb_port *start, struct tb_port *end,
877 struct tb_port *prev)
878 {
879 struct tb_port *next;
880
881 if (!prev)
882 return start;
883
884 if (prev->sw == end->sw) {
885 if (prev == end)
886 return NULL;
887 return end;
888 }
889
890 if (tb_switch_is_reachable(prev->sw, end->sw)) {
891 next = tb_port_at(tb_route(end->sw), prev->sw);
892 /* Walk down the topology if next == prev */
893 if (prev->remote &&
894 (next == prev || next->dual_link_port == prev))
895 next = prev->remote;
896 } else {
897 if (tb_is_upstream_port(prev)) {
898 next = prev->remote;
899 } else {
900 next = tb_upstream_port(prev->sw);
901 /*
902 * Keep the same link if prev and next are both
903 * dual link ports.
904 */
905 if (next->dual_link_port &&
906 next->link_nr != prev->link_nr) {
907 next = next->dual_link_port;
908 }
909 }
910 }
911
912 return next != prev ? next : NULL;
913 }
914
915 /**
916 * tb_port_get_link_speed() - Get current link speed
917 * @port: Port to check (USB4 or CIO)
918 *
919 * Return: Link speed in Gb/s or negative errno in case of failure.
920 */
tb_port_get_link_speed(struct tb_port * port)921 int tb_port_get_link_speed(struct tb_port *port)
922 {
923 u32 val, speed;
924 int ret;
925
926 if (!port->cap_phy)
927 return -EINVAL;
928
929 ret = tb_port_read(port, &val, TB_CFG_PORT,
930 port->cap_phy + LANE_ADP_CS_1, 1);
931 if (ret)
932 return ret;
933
934 speed = (val & LANE_ADP_CS_1_CURRENT_SPEED_MASK) >>
935 LANE_ADP_CS_1_CURRENT_SPEED_SHIFT;
936
937 switch (speed) {
938 case LANE_ADP_CS_1_CURRENT_SPEED_GEN4:
939 return 40;
940 case LANE_ADP_CS_1_CURRENT_SPEED_GEN3:
941 return 20;
942 default:
943 return 10;
944 }
945 }
946
947 /**
948 * tb_port_get_link_generation() - Returns link generation
949 * @port: Lane adapter
950 *
951 * Return: Link generation as a number or negative errno in case of
952 * failure.
953 *
954 * Does not distinguish between Thunderbolt 1 and Thunderbolt 2
955 * links so for those always returns %2.
956 */
tb_port_get_link_generation(struct tb_port * port)957 int tb_port_get_link_generation(struct tb_port *port)
958 {
959 int ret;
960
961 ret = tb_port_get_link_speed(port);
962 if (ret < 0)
963 return ret;
964
965 switch (ret) {
966 case 40:
967 return 4;
968 case 20:
969 return 3;
970 default:
971 return 2;
972 }
973 }
974
975 /**
976 * tb_port_get_link_width() - Get current link width
977 * @port: Port to check (USB4 or CIO)
978 *
979 * Return: Link width encoded in &enum tb_link_width or
980 * negative errno in case of failure.
981 */
tb_port_get_link_width(struct tb_port * port)982 int tb_port_get_link_width(struct tb_port *port)
983 {
984 u32 val;
985 int ret;
986
987 if (!port->cap_phy)
988 return -EINVAL;
989
990 ret = tb_port_read(port, &val, TB_CFG_PORT,
991 port->cap_phy + LANE_ADP_CS_1, 1);
992 if (ret)
993 return ret;
994
995 /* Matches the values in enum tb_link_width */
996 return (val & LANE_ADP_CS_1_CURRENT_WIDTH_MASK) >>
997 LANE_ADP_CS_1_CURRENT_WIDTH_SHIFT;
998 }
999
1000 /**
1001 * tb_port_width_supported() - Is the given link width supported
1002 * @port: Port to check
1003 * @width: Widths to check (bitmask)
1004 *
1005 * Can be called to any lane adapter. Checks if given @width is
1006 * supported by the hardware.
1007 *
1008 * Return: %true if link width is supported, %false otherwise.
1009 */
tb_port_width_supported(struct tb_port * port,unsigned int width)1010 bool tb_port_width_supported(struct tb_port *port, unsigned int width)
1011 {
1012 u32 phy, widths;
1013 int ret;
1014
1015 if (!port->cap_phy)
1016 return false;
1017
1018 if (width & (TB_LINK_WIDTH_ASYM_TX | TB_LINK_WIDTH_ASYM_RX)) {
1019 if (tb_port_get_link_generation(port) < 4 ||
1020 !usb4_port_asym_supported(port))
1021 return false;
1022 }
1023
1024 ret = tb_port_read(port, &phy, TB_CFG_PORT,
1025 port->cap_phy + LANE_ADP_CS_0, 1);
1026 if (ret)
1027 return false;
1028
1029 /*
1030 * The field encoding is the same as &enum tb_link_width (which is
1031 * passed to @width).
1032 */
1033 widths = FIELD_GET(LANE_ADP_CS_0_SUPPORTED_WIDTH_MASK, phy);
1034 return widths & width;
1035 }
1036
1037 /**
1038 * tb_port_set_link_width() - Set target link width of the lane adapter
1039 * @port: Lane adapter
1040 * @width: Target link width
1041 *
1042 * Sets the target link width of the lane adapter to @width. Does not
1043 * enable/disable lane bonding. For that call tb_port_set_lane_bonding().
1044 *
1045 * Return: %0 on success, negative errno otherwise.
1046 */
tb_port_set_link_width(struct tb_port * port,enum tb_link_width width)1047 int tb_port_set_link_width(struct tb_port *port, enum tb_link_width width)
1048 {
1049 u32 val;
1050 int ret;
1051
1052 if (!port->cap_phy)
1053 return -EINVAL;
1054
1055 ret = tb_port_read(port, &val, TB_CFG_PORT,
1056 port->cap_phy + LANE_ADP_CS_1, 1);
1057 if (ret)
1058 return ret;
1059
1060 val &= ~LANE_ADP_CS_1_TARGET_WIDTH_MASK;
1061 switch (width) {
1062 case TB_LINK_WIDTH_SINGLE:
1063 /* Gen 4 link cannot be single */
1064 if (tb_port_get_link_generation(port) >= 4)
1065 return -EOPNOTSUPP;
1066 val |= LANE_ADP_CS_1_TARGET_WIDTH_SINGLE <<
1067 LANE_ADP_CS_1_TARGET_WIDTH_SHIFT;
1068 break;
1069
1070 case TB_LINK_WIDTH_DUAL:
1071 if (tb_port_get_link_generation(port) >= 4)
1072 return usb4_port_asym_set_link_width(port, width);
1073 val |= LANE_ADP_CS_1_TARGET_WIDTH_DUAL <<
1074 LANE_ADP_CS_1_TARGET_WIDTH_SHIFT;
1075 break;
1076
1077 case TB_LINK_WIDTH_ASYM_TX:
1078 case TB_LINK_WIDTH_ASYM_RX:
1079 return usb4_port_asym_set_link_width(port, width);
1080
1081 default:
1082 return -EINVAL;
1083 }
1084
1085 return tb_port_write(port, &val, TB_CFG_PORT,
1086 port->cap_phy + LANE_ADP_CS_1, 1);
1087 }
1088
1089 /**
1090 * tb_port_set_lane_bonding() - Enable/disable lane bonding
1091 * @port: Lane adapter
1092 * @bonding: enable/disable bonding
1093 *
1094 * Enables or disables lane bonding. This should be called after target
1095 * link width has been set (tb_port_set_link_width()). Note in most
1096 * cases one should use tb_port_lane_bonding_enable() instead to enable
1097 * lane bonding.
1098 *
1099 * Return: %0 on success, negative errno otherwise.
1100 */
tb_port_set_lane_bonding(struct tb_port * port,bool bonding)1101 static int tb_port_set_lane_bonding(struct tb_port *port, bool bonding)
1102 {
1103 u32 val;
1104 int ret;
1105
1106 if (!port->cap_phy)
1107 return -EINVAL;
1108
1109 ret = tb_port_read(port, &val, TB_CFG_PORT,
1110 port->cap_phy + LANE_ADP_CS_1, 1);
1111 if (ret)
1112 return ret;
1113
1114 if (bonding)
1115 val |= LANE_ADP_CS_1_LB;
1116 else
1117 val &= ~LANE_ADP_CS_1_LB;
1118
1119 return tb_port_write(port, &val, TB_CFG_PORT,
1120 port->cap_phy + LANE_ADP_CS_1, 1);
1121 }
1122
1123 /**
1124 * tb_port_lane_bonding_enable() - Enable bonding on port
1125 * @port: port to enable
1126 *
1127 * Enable bonding by setting the link width of the port and the other
1128 * port in case of dual link port. Does not wait for the link to
1129 * actually reach the bonded state so caller needs to call
1130 * tb_port_wait_for_link_width() before enabling any paths through the
1131 * link to make sure the link is in expected state.
1132 *
1133 * Return: %0 on success, negative errno otherwise.
1134 */
tb_port_lane_bonding_enable(struct tb_port * port)1135 int tb_port_lane_bonding_enable(struct tb_port *port)
1136 {
1137 enum tb_link_width width;
1138 int ret;
1139
1140 /*
1141 * Enable lane bonding for both links if not already enabled by
1142 * for example the boot firmware.
1143 */
1144 width = tb_port_get_link_width(port);
1145 if (width == TB_LINK_WIDTH_SINGLE) {
1146 ret = tb_port_set_link_width(port, TB_LINK_WIDTH_DUAL);
1147 if (ret)
1148 goto err_lane0;
1149 }
1150
1151 width = tb_port_get_link_width(port->dual_link_port);
1152 if (width == TB_LINK_WIDTH_SINGLE) {
1153 ret = tb_port_set_link_width(port->dual_link_port,
1154 TB_LINK_WIDTH_DUAL);
1155 if (ret)
1156 goto err_lane1;
1157 }
1158
1159 /*
1160 * Only set bonding if the link was not already bonded. This
1161 * avoids the lane adapter to re-enter bonding state.
1162 */
1163 if (width == TB_LINK_WIDTH_SINGLE && !tb_is_upstream_port(port)) {
1164 ret = tb_port_set_lane_bonding(port, true);
1165 if (ret)
1166 goto err_lane1;
1167 }
1168
1169 /*
1170 * When lane 0 bonding is set it will affect lane 1 too so
1171 * update both.
1172 */
1173 port->bonded = true;
1174 port->dual_link_port->bonded = true;
1175
1176 return 0;
1177
1178 err_lane1:
1179 tb_port_set_link_width(port->dual_link_port, TB_LINK_WIDTH_SINGLE);
1180 err_lane0:
1181 tb_port_set_link_width(port, TB_LINK_WIDTH_SINGLE);
1182
1183 return ret;
1184 }
1185
1186 /**
1187 * tb_port_lane_bonding_disable() - Disable bonding on port
1188 * @port: port to disable
1189 *
1190 * Disable bonding by setting the link width of the port and the
1191 * other port in case of dual link port.
1192 */
tb_port_lane_bonding_disable(struct tb_port * port)1193 void tb_port_lane_bonding_disable(struct tb_port *port)
1194 {
1195 tb_port_set_lane_bonding(port, false);
1196 tb_port_set_link_width(port->dual_link_port, TB_LINK_WIDTH_SINGLE);
1197 tb_port_set_link_width(port, TB_LINK_WIDTH_SINGLE);
1198 port->dual_link_port->bonded = false;
1199 port->bonded = false;
1200 }
1201
1202 /**
1203 * tb_port_wait_for_link_width() - Wait until link reaches specific width
1204 * @port: Port to wait for
1205 * @width: Expected link width (bitmask)
1206 * @timeout_msec: Timeout in ms how long to wait
1207 *
1208 * Should be used after both ends of the link have been bonded (or
1209 * bonding has been disabled) to wait until the link actually reaches
1210 * the expected state.
1211 *
1212 * Can be passed a mask of expected widths.
1213 *
1214 * Return:
1215 * * %0 - If link reaches any of the specified widths.
1216 * * %-ETIMEDOUT - If link does not reach specified width.
1217 * * Negative errno - Another error occurred.
1218 */
tb_port_wait_for_link_width(struct tb_port * port,unsigned int width,int timeout_msec)1219 int tb_port_wait_for_link_width(struct tb_port *port, unsigned int width,
1220 int timeout_msec)
1221 {
1222 ktime_t timeout = ktime_add_ms(ktime_get(), timeout_msec);
1223 int ret;
1224
1225 /* Gen 4 link does not support single lane */
1226 if ((width & TB_LINK_WIDTH_SINGLE) &&
1227 tb_port_get_link_generation(port) >= 4)
1228 return -EOPNOTSUPP;
1229
1230 do {
1231 ret = tb_port_get_link_width(port);
1232 if (ret < 0) {
1233 /*
1234 * Sometimes we get port locked error when
1235 * polling the lanes so we can ignore it and
1236 * retry.
1237 */
1238 if (ret != -EACCES)
1239 return ret;
1240 } else if (ret & width) {
1241 return 0;
1242 }
1243
1244 usleep_range(1000, 2000);
1245 } while (ktime_before(ktime_get(), timeout));
1246
1247 return -ETIMEDOUT;
1248 }
1249
tb_port_do_update_credits(struct tb_port * port)1250 static int tb_port_do_update_credits(struct tb_port *port)
1251 {
1252 u32 nfc_credits;
1253 int ret;
1254
1255 ret = tb_port_read(port, &nfc_credits, TB_CFG_PORT, ADP_CS_4, 1);
1256 if (ret)
1257 return ret;
1258
1259 if (nfc_credits != port->config.nfc_credits) {
1260 u32 total;
1261
1262 total = (nfc_credits & ADP_CS_4_TOTAL_BUFFERS_MASK) >>
1263 ADP_CS_4_TOTAL_BUFFERS_SHIFT;
1264
1265 tb_port_dbg(port, "total credits changed %u -> %u\n",
1266 port->total_credits, total);
1267
1268 port->config.nfc_credits = nfc_credits;
1269 port->total_credits = total;
1270 }
1271
1272 return 0;
1273 }
1274
1275 /**
1276 * tb_port_update_credits() - Re-read port total credits
1277 * @port: Port to update
1278 *
1279 * After the link is bonded (or bonding was disabled) the port total
1280 * credits may change, so this function needs to be called to re-read
1281 * the credits. Updates also the second lane adapter.
1282 *
1283 * Return: %0 on success, negative errno otherwise.
1284 */
tb_port_update_credits(struct tb_port * port)1285 int tb_port_update_credits(struct tb_port *port)
1286 {
1287 int ret;
1288
1289 ret = tb_port_do_update_credits(port);
1290 if (ret)
1291 return ret;
1292
1293 if (!port->dual_link_port)
1294 return 0;
1295 return tb_port_do_update_credits(port->dual_link_port);
1296 }
1297
tb_port_start_lane_initialization(struct tb_port * port)1298 static int tb_port_start_lane_initialization(struct tb_port *port)
1299 {
1300 int ret;
1301
1302 if (tb_switch_is_usb4(port->sw))
1303 return 0;
1304
1305 ret = tb_lc_start_lane_initialization(port);
1306 return ret == -EINVAL ? 0 : ret;
1307 }
1308
1309 /*
1310 * Returns true if the port had something (router, XDomain) connected
1311 * before suspend.
1312 */
tb_port_resume(struct tb_port * port)1313 static bool tb_port_resume(struct tb_port *port)
1314 {
1315 bool has_remote = tb_port_has_remote(port);
1316
1317 if (port->usb4) {
1318 usb4_port_device_resume(port->usb4);
1319 } else if (!has_remote) {
1320 /*
1321 * For disconnected downstream lane adapters start lane
1322 * initialization now so we detect future connects.
1323 *
1324 * For XDomain start the lane initialzation now so the
1325 * link gets re-established.
1326 *
1327 * This is only needed for non-USB4 ports.
1328 */
1329 if (!tb_is_upstream_port(port) || port->xdomain)
1330 tb_port_start_lane_initialization(port);
1331 }
1332
1333 return has_remote || port->xdomain;
1334 }
1335
1336 /**
1337 * tb_port_is_enabled() - Is the adapter port enabled
1338 * @port: Port to check
1339 *
1340 * Return: %true if port is enabled, %false otherwise.
1341 */
tb_port_is_enabled(struct tb_port * port)1342 bool tb_port_is_enabled(struct tb_port *port)
1343 {
1344 switch (port->config.type) {
1345 case TB_TYPE_PCIE_UP:
1346 case TB_TYPE_PCIE_DOWN:
1347 return tb_pci_port_is_enabled(port);
1348
1349 case TB_TYPE_DP_HDMI_IN:
1350 case TB_TYPE_DP_HDMI_OUT:
1351 return tb_dp_port_is_enabled(port);
1352
1353 case TB_TYPE_USB3_UP:
1354 case TB_TYPE_USB3_DOWN:
1355 return tb_usb3_port_is_enabled(port);
1356
1357 default:
1358 return false;
1359 }
1360 }
1361
1362 /**
1363 * tb_usb3_port_is_enabled() - Is the USB3 adapter port enabled
1364 * @port: USB3 adapter port to check
1365 *
1366 * Return: %true if port is enabled, %false otherwise.
1367 */
tb_usb3_port_is_enabled(struct tb_port * port)1368 bool tb_usb3_port_is_enabled(struct tb_port *port)
1369 {
1370 u32 data;
1371
1372 if (tb_port_read(port, &data, TB_CFG_PORT,
1373 port->cap_adap + ADP_USB3_CS_0, 1))
1374 return false;
1375
1376 return !!(data & ADP_USB3_CS_0_PE);
1377 }
1378
1379 /**
1380 * tb_usb3_port_enable() - Enable USB3 adapter port
1381 * @port: USB3 adapter port to enable
1382 * @enable: Enable/disable the USB3 adapter
1383 *
1384 * Return: %0 on success, negative errno otherwise.
1385 */
tb_usb3_port_enable(struct tb_port * port,bool enable)1386 int tb_usb3_port_enable(struct tb_port *port, bool enable)
1387 {
1388 u32 word = enable ? (ADP_USB3_CS_0_PE | ADP_USB3_CS_0_V)
1389 : ADP_USB3_CS_0_V;
1390
1391 if (!port->cap_adap)
1392 return -ENXIO;
1393 return tb_port_write(port, &word, TB_CFG_PORT,
1394 port->cap_adap + ADP_USB3_CS_0, 1);
1395 }
1396
1397 /**
1398 * tb_pci_port_is_enabled() - Is the PCIe adapter port enabled
1399 * @port: PCIe port to check
1400 *
1401 * Return: %true if port is enabled, %false otherwise.
1402 */
tb_pci_port_is_enabled(struct tb_port * port)1403 bool tb_pci_port_is_enabled(struct tb_port *port)
1404 {
1405 u32 data;
1406
1407 if (tb_port_read(port, &data, TB_CFG_PORT,
1408 port->cap_adap + ADP_PCIE_CS_0, 1))
1409 return false;
1410
1411 return !!(data & ADP_PCIE_CS_0_PE);
1412 }
1413
1414 /**
1415 * tb_pci_port_enable() - Enable PCIe adapter port
1416 * @port: PCIe port to enable
1417 * @enable: Enable/disable the PCIe adapter
1418 *
1419 * Return: %0 on success, negative errno otherwise.
1420 */
tb_pci_port_enable(struct tb_port * port,bool enable)1421 int tb_pci_port_enable(struct tb_port *port, bool enable)
1422 {
1423 u32 word = enable ? ADP_PCIE_CS_0_PE : 0x0;
1424 if (!port->cap_adap)
1425 return -ENXIO;
1426 return tb_port_write(port, &word, TB_CFG_PORT,
1427 port->cap_adap + ADP_PCIE_CS_0, 1);
1428 }
1429
1430 /**
1431 * tb_dp_port_hpd_is_active() - Is HPD already active
1432 * @port: DP out port to check
1433 *
1434 * Checks if the DP OUT adapter port has HPD bit already set.
1435 *
1436 * Return: %1 if HPD is active, %0 otherwise.
1437 */
tb_dp_port_hpd_is_active(struct tb_port * port)1438 int tb_dp_port_hpd_is_active(struct tb_port *port)
1439 {
1440 u32 data;
1441 int ret;
1442
1443 ret = tb_port_read(port, &data, TB_CFG_PORT,
1444 port->cap_adap + ADP_DP_CS_2, 1);
1445 if (ret)
1446 return ret;
1447
1448 return !!(data & ADP_DP_CS_2_HPD);
1449 }
1450
1451 /**
1452 * tb_dp_port_hpd_clear() - Clear HPD from DP IN port
1453 * @port: Port to clear HPD
1454 *
1455 * If the DP IN port has HPD set, this function can be used to clear it.
1456 *
1457 * Return: %0 on success, negative errno otherwise.
1458 */
tb_dp_port_hpd_clear(struct tb_port * port)1459 int tb_dp_port_hpd_clear(struct tb_port *port)
1460 {
1461 u32 data;
1462 int ret;
1463
1464 ret = tb_port_read(port, &data, TB_CFG_PORT,
1465 port->cap_adap + ADP_DP_CS_3, 1);
1466 if (ret)
1467 return ret;
1468
1469 data |= ADP_DP_CS_3_HPDC;
1470 return tb_port_write(port, &data, TB_CFG_PORT,
1471 port->cap_adap + ADP_DP_CS_3, 1);
1472 }
1473
1474 /**
1475 * tb_dp_port_set_hops() - Set video/aux Hop IDs for DP port
1476 * @port: DP IN/OUT port to set hops
1477 * @video: Video Hop ID
1478 * @aux_tx: AUX TX Hop ID
1479 * @aux_rx: AUX RX Hop ID
1480 *
1481 * Programs specified Hop IDs for DP IN/OUT port. Can be called for USB4
1482 * router DP adapters too but does not program the values as the fields
1483 * are read-only.
1484 *
1485 * Return: %0 on success, negative errno otherwise.
1486 */
tb_dp_port_set_hops(struct tb_port * port,unsigned int video,unsigned int aux_tx,unsigned int aux_rx)1487 int tb_dp_port_set_hops(struct tb_port *port, unsigned int video,
1488 unsigned int aux_tx, unsigned int aux_rx)
1489 {
1490 u32 data[2];
1491 int ret;
1492
1493 if (tb_switch_is_usb4(port->sw))
1494 return 0;
1495
1496 ret = tb_port_read(port, data, TB_CFG_PORT,
1497 port->cap_adap + ADP_DP_CS_0, ARRAY_SIZE(data));
1498 if (ret)
1499 return ret;
1500
1501 data[0] &= ~ADP_DP_CS_0_VIDEO_HOPID_MASK;
1502 data[1] &= ~ADP_DP_CS_1_AUX_TX_HOPID_MASK;
1503 data[1] &= ~ADP_DP_CS_1_AUX_RX_HOPID_MASK;
1504
1505 data[0] |= (video << ADP_DP_CS_0_VIDEO_HOPID_SHIFT) &
1506 ADP_DP_CS_0_VIDEO_HOPID_MASK;
1507 data[1] |= aux_tx & ADP_DP_CS_1_AUX_TX_HOPID_MASK;
1508 data[1] |= (aux_rx << ADP_DP_CS_1_AUX_RX_HOPID_SHIFT) &
1509 ADP_DP_CS_1_AUX_RX_HOPID_MASK;
1510
1511 return tb_port_write(port, data, TB_CFG_PORT,
1512 port->cap_adap + ADP_DP_CS_0, ARRAY_SIZE(data));
1513 }
1514
1515 /**
1516 * tb_dp_port_is_enabled() - Is DP adapter port enabled
1517 * @port: DP adapter port to check
1518 *
1519 * Return: %true if DP port is enabled, %false otherwise.
1520 */
tb_dp_port_is_enabled(struct tb_port * port)1521 bool tb_dp_port_is_enabled(struct tb_port *port)
1522 {
1523 u32 data[2];
1524
1525 if (tb_port_read(port, data, TB_CFG_PORT, port->cap_adap + ADP_DP_CS_0,
1526 ARRAY_SIZE(data)))
1527 return false;
1528
1529 return !!(data[0] & (ADP_DP_CS_0_VE | ADP_DP_CS_0_AE));
1530 }
1531
1532 /**
1533 * tb_dp_port_enable() - Enables/disables DP paths of a port
1534 * @port: DP IN/OUT port
1535 * @enable: Enable/disable DP path
1536 *
1537 * Once Hop IDs are programmed DP paths can be enabled or disabled by
1538 * calling this function.
1539 *
1540 * Return: %0 on success, negative errno otherwise.
1541 */
tb_dp_port_enable(struct tb_port * port,bool enable)1542 int tb_dp_port_enable(struct tb_port *port, bool enable)
1543 {
1544 u32 data[2];
1545 int ret;
1546
1547 ret = tb_port_read(port, data, TB_CFG_PORT,
1548 port->cap_adap + ADP_DP_CS_0, ARRAY_SIZE(data));
1549 if (ret)
1550 return ret;
1551
1552 if (enable)
1553 data[0] |= ADP_DP_CS_0_VE | ADP_DP_CS_0_AE;
1554 else
1555 data[0] &= ~(ADP_DP_CS_0_VE | ADP_DP_CS_0_AE);
1556
1557 return tb_port_write(port, data, TB_CFG_PORT,
1558 port->cap_adap + ADP_DP_CS_0, ARRAY_SIZE(data));
1559 }
1560
1561 /* switch utility functions */
1562
tb_switch_generation_name(const struct tb_switch * sw)1563 static const char *tb_switch_generation_name(const struct tb_switch *sw)
1564 {
1565 switch (sw->generation) {
1566 case 1:
1567 return "Thunderbolt 1";
1568 case 2:
1569 return "Thunderbolt 2";
1570 case 3:
1571 return "Thunderbolt 3";
1572 case 4:
1573 return "USB4";
1574 default:
1575 return "Unknown";
1576 }
1577 }
1578
tb_dump_switch(const struct tb * tb,const struct tb_switch * sw)1579 static void tb_dump_switch(const struct tb *tb, const struct tb_switch *sw)
1580 {
1581 const struct tb_regs_switch_header *regs = &sw->config;
1582
1583 tb_dbg(tb, " %s Switch: %x:%x (Revision: %d, TB Version: %d)\n",
1584 tb_switch_generation_name(sw), regs->vendor_id, regs->device_id,
1585 regs->revision, regs->thunderbolt_version);
1586 tb_dbg(tb, " Max Port Number: %d\n", regs->max_port_number);
1587 tb_dbg(tb, " Config:\n");
1588 tb_dbg(tb,
1589 " Upstream Port Number: %d Depth: %d Route String: %#llx Enabled: %d, PlugEventsDelay: %dms\n",
1590 regs->upstream_port_number, regs->depth,
1591 (((u64) regs->route_hi) << 32) | regs->route_lo,
1592 regs->enabled, regs->plug_events_delay);
1593 tb_dbg(tb, " unknown1: %#x unknown4: %#x\n",
1594 regs->__unknown1, regs->__unknown4);
1595 }
1596
tb_switch_reset_host(struct tb_switch * sw)1597 static int tb_switch_reset_host(struct tb_switch *sw)
1598 {
1599 if (sw->generation > 1) {
1600 struct tb_port *port;
1601
1602 tb_switch_for_each_port(sw, port) {
1603 int i, ret;
1604
1605 /*
1606 * For lane adapters we issue downstream port
1607 * reset and clear up path config spaces.
1608 *
1609 * For protocol adapters we disable the path and
1610 * clear path config space one by one (from 8 to
1611 * Max Input HopID of the adapter).
1612 */
1613 if (tb_port_is_null(port) && !tb_is_upstream_port(port)) {
1614 ret = tb_port_reset(port);
1615 if (ret)
1616 return ret;
1617 /*
1618 * USB4 Lane 1 adapters do not have accessible
1619 * path config space.
1620 */
1621 if (tb_switch_is_usb4(sw) && !port->usb4)
1622 continue;
1623 } else if (tb_port_is_usb3_down(port) ||
1624 tb_port_is_usb3_up(port)) {
1625 tb_usb3_port_enable(port, false);
1626 } else if (tb_port_is_dpin(port) ||
1627 tb_port_is_dpout(port)) {
1628 tb_dp_port_enable(port, false);
1629 } else if (tb_port_is_pcie_down(port) ||
1630 tb_port_is_pcie_up(port)) {
1631 tb_pci_port_enable(port, false);
1632 } else {
1633 continue;
1634 }
1635
1636 /* Cleanup path config space of protocol adapter */
1637 for (i = TB_PATH_MIN_HOPID;
1638 i <= port->config.max_in_hop_id; i++) {
1639 ret = tb_path_deactivate_hop(port, i);
1640 if (ret)
1641 return ret;
1642 }
1643 }
1644 } else {
1645 struct tb_cfg_result res;
1646
1647 /* Thunderbolt 1 uses the "reset" config space packet */
1648 res.err = tb_sw_write(sw, ((u32 *) &sw->config) + 2,
1649 TB_CFG_SWITCH, 2, 2);
1650 if (res.err)
1651 return res.err;
1652 res = tb_cfg_reset(sw->tb->ctl, tb_route(sw));
1653 if (res.err > 0)
1654 return -EIO;
1655 else if (res.err < 0)
1656 return res.err;
1657 }
1658
1659 return 0;
1660 }
1661
tb_switch_reset_device(struct tb_switch * sw)1662 static int tb_switch_reset_device(struct tb_switch *sw)
1663 {
1664 return tb_port_reset(tb_switch_downstream_port(sw));
1665 }
1666
tb_switch_enumerated(struct tb_switch * sw)1667 static bool tb_switch_enumerated(struct tb_switch *sw)
1668 {
1669 u32 val;
1670 int ret;
1671
1672 /*
1673 * Read directly from the hardware because we use this also
1674 * during system sleep where sw->config.enabled is already set
1675 * by us.
1676 */
1677 ret = tb_sw_read(sw, &val, TB_CFG_SWITCH, ROUTER_CS_3, 1);
1678 if (ret)
1679 return false;
1680
1681 return !!(val & ROUTER_CS_3_V);
1682 }
1683
1684 /**
1685 * tb_switch_reset() - Perform reset to the router
1686 * @sw: Router to reset
1687 *
1688 * Issues reset to the router @sw. Can be used for any router. For host
1689 * routers, resets all the downstream ports and cleans up path config
1690 * spaces accordingly. For device routers issues downstream port reset
1691 * through the parent router, so as side effect there will be unplug
1692 * soon after this is finished.
1693 *
1694 * If the router is not enumerated does nothing.
1695 *
1696 * Return: %0 on success, negative errno otherwise.
1697 */
tb_switch_reset(struct tb_switch * sw)1698 int tb_switch_reset(struct tb_switch *sw)
1699 {
1700 int ret;
1701
1702 /*
1703 * We cannot access the port config spaces unless the router is
1704 * already enumerated. If the router is not enumerated it is
1705 * equal to being reset so we can skip that here.
1706 */
1707 if (!tb_switch_enumerated(sw))
1708 return 0;
1709
1710 tb_sw_dbg(sw, "resetting\n");
1711
1712 if (tb_route(sw))
1713 ret = tb_switch_reset_device(sw);
1714 else
1715 ret = tb_switch_reset_host(sw);
1716
1717 if (ret)
1718 tb_sw_warn(sw, "failed to reset\n");
1719
1720 return ret;
1721 }
1722
1723 /**
1724 * tb_switch_wait_for_bit() - Wait for specified value of bits in offset
1725 * @sw: Router to read the offset value from
1726 * @offset: Offset in the router config space to read from
1727 * @bit: Bit mask in the offset to wait for
1728 * @value: Value of the bits to wait for
1729 * @timeout_msec: Timeout in ms how long to wait
1730 *
1731 * Wait till the specified bits in specified offset reach specified value.
1732 *
1733 * Return:
1734 * * %0 - On success.
1735 * * %-ETIMEDOUT - If the @value was not reached within
1736 * the given timeout.
1737 * * Negative errno - In case of failure.
1738 */
tb_switch_wait_for_bit(struct tb_switch * sw,u32 offset,u32 bit,u32 value,int timeout_msec)1739 int tb_switch_wait_for_bit(struct tb_switch *sw, u32 offset, u32 bit,
1740 u32 value, int timeout_msec)
1741 {
1742 ktime_t timeout = ktime_add_ms(ktime_get(), timeout_msec);
1743
1744 do {
1745 u32 val;
1746 int ret;
1747
1748 ret = tb_sw_read(sw, &val, TB_CFG_SWITCH, offset, 1);
1749 if (ret)
1750 return ret;
1751
1752 if ((val & bit) == value)
1753 return 0;
1754
1755 usleep_range(50, 100);
1756 } while (ktime_before(ktime_get(), timeout));
1757
1758 return -ETIMEDOUT;
1759 }
1760
1761 /*
1762 * tb_plug_events_active() - enable/disable plug events on a switch
1763 *
1764 * Return: %0 on success, negative errno otherwise.
1765 */
tb_plug_events_active(struct tb_switch * sw,bool active)1766 static int tb_plug_events_active(struct tb_switch *sw, bool active)
1767 {
1768 u32 data;
1769 int res;
1770
1771 if (tb_switch_is_icm(sw) || tb_switch_is_usb4(sw))
1772 return 0;
1773
1774 res = tb_sw_read(sw, &data, TB_CFG_SWITCH, sw->cap_plug_events + 1, 1);
1775 if (res)
1776 return res;
1777
1778 if (active) {
1779 data = data & 0xFFFFFF83;
1780 switch (sw->config.device_id) {
1781 case PCI_DEVICE_ID_INTEL_LIGHT_RIDGE:
1782 case PCI_DEVICE_ID_INTEL_EAGLE_RIDGE:
1783 case PCI_DEVICE_ID_INTEL_PORT_RIDGE:
1784 break;
1785 default:
1786 /*
1787 * Skip Alpine Ridge, it needs to have vendor
1788 * specific USB hotplug event enabled for the
1789 * internal xHCI to work.
1790 */
1791 if (!tb_switch_is_alpine_ridge(sw))
1792 data |= TB_PLUG_EVENTS_USB_DISABLE;
1793 }
1794 } else {
1795 data = data | 0x7c;
1796 }
1797 return tb_sw_write(sw, &data, TB_CFG_SWITCH,
1798 sw->cap_plug_events + 1, 1);
1799 }
1800
authorized_show(struct device * dev,struct device_attribute * attr,char * buf)1801 static ssize_t authorized_show(struct device *dev,
1802 struct device_attribute *attr,
1803 char *buf)
1804 {
1805 struct tb_switch *sw = tb_to_switch(dev);
1806
1807 return sysfs_emit(buf, "%u\n", sw->authorized);
1808 }
1809
disapprove_switch(struct device * dev,void * not_used)1810 static int disapprove_switch(struct device *dev, void *not_used)
1811 {
1812 char *envp[] = { "AUTHORIZED=0", NULL };
1813 struct tb_switch *sw;
1814
1815 sw = tb_to_switch(dev);
1816 if (sw && sw->authorized) {
1817 int ret;
1818
1819 /* First children */
1820 ret = device_for_each_child_reverse(&sw->dev, NULL, disapprove_switch);
1821 if (ret)
1822 return ret;
1823
1824 ret = tb_domain_disapprove_switch(sw->tb, sw);
1825 if (ret)
1826 return ret;
1827
1828 sw->authorized = 0;
1829 kobject_uevent_env(&sw->dev.kobj, KOBJ_CHANGE, envp);
1830 }
1831
1832 return 0;
1833 }
1834
tb_switch_set_authorized(struct tb_switch * sw,unsigned int val)1835 static int tb_switch_set_authorized(struct tb_switch *sw, unsigned int val)
1836 {
1837 char envp_string[13];
1838 int ret = -EINVAL;
1839 char *envp[] = { envp_string, NULL };
1840
1841 if (!mutex_trylock(&sw->tb->lock))
1842 return restart_syscall();
1843
1844 if (!!sw->authorized == !!val)
1845 goto unlock;
1846
1847 switch (val) {
1848 /* Disapprove switch */
1849 case 0:
1850 if (tb_route(sw)) {
1851 ret = disapprove_switch(&sw->dev, NULL);
1852 goto unlock;
1853 }
1854 break;
1855
1856 /* Approve switch */
1857 case 1:
1858 if (sw->key)
1859 ret = tb_domain_approve_switch_key(sw->tb, sw);
1860 else
1861 ret = tb_domain_approve_switch(sw->tb, sw);
1862 break;
1863
1864 /* Challenge switch */
1865 case 2:
1866 if (sw->key)
1867 ret = tb_domain_challenge_switch_key(sw->tb, sw);
1868 break;
1869
1870 default:
1871 break;
1872 }
1873
1874 if (!ret) {
1875 sw->authorized = val;
1876 /*
1877 * Notify status change to the userspace, informing the new
1878 * value of /sys/bus/thunderbolt/devices/.../authorized.
1879 */
1880 sprintf(envp_string, "AUTHORIZED=%u", sw->authorized);
1881 kobject_uevent_env(&sw->dev.kobj, KOBJ_CHANGE, envp);
1882 }
1883
1884 unlock:
1885 mutex_unlock(&sw->tb->lock);
1886 return ret;
1887 }
1888
authorized_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)1889 static ssize_t authorized_store(struct device *dev,
1890 struct device_attribute *attr,
1891 const char *buf, size_t count)
1892 {
1893 struct tb_switch *sw = tb_to_switch(dev);
1894 unsigned int val;
1895 ssize_t ret;
1896
1897 ret = kstrtouint(buf, 0, &val);
1898 if (ret)
1899 return ret;
1900 if (val > 2)
1901 return -EINVAL;
1902
1903 pm_runtime_get_sync(&sw->dev);
1904 ret = tb_switch_set_authorized(sw, val);
1905 pm_runtime_mark_last_busy(&sw->dev);
1906 pm_runtime_put_autosuspend(&sw->dev);
1907
1908 return ret ? ret : count;
1909 }
1910 static DEVICE_ATTR_RW(authorized);
1911
boot_show(struct device * dev,struct device_attribute * attr,char * buf)1912 static ssize_t boot_show(struct device *dev, struct device_attribute *attr,
1913 char *buf)
1914 {
1915 struct tb_switch *sw = tb_to_switch(dev);
1916
1917 return sysfs_emit(buf, "%u\n", sw->boot);
1918 }
1919 static DEVICE_ATTR_RO(boot);
1920
device_show(struct device * dev,struct device_attribute * attr,char * buf)1921 static ssize_t device_show(struct device *dev, struct device_attribute *attr,
1922 char *buf)
1923 {
1924 struct tb_switch *sw = tb_to_switch(dev);
1925
1926 return sysfs_emit(buf, "%#x\n", sw->device);
1927 }
1928 static DEVICE_ATTR_RO(device);
1929
1930 static ssize_t
device_name_show(struct device * dev,struct device_attribute * attr,char * buf)1931 device_name_show(struct device *dev, struct device_attribute *attr, char *buf)
1932 {
1933 struct tb_switch *sw = tb_to_switch(dev);
1934
1935 return sysfs_emit(buf, "%s\n", sw->device_name ?: "");
1936 }
1937 static DEVICE_ATTR_RO(device_name);
1938
1939 static ssize_t
generation_show(struct device * dev,struct device_attribute * attr,char * buf)1940 generation_show(struct device *dev, struct device_attribute *attr, char *buf)
1941 {
1942 struct tb_switch *sw = tb_to_switch(dev);
1943
1944 return sysfs_emit(buf, "%u\n", sw->generation);
1945 }
1946 static DEVICE_ATTR_RO(generation);
1947
key_show(struct device * dev,struct device_attribute * attr,char * buf)1948 static ssize_t key_show(struct device *dev, struct device_attribute *attr,
1949 char *buf)
1950 {
1951 struct tb_switch *sw = tb_to_switch(dev);
1952 ssize_t ret;
1953
1954 if (!mutex_trylock(&sw->tb->lock))
1955 return restart_syscall();
1956
1957 if (sw->key)
1958 ret = sysfs_emit(buf, "%*phN\n", TB_SWITCH_KEY_SIZE, sw->key);
1959 else
1960 ret = sysfs_emit(buf, "\n");
1961
1962 mutex_unlock(&sw->tb->lock);
1963 return ret;
1964 }
1965
key_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)1966 static ssize_t key_store(struct device *dev, struct device_attribute *attr,
1967 const char *buf, size_t count)
1968 {
1969 struct tb_switch *sw = tb_to_switch(dev);
1970 u8 key[TB_SWITCH_KEY_SIZE];
1971 ssize_t ret = count;
1972 bool clear = false;
1973
1974 if (!strcmp(buf, "\n"))
1975 clear = true;
1976 else if (hex2bin(key, buf, sizeof(key)))
1977 return -EINVAL;
1978
1979 if (!mutex_trylock(&sw->tb->lock))
1980 return restart_syscall();
1981
1982 if (sw->authorized) {
1983 ret = -EBUSY;
1984 } else {
1985 kfree(sw->key);
1986 if (clear) {
1987 sw->key = NULL;
1988 } else {
1989 sw->key = kmemdup(key, sizeof(key), GFP_KERNEL);
1990 if (!sw->key)
1991 ret = -ENOMEM;
1992 }
1993 }
1994
1995 mutex_unlock(&sw->tb->lock);
1996 return ret;
1997 }
1998 static DEVICE_ATTR(key, 0600, key_show, key_store);
1999
speed_show(struct device * dev,struct device_attribute * attr,char * buf)2000 static ssize_t speed_show(struct device *dev, struct device_attribute *attr,
2001 char *buf)
2002 {
2003 struct tb_switch *sw = tb_to_switch(dev);
2004
2005 return sysfs_emit(buf, "%u.0 Gb/s\n", sw->link_speed);
2006 }
2007
2008 /*
2009 * Currently all lanes must run at the same speed but we expose here
2010 * both directions to allow possible asymmetric links in the future.
2011 */
2012 static DEVICE_ATTR(rx_speed, 0444, speed_show, NULL);
2013 static DEVICE_ATTR(tx_speed, 0444, speed_show, NULL);
2014
rx_lanes_show(struct device * dev,struct device_attribute * attr,char * buf)2015 static ssize_t rx_lanes_show(struct device *dev, struct device_attribute *attr,
2016 char *buf)
2017 {
2018 struct tb_switch *sw = tb_to_switch(dev);
2019 unsigned int width;
2020
2021 switch (sw->link_width) {
2022 case TB_LINK_WIDTH_SINGLE:
2023 case TB_LINK_WIDTH_ASYM_TX:
2024 width = 1;
2025 break;
2026 case TB_LINK_WIDTH_DUAL:
2027 width = 2;
2028 break;
2029 case TB_LINK_WIDTH_ASYM_RX:
2030 width = 3;
2031 break;
2032 default:
2033 WARN_ON_ONCE(1);
2034 return -EINVAL;
2035 }
2036
2037 return sysfs_emit(buf, "%u\n", width);
2038 }
2039 static DEVICE_ATTR(rx_lanes, 0444, rx_lanes_show, NULL);
2040
tx_lanes_show(struct device * dev,struct device_attribute * attr,char * buf)2041 static ssize_t tx_lanes_show(struct device *dev, struct device_attribute *attr,
2042 char *buf)
2043 {
2044 struct tb_switch *sw = tb_to_switch(dev);
2045 unsigned int width;
2046
2047 switch (sw->link_width) {
2048 case TB_LINK_WIDTH_SINGLE:
2049 case TB_LINK_WIDTH_ASYM_RX:
2050 width = 1;
2051 break;
2052 case TB_LINK_WIDTH_DUAL:
2053 width = 2;
2054 break;
2055 case TB_LINK_WIDTH_ASYM_TX:
2056 width = 3;
2057 break;
2058 default:
2059 WARN_ON_ONCE(1);
2060 return -EINVAL;
2061 }
2062
2063 return sysfs_emit(buf, "%u\n", width);
2064 }
2065 static DEVICE_ATTR(tx_lanes, 0444, tx_lanes_show, NULL);
2066
nvm_authenticate_show(struct device * dev,struct device_attribute * attr,char * buf)2067 static ssize_t nvm_authenticate_show(struct device *dev,
2068 struct device_attribute *attr, char *buf)
2069 {
2070 struct tb_switch *sw = tb_to_switch(dev);
2071 u32 status;
2072
2073 nvm_get_auth_status(sw, &status);
2074 return sysfs_emit(buf, "%#x\n", status);
2075 }
2076
nvm_authenticate_sysfs(struct device * dev,const char * buf,bool disconnect)2077 static ssize_t nvm_authenticate_sysfs(struct device *dev, const char *buf,
2078 bool disconnect)
2079 {
2080 struct tb_switch *sw = tb_to_switch(dev);
2081 int val, ret;
2082
2083 pm_runtime_get_sync(&sw->dev);
2084
2085 if (!mutex_trylock(&sw->tb->lock)) {
2086 ret = restart_syscall();
2087 goto exit_rpm;
2088 }
2089
2090 if (sw->no_nvm_upgrade) {
2091 ret = -EOPNOTSUPP;
2092 goto exit_unlock;
2093 }
2094
2095 /* If NVMem devices are not yet added */
2096 if (!sw->nvm) {
2097 ret = -EAGAIN;
2098 goto exit_unlock;
2099 }
2100
2101 ret = kstrtoint(buf, 10, &val);
2102 if (ret)
2103 goto exit_unlock;
2104
2105 /* Always clear the authentication status */
2106 nvm_clear_auth_status(sw);
2107
2108 if (val > 0) {
2109 if (val == AUTHENTICATE_ONLY) {
2110 if (disconnect)
2111 ret = -EINVAL;
2112 else
2113 ret = nvm_authenticate(sw, true);
2114 } else {
2115 if (!sw->nvm->flushed) {
2116 if (!sw->nvm->buf) {
2117 ret = -EINVAL;
2118 goto exit_unlock;
2119 }
2120
2121 ret = nvm_validate_and_write(sw);
2122 if (ret || val == WRITE_ONLY)
2123 goto exit_unlock;
2124 }
2125 if (val == WRITE_AND_AUTHENTICATE) {
2126 if (disconnect)
2127 ret = tb_lc_force_power(sw);
2128 else
2129 ret = nvm_authenticate(sw, false);
2130 }
2131 }
2132 }
2133
2134 exit_unlock:
2135 mutex_unlock(&sw->tb->lock);
2136 exit_rpm:
2137 pm_runtime_mark_last_busy(&sw->dev);
2138 pm_runtime_put_autosuspend(&sw->dev);
2139
2140 return ret;
2141 }
2142
nvm_authenticate_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)2143 static ssize_t nvm_authenticate_store(struct device *dev,
2144 struct device_attribute *attr, const char *buf, size_t count)
2145 {
2146 int ret = nvm_authenticate_sysfs(dev, buf, false);
2147 if (ret)
2148 return ret;
2149 return count;
2150 }
2151 static DEVICE_ATTR_RW(nvm_authenticate);
2152
nvm_authenticate_on_disconnect_show(struct device * dev,struct device_attribute * attr,char * buf)2153 static ssize_t nvm_authenticate_on_disconnect_show(struct device *dev,
2154 struct device_attribute *attr, char *buf)
2155 {
2156 return nvm_authenticate_show(dev, attr, buf);
2157 }
2158
nvm_authenticate_on_disconnect_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)2159 static ssize_t nvm_authenticate_on_disconnect_store(struct device *dev,
2160 struct device_attribute *attr, const char *buf, size_t count)
2161 {
2162 int ret;
2163
2164 ret = nvm_authenticate_sysfs(dev, buf, true);
2165 return ret ? ret : count;
2166 }
2167 static DEVICE_ATTR_RW(nvm_authenticate_on_disconnect);
2168
nvm_version_show(struct device * dev,struct device_attribute * attr,char * buf)2169 static ssize_t nvm_version_show(struct device *dev,
2170 struct device_attribute *attr, char *buf)
2171 {
2172 struct tb_switch *sw = tb_to_switch(dev);
2173 int ret;
2174
2175 if (!mutex_trylock(&sw->tb->lock))
2176 return restart_syscall();
2177
2178 if (sw->safe_mode)
2179 ret = -ENODATA;
2180 else if (!sw->nvm)
2181 ret = -EAGAIN;
2182 else
2183 ret = sysfs_emit(buf, "%x.%x\n", sw->nvm->major, sw->nvm->minor);
2184
2185 mutex_unlock(&sw->tb->lock);
2186
2187 return ret;
2188 }
2189 static DEVICE_ATTR_RO(nvm_version);
2190
vendor_show(struct device * dev,struct device_attribute * attr,char * buf)2191 static ssize_t vendor_show(struct device *dev, struct device_attribute *attr,
2192 char *buf)
2193 {
2194 struct tb_switch *sw = tb_to_switch(dev);
2195
2196 return sysfs_emit(buf, "%#x\n", sw->vendor);
2197 }
2198 static DEVICE_ATTR_RO(vendor);
2199
2200 static ssize_t
vendor_name_show(struct device * dev,struct device_attribute * attr,char * buf)2201 vendor_name_show(struct device *dev, struct device_attribute *attr, char *buf)
2202 {
2203 struct tb_switch *sw = tb_to_switch(dev);
2204
2205 return sysfs_emit(buf, "%s\n", sw->vendor_name ?: "");
2206 }
2207 static DEVICE_ATTR_RO(vendor_name);
2208
unique_id_show(struct device * dev,struct device_attribute * attr,char * buf)2209 static ssize_t unique_id_show(struct device *dev, struct device_attribute *attr,
2210 char *buf)
2211 {
2212 struct tb_switch *sw = tb_to_switch(dev);
2213
2214 return sysfs_emit(buf, "%pUb\n", sw->uuid);
2215 }
2216 static DEVICE_ATTR_RO(unique_id);
2217
2218 static struct attribute *switch_attrs[] = {
2219 &dev_attr_authorized.attr,
2220 &dev_attr_boot.attr,
2221 &dev_attr_device.attr,
2222 &dev_attr_device_name.attr,
2223 &dev_attr_generation.attr,
2224 &dev_attr_key.attr,
2225 &dev_attr_nvm_authenticate.attr,
2226 &dev_attr_nvm_authenticate_on_disconnect.attr,
2227 &dev_attr_nvm_version.attr,
2228 &dev_attr_rx_speed.attr,
2229 &dev_attr_rx_lanes.attr,
2230 &dev_attr_tx_speed.attr,
2231 &dev_attr_tx_lanes.attr,
2232 &dev_attr_vendor.attr,
2233 &dev_attr_vendor_name.attr,
2234 &dev_attr_unique_id.attr,
2235 NULL,
2236 };
2237
switch_attr_is_visible(struct kobject * kobj,struct attribute * attr,int n)2238 static umode_t switch_attr_is_visible(struct kobject *kobj,
2239 struct attribute *attr, int n)
2240 {
2241 struct device *dev = kobj_to_dev(kobj);
2242 struct tb_switch *sw = tb_to_switch(dev);
2243
2244 if (attr == &dev_attr_authorized.attr) {
2245 if (sw->tb->security_level == TB_SECURITY_NOPCIE ||
2246 sw->tb->security_level == TB_SECURITY_DPONLY)
2247 return 0;
2248 } else if (attr == &dev_attr_device.attr) {
2249 if (!sw->device)
2250 return 0;
2251 } else if (attr == &dev_attr_device_name.attr) {
2252 if (!sw->device_name)
2253 return 0;
2254 } else if (attr == &dev_attr_vendor.attr) {
2255 if (!sw->vendor)
2256 return 0;
2257 } else if (attr == &dev_attr_vendor_name.attr) {
2258 if (!sw->vendor_name)
2259 return 0;
2260 } else if (attr == &dev_attr_key.attr) {
2261 if (tb_route(sw) &&
2262 sw->tb->security_level == TB_SECURITY_SECURE &&
2263 sw->security_level == TB_SECURITY_SECURE)
2264 return attr->mode;
2265 return 0;
2266 } else if (attr == &dev_attr_rx_speed.attr ||
2267 attr == &dev_attr_rx_lanes.attr ||
2268 attr == &dev_attr_tx_speed.attr ||
2269 attr == &dev_attr_tx_lanes.attr) {
2270 if (tb_route(sw))
2271 return attr->mode;
2272 return 0;
2273 } else if (attr == &dev_attr_nvm_authenticate.attr) {
2274 if (nvm_upgradeable(sw))
2275 return attr->mode;
2276 return 0;
2277 } else if (attr == &dev_attr_nvm_version.attr) {
2278 if (nvm_readable(sw))
2279 return attr->mode;
2280 return 0;
2281 } else if (attr == &dev_attr_boot.attr) {
2282 if (tb_route(sw))
2283 return attr->mode;
2284 return 0;
2285 } else if (attr == &dev_attr_nvm_authenticate_on_disconnect.attr) {
2286 if (sw->quirks & QUIRK_FORCE_POWER_LINK_CONTROLLER)
2287 return attr->mode;
2288 return 0;
2289 }
2290
2291 return sw->safe_mode ? 0 : attr->mode;
2292 }
2293
2294 static const struct attribute_group switch_group = {
2295 .is_visible = switch_attr_is_visible,
2296 .attrs = switch_attrs,
2297 };
2298
2299 static const struct attribute_group *switch_groups[] = {
2300 &switch_group,
2301 NULL,
2302 };
2303
tb_switch_release(struct device * dev)2304 static void tb_switch_release(struct device *dev)
2305 {
2306 struct tb_switch *sw = tb_to_switch(dev);
2307 struct tb_port *port;
2308
2309 dma_port_free(sw->dma_port);
2310
2311 tb_switch_for_each_port(sw, port) {
2312 ida_destroy(&port->in_hopids);
2313 ida_destroy(&port->out_hopids);
2314 }
2315
2316 kfree(sw->uuid);
2317 kfree(sw->device_name);
2318 kfree(sw->vendor_name);
2319 kfree(sw->ports);
2320 kfree(sw->drom);
2321 kfree(sw->key);
2322 kfree(sw);
2323 }
2324
tb_switch_uevent(const struct device * dev,struct kobj_uevent_env * env)2325 static int tb_switch_uevent(const struct device *dev, struct kobj_uevent_env *env)
2326 {
2327 const struct tb_switch *sw = tb_to_switch(dev);
2328 const char *type;
2329
2330 if (tb_switch_is_usb4(sw)) {
2331 if (add_uevent_var(env, "USB4_VERSION=%u.0",
2332 usb4_switch_version(sw)))
2333 return -ENOMEM;
2334 }
2335
2336 if (!tb_route(sw)) {
2337 type = "host";
2338 } else {
2339 const struct tb_port *port;
2340 bool hub = false;
2341
2342 /* Device is hub if it has any downstream ports */
2343 tb_switch_for_each_port(sw, port) {
2344 if (!port->disabled && !tb_is_upstream_port(port) &&
2345 tb_port_is_null(port)) {
2346 hub = true;
2347 break;
2348 }
2349 }
2350
2351 type = hub ? "hub" : "device";
2352 }
2353
2354 if (add_uevent_var(env, "USB4_TYPE=%s", type))
2355 return -ENOMEM;
2356 return 0;
2357 }
2358
2359 /*
2360 * Currently only need to provide the callbacks. Everything else is handled
2361 * in the connection manager.
2362 */
tb_switch_runtime_suspend(struct device * dev)2363 static int __maybe_unused tb_switch_runtime_suspend(struct device *dev)
2364 {
2365 struct tb_switch *sw = tb_to_switch(dev);
2366 const struct tb_cm_ops *cm_ops = sw->tb->cm_ops;
2367
2368 if (cm_ops->runtime_suspend_switch)
2369 return cm_ops->runtime_suspend_switch(sw);
2370
2371 return 0;
2372 }
2373
tb_switch_runtime_resume(struct device * dev)2374 static int __maybe_unused tb_switch_runtime_resume(struct device *dev)
2375 {
2376 struct tb_switch *sw = tb_to_switch(dev);
2377 const struct tb_cm_ops *cm_ops = sw->tb->cm_ops;
2378
2379 if (cm_ops->runtime_resume_switch)
2380 return cm_ops->runtime_resume_switch(sw);
2381 return 0;
2382 }
2383
2384 static const struct dev_pm_ops tb_switch_pm_ops = {
2385 SET_RUNTIME_PM_OPS(tb_switch_runtime_suspend, tb_switch_runtime_resume,
2386 NULL)
2387 };
2388
2389 const struct device_type tb_switch_type = {
2390 .name = "thunderbolt_device",
2391 .release = tb_switch_release,
2392 .uevent = tb_switch_uevent,
2393 .pm = &tb_switch_pm_ops,
2394 };
2395
tb_switch_get_generation(struct tb_switch * sw)2396 static int tb_switch_get_generation(struct tb_switch *sw)
2397 {
2398 if (tb_switch_is_usb4(sw))
2399 return 4;
2400
2401 if (sw->config.vendor_id == PCI_VENDOR_ID_INTEL) {
2402 switch (sw->config.device_id) {
2403 case PCI_DEVICE_ID_INTEL_LIGHT_RIDGE:
2404 case PCI_DEVICE_ID_INTEL_EAGLE_RIDGE:
2405 case PCI_DEVICE_ID_INTEL_LIGHT_PEAK:
2406 case PCI_DEVICE_ID_INTEL_CACTUS_RIDGE_2C:
2407 case PCI_DEVICE_ID_INTEL_CACTUS_RIDGE_4C:
2408 case PCI_DEVICE_ID_INTEL_PORT_RIDGE:
2409 case PCI_DEVICE_ID_INTEL_REDWOOD_RIDGE_2C_BRIDGE:
2410 case PCI_DEVICE_ID_INTEL_REDWOOD_RIDGE_4C_BRIDGE:
2411 return 1;
2412
2413 case PCI_DEVICE_ID_INTEL_WIN_RIDGE_2C_BRIDGE:
2414 case PCI_DEVICE_ID_INTEL_FALCON_RIDGE_2C_BRIDGE:
2415 case PCI_DEVICE_ID_INTEL_FALCON_RIDGE_4C_BRIDGE:
2416 return 2;
2417
2418 case PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_LP_BRIDGE:
2419 case PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_2C_BRIDGE:
2420 case PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_4C_BRIDGE:
2421 case PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_2C_BRIDGE:
2422 case PCI_DEVICE_ID_INTEL_ALPINE_RIDGE_C_4C_BRIDGE:
2423 case PCI_DEVICE_ID_INTEL_TITAN_RIDGE_2C_BRIDGE:
2424 case PCI_DEVICE_ID_INTEL_TITAN_RIDGE_4C_BRIDGE:
2425 case PCI_DEVICE_ID_INTEL_TITAN_RIDGE_DD_BRIDGE:
2426 case PCI_DEVICE_ID_INTEL_ICL_NHI0:
2427 case PCI_DEVICE_ID_INTEL_ICL_NHI1:
2428 return 3;
2429 }
2430 }
2431
2432 /*
2433 * For unknown switches assume generation to be 1 to be on the
2434 * safe side.
2435 */
2436 tb_sw_warn(sw, "unsupported switch device id %#x\n",
2437 sw->config.device_id);
2438 return 1;
2439 }
2440
tb_switch_exceeds_max_depth(const struct tb_switch * sw,int depth)2441 static bool tb_switch_exceeds_max_depth(const struct tb_switch *sw, int depth)
2442 {
2443 int max_depth;
2444
2445 if (tb_switch_is_usb4(sw) ||
2446 (sw->tb->root_switch && tb_switch_is_usb4(sw->tb->root_switch)))
2447 max_depth = USB4_SWITCH_MAX_DEPTH;
2448 else
2449 max_depth = TB_SWITCH_MAX_DEPTH;
2450
2451 return depth > max_depth;
2452 }
2453
2454 /**
2455 * tb_switch_alloc() - allocate a switch
2456 * @tb: Pointer to the owning domain
2457 * @parent: Parent device for this switch
2458 * @route: Route string for this switch
2459 *
2460 * Allocates and initializes a switch. Will not upload configuration to
2461 * the switch. For that you need to call tb_switch_configure()
2462 * separately. The returned switch should be released by calling
2463 * tb_switch_put().
2464 *
2465 * Return: Pointer to &struct tb_switch or ERR_PTR() in case of failure.
2466 */
tb_switch_alloc(struct tb * tb,struct device * parent,u64 route)2467 struct tb_switch *tb_switch_alloc(struct tb *tb, struct device *parent,
2468 u64 route)
2469 {
2470 struct tb_switch *sw;
2471 int upstream_port;
2472 int i, ret, depth;
2473
2474 /* Unlock the downstream port so we can access the switch below */
2475 if (route) {
2476 struct tb_switch *parent_sw = tb_to_switch(parent);
2477 struct tb_port *down;
2478
2479 down = tb_port_at(route, parent_sw);
2480 tb_port_unlock(down);
2481 }
2482
2483 depth = tb_route_length(route);
2484
2485 upstream_port = tb_cfg_get_upstream_port(tb->ctl, route);
2486 if (upstream_port < 0)
2487 return ERR_PTR(upstream_port);
2488
2489 sw = kzalloc_obj(*sw);
2490 if (!sw)
2491 return ERR_PTR(-ENOMEM);
2492
2493 sw->tb = tb;
2494 ret = tb_cfg_read(tb->ctl, &sw->config, route, 0, TB_CFG_SWITCH, 0, 5);
2495 if (ret)
2496 goto err_free_sw_ports;
2497
2498 sw->generation = tb_switch_get_generation(sw);
2499
2500 tb_dbg(tb, "current switch config:\n");
2501 tb_dump_switch(tb, sw);
2502
2503 /* configure switch */
2504 sw->config.upstream_port_number = upstream_port;
2505 sw->config.depth = depth;
2506 sw->config.route_hi = upper_32_bits(route);
2507 sw->config.route_lo = lower_32_bits(route);
2508 sw->config.enabled = 0;
2509
2510 /* Make sure we do not exceed maximum topology limit */
2511 if (tb_switch_exceeds_max_depth(sw, depth)) {
2512 ret = -EADDRNOTAVAIL;
2513 goto err_free_sw_ports;
2514 }
2515
2516 /* initialize ports */
2517 sw->ports = kzalloc_objs(*sw->ports, sw->config.max_port_number + 1);
2518 if (!sw->ports) {
2519 ret = -ENOMEM;
2520 goto err_free_sw_ports;
2521 }
2522
2523 for (i = 0; i <= sw->config.max_port_number; i++) {
2524 /* minimum setup for tb_find_cap and tb_drom_read to work */
2525 sw->ports[i].sw = sw;
2526 sw->ports[i].port = i;
2527
2528 /* Control port does not need HopID allocation */
2529 if (i) {
2530 ida_init(&sw->ports[i].in_hopids);
2531 ida_init(&sw->ports[i].out_hopids);
2532 }
2533 }
2534
2535 ret = tb_switch_find_vse_cap(sw, TB_VSE_CAP_PLUG_EVENTS);
2536 if (ret > 0)
2537 sw->cap_plug_events = ret;
2538
2539 ret = tb_switch_find_vse_cap(sw, TB_VSE_CAP_TIME2);
2540 if (ret > 0)
2541 sw->cap_vsec_tmu = ret;
2542
2543 ret = tb_switch_find_vse_cap(sw, TB_VSE_CAP_LINK_CONTROLLER);
2544 if (ret > 0)
2545 sw->cap_lc = ret;
2546
2547 ret = tb_switch_find_vse_cap(sw, TB_VSE_CAP_CP_LP);
2548 if (ret > 0)
2549 sw->cap_lp = ret;
2550
2551 /* Root switch is always authorized */
2552 if (!route)
2553 sw->authorized = true;
2554
2555 device_initialize(&sw->dev);
2556 sw->dev.parent = parent;
2557 sw->dev.bus = &tb_bus_type;
2558 sw->dev.type = &tb_switch_type;
2559 sw->dev.groups = switch_groups;
2560 dev_set_name(&sw->dev, "%u-%llx", tb->index, tb_route(sw));
2561
2562 return sw;
2563
2564 err_free_sw_ports:
2565 kfree(sw->ports);
2566 kfree(sw);
2567
2568 return ERR_PTR(ret);
2569 }
2570
2571 /**
2572 * tb_switch_alloc_safe_mode() - allocate a switch that is in safe mode
2573 * @tb: Pointer to the owning domain
2574 * @parent: Parent device for this switch
2575 * @route: Route string for this switch
2576 *
2577 * This creates a switch in safe mode. This means the switch pretty much
2578 * lacks all capabilities except DMA configuration port before it is
2579 * flashed with a valid NVM firmware.
2580 *
2581 * The returned switch must be released by calling tb_switch_put().
2582 *
2583 * Return: Pointer to &struct tb_switch or ERR_PTR() in case of failure.
2584 */
2585 struct tb_switch *
tb_switch_alloc_safe_mode(struct tb * tb,struct device * parent,u64 route)2586 tb_switch_alloc_safe_mode(struct tb *tb, struct device *parent, u64 route)
2587 {
2588 struct tb_switch *sw;
2589
2590 sw = kzalloc_obj(*sw);
2591 if (!sw)
2592 return ERR_PTR(-ENOMEM);
2593
2594 sw->tb = tb;
2595 sw->config.depth = tb_route_length(route);
2596 sw->config.route_hi = upper_32_bits(route);
2597 sw->config.route_lo = lower_32_bits(route);
2598 sw->safe_mode = true;
2599
2600 device_initialize(&sw->dev);
2601 sw->dev.parent = parent;
2602 sw->dev.bus = &tb_bus_type;
2603 sw->dev.type = &tb_switch_type;
2604 sw->dev.groups = switch_groups;
2605 dev_set_name(&sw->dev, "%u-%llx", tb->index, tb_route(sw));
2606
2607 return sw;
2608 }
2609
2610 /**
2611 * tb_switch_configure() - Uploads configuration to the switch
2612 * @sw: Switch to configure
2613 *
2614 * Call this function before the switch is added to the system. It will
2615 * upload configuration to the switch and makes it available for the
2616 * connection manager to use. Can be called to the switch again after
2617 * resume from low power states to re-initialize it.
2618 *
2619 * Return: %0 on success, negative errno otherwise.
2620 */
tb_switch_configure(struct tb_switch * sw)2621 int tb_switch_configure(struct tb_switch *sw)
2622 {
2623 struct tb *tb = sw->tb;
2624 u64 route;
2625 int ret;
2626
2627 route = tb_route(sw);
2628
2629 tb_dbg(tb, "%s Switch at %#llx (depth: %d, up port: %d)\n",
2630 sw->config.enabled ? "restoring" : "initializing", route,
2631 tb_route_length(route), sw->config.upstream_port_number);
2632
2633 sw->config.enabled = 1;
2634
2635 /* Set Notification Timeout to 255 ms for all routers */
2636 sw->config.plug_events_delay = 0xff;
2637 if (tb_switch_is_usb4(sw)) {
2638 /*
2639 * For USB4 devices, we need to program the CM version
2640 * accordingly so that it knows to expose all the
2641 * additional capabilities. Program it according to USB4
2642 * version to avoid changing existing (v1) routers behaviour.
2643 */
2644 if (usb4_switch_version(sw) < 2)
2645 sw->config.cmuv = ROUTER_CS_4_CMUV_V1;
2646 else
2647 sw->config.cmuv = ROUTER_CS_4_CMUV_V2;
2648
2649 /* Enumerate the switch */
2650 ret = tb_sw_write(sw, (u32 *)&sw->config + 1, TB_CFG_SWITCH,
2651 ROUTER_CS_1, 4);
2652 if (ret)
2653 return ret;
2654
2655 ret = usb4_switch_setup(sw);
2656 } else {
2657 if (sw->config.vendor_id != PCI_VENDOR_ID_INTEL)
2658 tb_sw_warn(sw, "unknown switch vendor id %#x\n",
2659 sw->config.vendor_id);
2660
2661 if (!sw->cap_plug_events) {
2662 tb_sw_warn(sw, "cannot find TB_VSE_CAP_PLUG_EVENTS aborting\n");
2663 return -ENODEV;
2664 }
2665
2666 /* Enumerate the switch */
2667 ret = tb_sw_write(sw, (u32 *)&sw->config + 1, TB_CFG_SWITCH,
2668 ROUTER_CS_1, 4);
2669 }
2670 if (ret)
2671 return ret;
2672
2673 return tb_plug_events_active(sw, true);
2674 }
2675
2676 /**
2677 * tb_switch_configuration_valid() - Set the tunneling configuration to be valid
2678 * @sw: Router to configure
2679 *
2680 * Needs to be called before any tunnels can be setup through the
2681 * router. Can be called to any router.
2682 *
2683 * Return: %0 on success, negative errno otherwise.
2684 */
tb_switch_configuration_valid(struct tb_switch * sw)2685 int tb_switch_configuration_valid(struct tb_switch *sw)
2686 {
2687 if (tb_switch_is_usb4(sw))
2688 return usb4_switch_configuration_valid(sw);
2689 return 0;
2690 }
2691
tb_switch_set_uuid(struct tb_switch * sw)2692 static int tb_switch_set_uuid(struct tb_switch *sw)
2693 {
2694 bool uid = false;
2695 u32 uuid[4];
2696 int ret;
2697
2698 if (sw->uuid)
2699 return 0;
2700
2701 if (tb_switch_is_usb4(sw)) {
2702 ret = usb4_switch_read_uid(sw, &sw->uid);
2703 if (ret)
2704 return ret;
2705 uid = true;
2706 } else {
2707 /*
2708 * The newer controllers include fused UUID as part of
2709 * link controller specific registers
2710 */
2711 ret = tb_lc_read_uuid(sw, uuid);
2712 if (ret) {
2713 if (ret != -EINVAL)
2714 return ret;
2715 uid = true;
2716 }
2717 }
2718
2719 if (uid) {
2720 /*
2721 * ICM generates UUID based on UID and fills the upper
2722 * two words with ones. This is not strictly following
2723 * UUID format but we want to be compatible with it so
2724 * we do the same here.
2725 */
2726 uuid[0] = sw->uid & 0xffffffff;
2727 uuid[1] = (sw->uid >> 32) & 0xffffffff;
2728 uuid[2] = 0xffffffff;
2729 uuid[3] = 0xffffffff;
2730 }
2731
2732 sw->uuid = kmemdup(uuid, sizeof(uuid), GFP_KERNEL);
2733 if (!sw->uuid)
2734 return -ENOMEM;
2735 return 0;
2736 }
2737
tb_switch_add_dma_port(struct tb_switch * sw)2738 static int tb_switch_add_dma_port(struct tb_switch *sw)
2739 {
2740 struct tb_nhi *nhi = sw->tb->nhi;
2741 u32 status;
2742 int ret;
2743
2744 switch (sw->generation) {
2745 case 2:
2746 /* Only root switch can be upgraded */
2747 if (tb_route(sw))
2748 return 0;
2749
2750 fallthrough;
2751 case 3:
2752 case 4:
2753 ret = tb_switch_set_uuid(sw);
2754 if (ret)
2755 return ret;
2756 break;
2757
2758 default:
2759 /*
2760 * DMA port is the only thing available when the switch
2761 * is in safe mode.
2762 */
2763 if (!sw->safe_mode)
2764 return 0;
2765 break;
2766 }
2767
2768 if (sw->no_nvm_upgrade)
2769 return 0;
2770
2771 if (tb_switch_is_usb4(sw)) {
2772 ret = usb4_switch_nvm_authenticate_status(sw, &status);
2773 if (ret)
2774 return ret;
2775
2776 if (status) {
2777 tb_sw_info(sw, "switch flash authentication failed\n");
2778 nvm_set_auth_status(sw, status);
2779 }
2780
2781 return 0;
2782 }
2783
2784 /* Root switch DMA port requires running firmware */
2785 if (!tb_route(sw) && !tb_switch_is_icm(sw))
2786 return 0;
2787
2788 sw->dma_port = dma_port_alloc(sw);
2789 if (!sw->dma_port)
2790 return 0;
2791
2792 /*
2793 * If there is status already set then authentication failed
2794 * when the dma_port_flash_update_auth() returned. Power cycling
2795 * is not needed (it was done already) so only thing we do here
2796 * is to unblock runtime PM of the root port.
2797 */
2798 nvm_get_auth_status(sw, &status);
2799 if (status) {
2800 if (!tb_route(sw)) {
2801 if (nhi->ops->post_nvm_auth)
2802 nhi->ops->post_nvm_auth(nhi);
2803 }
2804 return 0;
2805 }
2806
2807 /*
2808 * Check status of the previous flash authentication. If there
2809 * is one we need to power cycle the switch in any case to make
2810 * it functional again.
2811 */
2812 ret = dma_port_flash_update_auth_status(sw->dma_port, &status);
2813 if (ret <= 0)
2814 return ret;
2815
2816 /* Now we can allow root port to suspend again */
2817 if (!tb_route(sw)) {
2818 if (nhi->ops->post_nvm_auth)
2819 nhi->ops->post_nvm_auth(nhi);
2820 }
2821
2822 if (status) {
2823 tb_sw_info(sw, "switch flash authentication failed\n");
2824 nvm_set_auth_status(sw, status);
2825 }
2826
2827 tb_sw_info(sw, "power cycling the switch now\n");
2828 dma_port_power_cycle(sw->dma_port);
2829
2830 /*
2831 * We return error here which causes the switch adding failure.
2832 * It should appear back after power cycle is complete.
2833 */
2834 return -ESHUTDOWN;
2835 }
2836
tb_switch_default_link_ports(struct tb_switch * sw)2837 static void tb_switch_default_link_ports(struct tb_switch *sw)
2838 {
2839 int i;
2840
2841 for (i = 1; i <= sw->config.max_port_number; i++) {
2842 struct tb_port *port = &sw->ports[i];
2843 struct tb_port *subordinate;
2844
2845 if (!tb_port_is_null(port))
2846 continue;
2847
2848 /* Check for the subordinate port */
2849 if (i == sw->config.max_port_number ||
2850 !tb_port_is_null(&sw->ports[i + 1]))
2851 continue;
2852
2853 /* Link them if not already done so (by DROM) */
2854 subordinate = &sw->ports[i + 1];
2855 if (!port->dual_link_port && !subordinate->dual_link_port) {
2856 port->link_nr = 0;
2857 port->dual_link_port = subordinate;
2858 subordinate->link_nr = 1;
2859 subordinate->dual_link_port = port;
2860
2861 tb_sw_dbg(sw, "linked ports %d <-> %d\n",
2862 port->port, subordinate->port);
2863 }
2864 }
2865 }
2866
tb_switch_lane_bonding_possible(struct tb_switch * sw)2867 static bool tb_switch_lane_bonding_possible(struct tb_switch *sw)
2868 {
2869 const struct tb_port *up = tb_upstream_port(sw);
2870
2871 if (!up->dual_link_port || !up->dual_link_port->remote)
2872 return false;
2873
2874 if (tb_switch_is_usb4(sw))
2875 return usb4_switch_lane_bonding_possible(sw);
2876 return tb_lc_lane_bonding_possible(sw);
2877 }
2878
tb_switch_update_link_attributes(struct tb_switch * sw)2879 static int tb_switch_update_link_attributes(struct tb_switch *sw)
2880 {
2881 struct tb_port *up;
2882 bool change = false;
2883 int ret;
2884
2885 if (!tb_route(sw) || tb_switch_is_icm(sw))
2886 return 0;
2887
2888 up = tb_upstream_port(sw);
2889
2890 ret = tb_port_get_link_speed(up);
2891 if (ret < 0)
2892 return ret;
2893 if (sw->link_speed != ret)
2894 change = true;
2895 sw->link_speed = ret;
2896
2897 ret = tb_port_get_link_width(up);
2898 if (ret < 0)
2899 return ret;
2900 if (sw->link_width != ret)
2901 change = true;
2902 sw->link_width = ret;
2903
2904 /* Notify userspace that there is possible link attribute change */
2905 if (device_is_registered(&sw->dev) && change)
2906 kobject_uevent(&sw->dev.kobj, KOBJ_CHANGE);
2907
2908 return 0;
2909 }
2910
2911 /* Must be called after tb_switch_update_link_attributes() */
tb_switch_link_init(struct tb_switch * sw)2912 static void tb_switch_link_init(struct tb_switch *sw)
2913 {
2914 struct tb_port *up, *down;
2915 bool bonded;
2916
2917 if (!tb_route(sw) || tb_switch_is_icm(sw))
2918 return;
2919
2920 tb_sw_dbg(sw, "current link speed %u.0 Gb/s\n", sw->link_speed);
2921 tb_sw_dbg(sw, "current link width %s\n", tb_width_name(sw->link_width));
2922
2923 bonded = sw->link_width >= TB_LINK_WIDTH_DUAL;
2924
2925 /*
2926 * Gen 4 links come up as bonded so update the port structures
2927 * accordingly.
2928 */
2929 up = tb_upstream_port(sw);
2930 down = tb_switch_downstream_port(sw);
2931
2932 up->bonded = bonded;
2933 if (up->dual_link_port)
2934 up->dual_link_port->bonded = bonded;
2935 tb_port_update_credits(up);
2936
2937 down->bonded = bonded;
2938 if (down->dual_link_port)
2939 down->dual_link_port->bonded = bonded;
2940 tb_port_update_credits(down);
2941
2942 if (tb_port_get_link_generation(up) < 4)
2943 return;
2944
2945 /*
2946 * Set the Gen 4 preferred link width. This is what the router
2947 * prefers when the link is brought up. If the router does not
2948 * support asymmetric link configuration, this also will be set
2949 * to TB_LINK_WIDTH_DUAL.
2950 */
2951 sw->preferred_link_width = sw->link_width;
2952 tb_sw_dbg(sw, "preferred link width %s\n",
2953 tb_width_name(sw->preferred_link_width));
2954 }
2955
2956 /**
2957 * tb_switch_lane_bonding_enable() - Enable lane bonding
2958 * @sw: Switch to enable lane bonding
2959 *
2960 * Connection manager can call this function to enable lane bonding of a
2961 * switch. If conditions are correct and both switches support the feature,
2962 * lanes are bonded. It is safe to call this to any switch.
2963 *
2964 * Return: %0 on success, negative errno otherwise.
2965 */
tb_switch_lane_bonding_enable(struct tb_switch * sw)2966 static int tb_switch_lane_bonding_enable(struct tb_switch *sw)
2967 {
2968 struct tb_port *up, *down;
2969 unsigned int width;
2970 int ret;
2971
2972 if (!tb_switch_lane_bonding_possible(sw))
2973 return -EOPNOTSUPP;
2974
2975 up = tb_upstream_port(sw);
2976 down = tb_switch_downstream_port(sw);
2977
2978 if (!tb_port_width_supported(up, TB_LINK_WIDTH_DUAL) ||
2979 !tb_port_width_supported(down, TB_LINK_WIDTH_DUAL))
2980 return -EOPNOTSUPP;
2981
2982 /*
2983 * Both lanes need to be in CL0. Here we assume lane 0 already be in
2984 * CL0 and check just for lane 1.
2985 */
2986 if (tb_wait_for_port(down->dual_link_port, false) <= 0)
2987 return -ENOTCONN;
2988
2989 ret = tb_port_lane_bonding_enable(up);
2990 if (ret) {
2991 tb_port_warn(up, "failed to enable lane bonding\n");
2992 return ret;
2993 }
2994
2995 ret = tb_port_lane_bonding_enable(down);
2996 if (ret) {
2997 tb_port_warn(down, "failed to enable lane bonding\n");
2998 tb_port_lane_bonding_disable(up);
2999 return ret;
3000 }
3001
3002 /* Any of the widths are all bonded */
3003 width = TB_LINK_WIDTH_DUAL | TB_LINK_WIDTH_ASYM_TX |
3004 TB_LINK_WIDTH_ASYM_RX;
3005
3006 return tb_port_wait_for_link_width(down, width, 100);
3007 }
3008
3009 /**
3010 * tb_switch_lane_bonding_disable() - Disable lane bonding
3011 * @sw: Switch whose lane bonding to disable
3012 *
3013 * Disables lane bonding between @sw and parent. This can be called even
3014 * if lanes were not bonded originally.
3015 *
3016 * Return: %0 on success, negative errno otherwise.
3017 */
tb_switch_lane_bonding_disable(struct tb_switch * sw)3018 static int tb_switch_lane_bonding_disable(struct tb_switch *sw)
3019 {
3020 struct tb_port *up, *down;
3021 int ret;
3022
3023 up = tb_upstream_port(sw);
3024 if (!up->bonded)
3025 return 0;
3026
3027 /*
3028 * If the link is Gen 4 there is no way to switch the link to
3029 * two single lane links so avoid that here. Also don't bother
3030 * if the link is not up anymore (sw is unplugged).
3031 */
3032 ret = tb_port_get_link_generation(up);
3033 if (ret < 0)
3034 return ret;
3035 if (ret >= 4)
3036 return -EOPNOTSUPP;
3037
3038 down = tb_switch_downstream_port(sw);
3039 tb_port_lane_bonding_disable(up);
3040 tb_port_lane_bonding_disable(down);
3041
3042 /*
3043 * It is fine if we get other errors as the router might have
3044 * been unplugged.
3045 */
3046 return tb_port_wait_for_link_width(down, TB_LINK_WIDTH_SINGLE, 100);
3047 }
3048
3049 /* Note updating sw->link_width done in tb_switch_update_link_attributes() */
tb_switch_asym_enable(struct tb_switch * sw,enum tb_link_width width)3050 static int tb_switch_asym_enable(struct tb_switch *sw, enum tb_link_width width)
3051 {
3052 struct tb_port *up, *down, *port;
3053 enum tb_link_width down_width;
3054 int ret;
3055
3056 up = tb_upstream_port(sw);
3057 down = tb_switch_downstream_port(sw);
3058
3059 if (width == TB_LINK_WIDTH_ASYM_TX) {
3060 down_width = TB_LINK_WIDTH_ASYM_RX;
3061 port = down;
3062 } else {
3063 down_width = TB_LINK_WIDTH_ASYM_TX;
3064 port = up;
3065 }
3066
3067 ret = tb_port_set_link_width(up, width);
3068 if (ret)
3069 return ret;
3070
3071 ret = tb_port_set_link_width(down, down_width);
3072 if (ret)
3073 return ret;
3074
3075 /*
3076 * Initiate the change in the router that one of its TX lanes is
3077 * changing to RX but do so only if there is an actual change.
3078 */
3079 if (sw->link_width != width) {
3080 ret = usb4_port_asym_start(port);
3081 if (ret)
3082 return ret;
3083
3084 ret = tb_port_wait_for_link_width(up, width, 100);
3085 if (ret)
3086 return ret;
3087 }
3088
3089 return 0;
3090 }
3091
3092 /* Note updating sw->link_width done in tb_switch_update_link_attributes() */
tb_switch_asym_disable(struct tb_switch * sw)3093 static int tb_switch_asym_disable(struct tb_switch *sw)
3094 {
3095 struct tb_port *up, *down;
3096 int ret;
3097
3098 up = tb_upstream_port(sw);
3099 down = tb_switch_downstream_port(sw);
3100
3101 ret = tb_port_set_link_width(up, TB_LINK_WIDTH_DUAL);
3102 if (ret)
3103 return ret;
3104
3105 ret = tb_port_set_link_width(down, TB_LINK_WIDTH_DUAL);
3106 if (ret)
3107 return ret;
3108
3109 /*
3110 * Initiate the change in the router that has three TX lanes and
3111 * is changing one of its TX lanes to RX but only if there is a
3112 * change in the link width.
3113 */
3114 if (sw->link_width > TB_LINK_WIDTH_DUAL) {
3115 if (sw->link_width == TB_LINK_WIDTH_ASYM_TX)
3116 ret = usb4_port_asym_start(up);
3117 else
3118 ret = usb4_port_asym_start(down);
3119 if (ret)
3120 return ret;
3121
3122 ret = tb_port_wait_for_link_width(up, TB_LINK_WIDTH_DUAL, 100);
3123 if (ret)
3124 return ret;
3125 }
3126
3127 return 0;
3128 }
3129
3130 /**
3131 * tb_switch_set_link_width() - Configure router link width
3132 * @sw: Router to configure
3133 * @width: The new link width
3134 *
3135 * Set device router link width to @width from router upstream port
3136 * perspective. Supports also asymmetric links if the routers both side
3137 * of the link supports it.
3138 *
3139 * Does nothing for host router.
3140 *
3141 * Return: %0 on success, negative errno otherwise.
3142 */
tb_switch_set_link_width(struct tb_switch * sw,enum tb_link_width width)3143 int tb_switch_set_link_width(struct tb_switch *sw, enum tb_link_width width)
3144 {
3145 struct tb_port *up, *down;
3146 int ret = 0;
3147
3148 if (!tb_route(sw))
3149 return 0;
3150
3151 up = tb_upstream_port(sw);
3152 down = tb_switch_downstream_port(sw);
3153
3154 switch (width) {
3155 case TB_LINK_WIDTH_SINGLE:
3156 ret = tb_switch_lane_bonding_disable(sw);
3157 break;
3158
3159 case TB_LINK_WIDTH_DUAL:
3160 if (sw->link_width == TB_LINK_WIDTH_ASYM_TX ||
3161 sw->link_width == TB_LINK_WIDTH_ASYM_RX) {
3162 ret = tb_switch_asym_disable(sw);
3163 if (ret)
3164 break;
3165 }
3166 ret = tb_switch_lane_bonding_enable(sw);
3167 break;
3168
3169 case TB_LINK_WIDTH_ASYM_TX:
3170 case TB_LINK_WIDTH_ASYM_RX:
3171 ret = tb_switch_asym_enable(sw, width);
3172 break;
3173 }
3174
3175 switch (ret) {
3176 case 0:
3177 break;
3178
3179 case -ETIMEDOUT:
3180 tb_sw_warn(sw, "timeout changing link width\n");
3181 return ret;
3182
3183 case -ENOTCONN:
3184 case -EOPNOTSUPP:
3185 case -ENODEV:
3186 return ret;
3187
3188 default:
3189 tb_sw_dbg(sw, "failed to change link width: %d\n", ret);
3190 return ret;
3191 }
3192
3193 tb_port_update_credits(down);
3194 tb_port_update_credits(up);
3195
3196 tb_switch_update_link_attributes(sw);
3197
3198 tb_sw_dbg(sw, "link width set to %s\n", tb_width_name(width));
3199 return ret;
3200 }
3201
3202 /**
3203 * tb_switch_configure_link() - Set link configured
3204 * @sw: Switch whose link is configured
3205 *
3206 * Sets the link upstream from @sw configured (from both ends) so that
3207 * it will not be disconnected when the domain exits sleep. Can be
3208 * called for any switch.
3209 *
3210 * It is recommended that this is called after lane bonding is enabled.
3211 *
3212 * Return: %0 on success and negative errno otherwise.
3213 */
tb_switch_configure_link(struct tb_switch * sw)3214 int tb_switch_configure_link(struct tb_switch *sw)
3215 {
3216 struct tb_port *up, *down;
3217 int ret;
3218
3219 if (!tb_route(sw) || tb_switch_is_icm(sw))
3220 return 0;
3221
3222 up = tb_upstream_port(sw);
3223 if (tb_switch_is_usb4(up->sw))
3224 ret = usb4_port_configure(up);
3225 else
3226 ret = tb_lc_configure_port(up);
3227 if (ret)
3228 return ret;
3229
3230 down = up->remote;
3231 if (tb_switch_is_usb4(down->sw))
3232 return usb4_port_configure(down);
3233 return tb_lc_configure_port(down);
3234 }
3235
3236 /**
3237 * tb_switch_unconfigure_link() - Unconfigure link
3238 * @sw: Switch whose link is unconfigured
3239 *
3240 * Sets the link unconfigured so the @sw will be disconnected if the
3241 * domain exits sleep.
3242 */
tb_switch_unconfigure_link(struct tb_switch * sw)3243 void tb_switch_unconfigure_link(struct tb_switch *sw)
3244 {
3245 struct tb_port *up, *down;
3246
3247 if (!tb_route(sw) || tb_switch_is_icm(sw))
3248 return;
3249
3250 /*
3251 * Unconfigure downstream port so that wake-on-connect can be
3252 * configured after router unplug. No need to unconfigure upstream port
3253 * since its router is unplugged.
3254 */
3255 up = tb_upstream_port(sw);
3256 down = up->remote;
3257 if (tb_switch_is_usb4(down->sw))
3258 usb4_port_unconfigure(down);
3259 else
3260 tb_lc_unconfigure_port(down);
3261
3262 if (sw->is_unplugged)
3263 return;
3264
3265 up = tb_upstream_port(sw);
3266 if (tb_switch_is_usb4(up->sw))
3267 usb4_port_unconfigure(up);
3268 else
3269 tb_lc_unconfigure_port(up);
3270 }
3271
tb_switch_credits_init(struct tb_switch * sw)3272 static void tb_switch_credits_init(struct tb_switch *sw)
3273 {
3274 if (tb_switch_is_icm(sw))
3275 return;
3276 if (!tb_switch_is_usb4(sw))
3277 return;
3278 if (usb4_switch_credits_init(sw))
3279 tb_sw_info(sw, "failed to determine preferred buffer allocation, using defaults\n");
3280 }
3281
tb_switch_port_hotplug_enable(struct tb_switch * sw)3282 static int tb_switch_port_hotplug_enable(struct tb_switch *sw)
3283 {
3284 struct tb_port *port;
3285
3286 if (tb_switch_is_icm(sw))
3287 return 0;
3288
3289 tb_switch_for_each_port(sw, port) {
3290 int res;
3291
3292 if (!port->cap_usb4)
3293 continue;
3294
3295 res = usb4_port_hotplug_enable(port);
3296 if (res)
3297 return res;
3298 }
3299 return 0;
3300 }
3301
3302 /**
3303 * tb_switch_add() - Add a switch to the domain
3304 * @sw: Switch to add
3305 *
3306 * This is the last step in adding switch to the domain. It will read
3307 * identification information from DROM and initializes ports so that
3308 * they can be used to connect other switches. The switch will be
3309 * exposed to the userspace when this function successfully returns. To
3310 * remove and release the switch, call tb_switch_remove().
3311 *
3312 * Return: %0 on success, negative errno otherwise.
3313 */
tb_switch_add(struct tb_switch * sw)3314 int tb_switch_add(struct tb_switch *sw)
3315 {
3316 int i, ret;
3317
3318 /*
3319 * Initialize DMA control port now before we read DROM. Recent
3320 * host controllers have more complete DROM on NVM that includes
3321 * vendor and model identification strings which we then expose
3322 * to the userspace. NVM can be accessed through DMA
3323 * configuration based mailbox.
3324 */
3325 ret = tb_switch_add_dma_port(sw);
3326 if (ret) {
3327 dev_err(&sw->dev, "failed to add DMA port\n");
3328 return ret;
3329 }
3330
3331 ret = tb_switch_nvm_init(sw);
3332 if (ret)
3333 return ret;
3334
3335 if (!sw->safe_mode) {
3336 tb_switch_credits_init(sw);
3337
3338 /* read drom */
3339 ret = tb_drom_read(sw);
3340 if (ret)
3341 dev_warn(&sw->dev, "reading DROM failed: %d\n", ret);
3342 tb_sw_dbg(sw, "uid: %#llx\n", sw->uid);
3343
3344 ret = tb_switch_set_uuid(sw);
3345 if (ret) {
3346 dev_err(&sw->dev, "failed to set UUID\n");
3347 return ret;
3348 }
3349
3350 for (i = 0; i <= sw->config.max_port_number; i++) {
3351 if (sw->ports[i].disabled) {
3352 tb_port_dbg(&sw->ports[i], "disabled by eeprom\n");
3353 continue;
3354 }
3355 ret = tb_init_port(&sw->ports[i]);
3356 if (ret) {
3357 dev_err(&sw->dev, "failed to initialize port %d\n", i);
3358 return ret;
3359 }
3360 }
3361
3362 tb_check_quirks(sw);
3363
3364 tb_switch_default_link_ports(sw);
3365
3366 ret = tb_switch_update_link_attributes(sw);
3367 if (ret)
3368 return ret;
3369
3370 tb_switch_link_init(sw);
3371
3372 ret = tb_switch_clx_init(sw);
3373 if (ret)
3374 return ret;
3375
3376 ret = tb_switch_tmu_init(sw);
3377 if (ret)
3378 return ret;
3379 }
3380
3381 ret = tb_switch_port_hotplug_enable(sw);
3382 if (ret)
3383 return ret;
3384
3385 ret = device_add(&sw->dev);
3386 if (ret) {
3387 dev_err(&sw->dev, "failed to add device: %d\n", ret);
3388 return ret;
3389 }
3390
3391 if (tb_route(sw)) {
3392 dev_info(&sw->dev, "new device found, vendor=%#x device=%#x\n",
3393 sw->vendor, sw->device);
3394 if (sw->vendor_name && sw->device_name)
3395 dev_info(&sw->dev, "%s %s\n", sw->vendor_name,
3396 sw->device_name);
3397 }
3398
3399 ret = usb4_switch_add_ports(sw);
3400 if (ret) {
3401 dev_err(&sw->dev, "failed to add USB4 ports\n");
3402 goto err_del;
3403 }
3404
3405 ret = tb_switch_nvm_add(sw);
3406 if (ret) {
3407 dev_err(&sw->dev, "failed to add NVM devices\n");
3408 goto err_ports;
3409 }
3410
3411 /*
3412 * Thunderbolt routers do not generate wakeups themselves but
3413 * they forward wakeups from tunneled protocols, so enable it
3414 * here.
3415 */
3416 device_init_wakeup(&sw->dev, true);
3417
3418 pm_runtime_set_active(&sw->dev);
3419 if (sw->rpm) {
3420 pm_runtime_set_autosuspend_delay(&sw->dev, TB_AUTOSUSPEND_DELAY);
3421 pm_runtime_use_autosuspend(&sw->dev);
3422 pm_runtime_mark_last_busy(&sw->dev);
3423 pm_runtime_enable(&sw->dev);
3424 pm_request_autosuspend(&sw->dev);
3425 }
3426
3427 tb_switch_debugfs_init(sw);
3428 return 0;
3429
3430 err_ports:
3431 usb4_switch_remove_ports(sw);
3432 err_del:
3433 device_del(&sw->dev);
3434
3435 return ret;
3436 }
3437
3438 /**
3439 * tb_switch_remove() - Remove and release a switch
3440 * @sw: Switch to remove
3441 *
3442 * This will remove the switch from the domain and release it after last
3443 * reference count drops to zero. If there are switches connected below
3444 * this switch, they will be removed as well.
3445 */
tb_switch_remove(struct tb_switch * sw)3446 void tb_switch_remove(struct tb_switch *sw)
3447 {
3448 struct tb_port *port;
3449
3450 tb_switch_debugfs_remove(sw);
3451
3452 if (sw->rpm) {
3453 pm_runtime_get_sync(&sw->dev);
3454 pm_runtime_disable(&sw->dev);
3455 }
3456
3457 /* port 0 is the switch itself and never has a remote */
3458 tb_switch_for_each_port(sw, port) {
3459 if (tb_port_has_remote(port)) {
3460 tb_switch_remove(port->remote->sw);
3461 port->remote = NULL;
3462 } else if (port->xdomain) {
3463 port->xdomain->is_unplugged = true;
3464 tb_xdomain_remove(port->xdomain);
3465 port->xdomain = NULL;
3466 }
3467
3468 /* Remove any downstream retimers */
3469 tb_retimer_remove_all(port);
3470 }
3471
3472 if (!sw->is_unplugged)
3473 tb_plug_events_active(sw, false);
3474
3475 tb_switch_nvm_remove(sw);
3476 usb4_switch_remove_ports(sw);
3477
3478 if (tb_route(sw))
3479 dev_info(&sw->dev, "device disconnected\n");
3480 device_unregister(&sw->dev);
3481 }
3482
3483 /**
3484 * tb_sw_set_unplugged() - set is_unplugged on switch and downstream switches
3485 * @sw: Router to mark unplugged
3486 */
tb_sw_set_unplugged(struct tb_switch * sw)3487 void tb_sw_set_unplugged(struct tb_switch *sw)
3488 {
3489 struct tb_port *port;
3490
3491 if (sw == sw->tb->root_switch) {
3492 tb_sw_WARN(sw, "cannot unplug root switch\n");
3493 return;
3494 }
3495 if (sw->is_unplugged) {
3496 tb_sw_WARN(sw, "is_unplugged already set\n");
3497 return;
3498 }
3499 sw->is_unplugged = true;
3500 tb_switch_for_each_port(sw, port) {
3501 if (tb_port_has_remote(port))
3502 tb_sw_set_unplugged(port->remote->sw);
3503 else if (port->xdomain)
3504 port->xdomain->is_unplugged = true;
3505 }
3506 }
3507
tb_switch_set_wake(struct tb_switch * sw,unsigned int flags,bool runtime)3508 static int tb_switch_set_wake(struct tb_switch *sw, unsigned int flags, bool runtime)
3509 {
3510 if (flags)
3511 tb_sw_dbg(sw, "enabling wakeup: %#x\n", flags);
3512 else
3513 tb_sw_dbg(sw, "disabling wakeup\n");
3514
3515 if (tb_switch_is_usb4(sw))
3516 return usb4_switch_set_wake(sw, flags, runtime);
3517 return tb_lc_set_wake(sw, flags);
3518 }
3519
tb_switch_check_wakes(struct tb_switch * sw)3520 static void tb_switch_check_wakes(struct tb_switch *sw)
3521 {
3522 if (device_may_wakeup(&sw->dev)) {
3523 if (tb_switch_is_usb4(sw))
3524 usb4_switch_check_wakes(sw);
3525 }
3526 }
3527
3528 /**
3529 * tb_switch_resume() - Resume a switch after sleep
3530 * @sw: Switch to resume
3531 * @runtime: Is this resume from runtime suspend or system sleep
3532 *
3533 * Resumes and re-enumerates router (and all its children), if still plugged
3534 * after suspend. Don't enumerate device router whose UID was changed during
3535 * suspend. If this is resume from system sleep, notifies PM core about the
3536 * wakes occurred during suspend. Disables all wakes, except USB4 wake of
3537 * upstream port for USB4 routers that shall be always enabled.
3538 *
3539 * Return: %0 on success, negative errno otherwise.
3540 */
tb_switch_resume(struct tb_switch * sw,bool runtime)3541 int tb_switch_resume(struct tb_switch *sw, bool runtime)
3542 {
3543 struct tb_port *port;
3544 int err;
3545
3546 tb_sw_dbg(sw, "resuming switch\n");
3547
3548 /*
3549 * Check for UID of the connected switches except for root
3550 * switch which we assume cannot be removed.
3551 */
3552 if (tb_route(sw)) {
3553 u64 uid;
3554
3555 /*
3556 * Check first that we can still read the switch config
3557 * space. It may be that there is now another domain
3558 * connected.
3559 */
3560 err = tb_cfg_get_upstream_port(sw->tb->ctl, tb_route(sw));
3561 if (err < 0) {
3562 tb_sw_info(sw, "switch not present anymore\n");
3563 return err;
3564 }
3565
3566 /* We don't have any way to confirm this was the same device */
3567 if (!sw->uid)
3568 return -ENODEV;
3569
3570 if (tb_switch_is_usb4(sw))
3571 err = usb4_switch_read_uid(sw, &uid);
3572 else
3573 err = tb_drom_read_uid_only(sw, &uid);
3574 if (err) {
3575 tb_sw_warn(sw, "uid read failed\n");
3576 return err;
3577 }
3578 if (sw->uid != uid) {
3579 tb_sw_info(sw,
3580 "changed while suspended (uid %#llx -> %#llx)\n",
3581 sw->uid, uid);
3582 return -ENODEV;
3583 }
3584 }
3585
3586 err = tb_switch_configure(sw);
3587 if (err)
3588 return err;
3589
3590 if (!runtime)
3591 tb_switch_check_wakes(sw);
3592
3593 /* Disable wakes */
3594 tb_switch_set_wake(sw, 0, true);
3595
3596 err = tb_switch_tmu_init(sw);
3597 if (err)
3598 return err;
3599
3600 /* check for surviving downstream switches */
3601 tb_switch_for_each_port(sw, port) {
3602 if (!tb_port_is_null(port))
3603 continue;
3604
3605 if (!tb_port_resume(port))
3606 continue;
3607
3608 if (tb_wait_for_port(port, true) <= 0) {
3609 tb_port_warn(port,
3610 "lost during suspend, disconnecting\n");
3611 if (tb_port_has_remote(port))
3612 tb_sw_set_unplugged(port->remote->sw);
3613 else if (port->xdomain)
3614 port->xdomain->is_unplugged = true;
3615 } else {
3616 /*
3617 * Always unlock the port so the downstream
3618 * switch/domain is accessible.
3619 */
3620 if (tb_port_unlock(port))
3621 tb_port_warn(port, "failed to unlock port\n");
3622 if (port->remote &&
3623 tb_switch_resume(port->remote->sw, runtime)) {
3624 tb_port_warn(port,
3625 "lost during suspend, disconnecting\n");
3626 tb_sw_set_unplugged(port->remote->sw);
3627 } else if (port->xdomain) {
3628 /*
3629 * If the user replaced the XDomain with
3630 * another router, this will succeed in
3631 * which case we must remove the XDomain
3632 * before adding the new router.
3633 */
3634 err = tb_cfg_get_upstream_port(sw->tb->ctl,
3635 port->xdomain->route);
3636 if (err > 0) {
3637 tb_port_warn(port,
3638 "XDomain was disconnected\n");
3639 port->xdomain->is_unplugged = true;
3640 }
3641 }
3642 }
3643 }
3644 return 0;
3645 }
3646
3647 /**
3648 * tb_switch_suspend() - Put a switch to sleep
3649 * @sw: Switch to suspend
3650 * @runtime: Is this runtime suspend or system sleep
3651 *
3652 * Suspends router and all its children. Enables wakes according to
3653 * value of @runtime and then sets sleep bit for the router. If @sw is
3654 * host router the domain is ready to go to sleep once this function
3655 * returns.
3656 */
tb_switch_suspend(struct tb_switch * sw,bool runtime)3657 void tb_switch_suspend(struct tb_switch *sw, bool runtime)
3658 {
3659 unsigned int flags = 0;
3660 struct tb_port *port;
3661 int err;
3662
3663 tb_sw_dbg(sw, "suspending switch\n");
3664
3665 /*
3666 * Actually only needed for Titan Ridge but for simplicity can be
3667 * done for USB4 device too as CLx is re-enabled at resume.
3668 */
3669 tb_switch_clx_disable(sw);
3670
3671 err = tb_plug_events_active(sw, false);
3672 if (err)
3673 return;
3674
3675 tb_switch_for_each_port(sw, port) {
3676 if (tb_port_has_remote(port))
3677 tb_switch_suspend(port->remote->sw, runtime);
3678 }
3679
3680 if (runtime) {
3681 /* Trigger wake when something is plugged in/out */
3682 flags |= TB_WAKE_ON_CONNECT | TB_WAKE_ON_DISCONNECT;
3683 flags |= TB_WAKE_ON_USB4;
3684 flags |= TB_WAKE_ON_USB3 | TB_WAKE_ON_PCIE | TB_WAKE_ON_DP;
3685 } else if (device_may_wakeup(&sw->dev)) {
3686 flags |= TB_WAKE_ON_CONNECT | TB_WAKE_ON_DISCONNECT;
3687 flags |= TB_WAKE_ON_USB4 | TB_WAKE_ON_USB3 | TB_WAKE_ON_PCIE;
3688 }
3689
3690 tb_switch_set_wake(sw, flags, runtime);
3691
3692 if (tb_switch_is_usb4(sw))
3693 usb4_switch_set_sleep(sw);
3694 else
3695 tb_lc_set_sleep(sw);
3696 }
3697
3698 /**
3699 * tb_switch_query_dp_resource() - Query availability of DP resource
3700 * @sw: Switch whose DP resource is queried
3701 * @in: DP IN port
3702 *
3703 * Queries availability of DP resource for DP tunneling using switch
3704 * specific means.
3705 *
3706 * Return: %true if resource is available, %false otherwise.
3707 */
tb_switch_query_dp_resource(struct tb_switch * sw,struct tb_port * in)3708 bool tb_switch_query_dp_resource(struct tb_switch *sw, struct tb_port *in)
3709 {
3710 if (tb_switch_is_usb4(sw))
3711 return usb4_switch_query_dp_resource(sw, in);
3712 return tb_lc_dp_sink_query(sw, in);
3713 }
3714
3715 /**
3716 * tb_switch_alloc_dp_resource() - Allocate available DP resource
3717 * @sw: Switch whose DP resource is allocated
3718 * @in: DP IN port
3719 *
3720 * Allocates DP resource for DP tunneling. The resource must be
3721 * available for this to succeed (see tb_switch_query_dp_resource()).
3722 *
3723 * Return: %0 on success, negative errno otherwise.
3724 */
tb_switch_alloc_dp_resource(struct tb_switch * sw,struct tb_port * in)3725 int tb_switch_alloc_dp_resource(struct tb_switch *sw, struct tb_port *in)
3726 {
3727 int ret;
3728
3729 if (tb_switch_is_usb4(sw))
3730 ret = usb4_switch_alloc_dp_resource(sw, in);
3731 else
3732 ret = tb_lc_dp_sink_alloc(sw, in);
3733
3734 if (ret)
3735 tb_sw_warn(sw, "failed to allocate DP resource for port %d\n",
3736 in->port);
3737 else
3738 tb_sw_dbg(sw, "allocated DP resource for port %d\n", in->port);
3739
3740 return ret;
3741 }
3742
3743 /**
3744 * tb_switch_dealloc_dp_resource() - De-allocate DP resource
3745 * @sw: Switch whose DP resource is de-allocated
3746 * @in: DP IN port
3747 *
3748 * De-allocates DP resource that was previously allocated for DP
3749 * tunneling.
3750 */
tb_switch_dealloc_dp_resource(struct tb_switch * sw,struct tb_port * in)3751 void tb_switch_dealloc_dp_resource(struct tb_switch *sw, struct tb_port *in)
3752 {
3753 int ret;
3754
3755 if (tb_switch_is_usb4(sw))
3756 ret = usb4_switch_dealloc_dp_resource(sw, in);
3757 else
3758 ret = tb_lc_dp_sink_dealloc(sw, in);
3759
3760 if (ret)
3761 tb_sw_warn(sw, "failed to de-allocate DP resource for port %d\n",
3762 in->port);
3763 else
3764 tb_sw_dbg(sw, "released DP resource for port %d\n", in->port);
3765 }
3766
3767 struct tb_sw_lookup {
3768 struct tb *tb;
3769 u8 link;
3770 u8 depth;
3771 const uuid_t *uuid;
3772 u64 route;
3773 };
3774
tb_switch_match(struct device * dev,const void * data)3775 static int tb_switch_match(struct device *dev, const void *data)
3776 {
3777 struct tb_switch *sw = tb_to_switch(dev);
3778 const struct tb_sw_lookup *lookup = data;
3779
3780 if (!sw)
3781 return 0;
3782 if (sw->tb != lookup->tb)
3783 return 0;
3784
3785 if (lookup->uuid)
3786 return !memcmp(sw->uuid, lookup->uuid, sizeof(*lookup->uuid));
3787
3788 if (lookup->route) {
3789 return sw->config.route_lo == lower_32_bits(lookup->route) &&
3790 sw->config.route_hi == upper_32_bits(lookup->route);
3791 }
3792
3793 /* Root switch is matched only by depth */
3794 if (!lookup->depth)
3795 return !sw->depth;
3796
3797 return sw->link == lookup->link && sw->depth == lookup->depth;
3798 }
3799
3800 /**
3801 * tb_switch_find_by_link_depth() - Find switch by link and depth
3802 * @tb: Domain the switch belongs
3803 * @link: Link number the switch is connected
3804 * @depth: Depth of the switch in link
3805 *
3806 * Returned switch has reference count increased so the caller needs to
3807 * call tb_switch_put() when done with the switch.
3808 *
3809 * Return: Pointer to &struct tb_switch, %NULL if not found.
3810 */
tb_switch_find_by_link_depth(struct tb * tb,u8 link,u8 depth)3811 struct tb_switch *tb_switch_find_by_link_depth(struct tb *tb, u8 link, u8 depth)
3812 {
3813 struct tb_sw_lookup lookup;
3814 struct device *dev;
3815
3816 memset(&lookup, 0, sizeof(lookup));
3817 lookup.tb = tb;
3818 lookup.link = link;
3819 lookup.depth = depth;
3820
3821 dev = bus_find_device(&tb_bus_type, NULL, &lookup, tb_switch_match);
3822 if (dev)
3823 return tb_to_switch(dev);
3824
3825 return NULL;
3826 }
3827
3828 /**
3829 * tb_switch_find_by_uuid() - Find switch by UUID
3830 * @tb: Domain the switch belongs
3831 * @uuid: UUID to look for
3832 *
3833 * Returned switch has reference count increased so the caller needs to
3834 * call tb_switch_put() when done with the switch.
3835 *
3836 * Return: Pointer to &struct tb_switch, %NULL if not found.
3837 */
tb_switch_find_by_uuid(struct tb * tb,const uuid_t * uuid)3838 struct tb_switch *tb_switch_find_by_uuid(struct tb *tb, const uuid_t *uuid)
3839 {
3840 struct tb_sw_lookup lookup;
3841 struct device *dev;
3842
3843 memset(&lookup, 0, sizeof(lookup));
3844 lookup.tb = tb;
3845 lookup.uuid = uuid;
3846
3847 dev = bus_find_device(&tb_bus_type, NULL, &lookup, tb_switch_match);
3848 if (dev)
3849 return tb_to_switch(dev);
3850
3851 return NULL;
3852 }
3853
3854 /**
3855 * tb_switch_find_by_route() - Find switch by route string
3856 * @tb: Domain the switch belongs
3857 * @route: Route string to look for
3858 *
3859 * Returned switch has reference count increased so the caller needs to
3860 * call tb_switch_put() when done with the switch.
3861 *
3862 * Return: Pointer to &struct tb_switch, %NULL if not found.
3863 */
tb_switch_find_by_route(struct tb * tb,u64 route)3864 struct tb_switch *tb_switch_find_by_route(struct tb *tb, u64 route)
3865 {
3866 struct tb_sw_lookup lookup;
3867 struct device *dev;
3868
3869 if (!route)
3870 return tb_switch_get(tb->root_switch);
3871
3872 memset(&lookup, 0, sizeof(lookup));
3873 lookup.tb = tb;
3874 lookup.route = route;
3875
3876 dev = bus_find_device(&tb_bus_type, NULL, &lookup, tb_switch_match);
3877 if (dev)
3878 return tb_to_switch(dev);
3879
3880 return NULL;
3881 }
3882
3883 /**
3884 * tb_switch_find_port() - return the first port of @type on @sw or NULL
3885 * @sw: Switch to find the port from
3886 * @type: Port type to look for
3887 *
3888 * Return: Pointer to &struct tb_port, %NULL if not found.
3889 */
tb_switch_find_port(struct tb_switch * sw,enum tb_port_type type)3890 struct tb_port *tb_switch_find_port(struct tb_switch *sw,
3891 enum tb_port_type type)
3892 {
3893 struct tb_port *port;
3894
3895 tb_switch_for_each_port(sw, port) {
3896 if (port->config.type == type)
3897 return port;
3898 }
3899
3900 return NULL;
3901 }
3902
3903 /*
3904 * Can be used for read/write a specified PCIe bridge for any Thunderbolt 3
3905 * device. For now used only for Titan Ridge.
3906 */
tb_switch_pcie_bridge_write(struct tb_switch * sw,unsigned int bridge,unsigned int pcie_offset,u32 value)3907 static int tb_switch_pcie_bridge_write(struct tb_switch *sw, unsigned int bridge,
3908 unsigned int pcie_offset, u32 value)
3909 {
3910 u32 offset, command, val;
3911 int ret;
3912
3913 if (sw->generation != 3)
3914 return -EOPNOTSUPP;
3915
3916 offset = sw->cap_plug_events + TB_PLUG_EVENTS_PCIE_WR_DATA;
3917 ret = tb_sw_write(sw, &value, TB_CFG_SWITCH, offset, 1);
3918 if (ret)
3919 return ret;
3920
3921 command = pcie_offset & TB_PLUG_EVENTS_PCIE_CMD_DW_OFFSET_MASK;
3922 command |= BIT(bridge + TB_PLUG_EVENTS_PCIE_CMD_BR_SHIFT);
3923 command |= TB_PLUG_EVENTS_PCIE_CMD_RD_WR_MASK;
3924 command |= TB_PLUG_EVENTS_PCIE_CMD_COMMAND_VAL
3925 << TB_PLUG_EVENTS_PCIE_CMD_COMMAND_SHIFT;
3926 command |= TB_PLUG_EVENTS_PCIE_CMD_REQ_ACK_MASK;
3927
3928 offset = sw->cap_plug_events + TB_PLUG_EVENTS_PCIE_CMD;
3929
3930 ret = tb_sw_write(sw, &command, TB_CFG_SWITCH, offset, 1);
3931 if (ret)
3932 return ret;
3933
3934 ret = tb_switch_wait_for_bit(sw, offset,
3935 TB_PLUG_EVENTS_PCIE_CMD_REQ_ACK_MASK, 0, 100);
3936 if (ret)
3937 return ret;
3938
3939 ret = tb_sw_read(sw, &val, TB_CFG_SWITCH, offset, 1);
3940 if (ret)
3941 return ret;
3942
3943 if (val & TB_PLUG_EVENTS_PCIE_CMD_TIMEOUT_MASK)
3944 return -ETIMEDOUT;
3945
3946 return 0;
3947 }
3948
3949 /**
3950 * tb_switch_pcie_l1_enable() - Enable PCIe link to enter L1 state
3951 * @sw: Router to enable PCIe L1
3952 *
3953 * For Titan Ridge switch to enter CLx state, its PCIe bridges shall enable
3954 * entry to PCIe L1 state. Shall be called after the upstream PCIe tunnel
3955 * was configured. Due to Intel platforms limitation, shall be called only
3956 * for first hop switch.
3957 *
3958 * Return: %0 on success, negative errno otherwise.
3959 */
tb_switch_pcie_l1_enable(struct tb_switch * sw)3960 int tb_switch_pcie_l1_enable(struct tb_switch *sw)
3961 {
3962 struct tb_switch *parent = tb_switch_parent(sw);
3963 int ret;
3964
3965 if (!tb_route(sw))
3966 return 0;
3967
3968 if (!tb_switch_is_titan_ridge(sw))
3969 return 0;
3970
3971 /* Enable PCIe L1 enable only for first hop router (depth = 1) */
3972 if (tb_route(parent))
3973 return 0;
3974
3975 /* Write to downstream PCIe bridge #5 aka Dn4 */
3976 ret = tb_switch_pcie_bridge_write(sw, 5, 0x143, 0x0c7806b1);
3977 if (ret)
3978 return ret;
3979
3980 /* Write to Upstream PCIe bridge #0 aka Up0 */
3981 return tb_switch_pcie_bridge_write(sw, 0, 0x143, 0x0c5806b1);
3982 }
3983
3984 /**
3985 * tb_switch_xhci_connect() - Connect internal xHCI
3986 * @sw: Router whose xHCI to connect
3987 *
3988 * Can be called to any router. For Alpine Ridge and Titan Ridge
3989 * performs special flows that bring the xHCI functional for any device
3990 * connected to the type-C port. Call only after PCIe tunnel has been
3991 * established. The function only does the connect if not done already
3992 * so can be called several times for the same router.
3993 *
3994 * Return: %0 on success, negative errno otherwise.
3995 */
tb_switch_xhci_connect(struct tb_switch * sw)3996 int tb_switch_xhci_connect(struct tb_switch *sw)
3997 {
3998 struct tb_port *port1, *port3;
3999 int ret;
4000
4001 if (sw->generation != 3)
4002 return 0;
4003
4004 port1 = &sw->ports[1];
4005 port3 = &sw->ports[3];
4006
4007 if (tb_switch_is_alpine_ridge(sw)) {
4008 bool usb_port1, usb_port3, xhci_port1, xhci_port3;
4009
4010 usb_port1 = tb_lc_is_usb_plugged(port1);
4011 usb_port3 = tb_lc_is_usb_plugged(port3);
4012 xhci_port1 = tb_lc_is_xhci_connected(port1);
4013 xhci_port3 = tb_lc_is_xhci_connected(port3);
4014
4015 /* Figure out correct USB port to connect */
4016 if (usb_port1 && !xhci_port1) {
4017 ret = tb_lc_xhci_connect(port1);
4018 if (ret)
4019 return ret;
4020 }
4021 if (usb_port3 && !xhci_port3)
4022 return tb_lc_xhci_connect(port3);
4023 } else if (tb_switch_is_titan_ridge(sw)) {
4024 ret = tb_lc_xhci_connect(port1);
4025 if (ret)
4026 return ret;
4027 return tb_lc_xhci_connect(port3);
4028 }
4029
4030 return 0;
4031 }
4032
4033 /**
4034 * tb_switch_xhci_disconnect() - Disconnect internal xHCI
4035 * @sw: Router whose xHCI to disconnect
4036 *
4037 * The opposite of tb_switch_xhci_connect(). Disconnects xHCI on both
4038 * ports.
4039 */
tb_switch_xhci_disconnect(struct tb_switch * sw)4040 void tb_switch_xhci_disconnect(struct tb_switch *sw)
4041 {
4042 if (sw->generation == 3) {
4043 struct tb_port *port1 = &sw->ports[1];
4044 struct tb_port *port3 = &sw->ports[3];
4045
4046 tb_lc_xhci_disconnect(port1);
4047 tb_port_dbg(port1, "disconnected xHCI\n");
4048 tb_lc_xhci_disconnect(port3);
4049 tb_port_dbg(port3, "disconnected xHCI\n");
4050 }
4051 }
4052