mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
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
This commit is contained in:
@@ -203,10 +203,10 @@ host controller or a device, it is important that the firmware can be
|
||||
upgraded to the latest where possible bugs in it have been fixed.
|
||||
Typically OEMs provide this firmware from their support site.
|
||||
|
||||
There is also a central site which has links where to download firmware
|
||||
for some machines:
|
||||
|
||||
`Thunderbolt Updates <https://thunderbolttechnology.net/updates>`_
|
||||
Currently, recommended method of updating firmware is through "fwupd" tool.
|
||||
It uses LVFS (Linux Vendor Firmware Service) portal by default to get the
|
||||
latest firmware from hardware vendors and updates connected devices if found
|
||||
compatible. For details refer to: https://github.com/fwupd/fwupd.
|
||||
|
||||
Before you upgrade firmware on a device, host or retimer, please make
|
||||
sure it is a suitable upgrade. Failing to do that may render the device
|
||||
@@ -215,18 +215,40 @@ tools!
|
||||
|
||||
Host NVM upgrade on Apple Macs is not supported.
|
||||
|
||||
Once the NVM image has been downloaded, you need to plug in a
|
||||
Thunderbolt device so that the host controller appears. It does not
|
||||
matter which device is connected (unless you are upgrading NVM on a
|
||||
device - then you need to connect that particular device).
|
||||
Fwupd is installed by default. If you don't have it on your system, simply
|
||||
use your distro package manager to get it.
|
||||
|
||||
To see possible updates through fwupd, you need to plug in a Thunderbolt
|
||||
device so that the host controller appears. It does not matter which
|
||||
device is connected (unless you are upgrading NVM on a device - then you
|
||||
need to connect that particular device).
|
||||
|
||||
Note an OEM-specific method to power the controller up ("force power") may
|
||||
be available for your system in which case there is no need to plug in a
|
||||
Thunderbolt device.
|
||||
|
||||
After that we can write the firmware to the non-active parts of the NVM
|
||||
of the host or device. As an example here is how Intel NUC6i7KYK (Skull
|
||||
Canyon) Thunderbolt controller NVM is upgraded::
|
||||
Updating firmware using fwupd is straightforward - refer to official
|
||||
readme on fwupd github.
|
||||
|
||||
If firmware image is written successfully, the device shortly disappears.
|
||||
Once it comes back, the driver notices it and initiates a full power
|
||||
cycle. After a while device appears again and this time it should be
|
||||
fully functional.
|
||||
|
||||
Device of interest should display new version under "Current version"
|
||||
and "Update State: Success" in fwupd's interface.
|
||||
|
||||
Upgrading firmware manually
|
||||
---------------------------------------------------------------
|
||||
If possible, use fwupd to updated the firmware. However, if your device OEM
|
||||
has not uploaded the firmware to LVFS, but it is available for download
|
||||
from their side, you can use method below to directly upgrade the
|
||||
firmware.
|
||||
|
||||
Manual firmware update can be done with 'dd' tool. To update firmware
|
||||
using this method, you need to write it to the non-active parts of NVM
|
||||
of the host or device. Example on how to update Intel NUC6i7KYK
|
||||
(Skull Canyon) Thunderbolt controller NVM::
|
||||
|
||||
# dd if=KYK_TBT_FW_0018.bin of=/sys/bus/thunderbolt/devices/0-0/nvm_non_active0/nvmem
|
||||
|
||||
@@ -235,10 +257,8 @@ upgrade process as follows::
|
||||
|
||||
# echo 1 > /sys/bus/thunderbolt/devices/0-0/nvm_authenticate
|
||||
|
||||
If no errors are returned, the host controller shortly disappears. Once
|
||||
it comes back the driver notices it and initiates a full power cycle.
|
||||
After a while the host controller appears again and this time it should
|
||||
be fully functional.
|
||||
If no errors are returned, device should behave as described in previous
|
||||
section.
|
||||
|
||||
We can verify that the new NVM firmware is active by running the following
|
||||
commands::
|
||||
|
||||
@@ -412,7 +412,7 @@ static void tb_ctl_rx_submit(struct ctl_pkg *pkg)
|
||||
* We ignore failures during stop.
|
||||
* All rx packets are referenced
|
||||
* from ctl->rx_packets, so we do
|
||||
* not loose them.
|
||||
* not lose them.
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
@@ -201,7 +201,7 @@ static bool parse_line(char **line, u32 *offs, u32 *val, int short_fmt_len,
|
||||
#if IS_ENABLED(CONFIG_USB4_DEBUGFS_WRITE)
|
||||
/*
|
||||
* Path registers need to be written in double word pairs and they both must be
|
||||
* read before written. This writes one double word in patch config space
|
||||
* read before written. This writes one double word in path config space
|
||||
* following the spec flow.
|
||||
*/
|
||||
static int path_write_one(struct tb_port *port, u32 val, u32 offset)
|
||||
@@ -1196,7 +1196,7 @@ static int validate_margining(struct tb_margining *margining)
|
||||
{
|
||||
/*
|
||||
* For running on RX2 the link must be asymmetric with 3
|
||||
* receivers. Because this is can change dynamically, check it
|
||||
* receivers. Because this can change dynamically, check it
|
||||
* here before we start the margining and report back error if
|
||||
* expectations are not met.
|
||||
*/
|
||||
|
||||
@@ -376,7 +376,7 @@ struct tb *tb_domain_alloc(struct tb_nhi *nhi, int timeout_msec, size_t privsize
|
||||
struct tb *tb;
|
||||
|
||||
/*
|
||||
* Make sure the structure sizes map with that the hardware
|
||||
* Make sure the structure sizes map with what the hardware
|
||||
* expects because bit-fields are being used.
|
||||
*/
|
||||
BUILD_BUG_ON(sizeof(struct tb_regs_switch_header) != 5 * 4);
|
||||
|
||||
@@ -21,7 +21,7 @@ static int tb_eeprom_ctl_write(struct tb_switch *sw, struct tb_eeprom_ctl *ctl)
|
||||
}
|
||||
|
||||
/*
|
||||
* tb_eeprom_ctl_write() - read control word
|
||||
* tb_eeprom_ctl_read() - read control word
|
||||
*/
|
||||
static int tb_eeprom_ctl_read(struct tb_switch *sw, struct tb_eeprom_ctl *ctl)
|
||||
{
|
||||
|
||||
@@ -787,7 +787,7 @@ icm_fr_device_connected(struct tb *tb, const struct icm_pkg_header *hdr)
|
||||
* information might have changed for example by the
|
||||
* fact that a switch on a dual-link connection might
|
||||
* have been enumerated using the other link now. Make
|
||||
* sure our book keeping matches that.
|
||||
* sure our bookkeeping matches that.
|
||||
*/
|
||||
if (sw->depth == depth && sw_phy_port == phy_port &&
|
||||
!!sw->authorized == authorized) {
|
||||
@@ -969,7 +969,7 @@ icm_fr_xdomain_connected(struct tb *tb, const struct icm_pkg_header *hdr)
|
||||
|
||||
/*
|
||||
* Look if there already exists an XDomain in the same place
|
||||
* than the new one and in that case remove it because it is
|
||||
* as the new one and in that case remove it because it is
|
||||
* most likely another host that got disconnected.
|
||||
*/
|
||||
xd = tb_xdomain_find_by_link_depth(tb, link, depth);
|
||||
@@ -2000,7 +2000,7 @@ static int icm_driver_ready(struct tb *tb)
|
||||
if (icm->safe_mode) {
|
||||
tb_info(tb, "Thunderbolt host controller is in safe mode.\n");
|
||||
tb_info(tb, "You need to update NVM firmware of the controller before it can be used.\n");
|
||||
tb_info(tb, "For latest updates check https://thunderbolttechnology.net/updates.\n");
|
||||
tb_info(tb, "Use fwupd tool to apply update. Check Documentation/admin-guide/thunderbolt.rst for details.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2171,7 +2171,7 @@ static int icm_runtime_resume_switch(struct tb_switch *sw)
|
||||
static int icm_runtime_resume(struct tb *tb)
|
||||
{
|
||||
/*
|
||||
* We can reuse the same resume functionality than with system
|
||||
* We can reuse the same resume functionality as with system
|
||||
* suspend.
|
||||
*/
|
||||
icm_complete(tb);
|
||||
|
||||
@@ -558,7 +558,7 @@ static int tb_lc_dp_sink_available(struct tb_switch *sw, int sink)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Sink is available for CM/SW to use if the allocation valie is
|
||||
* Sink is available for CM/SW to use if the allocation value is
|
||||
* either 0 or 1.
|
||||
*/
|
||||
if (!sink) {
|
||||
|
||||
@@ -712,7 +712,7 @@ void tb_ring_start(struct tb_ring *ring)
|
||||
ring_iowrite64desc(ring, ring->descriptors_dma, 0);
|
||||
if (ring->is_tx) {
|
||||
ring_iowrite32desc(ring, ring->size, 12);
|
||||
ring_iowrite32options(ring, 0, 4); /* time releated ? */
|
||||
ring_iowrite32options(ring, 0, 4);
|
||||
ring_iowrite32options(ring, flags, 0);
|
||||
} else {
|
||||
u32 sof_eof_mask = ring->sof_mask << 16 | ring->eof_mask;
|
||||
|
||||
@@ -501,7 +501,7 @@ static struct tb_retimer *tb_port_find_retimer(struct tb_port *port, u8 index)
|
||||
* @add: If true also registers found retimers
|
||||
*
|
||||
* Brings the sideband into a state where retimers can be accessed.
|
||||
* Then Tries to enumerate on-board retimers connected to @port. Found
|
||||
* Then tries to enumerate on-board retimers connected to @port. Found
|
||||
* retimers are registered as children of @port if @add is set. Does
|
||||
* not scan for cable retimers for now.
|
||||
*
|
||||
|
||||
@@ -736,9 +736,9 @@ static int tb_init_port(struct tb_port *port)
|
||||
port->cap_usb4 = cap;
|
||||
|
||||
/*
|
||||
* USB4 ports the buffers allocated for the control path
|
||||
* USB4 port buffers allocated for the control path
|
||||
* can be read from the path config space. Legacy
|
||||
* devices we use hard-coded value.
|
||||
* devices use hard-coded value.
|
||||
*/
|
||||
if (port->cap_usb4) {
|
||||
struct tb_regs_hop hop;
|
||||
@@ -3221,7 +3221,7 @@ int tb_switch_configure_link(struct tb_switch *sw)
|
||||
* @sw: Switch whose link is unconfigured
|
||||
*
|
||||
* Sets the link unconfigured so the @sw will be disconnected if the
|
||||
* domain exists sleep.
|
||||
* domain exits sleep.
|
||||
*/
|
||||
void tb_switch_unconfigure_link(struct tb_switch *sw)
|
||||
{
|
||||
|
||||
@@ -322,7 +322,7 @@ static int tb_enable_tmu(struct tb_switch *sw)
|
||||
|
||||
/*
|
||||
* If both routers at the end of the link are v2 we simply
|
||||
* enable the enhanched uni-directional mode. That covers all
|
||||
* enable the enhanced uni-directional mode. That covers all
|
||||
* the CL states. For v1 and before we need to use the normal
|
||||
* rate to allow CL1 (when supported). Otherwise we keep the TMU
|
||||
* running at the highest accuracy.
|
||||
@@ -538,7 +538,7 @@ static struct tb_tunnel *tb_find_first_usb3_tunnel(struct tb *tb,
|
||||
* @src_port: Source protocol adapter
|
||||
* @dst_port: Destination protocol adapter
|
||||
* @port: USB4 port the consumed bandwidth is calculated
|
||||
* @consumed_up: Consumed upsream bandwidth (Mb/s)
|
||||
* @consumed_up: Consumed upstream bandwidth (Mb/s)
|
||||
* @consumed_down: Consumed downstream bandwidth (Mb/s)
|
||||
*
|
||||
* Calculates consumed USB3 and PCIe bandwidth at @port between path
|
||||
@@ -589,7 +589,7 @@ static int tb_consumed_usb3_pcie_bandwidth(struct tb *tb,
|
||||
* @src_port: Source protocol adapter
|
||||
* @dst_port: Destination protocol adapter
|
||||
* @port: USB4 port the consumed bandwidth is calculated
|
||||
* @consumed_up: Consumed upsream bandwidth (Mb/s)
|
||||
* @consumed_up: Consumed upstream bandwidth (Mb/s)
|
||||
* @consumed_down: Consumed downstream bandwidth (Mb/s)
|
||||
*
|
||||
* Calculates consumed DP bandwidth at @port between path from @src_port
|
||||
@@ -1115,7 +1115,7 @@ static int tb_configure_asym(struct tb *tb, struct tb_port *src_port,
|
||||
|
||||
/*
|
||||
* Here requested + consumed > threshold so we need to
|
||||
* transtion the link into asymmetric now.
|
||||
* transition the link into asymmetric now.
|
||||
*/
|
||||
ret = tb_switch_set_link_width(up->sw, width_up);
|
||||
if (ret) {
|
||||
@@ -1936,7 +1936,7 @@ static void tb_dp_tunnel_active(struct tb_tunnel *tunnel, void *data)
|
||||
*/
|
||||
tb_recalc_estimated_bandwidth(tb);
|
||||
/*
|
||||
* In case of DP tunnel exists, change host
|
||||
* In case DP tunnel exists, change host
|
||||
* router's 1st children TMU mode to HiFi for
|
||||
* CL0s to work.
|
||||
*/
|
||||
@@ -2636,7 +2636,7 @@ static int tb_alloc_dp_bandwidth(struct tb_tunnel *tunnel, int *requested_up,
|
||||
* the 10s already expired and we should
|
||||
* give the reserved back to others).
|
||||
*/
|
||||
mod_delayed_work(system_wq, &group->release_work,
|
||||
mod_delayed_work(system_percpu_wq, &group->release_work,
|
||||
msecs_to_jiffies(TB_RELEASE_BW_TIMEOUT));
|
||||
}
|
||||
}
|
||||
@@ -2786,8 +2786,8 @@ static void tb_handle_dp_bandwidth_request(struct work_struct *work)
|
||||
* There is no request active so this means the
|
||||
* BW allocation mode was enabled from graphics
|
||||
* side. At this point we know that the graphics
|
||||
* driver has read the DRPX capabilities so we
|
||||
* can offer an better bandwidth estimatation.
|
||||
* driver has read the DPRX capabilities so we
|
||||
* can offer better bandwidth estimation.
|
||||
*/
|
||||
tb_port_dbg(in, "DPTX enabled bandwidth allocation mode, updating estimated bandwidth\n");
|
||||
tb_recalc_estimated_bandwidth(tb);
|
||||
|
||||
@@ -308,7 +308,7 @@ struct tb_port {
|
||||
* struct usb4_port - USB4 port device
|
||||
* @dev: Device for the port
|
||||
* @port: Pointer to the lane 0 adapter
|
||||
* @can_offline: Does the port have necessary platform support to moved
|
||||
* @can_offline: Does the port have necessary platform support to move
|
||||
* it into offline mode and back
|
||||
* @offline: The port is currently in offline mode
|
||||
* @margining: Pointer to margining structure if enabled
|
||||
@@ -355,7 +355,7 @@ struct tb_retimer {
|
||||
* struct tb_path_hop - routing information for a tb_path
|
||||
* @in_port: Ingress port of a switch
|
||||
* @out_port: Egress port of a switch where the packet is routed out
|
||||
* (must be on the same switch than @in_port)
|
||||
* (must be on the same switch as @in_port)
|
||||
* @in_hop_index: HopID where the path configuration entry is placed in
|
||||
* the path config space of @in_port.
|
||||
* @in_counter_index: Used counter index (not used in the driver
|
||||
@@ -499,9 +499,9 @@ struct tb_path {
|
||||
* performed. If this returns %-EOPNOTSUPP then the
|
||||
* native USB4 router operation is called.
|
||||
* @usb4_switch_nvm_authenticate_status: Optional callback that the CM
|
||||
* implementation can be used to
|
||||
* return status of USB4 NVM_AUTH
|
||||
* router operation.
|
||||
* implementation can use to return
|
||||
* status of USB4 NVM_AUTH router
|
||||
* operation.
|
||||
*/
|
||||
struct tb_cm_ops {
|
||||
int (*driver_ready)(struct tb *tb);
|
||||
@@ -1109,7 +1109,7 @@ struct tb_port *tb_next_port_on_path(struct tb_port *start, struct tb_port *end,
|
||||
struct tb_port *prev);
|
||||
|
||||
/**
|
||||
* tb_port_path_direction_downstream() - Checks if path directed downstream
|
||||
* tb_port_path_direction_downstream() - Checks if path is directed downstream
|
||||
* @src: Source adapter
|
||||
* @dst: Destination adapter
|
||||
*
|
||||
@@ -1141,7 +1141,7 @@ static inline bool tb_port_use_credit_allocation(const struct tb_port *port)
|
||||
(p) = tb_next_port_on_path((src), (dst), (p)))
|
||||
|
||||
/**
|
||||
* tb_for_each_upstream_port_on_path() - Iterate over each upstreamm port on path
|
||||
* tb_for_each_upstream_port_on_path() - Iterate over each upstream port on path
|
||||
* @src: Source port
|
||||
* @dst: Destination port
|
||||
* @p: Port used as iterator
|
||||
|
||||
@@ -99,7 +99,7 @@ struct tb_cap_extended_long {
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* struct tb_cap_any - Structure capable of hold every capability
|
||||
* struct tb_cap_any - Structure capable of holding every capability
|
||||
* @basic: Basic capability
|
||||
* @extended_short: Vendor specific capability
|
||||
* @extended_long: Vendor specific extended capability
|
||||
@@ -534,8 +534,8 @@ struct tb_regs_hop {
|
||||
|
||||
/*
|
||||
* Used for Titan Ridge only. Bits are part of the same register: TMU_ADP_CS_6
|
||||
* (see above) as in USB4 spec, but these specific bits used for Titan Ridge
|
||||
* only and reserved in USB4 spec.
|
||||
* (see above) as in USB4 spec, but these specific bits are used for Titan Ridge
|
||||
* only and are reserved in USB4 spec.
|
||||
*/
|
||||
#define TMU_ADP_CS_6_DISABLE_TMU_OBJ_MASK GENMASK(3, 2)
|
||||
#define TMU_ADP_CS_6_DISABLE_TMU_OBJ_CL1 BIT(2)
|
||||
|
||||
@@ -400,10 +400,10 @@ static int tmu_mode_init(struct tb_switch *sw)
|
||||
|
||||
/**
|
||||
* tb_switch_tmu_init() - Initialize switch TMU structures
|
||||
* @sw: Switch to initialized
|
||||
* @sw: Switch to be initialized
|
||||
*
|
||||
* This function must be called before other TMU related functions to
|
||||
* makes the internal structures are filled in correctly. Does not
|
||||
* make sure the internal structures are filled in correctly. Does not
|
||||
* change any hardware configuration.
|
||||
*
|
||||
* Return: %0 on success, negative errno otherwise.
|
||||
|
||||
@@ -301,7 +301,7 @@ static int tb_pci_set_ext_encapsulation(struct tb_tunnel *tunnel, bool enable)
|
||||
struct tb_port *port = tb_upstream_port(tunnel->dst_port->sw);
|
||||
int ret;
|
||||
|
||||
/* Only supported of both routers are at least USB4 v2 */
|
||||
/* Only supported if both routers are at least USB4 v2 */
|
||||
if ((usb4_switch_version(tunnel->src_port->sw) < 2) ||
|
||||
(usb4_switch_version(tunnel->dst_port->sw) < 2))
|
||||
return 0;
|
||||
@@ -1170,8 +1170,8 @@ static int tb_dp_bandwidth_mode_maximum_bandwidth(struct tb_tunnel *tunnel,
|
||||
|
||||
/*
|
||||
* DP IN adapter DP_LOCAL_CAP gets updated to the lowest AUX
|
||||
* read parameter values so this so we can use this to determine
|
||||
* the maximum possible bandwidth over this link.
|
||||
* read parameter values so we can use this to determine the
|
||||
* maximum possible bandwidth over this link.
|
||||
*
|
||||
* See USB4 v2 spec 1.0 10.4.4.5.
|
||||
*/
|
||||
@@ -1783,8 +1783,8 @@ static int tb_dma_init_rx_path(struct tb_path *path, unsigned int credits)
|
||||
|
||||
/*
|
||||
* First lane adapter is the one connected to the remote host.
|
||||
* We don't tunnel other traffic over this link so can use all
|
||||
* the credits (except the ones reserved for control traffic).
|
||||
* We don't tunnel other traffic over this link so we can use
|
||||
* all the credits (except the ones reserved for control traffic).
|
||||
*/
|
||||
hop = &path->hops[0];
|
||||
tmp = min(tb_usable_credits(hop->in_port), credits);
|
||||
@@ -2044,7 +2044,7 @@ static int tb_usb3_consumed_bandwidth(struct tb_tunnel *tunnel,
|
||||
|
||||
/*
|
||||
* PCIe tunneling, if enabled, affects the USB3 bandwidth so
|
||||
* take that it into account here.
|
||||
* take that into account here.
|
||||
*/
|
||||
*consumed_up = tunnel->allocated_up *
|
||||
(TB_USB3_WEIGHT + pcie_weight) / TB_USB3_WEIGHT;
|
||||
@@ -2605,7 +2605,7 @@ int tb_tunnel_consumed_bandwidth(struct tb_tunnel *tunnel, int *consumed_up,
|
||||
* @tunnel: Tunnel whose unused bandwidth to release
|
||||
*
|
||||
* If tunnel supports dynamic bandwidth management (USB3 tunnels at the
|
||||
* moment) this function makes it to release all the unused bandwidth.
|
||||
* moment) this function makes it release all the unused bandwidth.
|
||||
*
|
||||
* Return: %0 on success, negative errno otherwise.
|
||||
*/
|
||||
|
||||
@@ -284,7 +284,7 @@ int usb4_switch_setup(struct tb_switch *sw)
|
||||
val |= ROUTER_CS_5_PTO;
|
||||
/*
|
||||
* xHCI can be enabled if PCIe tunneling is supported
|
||||
* and the parent does not have any USB3 dowstream
|
||||
* and the parent does not have any USB3 downstream
|
||||
* adapters (so we cannot do USB 3.x tunneling).
|
||||
*/
|
||||
if (xhci)
|
||||
@@ -1342,7 +1342,7 @@ static int usb4_port_write_data(struct tb_port *port, const void *data,
|
||||
* usb4_port_sb_read() - Read from sideband register
|
||||
* @port: USB4 port to read
|
||||
* @target: Sideband target
|
||||
* @index: Retimer index if taget is %USB4_SB_TARGET_RETIMER
|
||||
* @index: Retimer index if target is %USB4_SB_TARGET_RETIMER
|
||||
* @reg: Sideband register index
|
||||
* @buf: Buffer where the sideband data is copied
|
||||
* @size: Size of @buf
|
||||
@@ -1395,7 +1395,7 @@ int usb4_port_sb_read(struct tb_port *port, enum usb4_sb_target target, u8 index
|
||||
* usb4_port_sb_write() - Write to sideband register
|
||||
* @port: USB4 port to write
|
||||
* @target: Sideband target
|
||||
* @index: Retimer index if taget is %USB4_SB_TARGET_RETIMER
|
||||
* @index: Retimer index if target is %USB4_SB_TARGET_RETIMER
|
||||
* @reg: Sideband register index
|
||||
* @buf: Data to write
|
||||
* @size: Size of @buf
|
||||
@@ -1527,7 +1527,7 @@ int usb4_port_router_offline(struct tb_port *port)
|
||||
}
|
||||
|
||||
/**
|
||||
* usb4_port_router_online() - Put the USB4 port back to online
|
||||
* usb4_port_router_online() - Put the USB4 port back online
|
||||
* @port: USB4 port
|
||||
*
|
||||
* Makes the USB4 port functional again.
|
||||
@@ -1692,10 +1692,10 @@ int usb4_port_asym_start(struct tb_port *port)
|
||||
}
|
||||
|
||||
/**
|
||||
* usb4_port_margining_caps() - Read USB4 port marginig capabilities
|
||||
* usb4_port_margining_caps() - Read USB4 port margining capabilities
|
||||
* @port: USB4 port
|
||||
* @target: Sideband target
|
||||
* @index: Retimer index if taget is %USB4_SB_TARGET_RETIMER
|
||||
* @index: Retimer index if target is %USB4_SB_TARGET_RETIMER
|
||||
* @caps: Array with at least two elements to hold the results
|
||||
* @ncaps: Number of elements in the caps array
|
||||
*
|
||||
@@ -1721,7 +1721,7 @@ int usb4_port_margining_caps(struct tb_port *port, enum usb4_sb_target target,
|
||||
* usb4_port_hw_margin() - Run hardware lane margining on port
|
||||
* @port: USB4 port
|
||||
* @target: Sideband target
|
||||
* @index: Retimer index if taget is %USB4_SB_TARGET_RETIMER
|
||||
* @index: Retimer index if target is %USB4_SB_TARGET_RETIMER
|
||||
* @params: Parameters for USB4 hardware margining
|
||||
* @results: Array to hold the results
|
||||
* @nresults: Number of elements in the results array
|
||||
@@ -1769,7 +1769,7 @@ int usb4_port_hw_margin(struct tb_port *port, enum usb4_sb_target target,
|
||||
* usb4_port_sw_margin() - Run software lane margining on port
|
||||
* @port: USB4 port
|
||||
* @target: Sideband target
|
||||
* @index: Retimer index if taget is %USB4_SB_TARGET_RETIMER
|
||||
* @index: Retimer index if target is %USB4_SB_TARGET_RETIMER
|
||||
* @params: Parameters for USB4 software margining
|
||||
* @results: Data word for the operation completion data
|
||||
*
|
||||
@@ -1819,7 +1819,7 @@ int usb4_port_sw_margin(struct tb_port *port, enum usb4_sb_target target,
|
||||
* usb4_port_sw_margin_errors() - Read the software margining error counters
|
||||
* @port: USB4 port
|
||||
* @target: Sideband target
|
||||
* @index: Retimer index if taget is %USB4_SB_TARGET_RETIMER
|
||||
* @index: Retimer index if target is %USB4_SB_TARGET_RETIMER
|
||||
* @errors: Error metadata is copied here.
|
||||
*
|
||||
* This reads back the software margining error counters from the port.
|
||||
@@ -1853,7 +1853,7 @@ static inline int usb4_port_retimer_op(struct tb_port *port, u8 index,
|
||||
* @port: USB4 port
|
||||
* @index: Retimer index
|
||||
*
|
||||
* Enables sideband channel transations on SBTX. Can be used when USB4
|
||||
* Enables sideband channel transactions on SBTX. Can be used when USB4
|
||||
* link does not go up, for example if there is no device connected.
|
||||
*
|
||||
* Return: %0 on success, negative errno otherwise.
|
||||
@@ -1882,7 +1882,7 @@ int usb4_port_retimer_set_inbound_sbtx(struct tb_port *port, u8 index)
|
||||
* @port: USB4 port
|
||||
* @index: Retimer index
|
||||
*
|
||||
* Disables sideband channel transations on SBTX. The reverse of
|
||||
* Disables sideband channel transactions on SBTX. The reverse of
|
||||
* usb4_port_retimer_set_inbound_sbtx().
|
||||
*
|
||||
* Return: %0 on success, negative errno otherwise.
|
||||
@@ -1981,7 +1981,7 @@ int usb4_port_retimer_nvm_sector_size(struct tb_port *port, u8 index)
|
||||
* @index: Retimer index
|
||||
* @address: Start offset
|
||||
*
|
||||
* Exlicitly sets NVM write offset. Normally when writing to NVM this is
|
||||
* Explicitly sets NVM write offset. Normally when writing to NVM this is
|
||||
* done automatically by usb4_port_retimer_nvm_write().
|
||||
*
|
||||
* Return: %0 on success, negative errno otherwise.
|
||||
@@ -2190,7 +2190,7 @@ usb4_usb3_port_max_bandwidth(const struct tb_port *port, unsigned int bw)
|
||||
}
|
||||
|
||||
/**
|
||||
* usb4_usb3_port_max_link_rate() - Maximum support USB3 link rate
|
||||
* usb4_usb3_port_max_link_rate() - Maximum supported USB3 link rate
|
||||
* @port: USB3 adapter port
|
||||
*
|
||||
* Return: Maximum supported link rate of a USB3 adapter in Mb/s.
|
||||
|
||||
@@ -1951,8 +1951,8 @@ static void tb_xdomain_link_exit(struct tb_xdomain *xd)
|
||||
/**
|
||||
* tb_xdomain_alloc() - Allocate new XDomain object
|
||||
* @tb: Domain where the XDomain belongs
|
||||
* @parent: Parent device (the switch through the connection to the
|
||||
* other domain is reached).
|
||||
* @parent: Parent device (the switch through which the other domain
|
||||
* is reached).
|
||||
* @route: Route string used to reach the other domain
|
||||
* @local_uuid: Our local domain UUID
|
||||
* @remote_uuid: UUID of the other domain (optional)
|
||||
|
||||
Reference in New Issue
Block a user