@@ -295,6 +295,7 @@ pmc_usb_mux_usb4(struct pmc_usb_port *port, struct typec_mux_state *state)
{
struct enter_usb_data *data = state->data;
struct altmode_req req = { };
+ u8 cable_rounded;
u8 cable_speed;
if (IOM_PORT_ACTIVITY_IS(port->iom_status, TBT) ||
@@ -308,9 +309,6 @@ pmc_usb_mux_usb4(struct pmc_usb_port *port, struct typec_mux_state *state)
/* USB4 Mode */
req.mode_data = PMC_USB_ALTMODE_FORCE_LSR;
- if (data->active_link_training)
- req.mode_data |= PMC_USB_ALTMODE_ACTIVE_LINK;
-
req.mode_data |= (port->orientation - 1) << PMC_USB_ALTMODE_ORI_SHIFT;
req.mode_data |= (port->role - 1) << PMC_USB_ALTMODE_UFP_SHIFT;
@@ -322,6 +320,19 @@ pmc_usb_mux_usb4(struct pmc_usb_port *port, struct typec_mux_state *state)
fallthrough;
default:
req.mode_data |= PMC_USB_ALTMODE_ACTIVE_CABLE;
+
+ if (data->tbt_cable_vdo) {
+ /* Active Thunderbolt 3 cable */
+ if (data->tbt_cable_vdo & TBT_CABLE_LINK_TRAINING)
+ req.mode_data |= PMC_USB_ALTMODE_ACTIVE_LINK;
+
+ cable_rounded = TBT_CABLE_ROUNDED_SUPPORT(data->tbt_cable_vdo);
+ req.mode_data |= PMC_USB_ALTMODE_TBT_GEN(cable_rounded);
+ } else {
+ /* Active USB4 cable */
+ req.mode_data |= PMC_USB_ALTMODE_ACTIVE_LINK |
+ PMC_USB_ALTMODE_TBT_GEN(1);
+ }
break;
}
Value received as a part of Thunderbolt 3 cable discover mode VDO needs to be configured in the USB4 mode for the cable rounded support and active cable plug link training. Suggested-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Signed-off-by: Utkarsh Patel <utkarsh.h.patel@intel.com> -- Changes in v3: - Moved TBT_CABLE_ROUNDED_SUPPORT assignment to the same line. Changes in v2: - No change. -- --- drivers/usb/typec/mux/intel_pmc_mux.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-)