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