diff mbox series

[v2,7/8] usb: typec: intel_pmc_mux: Configure active cable properties for USB4

Message ID 20201113202503.6559-8-utkarsh.h.patel@intel.com (mailing list archive)
State Superseded
Headers show
Series Thunderbolt3/USB4 cable rounded and active cable plug link training support | expand

Commit Message

Patel, Utkarsh H Nov. 13, 2020, 8:25 p.m. UTC
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@linux.intel.com>
Signed-off-by: Utkarsh Patel <utkarsh.h.patel@intel.com>

--
Changes in v2:
- No change.
--
---
 drivers/usb/typec/mux/intel_pmc_mux.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

Comments

Heikki Krogerus Nov. 17, 2020, 12:21 p.m. UTC | #1
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@linux.intel.com>
> Signed-off-by: Utkarsh Patel <utkarsh.h.patel@intel.com>
> 
> --
> 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,
Patel, Utkarsh H Nov. 17, 2020, 10:37 p.m. UTC | #2
Hi Heikki,

> -----Original Message-----
> From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> Sent: Tuesday, November 17, 2020 4:22 AM
> To: Patel, Utkarsh H <utkarsh.h.patel@intel.com>
> Cc: linux-kernel@vger.kernel.org; linux-usb@vger.kernel.org;
> pmalani@chromium.org; enric.balletbo@collabora.com; Mani, Rajmohan
> <rajmohan.mani@intel.com>; Shaikh, Azhar <azhar.shaikh@intel.com>
> Subject: Re: [PATCH v2 7/8] usb: typec: intel_pmc_mux: Configure active cable
> properties for USB4
> 
> 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@linux.intel.com>
> > Signed-off-by: Utkarsh Patel <utkarsh.h.patel@intel.com>
> >
> > --
> > 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:

Ack

> 
> 			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

Sincerely,
Utkarsh Patel.
diff mbox series

Patch

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);
+			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;
 	}