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.kroge...@linux.intel.com>
Signed-off-by: Utkarsh Patel <utkarsh.h.pa...@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(-)

diff --git a/drivers/usb/typec/mux/intel_pmc_mux.c 
b/drivers/usb/typec/mux/intel_pmc_mux.c
index aa3211f1c4c3..baf343b14682 100644
--- a/drivers/usb/typec/mux/intel_pmc_mux.c
+++ b/drivers/usb/typec/mux/intel_pmc_mux.c
@@ -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;
        }
 
-- 
2.17.1

Reply via email to