Re: [PATCH v2 7/8] usb: typec: intel_pmc_mux: Configure active cable properties for USB4
From: Heikki Krogerus
Date: Tue Nov 17 2020 - 07:21:42 EST
On Fri, Nov 13, 2020 at 12:25:02PM -0800, Utkarsh Patel wrote:
> Value received as a part of Thunderbolt 3 cable discover mode VDO needs
> to be configured in the USB4 mode for the Thunderbolt rounded support and
> active cable plug link training.
>
> Suggested-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
> Signed-off-by: Utkarsh Patel <utkarsh.h.patel@xxxxxxxxx>
>
> --
> Changes in v2:
> - No change.
> --
> ---
> drivers/usb/typec/mux/intel_pmc_mux.c | 18 +++++++++++++++---
> 1 file changed, 15 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..61feb358aad3 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,20 @@ 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);
No need for the newline:
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;
> }
thanks,
--
heikki