This patch series adds the support for Thunderbolt3/USB4 rounded and
non-rounded frequencies cables and fixes the active cable plug link
training support.
Utkarsh Patel (8):
usb: typec: Correct the bit values for the Thunderbolt
rounded/non-rounded cable support
platform/chrome: cros_ec_typec: Correct the Thunderbolt
rounded/non-rounded cable support
usb: typec: intel_pmc_mux: Configure Thunderbolt cable generation bits
usb: typec: Remove one bit support for the Thunderbolt
rounded/non-rounded cable
usb: typec: Use Thunderbolt 3 cable discover mode VDO in Enter_USB
message
platform/chrome: cros_ec_typec: Use Thunderbolt 3 cable discover mode
VDO in USB4 mode
usb: typec: intel_pmc_mux: Configure active cable properties for USB4
usb: typec: Remove active_link_training variable from Enter_USB
message
drivers/platform/chrome/cros_ec_typec.c | 17 +++++++++++++----
drivers/usb/typec/mux/intel_pmc_mux.c | 21 ++++++++++++++++++---
include/linux/usb/typec.h | 8 ++------
include/linux/usb/typec_tbt.h | 6 +++++-
4 files changed, 38 insertions(+), 14 deletions(-)
--
2.17.1
Thunderbolt rounded/non-rounded cable support is two bits value. Correcting
it as per the Thunderbolt 3 cable discover mode VDO changes done in the
Thunderbolt 3 alternate mode header.
Fixes: 5b30bd35aab4 ("platform/chrome: cros_ec_typec: Add TBT compat support")
Signed-off-by: Utkarsh Patel <[email protected]>
---
drivers/platform/chrome/cros_ec_typec.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/platform/chrome/cros_ec_typec.c b/drivers/platform/chrome/cros_ec_typec.c
index 31be31161350..8111ed1fc574 100644
--- a/drivers/platform/chrome/cros_ec_typec.c
+++ b/drivers/platform/chrome/cros_ec_typec.c
@@ -438,8 +438,7 @@ static int cros_typec_enable_tbt(struct cros_typec_data *typec,
if (pd_ctrl->control_flags & USB_PD_CTRL_ACTIVE_LINK_UNIDIR)
data.cable_mode |= TBT_CABLE_LINK_TRAINING;
- if (pd_ctrl->cable_gen)
- data.cable_mode |= TBT_CABLE_ROUNDED;
+ data.cable_mode |= TBT_SET_CABLE_ROUNDED(pd_ctrl->cable_gen);
/* Enter Mode VDO */
data.enter_vdo = TBT_SET_CABLE_SPEED(pd_ctrl->cable_speed);
--
2.17.1
Rounded and non-rounded Thunderbolt cables are represented by two bits as
per USB Type-C Connector specification v2.0 section F.2.6.
Corrected that in the Thunderbolt 3 cable discover mode VDO.
Fixes: ca469c292edc ("usb: typec: Add definitions for Thunderbolt 3 Alternate Mode")
Signed-off-by: Utkarsh Patel <[email protected]>
---
include/linux/usb/typec_tbt.h | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/include/linux/usb/typec_tbt.h b/include/linux/usb/typec_tbt.h
index 47c2d501ddce..aad648d14bb3 100644
--- a/include/linux/usb/typec_tbt.h
+++ b/include/linux/usb/typec_tbt.h
@@ -40,11 +40,16 @@ struct typec_thunderbolt_data {
#define TBT_CABLE_USB3_PASSIVE 2
#define TBT_CABLE_10_AND_20GBPS 3
#define TBT_CABLE_ROUNDED BIT(19)
+#define TBT_CABLE_ROUNDED_SUPPORT(_vdo_) \
+ (((_vdo_) & GENMASK(20, 19)) >> 19)
+#define TBT_GEN3_NON_ROUNDED 0
+#define TBT_GEN3_GEN4_ROUNDED_NON_ROUNDED 1
#define TBT_CABLE_OPTICAL BIT(21)
#define TBT_CABLE_RETIMER BIT(22)
#define TBT_CABLE_LINK_TRAINING BIT(23)
#define TBT_SET_CABLE_SPEED(_s_) (((_s_) & GENMASK(2, 0)) << 16)
+#define TBT_SET_CABLE_ROUNDED(_g_) (((_g_) & GENMASK(1, 0)) << 19)
/* TBT3 Device Enter Mode VDO bits */
#define TBT_ENTER_MODE_CABLE_SPEED(s) TBT_SET_CABLE_SPEED(s)
--
2.17.1
Thunderbolt cable generation bits received as a part of Thunderbolt 3 cable
discover mode VDO needs to be configured for Thunderbolt rounded and
non-rounded cable support in the Thunderbolt alternate mode.
Signed-off-by: Utkarsh Patel <[email protected]>
---
drivers/usb/typec/mux/intel_pmc_mux.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/usb/typec/mux/intel_pmc_mux.c b/drivers/usb/typec/mux/intel_pmc_mux.c
index d7f63b74c6b1..aa3211f1c4c3 100644
--- a/drivers/usb/typec/mux/intel_pmc_mux.c
+++ b/drivers/usb/typec/mux/intel_pmc_mux.c
@@ -256,6 +256,7 @@ static int
pmc_usb_mux_tbt(struct pmc_usb_port *port, struct typec_mux_state *state)
{
struct typec_thunderbolt_data *data = state->data;
+ u8 cable_rounded = TBT_CABLE_ROUNDED_SUPPORT(data->cable_mode);
u8 cable_speed = TBT_CABLE_SPEED(data->cable_mode);
struct altmode_req req = { };
@@ -284,6 +285,8 @@ pmc_usb_mux_tbt(struct pmc_usb_port *port, struct typec_mux_state *state)
req.mode_data |= PMC_USB_ALTMODE_CABLE_SPD(cable_speed);
+ req.mode_data |= PMC_USB_ALTMODE_TBT_GEN(cable_rounded);
+
return pmc_usb_command(port, (void *)&req, sizeof(req));
}
--
2.17.1
Two bits support for the Thunderbolt rounded/non-rounded cable has been
added to the header file.
Hence, removing unused TBT_CABLE_ROUNDED definition from the header file.
Fixes: ca469c292edc ("usb: typec: Add definitions for Thunderbolt 3 Alternate Mode")
Signed-off-by: Utkarsh Patel <[email protected]>
---
include/linux/usb/typec_tbt.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/include/linux/usb/typec_tbt.h b/include/linux/usb/typec_tbt.h
index aad648d14bb3..63dd44b72e0c 100644
--- a/include/linux/usb/typec_tbt.h
+++ b/include/linux/usb/typec_tbt.h
@@ -39,7 +39,6 @@ struct typec_thunderbolt_data {
#define TBT_CABLE_USB3_GEN1 1
#define TBT_CABLE_USB3_PASSIVE 2
#define TBT_CABLE_10_AND_20GBPS 3
-#define TBT_CABLE_ROUNDED BIT(19)
#define TBT_CABLE_ROUNDED_SUPPORT(_vdo_) \
(((_vdo_) & GENMASK(20, 19)) >> 19)
#define TBT_GEN3_NON_ROUNDED 0
--
2.17.1
USB4 also uses same cable properties as Thunderbolt 3 so use Thunderbolt 3
cable discover mode VDO to fill details such as active cable plug link
training and cable rounded support.
Suggested-by: Heikki Krogerus <[email protected]>
Signed-off-by: Utkarsh Patel <[email protected]>
---
include/linux/usb/typec.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h
index 6be558045942..d91e09d9d91c 100644
--- a/include/linux/usb/typec.h
+++ b/include/linux/usb/typec.h
@@ -75,6 +75,7 @@ enum typec_orientation {
/*
* struct enter_usb_data - Enter_USB Message details
* @eudo: Enter_USB Data Object
+ * @tbt_cable_vdo: TBT3 Cable Discover Mode Response
* @active_link_training: Active Cable Plug Link Training
*
* @active_link_training is a flag that should be set with uni-directional SBRX
@@ -83,6 +84,7 @@ enum typec_orientation {
*/
struct enter_usb_data {
u32 eudo;
+ u32 tbt_cable_vdo;
unsigned char active_link_training:1;
};
--
2.17.1
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 <[email protected]>
Signed-off-by: Utkarsh Patel <[email protected]>
---
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);
+ 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
Configure Thunderbolt3/USB4 cable generation value by filing Thunderbolt 3
cable discover mode VDO to support rounded and non-rounded Thunderbolt3/
USB4 cables.
While we are here use Thunderbolt 3 cable discover mode VDO to fill active
cable plug link training value.
Suggested-by: Heikki Krogerus <[email protected]>
Signed-off-by: Utkarsh Patel <[email protected]>
---
drivers/platform/chrome/cros_ec_typec.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/platform/chrome/cros_ec_typec.c b/drivers/platform/chrome/cros_ec_typec.c
index 8111ed1fc574..b7416e82c3b3 100644
--- a/drivers/platform/chrome/cros_ec_typec.c
+++ b/drivers/platform/chrome/cros_ec_typec.c
@@ -514,8 +514,18 @@ static int cros_typec_enable_usb4(struct cros_typec_data *typec,
else if (pd_ctrl->control_flags & USB_PD_CTRL_ACTIVE_CABLE)
data.eudo |= EUDO_CABLE_TYPE_RE_TIMER << EUDO_CABLE_TYPE_SHIFT;
- data.active_link_training = !!(pd_ctrl->control_flags &
- USB_PD_CTRL_ACTIVE_LINK_UNIDIR);
+ /*
+ * This driver does not have access to the identity information or
+ * capabilities of the cable, so we don't know is it a real USB4 or
+ * TBT3 cable. Therefore pretending that it's always TBT3 cable by
+ * filling the TBT3 Cable VDO.
+ */
+ data.tbt_cable_vdo = TBT_MODE;
+
+ if (pd_ctrl->control_flags & USB_PD_CTRL_ACTIVE_LINK_UNIDIR)
+ data.tbt_cable_vdo |= TBT_CABLE_LINK_TRAINING;
+
+ data.tbt_cable_vdo |= TBT_SET_CABLE_ROUNDED(pd_ctrl->cable_gen);
port->state.alt = NULL;
port->state.data = &data;
--
2.17.1
Thunderbolt 3 cable discover mode VDO support has been added as part of
Enter_USB message to fill details of active cable plug link training.
Hence, removing unused variable active_link_training from Enter_USB
message data structure.
Signed-off-by: Utkarsh Patel <[email protected]>
---
include/linux/usb/typec.h | 6 ------
1 file changed, 6 deletions(-)
diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h
index d91e09d9d91c..4a9608a15ac1 100644
--- a/include/linux/usb/typec.h
+++ b/include/linux/usb/typec.h
@@ -76,16 +76,10 @@ enum typec_orientation {
* struct enter_usb_data - Enter_USB Message details
* @eudo: Enter_USB Data Object
* @tbt_cable_vdo: TBT3 Cable Discover Mode Response
- * @active_link_training: Active Cable Plug Link Training
- *
- * @active_link_training is a flag that should be set with uni-directional SBRX
- * communication, and left 0 with passive cables and with bi-directional SBRX
- * communication.
*/
struct enter_usb_data {
u32 eudo;
u32 tbt_cable_vdo;
- unsigned char active_link_training:1;
};
/*
--
2.17.1
On Mon, Nov 09, 2020 at 04:37:09PM -0800, Utkarsh Patel wrote:
> Rounded and non-rounded Thunderbolt cables are represented by two bits as
> per USB Type-C Connector specification v2.0 section F.2.6.
> Corrected that in the Thunderbolt 3 cable discover mode VDO.
>
> Fixes: ca469c292edc ("usb: typec: Add definitions for Thunderbolt 3 Alternate Mode")
Hold on... Why is this tagged as a fix? What is it fixing?
Why do we even need this change? The field may have two bits, but
only one is used: "10b...11b = Reserved".
> Signed-off-by: Utkarsh Patel <[email protected]>
> ---
> include/linux/usb/typec_tbt.h | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/include/linux/usb/typec_tbt.h b/include/linux/usb/typec_tbt.h
> index 47c2d501ddce..aad648d14bb3 100644
> --- a/include/linux/usb/typec_tbt.h
> +++ b/include/linux/usb/typec_tbt.h
> @@ -40,11 +40,16 @@ struct typec_thunderbolt_data {
> #define TBT_CABLE_USB3_PASSIVE 2
> #define TBT_CABLE_10_AND_20GBPS 3
> #define TBT_CABLE_ROUNDED BIT(19)
> +#define TBT_CABLE_ROUNDED_SUPPORT(_vdo_) \
> + (((_vdo_) & GENMASK(20, 19)) >> 19)
> +#define TBT_GEN3_NON_ROUNDED 0
> +#define TBT_GEN3_GEN4_ROUNDED_NON_ROUNDED 1
> #define TBT_CABLE_OPTICAL BIT(21)
> #define TBT_CABLE_RETIMER BIT(22)
> #define TBT_CABLE_LINK_TRAINING BIT(23)
>
> #define TBT_SET_CABLE_SPEED(_s_) (((_s_) & GENMASK(2, 0)) << 16)
> +#define TBT_SET_CABLE_ROUNDED(_g_) (((_g_) & GENMASK(1, 0)) << 19)
>
> /* TBT3 Device Enter Mode VDO bits */
> #define TBT_ENTER_MODE_CABLE_SPEED(s) TBT_SET_CABLE_SPEED(s)
thanks,
--
heikki
On Mon, Nov 09, 2020 at 04:37:10PM -0800, Utkarsh Patel wrote:
> Thunderbolt rounded/non-rounded cable support is two bits value. Correcting
> it as per the Thunderbolt 3 cable discover mode VDO changes done in the
> Thunderbolt 3 alternate mode header.
>
> Fixes: 5b30bd35aab4 ("platform/chrome: cros_ec_typec: Add TBT compat support")
Again the fix tag?
> Signed-off-by: Utkarsh Patel <[email protected]>
> ---
> drivers/platform/chrome/cros_ec_typec.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/drivers/platform/chrome/cros_ec_typec.c b/drivers/platform/chrome/cros_ec_typec.c
> index 31be31161350..8111ed1fc574 100644
> --- a/drivers/platform/chrome/cros_ec_typec.c
> +++ b/drivers/platform/chrome/cros_ec_typec.c
> @@ -438,8 +438,7 @@ static int cros_typec_enable_tbt(struct cros_typec_data *typec,
> if (pd_ctrl->control_flags & USB_PD_CTRL_ACTIVE_LINK_UNIDIR)
> data.cable_mode |= TBT_CABLE_LINK_TRAINING;
>
> - if (pd_ctrl->cable_gen)
> - data.cable_mode |= TBT_CABLE_ROUNDED;
> + data.cable_mode |= TBT_SET_CABLE_ROUNDED(pd_ctrl->cable_gen);
>
> /* Enter Mode VDO */
> data.enter_vdo = TBT_SET_CABLE_SPEED(pd_ctrl->cable_speed);
> --
> 2.17.1
thanks,
--
heikki
On Mon, Nov 09, 2020 at 04:37:12PM -0800, Utkarsh Patel wrote:
> Two bits support for the Thunderbolt rounded/non-rounded cable has been
> added to the header file.
> Hence, removing unused TBT_CABLE_ROUNDED definition from the header file.
>
> Fixes: ca469c292edc ("usb: typec: Add definitions for Thunderbolt 3 Alternate Mode")
And again?
> Signed-off-by: Utkarsh Patel <[email protected]>
> ---
> include/linux/usb/typec_tbt.h | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/include/linux/usb/typec_tbt.h b/include/linux/usb/typec_tbt.h
> index aad648d14bb3..63dd44b72e0c 100644
> --- a/include/linux/usb/typec_tbt.h
> +++ b/include/linux/usb/typec_tbt.h
> @@ -39,7 +39,6 @@ struct typec_thunderbolt_data {
> #define TBT_CABLE_USB3_GEN1 1
> #define TBT_CABLE_USB3_PASSIVE 2
> #define TBT_CABLE_10_AND_20GBPS 3
> -#define TBT_CABLE_ROUNDED BIT(19)
> #define TBT_CABLE_ROUNDED_SUPPORT(_vdo_) \
> (((_vdo_) & GENMASK(20, 19)) >> 19)
> #define TBT_GEN3_NON_ROUNDED 0
thanks,
--
heikki
Hi Heikki,
> -----Original Message-----
> From: Heikki Krogerus <[email protected]>
> Sent: Tuesday, November 10, 2020 4:19 AM
> To: Patel, Utkarsh H <[email protected]>
> Cc: [email protected]; [email protected];
> [email protected]; [email protected]; Mani, Rajmohan
> <[email protected]>; Shaikh, Azhar <[email protected]>
> Subject: Re: [PATCH 2/8] platform/chrome: cros_ec_typec: Correct the
> Thunderbolt rounded/non-rounded cable support
>
> On Mon, Nov 09, 2020 at 04:37:10PM -0800, Utkarsh Patel wrote:
> > Thunderbolt rounded/non-rounded cable support is two bits value.
> > Correcting it as per the Thunderbolt 3 cable discover mode VDO changes
> > done in the Thunderbolt 3 alternate mode header.
> >
> > Fixes: 5b30bd35aab4 ("platform/chrome: cros_ec_typec: Add TBT compat
> > support")
>
> Again the fix tag?
Ack. I will remove the fix tag in v2.
>
> > Signed-off-by: Utkarsh Patel <[email protected]>
> > ---
> > drivers/platform/chrome/cros_ec_typec.c | 3 +--
> > 1 file changed, 1 insertion(+), 2 deletions(-)
> >
> > diff --git a/drivers/platform/chrome/cros_ec_typec.c
> > b/drivers/platform/chrome/cros_ec_typec.c
> > index 31be31161350..8111ed1fc574 100644
> > --- a/drivers/platform/chrome/cros_ec_typec.c
> > +++ b/drivers/platform/chrome/cros_ec_typec.c
> > @@ -438,8 +438,7 @@ static int cros_typec_enable_tbt(struct
> cros_typec_data *typec,
> > if (pd_ctrl->control_flags & USB_PD_CTRL_ACTIVE_LINK_UNIDIR)
> > data.cable_mode |= TBT_CABLE_LINK_TRAINING;
> >
> > - if (pd_ctrl->cable_gen)
> > - data.cable_mode |= TBT_CABLE_ROUNDED;
> > + data.cable_mode |= TBT_SET_CABLE_ROUNDED(pd_ctrl->cable_gen);
> >
> > /* Enter Mode VDO */
> > data.enter_vdo = TBT_SET_CABLE_SPEED(pd_ctrl->cable_speed);
> > --
> > 2.17.1
>
> thanks,
>
> --
> Heikki
Sincerely,
Utkarsh Patel.
Hi Heikki,
> -----Original Message-----
> From: Heikki Krogerus <[email protected]>
> Sent: Tuesday, November 10, 2020 4:20 AM
> To: Patel, Utkarsh H <[email protected]>
> Cc: [email protected]; [email protected];
> [email protected]; [email protected]; Mani, Rajmohan
> <[email protected]>; Shaikh, Azhar <[email protected]>
> Subject: Re: [PATCH 4/8] usb: typec: Remove one bit support for the
> Thunderbolt rounded/non-rounded cable
>
> On Mon, Nov 09, 2020 at 04:37:12PM -0800, Utkarsh Patel wrote:
> > Two bits support for the Thunderbolt rounded/non-rounded cable has
> > been added to the header file.
> > Hence, removing unused TBT_CABLE_ROUNDED definition from the header
> file.
> >
> > Fixes: ca469c292edc ("usb: typec: Add definitions for Thunderbolt 3
> > Alternate Mode")
>
> And again?
Ack. I will remove the fix tag in v2.
>
> > Signed-off-by: Utkarsh Patel <[email protected]>
> > ---
> > include/linux/usb/typec_tbt.h | 1 -
> > 1 file changed, 1 deletion(-)
> >
> > diff --git a/include/linux/usb/typec_tbt.h
> > b/include/linux/usb/typec_tbt.h index aad648d14bb3..63dd44b72e0c
> > 100644
> > --- a/include/linux/usb/typec_tbt.h
> > +++ b/include/linux/usb/typec_tbt.h
> > @@ -39,7 +39,6 @@ struct typec_thunderbolt_data {
> > #define TBT_CABLE_USB3_GEN1 1
> > #define TBT_CABLE_USB3_PASSIVE 2
> > #define TBT_CABLE_10_AND_20GBPS 3
> > -#define TBT_CABLE_ROUNDED BIT(19)
> > #define TBT_CABLE_ROUNDED_SUPPORT(_vdo_) \
> > (((_vdo_) & GENMASK(20, 19)) >> 19)
> > #define TBT_GEN3_NON_ROUNDED 0
>
> thanks,
>
> --
> Heikki
Sincerely,
Utkarsh Patel.
Hi Heikki,
Thank you for the review.
> -----Original Message-----
> From: Heikki Krogerus <[email protected]>
> Sent: Tuesday, November 10, 2020 4:18 AM
> To: Patel, Utkarsh H <[email protected]>
> Cc: [email protected]; [email protected];
> [email protected]; [email protected]; Mani, Rajmohan
> <[email protected]>; Shaikh, Azhar <[email protected]>
> Subject: Re: [PATCH 1/8] usb: typec: Correct the bit values for the Thunderbolt
> rounded/non-rounded cable support
>
> On Mon, Nov 09, 2020 at 04:37:09PM -0800, Utkarsh Patel wrote:
> > Rounded and non-rounded Thunderbolt cables are represented by two bits
> > as per USB Type-C Connector specification v2.0 section F.2.6.
> > Corrected that in the Thunderbolt 3 cable discover mode VDO.
> >
> > Fixes: ca469c292edc ("usb: typec: Add definitions for Thunderbolt 3
> > Alternate Mode")
>
> Hold on... Why is this tagged as a fix? What is it fixing?
Ack. I will remove the fix tag in v2.
>
> Why do we even need this change? The field may have two bits, but only one
> is used: "10b...11b = Reserved".
Today, only one bit is being used but as per the spec cable rounded support needs to be two bits field.
There is no functional implication but since I am adding changes for rounded cable support hence trying to follow the spec.
>
> > Signed-off-by: Utkarsh Patel <[email protected]>
> > ---
> > include/linux/usb/typec_tbt.h | 5 +++++
> > 1 file changed, 5 insertions(+)
> >
> > diff --git a/include/linux/usb/typec_tbt.h
> > b/include/linux/usb/typec_tbt.h index 47c2d501ddce..aad648d14bb3
> > 100644
> > --- a/include/linux/usb/typec_tbt.h
> > +++ b/include/linux/usb/typec_tbt.h
> > @@ -40,11 +40,16 @@ struct typec_thunderbolt_data {
> > #define TBT_CABLE_USB3_PASSIVE 2
> > #define TBT_CABLE_10_AND_20GBPS 3
> > #define TBT_CABLE_ROUNDED BIT(19)
> > +#define TBT_CABLE_ROUNDED_SUPPORT(_vdo_) \
> > + (((_vdo_) & GENMASK(20, 19)) >> 19)
> > +#define TBT_GEN3_NON_ROUNDED 0
> > +#define TBT_GEN3_GEN4_ROUNDED_NON_ROUNDED 1
> > #define TBT_CABLE_OPTICAL BIT(21)
> > #define TBT_CABLE_RETIMER BIT(22)
> > #define TBT_CABLE_LINK_TRAINING BIT(23)
> >
> > #define TBT_SET_CABLE_SPEED(_s_) (((_s_) & GENMASK(2, 0)) << 16)
> > +#define TBT_SET_CABLE_ROUNDED(_g_) (((_g_) & GENMASK(1, 0)) <<
> 19)
> >
> > /* TBT3 Device Enter Mode VDO bits */
> > #define TBT_ENTER_MODE_CABLE_SPEED(s) TBT_SET_CABLE_SPEED(s)
>
> thanks,
>
> --
> Heikki
Sincerely,
Utkarsh Patel.