Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'thunderbolt-for-v6.19-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/westeri/thunderbolt into usb-nextx

Mika writes:

thunderbolt: Changes for v6.19 merge window

This includes following USB4/Thunderbolt changes for the v6.19 merge
window:

- Documentation fixes
- Fixes for various typos found in the driver
- Replace use of system_wq with system_percpu_wq.

All these have been in linux-next with no reported issues.

* tag 'thunderbolt-for-v6.19-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/westeri/thunderbolt:
thunderbolt: Fix typos in xdomain.c
thunderbolt: Fix typos in usb4.c
thunderbolt: Fix typos in tunnel.c
thunderbolt: Fix typos in tmu.c
thunderbolt: Fix typos in tb_regs.h
thunderbolt: Fix typos in tb.h
thunderbolt: Fix typos in tb.c
thunderbolt: Fix typos in switch.c
thunderbolt: Fix typos in retimer.c
thunderbolt: Fix typos in nhi.c
thunderbolt: Fix typos in lc.c
thunderbolt: Fix typos in icm.c
thunderbolt: Fix typos in domain.c
thunderbolt: Fix typos in debugfs.c
thunderbolt: Fix typos in ctl.c
thunderbolt: Replace use of system_wq with system_percpu_wq
thunderbolt: Update deprecated firmware update site in icm.c
thunderbolt: Update NVM firmware upgrade documentation
thunderbolt: Fix typo in tb_eeprom_ctl_read documentation

