hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/thunderbolt/switch.c
....@@ -1,8 +1,9 @@
11 // SPDX-License-Identifier: GPL-2.0
22 /*
3
- * Thunderbolt Cactus Ridge driver - switch/port utility functions
3
+ * Thunderbolt driver - switch/port utility functions
44 *
55 * Copyright (c) 2014 Andreas Noever <andreas.noever@gmail.com>
6
+ * Copyright (C) 2018, Intel Corporation
67 */
78
89 #include <linux/delay.h>
....@@ -12,26 +13,22 @@
1213 #include <linux/sched/signal.h>
1314 #include <linux/sizes.h>
1415 #include <linux/slab.h>
15
-#include <linux/vmalloc.h>
1616
1717 #include "tb.h"
1818
1919 /* Switch NVM support */
2020
21
-#define NVM_DEVID 0x05
22
-#define NVM_VERSION 0x08
2321 #define NVM_CSS 0x10
24
-#define NVM_FLASH_SIZE 0x45
25
-
26
-#define NVM_MIN_SIZE SZ_32K
27
-#define NVM_MAX_SIZE SZ_512K
28
-
29
-static DEFINE_IDA(nvm_ida);
3022
3123 struct nvm_auth_status {
3224 struct list_head list;
3325 uuid_t uuid;
3426 u32 status;
27
+};
28
+
29
+enum nvm_write_ops {
30
+ WRITE_AND_AUTHENTICATE = 1,
31
+ WRITE_ONLY = 2,
3532 };
3633
3734 /*
....@@ -162,10 +159,16 @@
162159 image_size -= hdr_size;
163160 }
164161
165
- return dma_port_flash_write(sw->dma_port, 0, buf, image_size);
162
+ if (tb_switch_is_usb4(sw))
163
+ ret = usb4_switch_nvm_write(sw, 0, buf, image_size);
164
+ else
165
+ ret = dma_port_flash_write(sw->dma_port, 0, buf, image_size);
166
+ if (!ret)
167
+ sw->nvm->flushed = true;
168
+ return ret;
166169 }
167170
168
-static int nvm_authenticate_host(struct tb_switch *sw)
171
+static int nvm_authenticate_host_dma_port(struct tb_switch *sw)
169172 {
170173 int ret = 0;
171174
....@@ -205,7 +208,7 @@
205208 return ret;
206209 }
207210
208
-static int nvm_authenticate_device(struct tb_switch *sw)
211
+static int nvm_authenticate_device_dma_port(struct tb_switch *sw)
209212 {
210213 int ret, retries = 10;
211214
....@@ -250,31 +253,108 @@
250253 return -ETIMEDOUT;
251254 }
252255
256
+static void nvm_authenticate_start_dma_port(struct tb_switch *sw)
257
+{
258
+ struct pci_dev *root_port;
259
+
260
+ /*
261
+ * During host router NVM upgrade we should not allow root port to
262
+ * go into D3cold because some root ports cannot trigger PME
263
+ * itself. To be on the safe side keep the root port in D0 during
264
+ * the whole upgrade process.
265
+ */
266
+ root_port = pcie_find_root_port(sw->tb->nhi->pdev);
267
+ if (root_port)
268
+ pm_runtime_get_noresume(&root_port->dev);
269
+}
270
+
271
+static void nvm_authenticate_complete_dma_port(struct tb_switch *sw)
272
+{
273
+ struct pci_dev *root_port;
274
+
275
+ root_port = pcie_find_root_port(sw->tb->nhi->pdev);
276
+ if (root_port)
277
+ pm_runtime_put(&root_port->dev);
278
+}
279
+
280
+static inline bool nvm_readable(struct tb_switch *sw)
281
+{
282
+ if (tb_switch_is_usb4(sw)) {
283
+ /*
284
+ * USB4 devices must support NVM operations but it is
285
+ * optional for hosts. Therefore we query the NVM sector
286
+ * size here and if it is supported assume NVM
287
+ * operations are implemented.
288
+ */
289
+ return usb4_switch_nvm_sector_size(sw) > 0;
290
+ }
291
+
292
+ /* Thunderbolt 2 and 3 devices support NVM through DMA port */
293
+ return !!sw->dma_port;
294
+}
295
+
296
+static inline bool nvm_upgradeable(struct tb_switch *sw)
297
+{
298
+ if (sw->no_nvm_upgrade)
299
+ return false;
300
+ return nvm_readable(sw);
301
+}
302
+
303
+static inline int nvm_read(struct tb_switch *sw, unsigned int address,
304
+ void *buf, size_t size)
305
+{
306
+ if (tb_switch_is_usb4(sw))
307
+ return usb4_switch_nvm_read(sw, address, buf, size);
308
+ return dma_port_flash_read(sw->dma_port, address, buf, size);
309
+}
310
+
311
+static int nvm_authenticate(struct tb_switch *sw)
312
+{
313
+ int ret;
314
+
315
+ if (tb_switch_is_usb4(sw))
316
+ return usb4_switch_nvm_authenticate(sw);
317
+
318
+ if (!tb_route(sw)) {
319
+ nvm_authenticate_start_dma_port(sw);
320
+ ret = nvm_authenticate_host_dma_port(sw);
321
+ } else {
322
+ ret = nvm_authenticate_device_dma_port(sw);
323
+ }
324
+
325
+ return ret;
326
+}
327
+
253328 static int tb_switch_nvm_read(void *priv, unsigned int offset, void *val,
254329 size_t bytes)
255330 {
256
- struct tb_switch *sw = priv;
331
+ struct tb_nvm *nvm = priv;
332
+ struct tb_switch *sw = tb_to_switch(nvm->dev);
257333 int ret;
258334
259335 pm_runtime_get_sync(&sw->dev);
260
- ret = dma_port_flash_read(sw->dma_port, offset, val, bytes);
336
+
337
+ if (!mutex_trylock(&sw->tb->lock)) {
338
+ ret = restart_syscall();
339
+ goto out;
340
+ }
341
+
342
+ ret = nvm_read(sw, offset, val, bytes);
343
+ mutex_unlock(&sw->tb->lock);
344
+
345
+out:
261346 pm_runtime_mark_last_busy(&sw->dev);
262347 pm_runtime_put_autosuspend(&sw->dev);
263348
264349 return ret;
265350 }
266351
267
-static int tb_switch_nvm_no_read(void *priv, unsigned int offset, void *val,
268
- size_t bytes)
269
-{
270
- return -EPERM;
271
-}
272
-
273352 static int tb_switch_nvm_write(void *priv, unsigned int offset, void *val,
274353 size_t bytes)
275354 {
276
- struct tb_switch *sw = priv;
277
- int ret = 0;
355
+ struct tb_nvm *nvm = priv;
356
+ struct tb_switch *sw = tb_to_switch(nvm->dev);
357
+ int ret;
278358
279359 if (!mutex_trylock(&sw->tb->lock))
280360 return restart_syscall();
....@@ -285,67 +365,37 @@
285365 * locally here and handle the special cases when the user asks
286366 * us to authenticate the image.
287367 */
288
- if (!sw->nvm->buf) {
289
- sw->nvm->buf = vmalloc(NVM_MAX_SIZE);
290
- if (!sw->nvm->buf) {
291
- ret = -ENOMEM;
292
- goto unlock;
293
- }
294
- }
295
-
296
- sw->nvm->buf_data_size = offset + bytes;
297
- memcpy(sw->nvm->buf + offset, val, bytes);
298
-
299
-unlock:
368
+ ret = tb_nvm_write_buf(nvm, offset, val, bytes);
300369 mutex_unlock(&sw->tb->lock);
301370
302371 return ret;
303372 }
304373
305
-static struct nvmem_device *register_nvmem(struct tb_switch *sw, int id,
306
- size_t size, bool active)
307
-{
308
- struct nvmem_config config;
309
-
310
- memset(&config, 0, sizeof(config));
311
-
312
- if (active) {
313
- config.name = "nvm_active";
314
- config.reg_read = tb_switch_nvm_read;
315
- config.read_only = true;
316
- } else {
317
- config.name = "nvm_non_active";
318
- config.reg_read = tb_switch_nvm_no_read;
319
- config.reg_write = tb_switch_nvm_write;
320
- config.root_only = true;
321
- }
322
-
323
- config.id = id;
324
- config.stride = 4;
325
- config.word_size = 4;
326
- config.size = size;
327
- config.dev = &sw->dev;
328
- config.owner = THIS_MODULE;
329
- config.priv = sw;
330
-
331
- return nvmem_register(&config);
332
-}
333
-
334374 static int tb_switch_nvm_add(struct tb_switch *sw)
335375 {
336
- struct nvmem_device *nvm_dev;
337
- struct tb_switch_nvm *nvm;
376
+ struct tb_nvm *nvm;
338377 u32 val;
339378 int ret;
340379
341
- if (!sw->dma_port)
380
+ if (!nvm_readable(sw))
342381 return 0;
343382
344
- nvm = kzalloc(sizeof(*nvm), GFP_KERNEL);
345
- if (!nvm)
346
- return -ENOMEM;
383
+ /*
384
+ * The NVM format of non-Intel hardware is not known so
385
+ * currently restrict NVM upgrade for Intel hardware. We may
386
+ * relax this in the future when we learn other NVM formats.
387
+ */
388
+ if (sw->config.vendor_id != PCI_VENDOR_ID_INTEL &&
389
+ sw->config.vendor_id != 0x8087) {
390
+ dev_info(&sw->dev,
391
+ "NVM format of vendor %#x is not known, disabling NVM upgrade\n",
392
+ sw->config.vendor_id);
393
+ return 0;
394
+ }
347395
348
- nvm->id = ida_simple_get(&nvm_ida, 0, 0, GFP_KERNEL);
396
+ nvm = tb_nvm_alloc(&sw->dev);
397
+ if (IS_ERR(nvm))
398
+ return PTR_ERR(nvm);
349399
350400 /*
351401 * If the switch is in safe-mode the only accessible portion of
....@@ -355,54 +405,44 @@
355405 if (!sw->safe_mode) {
356406 u32 nvm_size, hdr_size;
357407
358
- ret = dma_port_flash_read(sw->dma_port, NVM_FLASH_SIZE, &val,
359
- sizeof(val));
408
+ ret = nvm_read(sw, NVM_FLASH_SIZE, &val, sizeof(val));
360409 if (ret)
361
- goto err_ida;
410
+ goto err_nvm;
362411
363412 hdr_size = sw->generation < 3 ? SZ_8K : SZ_16K;
364413 nvm_size = (SZ_1M << (val & 7)) / 8;
365414 nvm_size = (nvm_size - hdr_size) / 2;
366415
367
- ret = dma_port_flash_read(sw->dma_port, NVM_VERSION, &val,
368
- sizeof(val));
416
+ ret = nvm_read(sw, NVM_VERSION, &val, sizeof(val));
369417 if (ret)
370
- goto err_ida;
418
+ goto err_nvm;
371419
372420 nvm->major = val >> 16;
373421 nvm->minor = val >> 8;
374422
375
- nvm_dev = register_nvmem(sw, nvm->id, nvm_size, true);
376
- if (IS_ERR(nvm_dev)) {
377
- ret = PTR_ERR(nvm_dev);
378
- goto err_ida;
379
- }
380
- nvm->active = nvm_dev;
423
+ ret = tb_nvm_add_active(nvm, nvm_size, tb_switch_nvm_read);
424
+ if (ret)
425
+ goto err_nvm;
381426 }
382427
383
- nvm_dev = register_nvmem(sw, nvm->id, NVM_MAX_SIZE, false);
384
- if (IS_ERR(nvm_dev)) {
385
- ret = PTR_ERR(nvm_dev);
386
- goto err_nvm_active;
428
+ if (!sw->no_nvm_upgrade) {
429
+ ret = tb_nvm_add_non_active(nvm, NVM_MAX_SIZE,
430
+ tb_switch_nvm_write);
431
+ if (ret)
432
+ goto err_nvm;
387433 }
388
- nvm->non_active = nvm_dev;
389434
390435 sw->nvm = nvm;
391436 return 0;
392437
393
-err_nvm_active:
394
- if (nvm->active)
395
- nvmem_unregister(nvm->active);
396
-err_ida:
397
- ida_simple_remove(&nvm_ida, nvm->id);
398
- kfree(nvm);
399
-
438
+err_nvm:
439
+ tb_nvm_free(nvm);
400440 return ret;
401441 }
402442
403443 static void tb_switch_nvm_remove(struct tb_switch *sw)
404444 {
405
- struct tb_switch_nvm *nvm;
445
+ struct tb_nvm *nvm;
406446
407447 nvm = sw->nvm;
408448 sw->nvm = NULL;
....@@ -414,12 +454,7 @@
414454 if (!nvm->authenticating)
415455 nvm_clear_auth_status(sw);
416456
417
- nvmem_unregister(nvm->non_active);
418
- if (nvm->active)
419
- nvmem_unregister(nvm->active);
420
- ida_simple_remove(&nvm_ida, nvm->id);
421
- vfree(nvm->buf);
422
- kfree(nvm);
457
+ tb_nvm_free(nvm);
423458 }
424459
425460 /* port utility functions */
....@@ -455,15 +490,15 @@
455490
456491 static void tb_dump_port(struct tb *tb, struct tb_regs_port_header *port)
457492 {
458
- tb_info(tb,
459
- " Port %d: %x:%x (Revision: %d, TB Version: %d, Type: %s (%#x))\n",
460
- port->port_number, port->vendor_id, port->device_id,
461
- port->revision, port->thunderbolt_version, tb_port_type(port),
462
- port->type);
463
- tb_info(tb, " Max hop id (in/out): %d/%d\n",
464
- port->max_in_hop_id, port->max_out_hop_id);
465
- tb_info(tb, " Max counters: %d\n", port->max_counters);
466
- tb_info(tb, " NFC Credits: %#x\n", port->nfc_credits);
493
+ tb_dbg(tb,
494
+ " Port %d: %x:%x (Revision: %d, TB Version: %d, Type: %s (%#x))\n",
495
+ port->port_number, port->vendor_id, port->device_id,
496
+ port->revision, port->thunderbolt_version, tb_port_type(port),
497
+ port->type);
498
+ tb_dbg(tb, " Max hop id (in/out): %d/%d\n",
499
+ port->max_in_hop_id, port->max_out_hop_id);
500
+ tb_dbg(tb, " Max counters: %d\n", port->max_counters);
501
+ tb_dbg(tb, " NFC Credits: %#x\n", port->nfc_credits);
467502 }
468503
469504 /**
....@@ -518,23 +553,22 @@
518553 if (state < 0)
519554 return state;
520555 if (state == TB_PORT_DISABLED) {
521
- tb_port_info(port, "is disabled (state: 0)\n");
556
+ tb_port_dbg(port, "is disabled (state: 0)\n");
522557 return 0;
523558 }
524559 if (state == TB_PORT_UNPLUGGED) {
525560 if (wait_if_unplugged) {
526561 /* used during resume */
527
- tb_port_info(port,
528
- "is unplugged (state: 7), retrying...\n");
562
+ tb_port_dbg(port,
563
+ "is unplugged (state: 7), retrying...\n");
529564 msleep(100);
530565 continue;
531566 }
532
- tb_port_info(port, "is unplugged (state: 7)\n");
567
+ tb_port_dbg(port, "is unplugged (state: 7)\n");
533568 return 0;
534569 }
535570 if (state == TB_PORT_UP) {
536
- tb_port_info(port,
537
- "is connected, link is up (state: 2)\n");
571
+ tb_port_dbg(port, "is connected, link is up (state: 2)\n");
538572 return 1;
539573 }
540574
....@@ -542,9 +576,9 @@
542576 * After plug-in the state is TB_PORT_CONNECTING. Give it some
543577 * time.
544578 */
545
- tb_port_info(port,
546
- "is connected, link is not up (state: %d), retrying...\n",
547
- state);
579
+ tb_port_dbg(port,
580
+ "is connected, link is not up (state: %d), retrying...\n",
581
+ state);
548582 msleep(100);
549583 }
550584 tb_port_warn(port,
....@@ -562,16 +596,51 @@
562596 */
563597 int tb_port_add_nfc_credits(struct tb_port *port, int credits)
564598 {
565
- if (credits == 0)
599
+ u32 nfc_credits;
600
+
601
+ if (credits == 0 || port->sw->is_unplugged)
566602 return 0;
567
- tb_port_info(port,
568
- "adding %#x NFC credits (%#x -> %#x)",
569
- credits,
570
- port->config.nfc_credits,
571
- port->config.nfc_credits + credits);
572
- port->config.nfc_credits += credits;
603
+
604
+ /*
605
+ * USB4 restricts programming NFC buffers to lane adapters only
606
+ * so skip other ports.
607
+ */
608
+ if (tb_switch_is_usb4(port->sw) && !tb_port_is_null(port))
609
+ return 0;
610
+
611
+ nfc_credits = port->config.nfc_credits & ADP_CS_4_NFC_BUFFERS_MASK;
612
+ nfc_credits += credits;
613
+
614
+ tb_port_dbg(port, "adding %d NFC credits to %lu", credits,
615
+ port->config.nfc_credits & ADP_CS_4_NFC_BUFFERS_MASK);
616
+
617
+ port->config.nfc_credits &= ~ADP_CS_4_NFC_BUFFERS_MASK;
618
+ port->config.nfc_credits |= nfc_credits;
619
+
573620 return tb_port_write(port, &port->config.nfc_credits,
574
- TB_CFG_PORT, 4, 1);
621
+ TB_CFG_PORT, ADP_CS_4, 1);
622
+}
623
+
624
+/**
625
+ * tb_port_set_initial_credits() - Set initial port link credits allocated
626
+ * @port: Port to set the initial credits
627
+ * @credits: Number of credits to to allocate
628
+ *
629
+ * Set initial credits value to be used for ingress shared buffering.
630
+ */
631
+int tb_port_set_initial_credits(struct tb_port *port, u32 credits)
632
+{
633
+ u32 data;
634
+ int ret;
635
+
636
+ ret = tb_port_read(port, &data, TB_CFG_PORT, ADP_CS_5, 1);
637
+ if (ret)
638
+ return ret;
639
+
640
+ data &= ~ADP_CS_5_LCA_MASK;
641
+ data |= (credits << ADP_CS_5_LCA_SHIFT) & ADP_CS_5_LCA_MASK;
642
+
643
+ return tb_port_write(port, &data, TB_CFG_PORT, ADP_CS_5, 1);
575644 }
576645
577646 /**
....@@ -582,8 +651,70 @@
582651 int tb_port_clear_counter(struct tb_port *port, int counter)
583652 {
584653 u32 zero[3] = { 0, 0, 0 };
585
- tb_port_info(port, "clearing counter %d\n", counter);
654
+ tb_port_dbg(port, "clearing counter %d\n", counter);
586655 return tb_port_write(port, zero, TB_CFG_COUNTERS, 3 * counter, 3);
656
+}
657
+
658
+/**
659
+ * tb_port_unlock() - Unlock downstream port
660
+ * @port: Port to unlock
661
+ *
662
+ * Needed for USB4 but can be called for any CIO/USB4 ports. Makes the
663
+ * downstream router accessible for CM.
664
+ */
665
+int tb_port_unlock(struct tb_port *port)
666
+{
667
+ if (tb_switch_is_icm(port->sw))
668
+ return 0;
669
+ if (!tb_port_is_null(port))
670
+ return -EINVAL;
671
+ if (tb_switch_is_usb4(port->sw))
672
+ return usb4_port_unlock(port);
673
+ return 0;
674
+}
675
+
676
+static int __tb_port_enable(struct tb_port *port, bool enable)
677
+{
678
+ int ret;
679
+ u32 phy;
680
+
681
+ if (!tb_port_is_null(port))
682
+ return -EINVAL;
683
+
684
+ ret = tb_port_read(port, &phy, TB_CFG_PORT,
685
+ port->cap_phy + LANE_ADP_CS_1, 1);
686
+ if (ret)
687
+ return ret;
688
+
689
+ if (enable)
690
+ phy &= ~LANE_ADP_CS_1_LD;
691
+ else
692
+ phy |= LANE_ADP_CS_1_LD;
693
+
694
+ return tb_port_write(port, &phy, TB_CFG_PORT,
695
+ port->cap_phy + LANE_ADP_CS_1, 1);
696
+}
697
+
698
+/**
699
+ * tb_port_enable() - Enable lane adapter
700
+ * @port: Port to enable (can be %NULL)
701
+ *
702
+ * This is used for lane 0 and 1 adapters to enable it.
703
+ */
704
+int tb_port_enable(struct tb_port *port)
705
+{
706
+ return __tb_port_enable(port, true);
707
+}
708
+
709
+/**
710
+ * tb_port_disable() - Disable lane adapter
711
+ * @port: Port to disable (can be %NULL)
712
+ *
713
+ * This is used for lane 0 and 1 adapters to disable it.
714
+ */
715
+int tb_port_disable(struct tb_port *port)
716
+{
717
+ return __tb_port_enable(port, false);
587718 }
588719
589720 /**
....@@ -600,8 +731,15 @@
600731 int cap;
601732
602733 res = tb_port_read(port, &port->config, TB_CFG_PORT, 0, 8);
603
- if (res)
734
+ if (res) {
735
+ if (res == -ENODEV) {
736
+ tb_dbg(port->sw->tb, " Port %d: not implemented\n",
737
+ port->port);
738
+ port->disabled = true;
739
+ return 0;
740
+ }
604741 return res;
742
+ }
605743
606744 /* Port 0 is the switch itself and has no PHY. */
607745 if (port->config.type == TB_TYPE_PORT && port->port != 0) {
....@@ -611,54 +749,547 @@
611749 port->cap_phy = cap;
612750 else
613751 tb_port_WARN(port, "non switch port without a PHY\n");
752
+
753
+ cap = tb_port_find_cap(port, TB_PORT_CAP_USB4);
754
+ if (cap > 0)
755
+ port->cap_usb4 = cap;
756
+ } else if (port->port != 0) {
757
+ cap = tb_port_find_cap(port, TB_PORT_CAP_ADAP);
758
+ if (cap > 0)
759
+ port->cap_adap = cap;
614760 }
615761
616762 tb_dump_port(port->sw->tb, &port->config);
617763
618
- /* TODO: Read dual link port, DP port and more from EEPROM. */
764
+ INIT_LIST_HEAD(&port->list);
619765 return 0;
620766
621767 }
622768
769
+static int tb_port_alloc_hopid(struct tb_port *port, bool in, int min_hopid,
770
+ int max_hopid)
771
+{
772
+ int port_max_hopid;
773
+ struct ida *ida;
774
+
775
+ if (in) {
776
+ port_max_hopid = port->config.max_in_hop_id;
777
+ ida = &port->in_hopids;
778
+ } else {
779
+ port_max_hopid = port->config.max_out_hop_id;
780
+ ida = &port->out_hopids;
781
+ }
782
+
783
+ /*
784
+ * NHI can use HopIDs 1-max for other adapters HopIDs 0-7 are
785
+ * reserved.
786
+ */
787
+ if (!tb_port_is_nhi(port) && min_hopid < TB_PATH_MIN_HOPID)
788
+ min_hopid = TB_PATH_MIN_HOPID;
789
+
790
+ if (max_hopid < 0 || max_hopid > port_max_hopid)
791
+ max_hopid = port_max_hopid;
792
+
793
+ return ida_simple_get(ida, min_hopid, max_hopid + 1, GFP_KERNEL);
794
+}
795
+
796
+/**
797
+ * tb_port_alloc_in_hopid() - Allocate input HopID from port
798
+ * @port: Port to allocate HopID for
799
+ * @min_hopid: Minimum acceptable input HopID
800
+ * @max_hopid: Maximum acceptable input HopID
801
+ *
802
+ * Return: HopID between @min_hopid and @max_hopid or negative errno in
803
+ * case of error.
804
+ */
805
+int tb_port_alloc_in_hopid(struct tb_port *port, int min_hopid, int max_hopid)
806
+{
807
+ return tb_port_alloc_hopid(port, true, min_hopid, max_hopid);
808
+}
809
+
810
+/**
811
+ * tb_port_alloc_out_hopid() - Allocate output HopID from port
812
+ * @port: Port to allocate HopID for
813
+ * @min_hopid: Minimum acceptable output HopID
814
+ * @max_hopid: Maximum acceptable output HopID
815
+ *
816
+ * Return: HopID between @min_hopid and @max_hopid or negative errno in
817
+ * case of error.
818
+ */
819
+int tb_port_alloc_out_hopid(struct tb_port *port, int min_hopid, int max_hopid)
820
+{
821
+ return tb_port_alloc_hopid(port, false, min_hopid, max_hopid);
822
+}
823
+
824
+/**
825
+ * tb_port_release_in_hopid() - Release allocated input HopID from port
826
+ * @port: Port whose HopID to release
827
+ * @hopid: HopID to release
828
+ */
829
+void tb_port_release_in_hopid(struct tb_port *port, int hopid)
830
+{
831
+ ida_simple_remove(&port->in_hopids, hopid);
832
+}
833
+
834
+/**
835
+ * tb_port_release_out_hopid() - Release allocated output HopID from port
836
+ * @port: Port whose HopID to release
837
+ * @hopid: HopID to release
838
+ */
839
+void tb_port_release_out_hopid(struct tb_port *port, int hopid)
840
+{
841
+ ida_simple_remove(&port->out_hopids, hopid);
842
+}
843
+
844
+static inline bool tb_switch_is_reachable(const struct tb_switch *parent,
845
+ const struct tb_switch *sw)
846
+{
847
+ u64 mask = (1ULL << parent->config.depth * 8) - 1;
848
+ return (tb_route(parent) & mask) == (tb_route(sw) & mask);
849
+}
850
+
851
+/**
852
+ * tb_next_port_on_path() - Return next port for given port on a path
853
+ * @start: Start port of the walk
854
+ * @end: End port of the walk
855
+ * @prev: Previous port (%NULL if this is the first)
856
+ *
857
+ * This function can be used to walk from one port to another if they
858
+ * are connected through zero or more switches. If the @prev is dual
859
+ * link port, the function follows that link and returns another end on
860
+ * that same link.
861
+ *
862
+ * If the @end port has been reached, return %NULL.
863
+ *
864
+ * Domain tb->lock must be held when this function is called.
865
+ */
866
+struct tb_port *tb_next_port_on_path(struct tb_port *start, struct tb_port *end,
867
+ struct tb_port *prev)
868
+{
869
+ struct tb_port *next;
870
+
871
+ if (!prev)
872
+ return start;
873
+
874
+ if (prev->sw == end->sw) {
875
+ if (prev == end)
876
+ return NULL;
877
+ return end;
878
+ }
879
+
880
+ if (tb_switch_is_reachable(prev->sw, end->sw)) {
881
+ next = tb_port_at(tb_route(end->sw), prev->sw);
882
+ /* Walk down the topology if next == prev */
883
+ if (prev->remote &&
884
+ (next == prev || next->dual_link_port == prev))
885
+ next = prev->remote;
886
+ } else {
887
+ if (tb_is_upstream_port(prev)) {
888
+ next = prev->remote;
889
+ } else {
890
+ next = tb_upstream_port(prev->sw);
891
+ /*
892
+ * Keep the same link if prev and next are both
893
+ * dual link ports.
894
+ */
895
+ if (next->dual_link_port &&
896
+ next->link_nr != prev->link_nr) {
897
+ next = next->dual_link_port;
898
+ }
899
+ }
900
+ }
901
+
902
+ return next != prev ? next : NULL;
903
+}
904
+
905
+/**
906
+ * tb_port_get_link_speed() - Get current link speed
907
+ * @port: Port to check (USB4 or CIO)
908
+ *
909
+ * Returns link speed in Gb/s or negative errno in case of failure.
910
+ */
911
+int tb_port_get_link_speed(struct tb_port *port)
912
+{
913
+ u32 val, speed;
914
+ int ret;
915
+
916
+ if (!port->cap_phy)
917
+ return -EINVAL;
918
+
919
+ ret = tb_port_read(port, &val, TB_CFG_PORT,
920
+ port->cap_phy + LANE_ADP_CS_1, 1);
921
+ if (ret)
922
+ return ret;
923
+
924
+ speed = (val & LANE_ADP_CS_1_CURRENT_SPEED_MASK) >>
925
+ LANE_ADP_CS_1_CURRENT_SPEED_SHIFT;
926
+ return speed == LANE_ADP_CS_1_CURRENT_SPEED_GEN3 ? 20 : 10;
927
+}
928
+
929
+static int tb_port_get_link_width(struct tb_port *port)
930
+{
931
+ u32 val;
932
+ int ret;
933
+
934
+ if (!port->cap_phy)
935
+ return -EINVAL;
936
+
937
+ ret = tb_port_read(port, &val, TB_CFG_PORT,
938
+ port->cap_phy + LANE_ADP_CS_1, 1);
939
+ if (ret)
940
+ return ret;
941
+
942
+ return (val & LANE_ADP_CS_1_CURRENT_WIDTH_MASK) >>
943
+ LANE_ADP_CS_1_CURRENT_WIDTH_SHIFT;
944
+}
945
+
946
+static bool tb_port_is_width_supported(struct tb_port *port, int width)
947
+{
948
+ u32 phy, widths;
949
+ int ret;
950
+
951
+ if (!port->cap_phy)
952
+ return false;
953
+
954
+ ret = tb_port_read(port, &phy, TB_CFG_PORT,
955
+ port->cap_phy + LANE_ADP_CS_0, 1);
956
+ if (ret)
957
+ return false;
958
+
959
+ widths = (phy & LANE_ADP_CS_0_SUPPORTED_WIDTH_MASK) >>
960
+ LANE_ADP_CS_0_SUPPORTED_WIDTH_SHIFT;
961
+
962
+ return !!(widths & width);
963
+}
964
+
965
+static int tb_port_set_link_width(struct tb_port *port, unsigned int width)
966
+{
967
+ u32 val;
968
+ int ret;
969
+
970
+ if (!port->cap_phy)
971
+ return -EINVAL;
972
+
973
+ ret = tb_port_read(port, &val, TB_CFG_PORT,
974
+ port->cap_phy + LANE_ADP_CS_1, 1);
975
+ if (ret)
976
+ return ret;
977
+
978
+ val &= ~LANE_ADP_CS_1_TARGET_WIDTH_MASK;
979
+ switch (width) {
980
+ case 1:
981
+ val |= LANE_ADP_CS_1_TARGET_WIDTH_SINGLE <<
982
+ LANE_ADP_CS_1_TARGET_WIDTH_SHIFT;
983
+ break;
984
+ case 2:
985
+ val |= LANE_ADP_CS_1_TARGET_WIDTH_DUAL <<
986
+ LANE_ADP_CS_1_TARGET_WIDTH_SHIFT;
987
+ break;
988
+ default:
989
+ return -EINVAL;
990
+ }
991
+
992
+ val |= LANE_ADP_CS_1_LB;
993
+
994
+ return tb_port_write(port, &val, TB_CFG_PORT,
995
+ port->cap_phy + LANE_ADP_CS_1, 1);
996
+}
997
+
998
+static int tb_port_lane_bonding_enable(struct tb_port *port)
999
+{
1000
+ int ret;
1001
+
1002
+ /*
1003
+ * Enable lane bonding for both links if not already enabled by
1004
+ * for example the boot firmware.
1005
+ */
1006
+ ret = tb_port_get_link_width(port);
1007
+ if (ret == 1) {
1008
+ ret = tb_port_set_link_width(port, 2);
1009
+ if (ret)
1010
+ return ret;
1011
+ }
1012
+
1013
+ ret = tb_port_get_link_width(port->dual_link_port);
1014
+ if (ret == 1) {
1015
+ ret = tb_port_set_link_width(port->dual_link_port, 2);
1016
+ if (ret) {
1017
+ tb_port_set_link_width(port, 1);
1018
+ return ret;
1019
+ }
1020
+ }
1021
+
1022
+ port->bonded = true;
1023
+ port->dual_link_port->bonded = true;
1024
+
1025
+ return 0;
1026
+}
1027
+
1028
+static void tb_port_lane_bonding_disable(struct tb_port *port)
1029
+{
1030
+ port->dual_link_port->bonded = false;
1031
+ port->bonded = false;
1032
+
1033
+ tb_port_set_link_width(port->dual_link_port, 1);
1034
+ tb_port_set_link_width(port, 1);
1035
+}
1036
+
1037
+/**
1038
+ * tb_port_is_enabled() - Is the adapter port enabled
1039
+ * @port: Port to check
1040
+ */
1041
+bool tb_port_is_enabled(struct tb_port *port)
1042
+{
1043
+ switch (port->config.type) {
1044
+ case TB_TYPE_PCIE_UP:
1045
+ case TB_TYPE_PCIE_DOWN:
1046
+ return tb_pci_port_is_enabled(port);
1047
+
1048
+ case TB_TYPE_DP_HDMI_IN:
1049
+ case TB_TYPE_DP_HDMI_OUT:
1050
+ return tb_dp_port_is_enabled(port);
1051
+
1052
+ case TB_TYPE_USB3_UP:
1053
+ case TB_TYPE_USB3_DOWN:
1054
+ return tb_usb3_port_is_enabled(port);
1055
+
1056
+ default:
1057
+ return false;
1058
+ }
1059
+}
1060
+
1061
+/**
1062
+ * tb_usb3_port_is_enabled() - Is the USB3 adapter port enabled
1063
+ * @port: USB3 adapter port to check
1064
+ */
1065
+bool tb_usb3_port_is_enabled(struct tb_port *port)
1066
+{
1067
+ u32 data;
1068
+
1069
+ if (tb_port_read(port, &data, TB_CFG_PORT,
1070
+ port->cap_adap + ADP_USB3_CS_0, 1))
1071
+ return false;
1072
+
1073
+ return !!(data & ADP_USB3_CS_0_PE);
1074
+}
1075
+
1076
+/**
1077
+ * tb_usb3_port_enable() - Enable USB3 adapter port
1078
+ * @port: USB3 adapter port to enable
1079
+ * @enable: Enable/disable the USB3 adapter
1080
+ */
1081
+int tb_usb3_port_enable(struct tb_port *port, bool enable)
1082
+{
1083
+ u32 word = enable ? (ADP_USB3_CS_0_PE | ADP_USB3_CS_0_V)
1084
+ : ADP_USB3_CS_0_V;
1085
+
1086
+ if (!port->cap_adap)
1087
+ return -ENXIO;
1088
+ return tb_port_write(port, &word, TB_CFG_PORT,
1089
+ port->cap_adap + ADP_USB3_CS_0, 1);
1090
+}
1091
+
1092
+/**
1093
+ * tb_pci_port_is_enabled() - Is the PCIe adapter port enabled
1094
+ * @port: PCIe port to check
1095
+ */
1096
+bool tb_pci_port_is_enabled(struct tb_port *port)
1097
+{
1098
+ u32 data;
1099
+
1100
+ if (tb_port_read(port, &data, TB_CFG_PORT,
1101
+ port->cap_adap + ADP_PCIE_CS_0, 1))
1102
+ return false;
1103
+
1104
+ return !!(data & ADP_PCIE_CS_0_PE);
1105
+}
1106
+
1107
+/**
1108
+ * tb_pci_port_enable() - Enable PCIe adapter port
1109
+ * @port: PCIe port to enable
1110
+ * @enable: Enable/disable the PCIe adapter
1111
+ */
1112
+int tb_pci_port_enable(struct tb_port *port, bool enable)
1113
+{
1114
+ u32 word = enable ? ADP_PCIE_CS_0_PE : 0x0;
1115
+ if (!port->cap_adap)
1116
+ return -ENXIO;
1117
+ return tb_port_write(port, &word, TB_CFG_PORT,
1118
+ port->cap_adap + ADP_PCIE_CS_0, 1);
1119
+}
1120
+
1121
+/**
1122
+ * tb_dp_port_hpd_is_active() - Is HPD already active
1123
+ * @port: DP out port to check
1124
+ *
1125
+ * Checks if the DP OUT adapter port has HDP bit already set.
1126
+ */
1127
+int tb_dp_port_hpd_is_active(struct tb_port *port)
1128
+{
1129
+ u32 data;
1130
+ int ret;
1131
+
1132
+ ret = tb_port_read(port, &data, TB_CFG_PORT,
1133
+ port->cap_adap + ADP_DP_CS_2, 1);
1134
+ if (ret)
1135
+ return ret;
1136
+
1137
+ return !!(data & ADP_DP_CS_2_HDP);
1138
+}
1139
+
1140
+/**
1141
+ * tb_dp_port_hpd_clear() - Clear HPD from DP IN port
1142
+ * @port: Port to clear HPD
1143
+ *
1144
+ * If the DP IN port has HDP set, this function can be used to clear it.
1145
+ */
1146
+int tb_dp_port_hpd_clear(struct tb_port *port)
1147
+{
1148
+ u32 data;
1149
+ int ret;
1150
+
1151
+ ret = tb_port_read(port, &data, TB_CFG_PORT,
1152
+ port->cap_adap + ADP_DP_CS_3, 1);
1153
+ if (ret)
1154
+ return ret;
1155
+
1156
+ data |= ADP_DP_CS_3_HDPC;
1157
+ return tb_port_write(port, &data, TB_CFG_PORT,
1158
+ port->cap_adap + ADP_DP_CS_3, 1);
1159
+}
1160
+
1161
+/**
1162
+ * tb_dp_port_set_hops() - Set video/aux Hop IDs for DP port
1163
+ * @port: DP IN/OUT port to set hops
1164
+ * @video: Video Hop ID
1165
+ * @aux_tx: AUX TX Hop ID
1166
+ * @aux_rx: AUX RX Hop ID
1167
+ *
1168
+ * Programs specified Hop IDs for DP IN/OUT port.
1169
+ */
1170
+int tb_dp_port_set_hops(struct tb_port *port, unsigned int video,
1171
+ unsigned int aux_tx, unsigned int aux_rx)
1172
+{
1173
+ u32 data[2];
1174
+ int ret;
1175
+
1176
+ ret = tb_port_read(port, data, TB_CFG_PORT,
1177
+ port->cap_adap + ADP_DP_CS_0, ARRAY_SIZE(data));
1178
+ if (ret)
1179
+ return ret;
1180
+
1181
+ data[0] &= ~ADP_DP_CS_0_VIDEO_HOPID_MASK;
1182
+ data[1] &= ~ADP_DP_CS_1_AUX_RX_HOPID_MASK;
1183
+ data[1] &= ~ADP_DP_CS_1_AUX_RX_HOPID_MASK;
1184
+
1185
+ data[0] |= (video << ADP_DP_CS_0_VIDEO_HOPID_SHIFT) &
1186
+ ADP_DP_CS_0_VIDEO_HOPID_MASK;
1187
+ data[1] |= aux_tx & ADP_DP_CS_1_AUX_TX_HOPID_MASK;
1188
+ data[1] |= (aux_rx << ADP_DP_CS_1_AUX_RX_HOPID_SHIFT) &
1189
+ ADP_DP_CS_1_AUX_RX_HOPID_MASK;
1190
+
1191
+ return tb_port_write(port, data, TB_CFG_PORT,
1192
+ port->cap_adap + ADP_DP_CS_0, ARRAY_SIZE(data));
1193
+}
1194
+
1195
+/**
1196
+ * tb_dp_port_is_enabled() - Is DP adapter port enabled
1197
+ * @port: DP adapter port to check
1198
+ */
1199
+bool tb_dp_port_is_enabled(struct tb_port *port)
1200
+{
1201
+ u32 data[2];
1202
+
1203
+ if (tb_port_read(port, data, TB_CFG_PORT, port->cap_adap + ADP_DP_CS_0,
1204
+ ARRAY_SIZE(data)))
1205
+ return false;
1206
+
1207
+ return !!(data[0] & (ADP_DP_CS_0_VE | ADP_DP_CS_0_AE));
1208
+}
1209
+
1210
+/**
1211
+ * tb_dp_port_enable() - Enables/disables DP paths of a port
1212
+ * @port: DP IN/OUT port
1213
+ * @enable: Enable/disable DP path
1214
+ *
1215
+ * Once Hop IDs are programmed DP paths can be enabled or disabled by
1216
+ * calling this function.
1217
+ */
1218
+int tb_dp_port_enable(struct tb_port *port, bool enable)
1219
+{
1220
+ u32 data[2];
1221
+ int ret;
1222
+
1223
+ ret = tb_port_read(port, data, TB_CFG_PORT,
1224
+ port->cap_adap + ADP_DP_CS_0, ARRAY_SIZE(data));
1225
+ if (ret)
1226
+ return ret;
1227
+
1228
+ if (enable)
1229
+ data[0] |= ADP_DP_CS_0_VE | ADP_DP_CS_0_AE;
1230
+ else
1231
+ data[0] &= ~(ADP_DP_CS_0_VE | ADP_DP_CS_0_AE);
1232
+
1233
+ return tb_port_write(port, data, TB_CFG_PORT,
1234
+ port->cap_adap + ADP_DP_CS_0, ARRAY_SIZE(data));
1235
+}
1236
+
6231237 /* switch utility functions */
6241238
625
-static void tb_dump_switch(struct tb *tb, struct tb_regs_switch_header *sw)
1239
+static const char *tb_switch_generation_name(const struct tb_switch *sw)
6261240 {
627
- tb_info(tb,
628
- " Switch: %x:%x (Revision: %d, TB Version: %d)\n",
629
- sw->vendor_id, sw->device_id, sw->revision,
630
- sw->thunderbolt_version);
631
- tb_info(tb, " Max Port Number: %d\n", sw->max_port_number);
632
- tb_info(tb, " Config:\n");
633
- tb_info(tb,
1241
+ switch (sw->generation) {
1242
+ case 1:
1243
+ return "Thunderbolt 1";
1244
+ case 2:
1245
+ return "Thunderbolt 2";
1246
+ case 3:
1247
+ return "Thunderbolt 3";
1248
+ case 4:
1249
+ return "USB4";
1250
+ default:
1251
+ return "Unknown";
1252
+ }
1253
+}
1254
+
1255
+static void tb_dump_switch(const struct tb *tb, const struct tb_switch *sw)
1256
+{
1257
+ const struct tb_regs_switch_header *regs = &sw->config;
1258
+
1259
+ tb_dbg(tb, " %s Switch: %x:%x (Revision: %d, TB Version: %d)\n",
1260
+ tb_switch_generation_name(sw), regs->vendor_id, regs->device_id,
1261
+ regs->revision, regs->thunderbolt_version);
1262
+ tb_dbg(tb, " Max Port Number: %d\n", regs->max_port_number);
1263
+ tb_dbg(tb, " Config:\n");
1264
+ tb_dbg(tb,
6341265 " Upstream Port Number: %d Depth: %d Route String: %#llx Enabled: %d, PlugEventsDelay: %dms\n",
635
- sw->upstream_port_number, sw->depth,
636
- (((u64) sw->route_hi) << 32) | sw->route_lo,
637
- sw->enabled, sw->plug_events_delay);
638
- tb_info(tb,
639
- " unknown1: %#x unknown4: %#x\n",
640
- sw->__unknown1, sw->__unknown4);
1266
+ regs->upstream_port_number, regs->depth,
1267
+ (((u64) regs->route_hi) << 32) | regs->route_lo,
1268
+ regs->enabled, regs->plug_events_delay);
1269
+ tb_dbg(tb, " unknown1: %#x unknown4: %#x\n",
1270
+ regs->__unknown1, regs->__unknown4);
6411271 }
6421272
6431273 /**
6441274 * reset_switch() - reconfigure route, enable and send TB_CFG_PKG_RESET
1275
+ * @sw: Switch to reset
6451276 *
6461277 * Return: Returns 0 on success or an error code on failure.
6471278 */
648
-int tb_switch_reset(struct tb *tb, u64 route)
1279
+int tb_switch_reset(struct tb_switch *sw)
6491280 {
6501281 struct tb_cfg_result res;
651
- struct tb_regs_switch_header header = {
652
- header.route_hi = route >> 32,
653
- header.route_lo = route,
654
- header.enabled = true,
655
- };
656
- tb_info(tb, "resetting switch at %llx\n", route);
657
- res.err = tb_cfg_write(tb->ctl, ((u32 *) &header) + 2, route,
658
- 0, 2, 2, 2);
1282
+
1283
+ if (sw->generation > 1)
1284
+ return 0;
1285
+
1286
+ tb_sw_dbg(sw, "resetting switch\n");
1287
+
1288
+ res.err = tb_sw_write(sw, ((u32 *) &sw->config) + 2,
1289
+ TB_CFG_SWITCH, 2, 2);
6591290 if (res.err)
6601291 return res.err;
661
- res = tb_cfg_reset(tb->ctl, route, TB_CFG_DEFAULT_TIMEOUT);
1292
+ res = tb_cfg_reset(sw->tb->ctl, tb_route(sw), TB_CFG_DEFAULT_TIMEOUT);
6621293 if (res.err > 0)
6631294 return -EIO;
6641295 return res.err;
....@@ -676,7 +1307,7 @@
6761307 u32 data;
6771308 int res;
6781309
679
- if (!sw->config.enabled)
1310
+ if (tb_switch_is_icm(sw) || tb_switch_is_usb4(sw))
6801311 return 0;
6811312
6821313 sw->config.plug_events_delay = 0xff;
....@@ -724,14 +1355,6 @@
7241355 if (sw->authorized)
7251356 goto unlock;
7261357
727
- /*
728
- * Make sure there is no PCIe rescan ongoing when a new PCIe
729
- * tunnel is created. Otherwise the PCIe rescan code might find
730
- * the new tunnel too early.
731
- */
732
- pci_lock_rescan_remove();
733
- pm_runtime_get_sync(&sw->dev);
734
-
7351358 switch (val) {
7361359 /* Approve switch */
7371360 case 1:
....@@ -750,10 +1373,6 @@
7501373 default:
7511374 break;
7521375 }
753
-
754
- pm_runtime_mark_last_busy(&sw->dev);
755
- pm_runtime_put_autosuspend(&sw->dev);
756
- pci_unlock_rescan_remove();
7571376
7581377 if (!ret) {
7591378 sw->authorized = val;
....@@ -780,7 +1399,10 @@
7801399 if (val > 2)
7811400 return -EINVAL;
7821401
1402
+ pm_runtime_get_sync(&sw->dev);
7831403 ret = tb_switch_set_authorized(sw, val);
1404
+ pm_runtime_mark_last_busy(&sw->dev);
1405
+ pm_runtime_put_autosuspend(&sw->dev);
7841406
7851407 return ret ? ret : count;
7861408 }
....@@ -812,6 +1434,15 @@
8121434 return sprintf(buf, "%s\n", sw->device_name ? sw->device_name : "");
8131435 }
8141436 static DEVICE_ATTR_RO(device_name);
1437
+
1438
+static ssize_t
1439
+generation_show(struct device *dev, struct device_attribute *attr, char *buf)
1440
+{
1441
+ struct tb_switch *sw = tb_to_switch(dev);
1442
+
1443
+ return sprintf(buf, "%u\n", sw->generation);
1444
+}
1445
+static DEVICE_ATTR_RO(generation);
8151446
8161447 static ssize_t key_show(struct device *dev, struct device_attribute *attr,
8171448 char *buf)
....@@ -865,29 +1496,35 @@
8651496 }
8661497 static DEVICE_ATTR(key, 0600, key_show, key_store);
8671498
868
-static void nvm_authenticate_start(struct tb_switch *sw)
1499
+static ssize_t speed_show(struct device *dev, struct device_attribute *attr,
1500
+ char *buf)
8691501 {
870
- struct pci_dev *root_port;
1502
+ struct tb_switch *sw = tb_to_switch(dev);
8711503
872
- /*
873
- * During host router NVM upgrade we should not allow root port to
874
- * go into D3cold because some root ports cannot trigger PME
875
- * itself. To be on the safe side keep the root port in D0 during
876
- * the whole upgrade process.
877
- */
878
- root_port = pci_find_pcie_root_port(sw->tb->nhi->pdev);
879
- if (root_port)
880
- pm_runtime_get_noresume(&root_port->dev);
1504
+ return sprintf(buf, "%u.0 Gb/s\n", sw->link_speed);
8811505 }
8821506
883
-static void nvm_authenticate_complete(struct tb_switch *sw)
884
-{
885
- struct pci_dev *root_port;
1507
+/*
1508
+ * Currently all lanes must run at the same speed but we expose here
1509
+ * both directions to allow possible asymmetric links in the future.
1510
+ */
1511
+static DEVICE_ATTR(rx_speed, 0444, speed_show, NULL);
1512
+static DEVICE_ATTR(tx_speed, 0444, speed_show, NULL);
8861513
887
- root_port = pci_find_pcie_root_port(sw->tb->nhi->pdev);
888
- if (root_port)
889
- pm_runtime_put(&root_port->dev);
1514
+static ssize_t lanes_show(struct device *dev, struct device_attribute *attr,
1515
+ char *buf)
1516
+{
1517
+ struct tb_switch *sw = tb_to_switch(dev);
1518
+
1519
+ return sprintf(buf, "%u\n", sw->link_width);
8901520 }
1521
+
1522
+/*
1523
+ * Currently link has same amount of lanes both directions (1 or 2) but
1524
+ * expose them separately to allow possible asymmetric links in the future.
1525
+ */
1526
+static DEVICE_ATTR(rx_lanes, 0444, lanes_show, NULL);
1527
+static DEVICE_ATTR(tx_lanes, 0444, lanes_show, NULL);
8911528
8921529 static ssize_t nvm_authenticate_show(struct device *dev,
8931530 struct device_attribute *attr, char *buf)
....@@ -899,15 +1536,19 @@
8991536 return sprintf(buf, "%#x\n", status);
9001537 }
9011538
902
-static ssize_t nvm_authenticate_store(struct device *dev,
903
- struct device_attribute *attr, const char *buf, size_t count)
1539
+static ssize_t nvm_authenticate_sysfs(struct device *dev, const char *buf,
1540
+ bool disconnect)
9041541 {
9051542 struct tb_switch *sw = tb_to_switch(dev);
906
- bool val;
1543
+ int val;
9071544 int ret;
9081545
909
- if (!mutex_trylock(&sw->tb->lock))
910
- return restart_syscall();
1546
+ pm_runtime_get_sync(&sw->dev);
1547
+
1548
+ if (!mutex_trylock(&sw->tb->lock)) {
1549
+ ret = restart_syscall();
1550
+ goto exit_rpm;
1551
+ }
9111552
9121553 /* If NVMem devices are not yet added */
9131554 if (!sw->nvm) {
....@@ -915,51 +1556,68 @@
9151556 goto exit_unlock;
9161557 }
9171558
918
- ret = kstrtobool(buf, &val);
1559
+ ret = kstrtoint(buf, 10, &val);
9191560 if (ret)
9201561 goto exit_unlock;
9211562
9221563 /* Always clear the authentication status */
9231564 nvm_clear_auth_status(sw);
9241565
925
- if (val) {
926
- if (!sw->nvm->buf) {
927
- ret = -EINVAL;
928
- goto exit_unlock;
929
- }
1566
+ if (val > 0) {
1567
+ if (!sw->nvm->flushed) {
1568
+ if (!sw->nvm->buf) {
1569
+ ret = -EINVAL;
1570
+ goto exit_unlock;
1571
+ }
9301572
931
- pm_runtime_get_sync(&sw->dev);
932
- ret = nvm_validate_and_write(sw);
933
- if (ret) {
934
- pm_runtime_mark_last_busy(&sw->dev);
935
- pm_runtime_put_autosuspend(&sw->dev);
936
- goto exit_unlock;
1573
+ ret = nvm_validate_and_write(sw);
1574
+ if (ret || val == WRITE_ONLY)
1575
+ goto exit_unlock;
9371576 }
938
-
939
- sw->nvm->authenticating = true;
940
-
941
- if (!tb_route(sw)) {
942
- /*
943
- * Keep root port from suspending as long as the
944
- * NVM upgrade process is running.
945
- */
946
- nvm_authenticate_start(sw);
947
- ret = nvm_authenticate_host(sw);
948
- } else {
949
- ret = nvm_authenticate_device(sw);
1577
+ if (val == WRITE_AND_AUTHENTICATE) {
1578
+ if (disconnect) {
1579
+ ret = tb_lc_force_power(sw);
1580
+ } else {
1581
+ sw->nvm->authenticating = true;
1582
+ ret = nvm_authenticate(sw);
1583
+ }
9501584 }
951
- pm_runtime_mark_last_busy(&sw->dev);
952
- pm_runtime_put_autosuspend(&sw->dev);
9531585 }
9541586
9551587 exit_unlock:
9561588 mutex_unlock(&sw->tb->lock);
1589
+exit_rpm:
1590
+ pm_runtime_mark_last_busy(&sw->dev);
1591
+ pm_runtime_put_autosuspend(&sw->dev);
9571592
1593
+ return ret;
1594
+}
1595
+
1596
+static ssize_t nvm_authenticate_store(struct device *dev,
1597
+ struct device_attribute *attr, const char *buf, size_t count)
1598
+{
1599
+ int ret = nvm_authenticate_sysfs(dev, buf, false);
9581600 if (ret)
9591601 return ret;
9601602 return count;
9611603 }
9621604 static DEVICE_ATTR_RW(nvm_authenticate);
1605
+
1606
+static ssize_t nvm_authenticate_on_disconnect_show(struct device *dev,
1607
+ struct device_attribute *attr, char *buf)
1608
+{
1609
+ return nvm_authenticate_show(dev, attr, buf);
1610
+}
1611
+
1612
+static ssize_t nvm_authenticate_on_disconnect_store(struct device *dev,
1613
+ struct device_attribute *attr, const char *buf, size_t count)
1614
+{
1615
+ int ret;
1616
+
1617
+ ret = nvm_authenticate_sysfs(dev, buf, true);
1618
+ return ret ? ret : count;
1619
+}
1620
+static DEVICE_ATTR_RW(nvm_authenticate_on_disconnect);
9631621
9641622 static ssize_t nvm_version_show(struct device *dev,
9651623 struct device_attribute *attr, char *buf)
....@@ -1015,9 +1673,15 @@
10151673 &dev_attr_boot.attr,
10161674 &dev_attr_device.attr,
10171675 &dev_attr_device_name.attr,
1676
+ &dev_attr_generation.attr,
10181677 &dev_attr_key.attr,
10191678 &dev_attr_nvm_authenticate.attr,
1679
+ &dev_attr_nvm_authenticate_on_disconnect.attr,
10201680 &dev_attr_nvm_version.attr,
1681
+ &dev_attr_rx_speed.attr,
1682
+ &dev_attr_rx_lanes.attr,
1683
+ &dev_attr_tx_speed.attr,
1684
+ &dev_attr_tx_lanes.attr,
10211685 &dev_attr_vendor.attr,
10221686 &dev_attr_vendor_name.attr,
10231687 &dev_attr_unique_id.attr,
....@@ -1027,22 +1691,48 @@
10271691 static umode_t switch_attr_is_visible(struct kobject *kobj,
10281692 struct attribute *attr, int n)
10291693 {
1030
- struct device *dev = container_of(kobj, struct device, kobj);
1694
+ struct device *dev = kobj_to_dev(kobj);
10311695 struct tb_switch *sw = tb_to_switch(dev);
10321696
1033
- if (attr == &dev_attr_key.attr) {
1697
+ if (attr == &dev_attr_device.attr) {
1698
+ if (!sw->device)
1699
+ return 0;
1700
+ } else if (attr == &dev_attr_device_name.attr) {
1701
+ if (!sw->device_name)
1702
+ return 0;
1703
+ } else if (attr == &dev_attr_vendor.attr) {
1704
+ if (!sw->vendor)
1705
+ return 0;
1706
+ } else if (attr == &dev_attr_vendor_name.attr) {
1707
+ if (!sw->vendor_name)
1708
+ return 0;
1709
+ } else if (attr == &dev_attr_key.attr) {
10341710 if (tb_route(sw) &&
10351711 sw->tb->security_level == TB_SECURITY_SECURE &&
10361712 sw->security_level == TB_SECURITY_SECURE)
10371713 return attr->mode;
10381714 return 0;
1039
- } else if (attr == &dev_attr_nvm_authenticate.attr ||
1040
- attr == &dev_attr_nvm_version.attr) {
1041
- if (sw->dma_port)
1715
+ } else if (attr == &dev_attr_rx_speed.attr ||
1716
+ attr == &dev_attr_rx_lanes.attr ||
1717
+ attr == &dev_attr_tx_speed.attr ||
1718
+ attr == &dev_attr_tx_lanes.attr) {
1719
+ if (tb_route(sw))
1720
+ return attr->mode;
1721
+ return 0;
1722
+ } else if (attr == &dev_attr_nvm_authenticate.attr) {
1723
+ if (nvm_upgradeable(sw))
1724
+ return attr->mode;
1725
+ return 0;
1726
+ } else if (attr == &dev_attr_nvm_version.attr) {
1727
+ if (nvm_readable(sw))
10421728 return attr->mode;
10431729 return 0;
10441730 } else if (attr == &dev_attr_boot.attr) {
10451731 if (tb_route(sw))
1732
+ return attr->mode;
1733
+ return 0;
1734
+ } else if (attr == &dev_attr_nvm_authenticate_on_disconnect.attr) {
1735
+ if (sw->quirks & QUIRK_FORCE_POWER_LINK_CONTROLLER)
10461736 return attr->mode;
10471737 return 0;
10481738 }
....@@ -1063,8 +1753,14 @@
10631753 static void tb_switch_release(struct device *dev)
10641754 {
10651755 struct tb_switch *sw = tb_to_switch(dev);
1756
+ struct tb_port *port;
10661757
10671758 dma_port_free(sw->dma_port);
1759
+
1760
+ tb_switch_for_each_port(sw, port) {
1761
+ ida_destroy(&port->in_hopids);
1762
+ ida_destroy(&port->out_hopids);
1763
+ }
10681764
10691765 kfree(sw->uuid);
10701766 kfree(sw->device_name);
....@@ -1081,11 +1777,22 @@
10811777 */
10821778 static int __maybe_unused tb_switch_runtime_suspend(struct device *dev)
10831779 {
1780
+ struct tb_switch *sw = tb_to_switch(dev);
1781
+ const struct tb_cm_ops *cm_ops = sw->tb->cm_ops;
1782
+
1783
+ if (cm_ops->runtime_suspend_switch)
1784
+ return cm_ops->runtime_suspend_switch(sw);
1785
+
10841786 return 0;
10851787 }
10861788
10871789 static int __maybe_unused tb_switch_runtime_resume(struct device *dev)
10881790 {
1791
+ struct tb_switch *sw = tb_to_switch(dev);
1792
+ const struct tb_cm_ops *cm_ops = sw->tb->cm_ops;
1793
+
1794
+ if (cm_ops->runtime_resume_switch)
1795
+ return cm_ops->runtime_resume_switch(sw);
10891796 return 0;
10901797 }
10911798
....@@ -1126,9 +1833,14 @@
11261833 case PCI_DEVICE_ID_INTEL_TITAN_RIDGE_2C_BRIDGE:
11271834 case PCI_DEVICE_ID_INTEL_TITAN_RIDGE_4C_BRIDGE:
11281835 case PCI_DEVICE_ID_INTEL_TITAN_RIDGE_DD_BRIDGE:
1836
+ case PCI_DEVICE_ID_INTEL_ICL_NHI0:
1837
+ case PCI_DEVICE_ID_INTEL_ICL_NHI1:
11291838 return 3;
11301839
11311840 default:
1841
+ if (tb_switch_is_usb4(sw))
1842
+ return 4;
1843
+
11321844 /*
11331845 * For unknown switches assume generation to be 1 to be
11341846 * on the safe side.
....@@ -1137,6 +1849,19 @@
11371849 sw->config.device_id);
11381850 return 1;
11391851 }
1852
+}
1853
+
1854
+static bool tb_switch_exceeds_max_depth(const struct tb_switch *sw, int depth)
1855
+{
1856
+ int max_depth;
1857
+
1858
+ if (tb_switch_is_usb4(sw) ||
1859
+ (sw->tb->root_switch && tb_switch_is_usb4(sw->tb->root_switch)))
1860
+ max_depth = USB4_SWITCH_MAX_DEPTH;
1861
+ else
1862
+ max_depth = TB_SWITCH_MAX_DEPTH;
1863
+
1864
+ return depth > max_depth;
11401865 }
11411866
11421867 /**
....@@ -1150,56 +1875,85 @@
11501875 * separately. The returned switch should be released by calling
11511876 * tb_switch_put().
11521877 *
1153
- * Return: Pointer to the allocated switch or %NULL in case of failure
1878
+ * Return: Pointer to the allocated switch or ERR_PTR() in case of
1879
+ * failure.
11541880 */
11551881 struct tb_switch *tb_switch_alloc(struct tb *tb, struct device *parent,
11561882 u64 route)
11571883 {
1158
- int i;
1159
- int cap;
11601884 struct tb_switch *sw;
1161
- int upstream_port = tb_cfg_get_upstream_port(tb->ctl, route);
1885
+ int upstream_port;
1886
+ int i, ret, depth;
1887
+
1888
+ /* Unlock the downstream port so we can access the switch below */
1889
+ if (route) {
1890
+ struct tb_switch *parent_sw = tb_to_switch(parent);
1891
+ struct tb_port *down;
1892
+
1893
+ down = tb_port_at(route, parent_sw);
1894
+ tb_port_unlock(down);
1895
+ }
1896
+
1897
+ depth = tb_route_length(route);
1898
+
1899
+ upstream_port = tb_cfg_get_upstream_port(tb->ctl, route);
11621900 if (upstream_port < 0)
1163
- return NULL;
1901
+ return ERR_PTR(upstream_port);
11641902
11651903 sw = kzalloc(sizeof(*sw), GFP_KERNEL);
11661904 if (!sw)
1167
- return NULL;
1905
+ return ERR_PTR(-ENOMEM);
11681906
11691907 sw->tb = tb;
1170
- if (tb_cfg_read(tb->ctl, &sw->config, route, 0, TB_CFG_SWITCH, 0, 5))
1908
+ ret = tb_cfg_read(tb->ctl, &sw->config, route, 0, TB_CFG_SWITCH, 0, 5);
1909
+ if (ret)
11711910 goto err_free_sw_ports;
11721911
1173
- tb_info(tb, "current switch config:\n");
1174
- tb_dump_switch(tb, &sw->config);
1912
+ sw->generation = tb_switch_get_generation(sw);
1913
+
1914
+ tb_dbg(tb, "current switch config:\n");
1915
+ tb_dump_switch(tb, sw);
11751916
11761917 /* configure switch */
11771918 sw->config.upstream_port_number = upstream_port;
1178
- sw->config.depth = tb_route_length(route);
1179
- sw->config.route_lo = route;
1180
- sw->config.route_hi = route >> 32;
1919
+ sw->config.depth = depth;
1920
+ sw->config.route_hi = upper_32_bits(route);
1921
+ sw->config.route_lo = lower_32_bits(route);
11811922 sw->config.enabled = 0;
1923
+
1924
+ /* Make sure we do not exceed maximum topology limit */
1925
+ if (tb_switch_exceeds_max_depth(sw, depth)) {
1926
+ ret = -EADDRNOTAVAIL;
1927
+ goto err_free_sw_ports;
1928
+ }
11821929
11831930 /* initialize ports */
11841931 sw->ports = kcalloc(sw->config.max_port_number + 1, sizeof(*sw->ports),
11851932 GFP_KERNEL);
1186
- if (!sw->ports)
1933
+ if (!sw->ports) {
1934
+ ret = -ENOMEM;
11871935 goto err_free_sw_ports;
1936
+ }
11881937
11891938 for (i = 0; i <= sw->config.max_port_number; i++) {
11901939 /* minimum setup for tb_find_cap and tb_drom_read to work */
11911940 sw->ports[i].sw = sw;
11921941 sw->ports[i].port = i;
1942
+
1943
+ /* Control port does not need HopID allocation */
1944
+ if (i) {
1945
+ ida_init(&sw->ports[i].in_hopids);
1946
+ ida_init(&sw->ports[i].out_hopids);
1947
+ }
11931948 }
11941949
1195
- sw->generation = tb_switch_get_generation(sw);
1950
+ ret = tb_switch_find_vse_cap(sw, TB_VSE_CAP_PLUG_EVENTS);
1951
+ if (ret > 0)
1952
+ sw->cap_plug_events = ret;
11961953
1197
- cap = tb_switch_find_vse_cap(sw, TB_VSE_CAP_PLUG_EVENTS);
1198
- if (cap < 0) {
1199
- tb_sw_warn(sw, "cannot find TB_VSE_CAP_PLUG_EVENTS aborting\n");
1200
- goto err_free_sw_ports;
1201
- }
1202
- sw->cap_plug_events = cap;
1954
+ ret = tb_switch_find_vse_cap(sw, TB_VSE_CAP_LINK_CONTROLLER);
1955
+ if (ret > 0)
1956
+ sw->cap_lc = ret;
12031957
12041958 /* Root switch is always authorized */
12051959 if (!route)
....@@ -1218,7 +1972,7 @@
12181972 kfree(sw->ports);
12191973 kfree(sw);
12201974
1221
- return NULL;
1975
+ return ERR_PTR(ret);
12221976 }
12231977
12241978 /**
....@@ -1233,7 +1987,7 @@
12331987 *
12341988 * The returned switch must be released by calling tb_switch_put().
12351989 *
1236
- * Return: Pointer to the allocated switch or %NULL in case of failure
1990
+ * Return: Pointer to the allocated switch or ERR_PTR() in case of failure
12371991 */
12381992 struct tb_switch *
12391993 tb_switch_alloc_safe_mode(struct tb *tb, struct device *parent, u64 route)
....@@ -1242,7 +1996,7 @@
12421996
12431997 sw = kzalloc(sizeof(*sw), GFP_KERNEL);
12441998 if (!sw)
1245
- return NULL;
1999
+ return ERR_PTR(-ENOMEM);
12462000
12472001 sw->tb = tb;
12482002 sw->config.depth = tb_route_length(route);
....@@ -1266,7 +2020,8 @@
12662020 *
12672021 * Call this function before the switch is added to the system. It will
12682022 * upload configuration to the switch and makes it available for the
1269
- * connection manager to use.
2023
+ * connection manager to use. Can be called to the switch again after
2024
+ * resume from low power states to re-initialize it.
12702025 *
12712026 * Return: %0 in case of success and negative errno in case of failure
12722027 */
....@@ -1277,18 +2032,43 @@
12772032 int ret;
12782033
12792034 route = tb_route(sw);
1280
- tb_info(tb,
1281
- "initializing Switch at %#llx (depth: %d, up port: %d)\n",
1282
- route, tb_route_length(route), sw->config.upstream_port_number);
12832035
1284
- if (sw->config.vendor_id != PCI_VENDOR_ID_INTEL)
1285
- tb_sw_warn(sw, "unknown switch vendor id %#x\n",
1286
- sw->config.vendor_id);
2036
+ tb_dbg(tb, "%s Switch at %#llx (depth: %d, up port: %d)\n",
2037
+ sw->config.enabled ? "restoring" : "initializing", route,
2038
+ tb_route_length(route), sw->config.upstream_port_number);
12872039
12882040 sw->config.enabled = 1;
12892041
1290
- /* upload configuration */
1291
- ret = tb_sw_write(sw, 1 + (u32 *)&sw->config, TB_CFG_SWITCH, 1, 3);
2042
+ if (tb_switch_is_usb4(sw)) {
2043
+ /*
2044
+ * For USB4 devices, we need to program the CM version
2045
+ * accordingly so that it knows to expose all the
2046
+ * additional capabilities.
2047
+ */
2048
+ sw->config.cmuv = USB4_VERSION_1_0;
2049
+ sw->config.plug_events_delay = 0xa;
2050
+
2051
+ /* Enumerate the switch */
2052
+ ret = tb_sw_write(sw, (u32 *)&sw->config + 1, TB_CFG_SWITCH,
2053
+ ROUTER_CS_1, 4);
2054
+ if (ret)
2055
+ return ret;
2056
+
2057
+ ret = usb4_switch_setup(sw);
2058
+ } else {
2059
+ if (sw->config.vendor_id != PCI_VENDOR_ID_INTEL)
2060
+ tb_sw_warn(sw, "unknown switch vendor id %#x\n",
2061
+ sw->config.vendor_id);
2062
+
2063
+ if (!sw->cap_plug_events) {
2064
+ tb_sw_warn(sw, "cannot find TB_VSE_CAP_PLUG_EVENTS aborting\n");
2065
+ return -ENODEV;
2066
+ }
2067
+
2068
+ /* Enumerate the switch */
2069
+ ret = tb_sw_write(sw, (u32 *)&sw->config + 1, TB_CFG_SWITCH,
2070
+ ROUTER_CS_1, 3);
2071
+ }
12922072 if (ret)
12932073 return ret;
12942074
....@@ -1297,23 +2077,32 @@
12972077
12982078 static int tb_switch_set_uuid(struct tb_switch *sw)
12992079 {
2080
+ bool uid = false;
13002081 u32 uuid[4];
1301
- int cap, ret;
2082
+ int ret;
13022083
1303
- ret = 0;
13042084 if (sw->uuid)
1305
- return ret;
2085
+ return 0;
13062086
1307
- /*
1308
- * The newer controllers include fused UUID as part of link
1309
- * controller specific registers
1310
- */
1311
- cap = tb_switch_find_vse_cap(sw, TB_VSE_CAP_LINK_CONTROLLER);
1312
- if (cap > 0) {
1313
- ret = tb_sw_read(sw, uuid, TB_CFG_SWITCH, cap + 3, 4);
2087
+ if (tb_switch_is_usb4(sw)) {
2088
+ ret = usb4_switch_read_uid(sw, &sw->uid);
13142089 if (ret)
13152090 return ret;
2091
+ uid = true;
13162092 } else {
2093
+ /*
2094
+ * The newer controllers include fused UUID as part of
2095
+ * link controller specific registers
2096
+ */
2097
+ ret = tb_lc_read_uuid(sw, uuid);
2098
+ if (ret) {
2099
+ if (ret != -EINVAL)
2100
+ return ret;
2101
+ uid = true;
2102
+ }
2103
+ }
2104
+
2105
+ if (uid) {
13172106 /*
13182107 * ICM generates UUID based on UID and fills the upper
13192108 * two words with ones. This is not strictly following
....@@ -1328,8 +2117,8 @@
13282117
13292118 sw->uuid = kmemdup(uuid, sizeof(uuid), GFP_KERNEL);
13302119 if (!sw->uuid)
1331
- ret = -ENOMEM;
1332
- return ret;
2120
+ return -ENOMEM;
2121
+ return 0;
13332122 }
13342123
13352124 static int tb_switch_add_dma_port(struct tb_switch *sw)
....@@ -1343,7 +2132,7 @@
13432132 if (tb_route(sw))
13442133 return 0;
13452134
1346
- /* fallthrough */
2135
+ fallthrough;
13472136 case 3:
13482137 ret = tb_switch_set_uuid(sw);
13492138 if (ret)
....@@ -1360,11 +2149,15 @@
13602149 break;
13612150 }
13622151
1363
- if (sw->no_nvm_upgrade)
2152
+ /* Root switch DMA port requires running firmware */
2153
+ if (!tb_route(sw) && !tb_switch_is_icm(sw))
13642154 return 0;
13652155
13662156 sw->dma_port = dma_port_alloc(sw);
13672157 if (!sw->dma_port)
2158
+ return 0;
2159
+
2160
+ if (sw->no_nvm_upgrade)
13682161 return 0;
13692162
13702163 /*
....@@ -1376,7 +2169,7 @@
13762169 nvm_get_auth_status(sw, &status);
13772170 if (status) {
13782171 if (!tb_route(sw))
1379
- nvm_authenticate_complete(sw);
2172
+ nvm_authenticate_complete_dma_port(sw);
13802173 return 0;
13812174 }
13822175
....@@ -1391,7 +2184,7 @@
13912184
13922185 /* Now we can allow root port to suspend again */
13932186 if (!tb_route(sw))
1394
- nvm_authenticate_complete(sw);
2187
+ nvm_authenticate_complete_dma_port(sw);
13952188
13962189 if (status) {
13972190 tb_sw_info(sw, "switch flash authentication failed\n");
....@@ -1406,6 +2199,238 @@
14062199 * It should appear back after power cycle is complete.
14072200 */
14082201 return -ESHUTDOWN;
2202
+}
2203
+
2204
+static void tb_switch_default_link_ports(struct tb_switch *sw)
2205
+{
2206
+ int i;
2207
+
2208
+ for (i = 1; i <= sw->config.max_port_number; i++) {
2209
+ struct tb_port *port = &sw->ports[i];
2210
+ struct tb_port *subordinate;
2211
+
2212
+ if (!tb_port_is_null(port))
2213
+ continue;
2214
+
2215
+ /* Check for the subordinate port */
2216
+ if (i == sw->config.max_port_number ||
2217
+ !tb_port_is_null(&sw->ports[i + 1]))
2218
+ continue;
2219
+
2220
+ /* Link them if not already done so (by DROM) */
2221
+ subordinate = &sw->ports[i + 1];
2222
+ if (!port->dual_link_port && !subordinate->dual_link_port) {
2223
+ port->link_nr = 0;
2224
+ port->dual_link_port = subordinate;
2225
+ subordinate->link_nr = 1;
2226
+ subordinate->dual_link_port = port;
2227
+
2228
+ tb_sw_dbg(sw, "linked ports %d <-> %d\n",
2229
+ port->port, subordinate->port);
2230
+ }
2231
+ }
2232
+}
2233
+
2234
+static bool tb_switch_lane_bonding_possible(struct tb_switch *sw)
2235
+{
2236
+ const struct tb_port *up = tb_upstream_port(sw);
2237
+
2238
+ if (!up->dual_link_port || !up->dual_link_port->remote)
2239
+ return false;
2240
+
2241
+ if (tb_switch_is_usb4(sw))
2242
+ return usb4_switch_lane_bonding_possible(sw);
2243
+ return tb_lc_lane_bonding_possible(sw);
2244
+}
2245
+
2246
+static int tb_switch_update_link_attributes(struct tb_switch *sw)
2247
+{
2248
+ struct tb_port *up;
2249
+ bool change = false;
2250
+ int ret;
2251
+
2252
+ if (!tb_route(sw) || tb_switch_is_icm(sw))
2253
+ return 0;
2254
+
2255
+ up = tb_upstream_port(sw);
2256
+
2257
+ ret = tb_port_get_link_speed(up);
2258
+ if (ret < 0)
2259
+ return ret;
2260
+ if (sw->link_speed != ret)
2261
+ change = true;
2262
+ sw->link_speed = ret;
2263
+
2264
+ ret = tb_port_get_link_width(up);
2265
+ if (ret < 0)
2266
+ return ret;
2267
+ if (sw->link_width != ret)
2268
+ change = true;
2269
+ sw->link_width = ret;
2270
+
2271
+ /* Notify userspace that there is possible link attribute change */
2272
+ if (device_is_registered(&sw->dev) && change)
2273
+ kobject_uevent(&sw->dev.kobj, KOBJ_CHANGE);
2274
+
2275
+ return 0;
2276
+}
2277
+
2278
+/**
2279
+ * tb_switch_lane_bonding_enable() - Enable lane bonding
2280
+ * @sw: Switch to enable lane bonding
2281
+ *
2282
+ * Connection manager can call this function to enable lane bonding of a
2283
+ * switch. If conditions are correct and both switches support the feature,
2284
+ * lanes are bonded. It is safe to call this to any switch.
2285
+ */
2286
+int tb_switch_lane_bonding_enable(struct tb_switch *sw)
2287
+{
2288
+ struct tb_switch *parent = tb_to_switch(sw->dev.parent);
2289
+ struct tb_port *up, *down;
2290
+ u64 route = tb_route(sw);
2291
+ int ret;
2292
+
2293
+ if (!route)
2294
+ return 0;
2295
+
2296
+ if (!tb_switch_lane_bonding_possible(sw))
2297
+ return 0;
2298
+
2299
+ up = tb_upstream_port(sw);
2300
+ down = tb_port_at(route, parent);
2301
+
2302
+ if (!tb_port_is_width_supported(up, 2) ||
2303
+ !tb_port_is_width_supported(down, 2))
2304
+ return 0;
2305
+
2306
+ ret = tb_port_lane_bonding_enable(up);
2307
+ if (ret) {
2308
+ tb_port_warn(up, "failed to enable lane bonding\n");
2309
+ return ret;
2310
+ }
2311
+
2312
+ ret = tb_port_lane_bonding_enable(down);
2313
+ if (ret) {
2314
+ tb_port_warn(down, "failed to enable lane bonding\n");
2315
+ tb_port_lane_bonding_disable(up);
2316
+ return ret;
2317
+ }
2318
+
2319
+ tb_switch_update_link_attributes(sw);
2320
+
2321
+ tb_sw_dbg(sw, "lane bonding enabled\n");
2322
+ return ret;
2323
+}
2324
+
2325
+/**
2326
+ * tb_switch_lane_bonding_disable() - Disable lane bonding
2327
+ * @sw: Switch whose lane bonding to disable
2328
+ *
2329
+ * Disables lane bonding between @sw and parent. This can be called even
2330
+ * if lanes were not bonded originally.
2331
+ */
2332
+void tb_switch_lane_bonding_disable(struct tb_switch *sw)
2333
+{
2334
+ struct tb_switch *parent = tb_to_switch(sw->dev.parent);
2335
+ struct tb_port *up, *down;
2336
+
2337
+ if (!tb_route(sw))
2338
+ return;
2339
+
2340
+ up = tb_upstream_port(sw);
2341
+ if (!up->bonded)
2342
+ return;
2343
+
2344
+ down = tb_port_at(tb_route(sw), parent);
2345
+
2346
+ tb_port_lane_bonding_disable(up);
2347
+ tb_port_lane_bonding_disable(down);
2348
+
2349
+ tb_switch_update_link_attributes(sw);
2350
+ tb_sw_dbg(sw, "lane bonding disabled\n");
2351
+}
2352
+
2353
+/**
2354
+ * tb_switch_configure_link() - Set link configured
2355
+ * @sw: Switch whose link is configured
2356
+ *
2357
+ * Sets the link upstream from @sw configured (from both ends) so that
2358
+ * it will not be disconnected when the domain exits sleep. Can be
2359
+ * called for any switch.
2360
+ *
2361
+ * It is recommended that this is called after lane bonding is enabled.
2362
+ *
2363
+ * Returns %0 on success and negative errno in case of error.
2364
+ */
2365
+int tb_switch_configure_link(struct tb_switch *sw)
2366
+{
2367
+ struct tb_port *up, *down;
2368
+ int ret;
2369
+
2370
+ if (!tb_route(sw) || tb_switch_is_icm(sw))
2371
+ return 0;
2372
+
2373
+ up = tb_upstream_port(sw);
2374
+ if (tb_switch_is_usb4(up->sw))
2375
+ ret = usb4_port_configure(up);
2376
+ else
2377
+ ret = tb_lc_configure_port(up);
2378
+ if (ret)
2379
+ return ret;
2380
+
2381
+ down = up->remote;
2382
+ if (tb_switch_is_usb4(down->sw))
2383
+ return usb4_port_configure(down);
2384
+ return tb_lc_configure_port(down);
2385
+}
2386
+
2387
+/**
2388
+ * tb_switch_unconfigure_link() - Unconfigure link
2389
+ * @sw: Switch whose link is unconfigured
2390
+ *
2391
+ * Sets the link unconfigured so the @sw will be disconnected if the
2392
+ * domain exists sleep.
2393
+ */
2394
+void tb_switch_unconfigure_link(struct tb_switch *sw)
2395
+{
2396
+ struct tb_port *up, *down;
2397
+
2398
+ if (sw->is_unplugged)
2399
+ return;
2400
+ if (!tb_route(sw) || tb_switch_is_icm(sw))
2401
+ return;
2402
+
2403
+ up = tb_upstream_port(sw);
2404
+ if (tb_switch_is_usb4(up->sw))
2405
+ usb4_port_unconfigure(up);
2406
+ else
2407
+ tb_lc_unconfigure_port(up);
2408
+
2409
+ down = up->remote;
2410
+ if (tb_switch_is_usb4(down->sw))
2411
+ usb4_port_unconfigure(down);
2412
+ else
2413
+ tb_lc_unconfigure_port(down);
2414
+}
2415
+
2416
+static int tb_switch_port_hotplug_enable(struct tb_switch *sw)
2417
+{
2418
+ struct tb_port *port;
2419
+
2420
+ if (tb_switch_is_icm(sw))
2421
+ return 0;
2422
+
2423
+ tb_switch_for_each_port(sw, port) {
2424
+ int res;
2425
+
2426
+ if (!port->cap_usb4)
2427
+ continue;
2428
+
2429
+ res = usb4_port_hotplug_enable(port);
2430
+ if (res)
2431
+ return res;
2432
+ }
2433
+ return 0;
14092434 }
14102435
14112436 /**
....@@ -1432,42 +2457,80 @@
14322457 * configuration based mailbox.
14332458 */
14342459 ret = tb_switch_add_dma_port(sw);
1435
- if (ret)
2460
+ if (ret) {
2461
+ dev_err(&sw->dev, "failed to add DMA port\n");
14362462 return ret;
2463
+ }
14372464
14382465 if (!sw->safe_mode) {
14392466 /* read drom */
14402467 ret = tb_drom_read(sw);
14412468 if (ret) {
1442
- tb_sw_warn(sw, "tb_eeprom_read_rom failed\n");
2469
+ dev_err(&sw->dev, "reading DROM failed\n");
14432470 return ret;
14442471 }
1445
- tb_sw_info(sw, "uid: %#llx\n", sw->uid);
2472
+ tb_sw_dbg(sw, "uid: %#llx\n", sw->uid);
14462473
14472474 ret = tb_switch_set_uuid(sw);
1448
- if (ret)
2475
+ if (ret) {
2476
+ dev_err(&sw->dev, "failed to set UUID\n");
14492477 return ret;
2478
+ }
14502479
14512480 for (i = 0; i <= sw->config.max_port_number; i++) {
14522481 if (sw->ports[i].disabled) {
1453
- tb_port_info(&sw->ports[i], "disabled by eeprom\n");
2482
+ tb_port_dbg(&sw->ports[i], "disabled by eeprom\n");
14542483 continue;
14552484 }
14562485 ret = tb_init_port(&sw->ports[i]);
1457
- if (ret)
2486
+ if (ret) {
2487
+ dev_err(&sw->dev, "failed to initialize port %d\n", i);
14582488 return ret;
2489
+ }
14592490 }
2491
+
2492
+ tb_switch_default_link_ports(sw);
2493
+
2494
+ ret = tb_switch_update_link_attributes(sw);
2495
+ if (ret)
2496
+ return ret;
2497
+
2498
+ ret = tb_switch_tmu_init(sw);
2499
+ if (ret)
2500
+ return ret;
14602501 }
14612502
1462
- ret = device_add(&sw->dev);
2503
+ ret = tb_switch_port_hotplug_enable(sw);
14632504 if (ret)
14642505 return ret;
14652506
2507
+ ret = device_add(&sw->dev);
2508
+ if (ret) {
2509
+ dev_err(&sw->dev, "failed to add device: %d\n", ret);
2510
+ return ret;
2511
+ }
2512
+
2513
+ if (tb_route(sw)) {
2514
+ dev_info(&sw->dev, "new device found, vendor=%#x device=%#x\n",
2515
+ sw->vendor, sw->device);
2516
+ if (sw->vendor_name && sw->device_name)
2517
+ dev_info(&sw->dev, "%s %s\n", sw->vendor_name,
2518
+ sw->device_name);
2519
+ }
2520
+
14662521 ret = tb_switch_nvm_add(sw);
14672522 if (ret) {
2523
+ dev_err(&sw->dev, "failed to add NVM devices\n");
14682524 device_del(&sw->dev);
14692525 return ret;
14702526 }
2527
+
2528
+ /*
2529
+ * Thunderbolt routers do not generate wakeups themselves but
2530
+ * they forward wakeups from tunneled protocols, so enable it
2531
+ * here.
2532
+ */
2533
+ device_init_wakeup(&sw->dev, true);
14712534
14722535 pm_runtime_set_active(&sw->dev);
14732536 if (sw->rpm) {
....@@ -1478,6 +2541,7 @@
14782541 pm_request_autosuspend(&sw->dev);
14792542 }
14802543
2544
+ tb_switch_debugfs_init(sw);
14812545 return 0;
14822546 }
14832547
....@@ -1491,7 +2555,9 @@
14912555 */
14922556 void tb_switch_remove(struct tb_switch *sw)
14932557 {
1494
- int i;
2558
+ struct tb_port *port;
2559
+
2560
+ tb_switch_debugfs_remove(sw);
14952561
14962562 if (sw->rpm) {
14972563 pm_runtime_get_sync(&sw->dev);
....@@ -1499,21 +2565,26 @@
14992565 }
15002566
15012567 /* port 0 is the switch itself and never has a remote */
1502
- for (i = 1; i <= sw->config.max_port_number; i++) {
1503
- if (tb_is_upstream_port(&sw->ports[i]))
1504
- continue;
1505
- if (sw->ports[i].remote)
1506
- tb_switch_remove(sw->ports[i].remote->sw);
1507
- sw->ports[i].remote = NULL;
1508
- if (sw->ports[i].xdomain)
1509
- tb_xdomain_remove(sw->ports[i].xdomain);
1510
- sw->ports[i].xdomain = NULL;
2568
+ tb_switch_for_each_port(sw, port) {
2569
+ if (tb_port_has_remote(port)) {
2570
+ tb_switch_remove(port->remote->sw);
2571
+ port->remote = NULL;
2572
+ } else if (port->xdomain) {
2573
+ tb_xdomain_remove(port->xdomain);
2574
+ port->xdomain = NULL;
2575
+ }
2576
+
2577
+ /* Remove any downstream retimers */
2578
+ tb_retimer_remove_all(port);
15112579 }
15122580
15132581 if (!sw->is_unplugged)
15142582 tb_plug_events_active(sw, false);
15152583
15162584 tb_switch_nvm_remove(sw);
2585
+
2586
+ if (tb_route(sw))
2587
+ dev_info(&sw->dev, "device disconnected\n");
15172588 device_unregister(&sw->dev);
15182589 }
15192590
....@@ -1522,7 +2593,8 @@
15222593 */
15232594 void tb_sw_set_unplugged(struct tb_switch *sw)
15242595 {
1525
- int i;
2596
+ struct tb_port *port;
2597
+
15262598 if (sw == sw->tb->root_switch) {
15272599 tb_sw_WARN(sw, "cannot unplug root switch\n");
15282600 return;
....@@ -1532,16 +2604,32 @@
15322604 return;
15332605 }
15342606 sw->is_unplugged = true;
1535
- for (i = 0; i <= sw->config.max_port_number; i++) {
1536
- if (!tb_is_upstream_port(&sw->ports[i]) && sw->ports[i].remote)
1537
- tb_sw_set_unplugged(sw->ports[i].remote->sw);
2607
+ tb_switch_for_each_port(sw, port) {
2608
+ if (tb_port_has_remote(port))
2609
+ tb_sw_set_unplugged(port->remote->sw);
2610
+ else if (port->xdomain)
2611
+ port->xdomain->is_unplugged = true;
15382612 }
2613
+}
2614
+
2615
+static int tb_switch_set_wake(struct tb_switch *sw, unsigned int flags)
2616
+{
2617
+ if (flags)
2618
+ tb_sw_dbg(sw, "enabling wakeup: %#x\n", flags);
2619
+ else
2620
+ tb_sw_dbg(sw, "disabling wakeup\n");
2621
+
2622
+ if (tb_switch_is_usb4(sw))
2623
+ return usb4_switch_set_wake(sw, flags);
2624
+ return tb_lc_set_wake(sw, flags);
15392625 }
15402626
15412627 int tb_switch_resume(struct tb_switch *sw)
15422628 {
1543
- int i, err;
1544
- tb_sw_info(sw, "resuming switch\n");
2629
+ struct tb_port *port;
2630
+ int err;
2631
+
2632
+ tb_sw_dbg(sw, "resuming switch\n");
15452633
15462634 /*
15472635 * Check for UID of the connected switches except for root
....@@ -1550,7 +2638,21 @@
15502638 if (tb_route(sw)) {
15512639 u64 uid;
15522640
1553
- err = tb_drom_read_uid_only(sw, &uid);
2641
+ /*
2642
+ * Check first that we can still read the switch config
2643
+ * space. It may be that there is now another domain
2644
+ * connected.
2645
+ */
2646
+ err = tb_cfg_get_upstream_port(sw->tb->ctl, tb_route(sw));
2647
+ if (err < 0) {
2648
+ tb_sw_info(sw, "switch not present anymore\n");
2649
+ return err;
2650
+ }
2651
+
2652
+ if (tb_switch_is_usb4(sw))
2653
+ err = usb4_switch_read_uid(sw, &uid);
2654
+ else
2655
+ err = tb_drom_read_uid_only(sw, &uid);
15542656 if (err) {
15552657 tb_sw_warn(sw, "uid read failed\n");
15562658 return err;
....@@ -1563,47 +2665,140 @@
15632665 }
15642666 }
15652667
1566
- /* upload configuration */
1567
- err = tb_sw_write(sw, 1 + (u32 *) &sw->config, TB_CFG_SWITCH, 1, 3);
2668
+ err = tb_switch_configure(sw);
15682669 if (err)
15692670 return err;
15702671
1571
- err = tb_plug_events_active(sw, true);
2672
+ /* Disable wakes */
2673
+ tb_switch_set_wake(sw, 0);
2674
+
2675
+ err = tb_switch_tmu_init(sw);
15722676 if (err)
15732677 return err;
15742678
15752679 /* check for surviving downstream switches */
1576
- for (i = 1; i <= sw->config.max_port_number; i++) {
1577
- struct tb_port *port = &sw->ports[i];
1578
- if (tb_is_upstream_port(port))
2680
+ tb_switch_for_each_port(sw, port) {
2681
+ if (!tb_port_has_remote(port) && !port->xdomain)
15792682 continue;
1580
- if (!port->remote)
1581
- continue;
1582
- if (tb_wait_for_port(port, true) <= 0
1583
- || tb_switch_resume(port->remote->sw)) {
2683
+
2684
+ if (tb_wait_for_port(port, true) <= 0) {
15842685 tb_port_warn(port,
15852686 "lost during suspend, disconnecting\n");
1586
- tb_sw_set_unplugged(port->remote->sw);
2687
+ if (tb_port_has_remote(port))
2688
+ tb_sw_set_unplugged(port->remote->sw);
2689
+ else if (port->xdomain)
2690
+ port->xdomain->is_unplugged = true;
2691
+ } else if (tb_port_has_remote(port) || port->xdomain) {
2692
+ /*
2693
+ * Always unlock the port so the downstream
2694
+ * switch/domain is accessible.
2695
+ */
2696
+ if (tb_port_unlock(port))
2697
+ tb_port_warn(port, "failed to unlock port\n");
2698
+ if (port->remote && tb_switch_resume(port->remote->sw)) {
2699
+ tb_port_warn(port,
2700
+ "lost during suspend, disconnecting\n");
2701
+ tb_sw_set_unplugged(port->remote->sw);
2702
+ }
15872703 }
15882704 }
15892705 return 0;
15902706 }
15912707
1592
-void tb_switch_suspend(struct tb_switch *sw)
2708
+/**
2709
+ * tb_switch_suspend() - Put a switch to sleep
2710
+ * @sw: Switch to suspend
2711
+ * @runtime: Is this runtime suspend or system sleep
2712
+ *
2713
+ * Suspends router and all its children. Enables wakes according to
2714
+ * value of @runtime and then sets sleep bit for the router. If @sw is
2715
+ * host router the domain is ready to go to sleep once this function
2716
+ * returns.
2717
+ */
2718
+void tb_switch_suspend(struct tb_switch *sw, bool runtime)
15932719 {
1594
- int i, err;
2720
+ unsigned int flags = 0;
2721
+ struct tb_port *port;
2722
+ int err;
2723
+
2724
+ tb_sw_dbg(sw, "suspending switch\n");
2725
+
15952726 err = tb_plug_events_active(sw, false);
15962727 if (err)
15972728 return;
15982729
1599
- for (i = 1; i <= sw->config.max_port_number; i++) {
1600
- if (!tb_is_upstream_port(&sw->ports[i]) && sw->ports[i].remote)
1601
- tb_switch_suspend(sw->ports[i].remote->sw);
2730
+ tb_switch_for_each_port(sw, port) {
2731
+ if (tb_port_has_remote(port))
2732
+ tb_switch_suspend(port->remote->sw, runtime);
16022733 }
1603
- /*
1604
- * TODO: invoke tb_cfg_prepare_to_sleep here? does not seem to have any
1605
- * effect?
1606
- */
2734
+
2735
+ if (runtime) {
2736
+ /* Trigger wake when something is plugged in/out */
2737
+ flags |= TB_WAKE_ON_CONNECT | TB_WAKE_ON_DISCONNECT;
2738
+ flags |= TB_WAKE_ON_USB4 | TB_WAKE_ON_USB3 | TB_WAKE_ON_PCIE;
2739
+ } else if (device_may_wakeup(&sw->dev)) {
2740
+ flags |= TB_WAKE_ON_USB4 | TB_WAKE_ON_USB3 | TB_WAKE_ON_PCIE;
2741
+ }
2742
+
2743
+ tb_switch_set_wake(sw, flags);
2744
+
2745
+ if (tb_switch_is_usb4(sw))
2746
+ usb4_switch_set_sleep(sw);
2747
+ else
2748
+ tb_lc_set_sleep(sw);
2749
+}
2750
+
2751
+/**
2752
+ * tb_switch_query_dp_resource() - Query availability of DP resource
2753
+ * @sw: Switch whose DP resource is queried
2754
+ * @in: DP IN port
2755
+ *
2756
+ * Queries availability of DP resource for DP tunneling using switch
2757
+ * specific means. Returns %true if resource is available.
2758
+ */
2759
+bool tb_switch_query_dp_resource(struct tb_switch *sw, struct tb_port *in)
2760
+{
2761
+ if (tb_switch_is_usb4(sw))
2762
+ return usb4_switch_query_dp_resource(sw, in);
2763
+ return tb_lc_dp_sink_query(sw, in);
2764
+}
2765
+
2766
+/**
2767
+ * tb_switch_alloc_dp_resource() - Allocate available DP resource
2768
+ * @sw: Switch whose DP resource is allocated
2769
+ * @in: DP IN port
2770
+ *
2771
+ * Allocates DP resource for DP tunneling. The resource must be
2772
+ * available for this to succeed (see tb_switch_query_dp_resource()).
2773
+ * Returns %0 in success and negative errno otherwise.
2774
+ */
2775
+int tb_switch_alloc_dp_resource(struct tb_switch *sw, struct tb_port *in)
2776
+{
2777
+ if (tb_switch_is_usb4(sw))
2778
+ return usb4_switch_alloc_dp_resource(sw, in);
2779
+ return tb_lc_dp_sink_alloc(sw, in);
2780
+}
2781
+
2782
+/**
2783
+ * tb_switch_dealloc_dp_resource() - De-allocate DP resource
2784
+ * @sw: Switch whose DP resource is de-allocated
2785
+ * @in: DP IN port
2786
+ *
2787
+ * De-allocates DP resource that was previously allocated for DP
2788
+ * tunneling.
2789
+ */
2790
+void tb_switch_dealloc_dp_resource(struct tb_switch *sw, struct tb_port *in)
2791
+{
2792
+ int ret;
2793
+
2794
+ if (tb_switch_is_usb4(sw))
2795
+ ret = usb4_switch_dealloc_dp_resource(sw, in);
2796
+ else
2797
+ ret = tb_lc_dp_sink_dealloc(sw, in);
2798
+
2799
+ if (ret)
2800
+ tb_sw_warn(sw, "failed to de-allocate DP resource for port %d\n",
2801
+ in->port);
16072802 }
16082803
16092804 struct tb_sw_lookup {
....@@ -1614,10 +2809,10 @@
16142809 u64 route;
16152810 };
16162811
1617
-static int tb_switch_match(struct device *dev, void *data)
2812
+static int tb_switch_match(struct device *dev, const void *data)
16182813 {
16192814 struct tb_switch *sw = tb_to_switch(dev);
1620
- struct tb_sw_lookup *lookup = data;
2815
+ const struct tb_sw_lookup *lookup = data;
16212816
16222817 if (!sw)
16232818 return 0;
....@@ -1716,7 +2911,20 @@
17162911 return NULL;
17172912 }
17182913
1719
-void tb_switch_exit(void)
2914
+/**
2915
+ * tb_switch_find_port() - return the first port of @type on @sw or NULL
2916
+ * @sw: Switch to find the port from
2917
+ * @type: Port type to look for
2918
+ */
2919
+struct tb_port *tb_switch_find_port(struct tb_switch *sw,
2920
+ enum tb_port_type type)
17202921 {
1721
- ida_destroy(&nvm_ida);
2922
+ struct tb_port *port;
2923
+
2924
+ tb_switch_for_each_port(sw, port) {
2925
+ if (port->config.type == type)
2926
+ return port;
2927
+ }
2928
+
2929
+ return NULL;
17222930 }