+92 -72
+35 -15
Documentation/admin-guide/thunderbolt.rst
··· 203 203 upgraded to the latest where possible bugs in it have been fixed. 204 204 Typically OEMs provide this firmware from their support site. 205 205 206 - There is also a central site which has links where to download firmware 207 - for some machines: 208 - 209 - `Thunderbolt Updates <https://thunderbolttechnology.net/updates>`_ 206 + Currently, recommended method of updating firmware is through "fwupd" tool. 207 + It uses LVFS (Linux Vendor Firmware Service) portal by default to get the 208 + latest firmware from hardware vendors and updates connected devices if found 209 + compatible. For details refer to: https://github.com/fwupd/fwupd. 210 210 211 211 Before you upgrade firmware on a device, host or retimer, please make 212 212 sure it is a suitable upgrade. Failing to do that may render the device ··· 215 215 216 216 Host NVM upgrade on Apple Macs is not supported. 217 217 218 - Once the NVM image has been downloaded, you need to plug in a 219 - Thunderbolt device so that the host controller appears. It does not 220 - matter which device is connected (unless you are upgrading NVM on a 221 - device - then you need to connect that particular device). 218 + Fwupd is installed by default. If you don't have it on your system, simply 219 + use your distro package manager to get it. 220 + 221 + To see possible updates through fwupd, you need to plug in a Thunderbolt 222 + device so that the host controller appears. It does not matter which 223 + device is connected (unless you are upgrading NVM on a device - then you 224 + need to connect that particular device). 222 225 223 226 Note an OEM-specific method to power the controller up ("force power") may 224 227 be available for your system in which case there is no need to plug in a 225 228 Thunderbolt device. 226 229 227 - After that we can write the firmware to the non-active parts of the NVM 228 - of the host or device. As an example here is how Intel NUC6i7KYK (Skull 229 - Canyon) Thunderbolt controller NVM is upgraded:: 230 + Updating firmware using fwupd is straightforward - refer to official 231 + readme on fwupd github. 232 + 233 + If firmware image is written successfully, the device shortly disappears. 234 + Once it comes back, the driver notices it and initiates a full power 235 + cycle. After a while device appears again and this time it should be 236 + fully functional. 237 + 238 + Device of interest should display new version under "Current version" 239 + and "Update State: Success" in fwupd's interface. 240 + 241 + Upgrading firmware manually 242 + --------------------------------------------------------------- 243 + If possible, use fwupd to updated the firmware. However, if your device OEM 244 + has not uploaded the firmware to LVFS, but it is available for download 245 + from their side, you can use method below to directly upgrade the 246 + firmware. 247 + 248 + Manual firmware update can be done with 'dd' tool. To update firmware 249 + using this method, you need to write it to the non-active parts of NVM 250 + of the host or device. Example on how to update Intel NUC6i7KYK 251 + (Skull Canyon) Thunderbolt controller NVM:: 230 252 231 253 # dd if=KYK_TBT_FW_0018.bin of=/sys/bus/thunderbolt/devices/0-0/nvm_non_active0/nvmem 232 254 ··· 257 235 258 236 # echo 1 > /sys/bus/thunderbolt/devices/0-0/nvm_authenticate 259 237 260 - If no errors are returned, the host controller shortly disappears. Once 261 - it comes back the driver notices it and initiates a full power cycle. 262 - After a while the host controller appears again and this time it should 263 - be fully functional. 238 + If no errors are returned, device should behave as described in previous 239 + section. 264 240 265 241 We can verify that the new NVM firmware is active by running the following 266 242 commands::
+1 -1
drivers/thunderbolt/ctl.c
··· 412 412 * We ignore failures during stop. 413 413 * All rx packets are referenced 414 414 * from ctl->rx_packets, so we do 415 - * not loose them. 415 + * not lose them. 416 416 */ 417 417 } 418 418
+2 -2
drivers/thunderbolt/debugfs.c
··· 201 201 #if IS_ENABLED(CONFIG_USB4_DEBUGFS_WRITE) 202 202 /* 203 203 * Path registers need to be written in double word pairs and they both must be 204 - * read before written. This writes one double word in patch config space 204 + * read before written. This writes one double word in path config space 205 205 * following the spec flow. 206 206 */ 207 207 static int path_write_one(struct tb_port *port, u32 val, u32 offset) ··· 1196 1196 { 1197 1197 /* 1198 1198 * For running on RX2 the link must be asymmetric with 3 1199 - * receivers. Because this is can change dynamically, check it 1199 + * receivers. Because this can change dynamically, check it 1200 1200 * here before we start the margining and report back error if 1201 1201 * expectations are not met. 1202 1202 */
+1 -1
drivers/thunderbolt/domain.c
··· 376 376 struct tb *tb; 377 377 378 378 /* 379 - * Make sure the structure sizes map with that the hardware 379 + * Make sure the structure sizes map with what the hardware 380 380 * expects because bit-fields are being used. 381 381 */ 382 382 BUILD_BUG_ON(sizeof(struct tb_regs_switch_header) != 5 * 4);
+1 -1
drivers/thunderbolt/eeprom.c
··· 21 21 } 22 22 23 23 /* 24 - * tb_eeprom_ctl_write() - read control word 24 + * tb_eeprom_ctl_read() - read control word 25 25 */ 26 26 static int tb_eeprom_ctl_read(struct tb_switch *sw, struct tb_eeprom_ctl *ctl) 27 27 {
+4 -4
drivers/thunderbolt/icm.c
··· 787 787 * information might have changed for example by the 788 788 * fact that a switch on a dual-link connection might 789 789 * have been enumerated using the other link now. Make 790 - * sure our book keeping matches that. 790 + * sure our bookkeeping matches that. 791 791 */ 792 792 if (sw->depth == depth && sw_phy_port == phy_port && 793 793 !!sw->authorized == authorized) { ··· 969 969 970 970 /* 971 971 * Look if there already exists an XDomain in the same place 972 - * than the new one and in that case remove it because it is 972 + * as the new one and in that case remove it because it is 973 973 * most likely another host that got disconnected. 974 974 */ 975 975 xd = tb_xdomain_find_by_link_depth(tb, link, depth); ··· 2000 2000 if (icm->safe_mode) { 2001 2001 tb_info(tb, "Thunderbolt host controller is in safe mode.\n"); 2002 2002 tb_info(tb, "You need to update NVM firmware of the controller before it can be used.\n"); 2003 - tb_info(tb, "For latest updates check https://thunderbolttechnology.net/updates.\n"); 2003 + tb_info(tb, "Use fwupd tool to apply update. Check Documentation/admin-guide/thunderbolt.rst for details.\n"); 2004 2004 return 0; 2005 2005 } 2006 2006 ··· 2171 2171 static int icm_runtime_resume(struct tb *tb) 2172 2172 { 2173 2173 /* 2174 - * We can reuse the same resume functionality than with system 2174 + * We can reuse the same resume functionality as with system 2175 2175 * suspend. 2176 2176 */ 2177 2177 icm_complete(tb);
+1 -1
drivers/thunderbolt/lc.c
··· 558 558 return ret; 559 559 560 560 /* 561 - * Sink is available for CM/SW to use if the allocation valie is 561 + * Sink is available for CM/SW to use if the allocation value is 562 562 * either 0 or 1. 563 563 */ 564 564 if (!sink) {
+1 -1
drivers/thunderbolt/nhi.c
··· 712 712 ring_iowrite64desc(ring, ring->descriptors_dma, 0); 713 713 if (ring->is_tx) { 714 714 ring_iowrite32desc(ring, ring->size, 12); 715 - ring_iowrite32options(ring, 0, 4); /* time releated ? */ 715 + ring_iowrite32options(ring, 0, 4); 716 716 ring_iowrite32options(ring, flags, 0); 717 717 } else { 718 718 u32 sof_eof_mask = ring->sof_mask << 16 | ring->eof_mask;
+1 -1
drivers/thunderbolt/retimer.c
··· 501 501 * @add: If true also registers found retimers 502 502 * 503 503 * Brings the sideband into a state where retimers can be accessed. 504 - * Then Tries to enumerate on-board retimers connected to @port. Found 504 + * Then tries to enumerate on-board retimers connected to @port. Found 505 505 * retimers are registered as children of @port if @add is set. Does 506 506 * not scan for cable retimers for now. 507 507 *
+3 -3
drivers/thunderbolt/switch.c
··· 736 736 port->cap_usb4 = cap; 737 737 738 738 /* 739 - * USB4 ports the buffers allocated for the control path 739 + * USB4 port buffers allocated for the control path 740 740 * can be read from the path config space. Legacy 741 - * devices we use hard-coded value. 741 + * devices use hard-coded value. 742 742 */ 743 743 if (port->cap_usb4) { 744 744 struct tb_regs_hop hop; ··· 3221 3221 * @sw: Switch whose link is unconfigured 3222 3222 * 3223 3223 * Sets the link unconfigured so the @sw will be disconnected if the 3224 - * domain exists sleep. 3224 + * domain exits sleep. 3225 3225 */ 3226 3226 void tb_switch_unconfigure_link(struct tb_switch *sw) 3227 3227 {
+8 -8
drivers/thunderbolt/tb.c
··· 322 322 323 323 /* 324 324 * If both routers at the end of the link are v2 we simply 325 - * enable the enhanched uni-directional mode. That covers all 325 + * enable the enhanced uni-directional mode. That covers all 326 326 * the CL states. For v1 and before we need to use the normal 327 327 * rate to allow CL1 (when supported). Otherwise we keep the TMU 328 328 * running at the highest accuracy. ··· 538 538 * @src_port: Source protocol adapter 539 539 * @dst_port: Destination protocol adapter 540 540 * @port: USB4 port the consumed bandwidth is calculated 541 - * @consumed_up: Consumed upsream bandwidth (Mb/s) 541 + * @consumed_up: Consumed upstream bandwidth (Mb/s) 542 542 * @consumed_down: Consumed downstream bandwidth (Mb/s) 543 543 * 544 544 * Calculates consumed USB3 and PCIe bandwidth at @port between path ··· 589 589 * @src_port: Source protocol adapter 590 590 * @dst_port: Destination protocol adapter 591 591 * @port: USB4 port the consumed bandwidth is calculated 592 - * @consumed_up: Consumed upsream bandwidth (Mb/s) 592 + * @consumed_up: Consumed upstream bandwidth (Mb/s) 593 593 * @consumed_down: Consumed downstream bandwidth (Mb/s) 594 594 * 595 595 * Calculates consumed DP bandwidth at @port between path from @src_port ··· 1115 1115 1116 1116 /* 1117 1117 * Here requested + consumed > threshold so we need to 1118 - * transtion the link into asymmetric now. 1118 + * transition the link into asymmetric now. 1119 1119 */ 1120 1120 ret = tb_switch_set_link_width(up->sw, width_up); 1121 1121 if (ret) { ··· 1936 1936 */ 1937 1937 tb_recalc_estimated_bandwidth(tb); 1938 1938 /* 1939 - * In case of DP tunnel exists, change host 1939 + * In case DP tunnel exists, change host 1940 1940 * router's 1st children TMU mode to HiFi for 1941 1941 * CL0s to work. 1942 1942 */ ··· 2636 2636 * the 10s already expired and we should 2637 2637 * give the reserved back to others). 2638 2638 */ 2639 - mod_delayed_work(system_wq, &group->release_work, 2639 + mod_delayed_work(system_percpu_wq, &group->release_work, 2640 2640 msecs_to_jiffies(TB_RELEASE_BW_TIMEOUT)); 2641 2641 } 2642 2642 } ··· 2786 2786 * There is no request active so this means the 2787 2787 * BW allocation mode was enabled from graphics 2788 2788 * side. At this point we know that the graphics 2789 - * driver has read the DRPX capabilities so we 2790 - * can offer an better bandwidth estimatation. 2789 + * driver has read the DPRX capabilities so we 2790 + * can offer better bandwidth estimation. 2791 2791 */ 2792 2792 tb_port_dbg(in, "DPTX enabled bandwidth allocation mode, updating estimated bandwidth\n"); 2793 2793 tb_recalc_estimated_bandwidth(tb);
+7 -7
drivers/thunderbolt/tb.h
··· 308 308 * struct usb4_port - USB4 port device 309 309 * @dev: Device for the port 310 310 * @port: Pointer to the lane 0 adapter 311 - * @can_offline: Does the port have necessary platform support to moved 311 + * @can_offline: Does the port have necessary platform support to move 312 312 * it into offline mode and back 313 313 * @offline: The port is currently in offline mode 314 314 * @margining: Pointer to margining structure if enabled ··· 355 355 * struct tb_path_hop - routing information for a tb_path 356 356 * @in_port: Ingress port of a switch 357 357 * @out_port: Egress port of a switch where the packet is routed out 358 - * (must be on the same switch than @in_port) 358 + * (must be on the same switch as @in_port) 359 359 * @in_hop_index: HopID where the path configuration entry is placed in 360 360 * the path config space of @in_port. 361 361 * @in_counter_index: Used counter index (not used in the driver ··· 499 499 * performed. If this returns %-EOPNOTSUPP then the 500 500 * native USB4 router operation is called. 501 501 * @usb4_switch_nvm_authenticate_status: Optional callback that the CM 502 - * implementation can be used to 503 - * return status of USB4 NVM_AUTH 504 - * router operation. 502 + * implementation can use to return 503 + * status of USB4 NVM_AUTH router 504 + * operation. 505 505 */ 506 506 struct tb_cm_ops { 507 507 int (*driver_ready)(struct tb *tb); ··· 1109 1109 struct tb_port *prev); 1110 1110 1111 1111 /** 1112 - * tb_port_path_direction_downstream() - Checks if path directed downstream 1112 + * tb_port_path_direction_downstream() - Checks if path is directed downstream 1113 1113 * @src: Source adapter 1114 1114 * @dst: Destination adapter 1115 1115 * ··· 1141 1141 (p) = tb_next_port_on_path((src), (dst), (p))) 1142 1142 1143 1143 /** 1144 - * tb_for_each_upstream_port_on_path() - Iterate over each upstreamm port on path 1144 + * tb_for_each_upstream_port_on_path() - Iterate over each upstream port on path 1145 1145 * @src: Source port 1146 1146 * @dst: Destination port 1147 1147 * @p: Port used as iterator
+3 -3
drivers/thunderbolt/tb_regs.h
··· 99 99 } __packed; 100 100 101 101 /** 102 - * struct tb_cap_any - Structure capable of hold every capability 102 + * struct tb_cap_any - Structure capable of holding every capability 103 103 * @basic: Basic capability 104 104 * @extended_short: Vendor specific capability 105 105 * @extended_long: Vendor specific extended capability ··· 534 534 535 535 /* 536 536 * Used for Titan Ridge only. Bits are part of the same register: TMU_ADP_CS_6 537 - * (see above) as in USB4 spec, but these specific bits used for Titan Ridge 538 - * only and reserved in USB4 spec. 537 + * (see above) as in USB4 spec, but these specific bits are used for Titan Ridge 538 + * only and are reserved in USB4 spec. 539 539 */ 540 540 #define TMU_ADP_CS_6_DISABLE_TMU_OBJ_MASK GENMASK(3, 2) 541 541 #define TMU_ADP_CS_6_DISABLE_TMU_OBJ_CL1 BIT(2)
+2 -2
drivers/thunderbolt/tmu.c
··· 400 400 401 401 /** 402 402 * tb_switch_tmu_init() - Initialize switch TMU structures 403 - * @sw: Switch to initialized 403 + * @sw: Switch to be initialized 404 404 * 405 405 * This function must be called before other TMU related functions to 406 - * makes the internal structures are filled in correctly. Does not 406 + * make sure the internal structures are filled in correctly. Does not 407 407 * change any hardware configuration. 408 408 * 409 409 * Return: %0 on success, negative errno otherwise.
+7 -7
drivers/thunderbolt/tunnel.c
··· 301 301 struct tb_port *port = tb_upstream_port(tunnel->dst_port->sw); 302 302 int ret; 303 303 304 - /* Only supported of both routers are at least USB4 v2 */ 304 + /* Only supported if both routers are at least USB4 v2 */ 305 305 if ((usb4_switch_version(tunnel->src_port->sw) < 2) || 306 306 (usb4_switch_version(tunnel->dst_port->sw) < 2)) 307 307 return 0; ··· 1170 1170 1171 1171 /* 1172 1172 * DP IN adapter DP_LOCAL_CAP gets updated to the lowest AUX 1173 - * read parameter values so this so we can use this to determine 1174 - * the maximum possible bandwidth over this link. 1173 + * read parameter values so we can use this to determine the 1174 + * maximum possible bandwidth over this link. 1175 1175 * 1176 1176 * See USB4 v2 spec 1.0 10.4.4.5. 1177 1177 */ ··· 1783 1783 1784 1784 /* 1785 1785 * First lane adapter is the one connected to the remote host. 1786 - * We don't tunnel other traffic over this link so can use all 1787 - * the credits (except the ones reserved for control traffic). 1786 + * We don't tunnel other traffic over this link so we can use 1787 + * all the credits (except the ones reserved for control traffic). 1788 1788 */ 1789 1789 hop = &path->hops[0]; 1790 1790 tmp = min(tb_usable_credits(hop->in_port), credits); ··· 2044 2044 2045 2045 /* 2046 2046 * PCIe tunneling, if enabled, affects the USB3 bandwidth so 2047 - * take that it into account here. 2047 + * take that into account here. 2048 2048 */ 2049 2049 *consumed_up = tunnel->allocated_up * 2050 2050 (TB_USB3_WEIGHT + pcie_weight) / TB_USB3_WEIGHT; ··· 2605 2605 * @tunnel: Tunnel whose unused bandwidth to release 2606 2606 * 2607 2607 * If tunnel supports dynamic bandwidth management (USB3 tunnels at the 2608 - * moment) this function makes it to release all the unused bandwidth. 2608 + * moment) this function makes it release all the unused bandwidth. 2609 2609 * 2610 2610 * Return: %0 on success, negative errno otherwise. 2611 2611 */
+13 -13
drivers/thunderbolt/usb4.c
··· 284 284 val |= ROUTER_CS_5_PTO; 285 285 /* 286 286 * xHCI can be enabled if PCIe tunneling is supported 287 - * and the parent does not have any USB3 dowstream 287 + * and the parent does not have any USB3 downstream 288 288 * adapters (so we cannot do USB 3.x tunneling). 289 289 */ 290 290 if (xhci) ··· 1342 1342 * usb4_port_sb_read() - Read from sideband register 1343 1343 * @port: USB4 port to read 1344 1344 * @target: Sideband target 1345 - * @index: Retimer index if taget is %USB4_SB_TARGET_RETIMER 1345 + * @index: Retimer index if target is %USB4_SB_TARGET_RETIMER 1346 1346 * @reg: Sideband register index 1347 1347 * @buf: Buffer where the sideband data is copied 1348 1348 * @size: Size of @buf ··· 1395 1395 * usb4_port_sb_write() - Write to sideband register 1396 1396 * @port: USB4 port to write 1397 1397 * @target: Sideband target 1398 - * @index: Retimer index if taget is %USB4_SB_TARGET_RETIMER 1398 + * @index: Retimer index if target is %USB4_SB_TARGET_RETIMER 1399 1399 * @reg: Sideband register index 1400 1400 * @buf: Data to write 1401 1401 * @size: Size of @buf ··· 1527 1527 } 1528 1528 1529 1529 /** 1530 - * usb4_port_router_online() - Put the USB4 port back to online 1530 + * usb4_port_router_online() - Put the USB4 port back online 1531 1531 * @port: USB4 port 1532 1532 * 1533 1533 * Makes the USB4 port functional again. ··· 1692 1692 } 1693 1693 1694 1694 /** 1695 - * usb4_port_margining_caps() - Read USB4 port marginig capabilities 1695 + * usb4_port_margining_caps() - Read USB4 port margining capabilities 1696 1696 * @port: USB4 port 1697 1697 * @target: Sideband target 1698 - * @index: Retimer index if taget is %USB4_SB_TARGET_RETIMER 1698 + * @index: Retimer index if target is %USB4_SB_TARGET_RETIMER 1699 1699 * @caps: Array with at least two elements to hold the results 1700 1700 * @ncaps: Number of elements in the caps array 1701 1701 * ··· 1721 1721 * usb4_port_hw_margin() - Run hardware lane margining on port 1722 1722 * @port: USB4 port 1723 1723 * @target: Sideband target 1724 - * @index: Retimer index if taget is %USB4_SB_TARGET_RETIMER 1724 + * @index: Retimer index if target is %USB4_SB_TARGET_RETIMER 1725 1725 * @params: Parameters for USB4 hardware margining 1726 1726 * @results: Array to hold the results 1727 1727 * @nresults: Number of elements in the results array ··· 1769 1769 * usb4_port_sw_margin() - Run software lane margining on port 1770 1770 * @port: USB4 port 1771 1771 * @target: Sideband target 1772 - * @index: Retimer index if taget is %USB4_SB_TARGET_RETIMER 1772 + * @index: Retimer index if target is %USB4_SB_TARGET_RETIMER 1773 1773 * @params: Parameters for USB4 software margining 1774 1774 * @results: Data word for the operation completion data 1775 1775 * ··· 1819 1819 * usb4_port_sw_margin_errors() - Read the software margining error counters 1820 1820 * @port: USB4 port 1821 1821 * @target: Sideband target 1822 - * @index: Retimer index if taget is %USB4_SB_TARGET_RETIMER 1822 + * @index: Retimer index if target is %USB4_SB_TARGET_RETIMER 1823 1823 * @errors: Error metadata is copied here. 1824 1824 * 1825 1825 * This reads back the software margining error counters from the port. ··· 1853 1853 * @port: USB4 port 1854 1854 * @index: Retimer index 1855 1855 * 1856 - * Enables sideband channel transations on SBTX. Can be used when USB4 1856 + * Enables sideband channel transactions on SBTX. Can be used when USB4 1857 1857 * link does not go up, for example if there is no device connected. 1858 1858 * 1859 1859 * Return: %0 on success, negative errno otherwise. ··· 1882 1882 * @port: USB4 port 1883 1883 * @index: Retimer index 1884 1884 * 1885 - * Disables sideband channel transations on SBTX. The reverse of 1885 + * Disables sideband channel transactions on SBTX. The reverse of 1886 1886 * usb4_port_retimer_set_inbound_sbtx(). 1887 1887 * 1888 1888 * Return: %0 on success, negative errno otherwise. ··· 1981 1981 * @index: Retimer index 1982 1982 * @address: Start offset 1983 1983 * 1984 - * Exlicitly sets NVM write offset. Normally when writing to NVM this is 1984 + * Explicitly sets NVM write offset. Normally when writing to NVM this is 1985 1985 * done automatically by usb4_port_retimer_nvm_write(). 1986 1986 * 1987 1987 * Return: %0 on success, negative errno otherwise. ··· 2190 2190 } 2191 2191 2192 2192 /** 2193 - * usb4_usb3_port_max_link_rate() - Maximum support USB3 link rate 2193 + * usb4_usb3_port_max_link_rate() - Maximum supported USB3 link rate 2194 2194 * @port: USB3 adapter port 2195 2195 * 2196 2196 * Return: Maximum supported link rate of a USB3 adapter in Mb/s.
+2 -2
drivers/thunderbolt/xdomain.c
··· 1951 1951 /** 1952 1952 * tb_xdomain_alloc() - Allocate new XDomain object 1953 1953 * @tb: Domain where the XDomain belongs 1954 - * @parent: Parent device (the switch through the connection to the 1955 - * other domain is reached). 1954 + * @parent: Parent device (the switch through which the other domain 1955 + * is reached). 1956 1956 * @route: Route string used to reach the other domain 1957 1957 * @local_uuid: Our local domain UUID 1958 1958 * @remote_uuid: UUID of the other domain (optional)