Message ID | 20210527084419.4164369-2-kyletso@google.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Add the support of SVDM Version 2.0 VDOs | expand |
On Thu, May 27, 2021 at 04:44:17PM +0800, Kyle Tso wrote: > In USB PD Spec Rev 3.1 Ver 1.0, section "6.12.5 Applicability of > Structured VDM Commands", DFP is allowed and recommended to respond to > Discovery Identity with ACK. And in section "6.4.4.2.5.1 Commands other > than Attention", NAK should be returned only when receiving Messages > with invalid fields, Messages in wrong situation, or unrecognize > Messages. > > Still keep the original design for SVDM Version 1.0 for backward > compatibilities. > > Fixes: 193a68011fdc ("staging: typec: tcpm: Respond to Discover Identity commands") > Signed-off-by: Kyle Tso <kyletso@google.com> Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> > --- > drivers/usb/typec/tcpm/tcpm.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c > index 9ce8c9af4da5..a1bf0dc5babf 100644 > --- a/drivers/usb/typec/tcpm/tcpm.c > +++ b/drivers/usb/typec/tcpm/tcpm.c > @@ -1547,19 +1547,25 @@ static int tcpm_pd_svdm(struct tcpm_port *port, struct typec_altmode *adev, > if (PD_VDO_VID(p[0]) != USB_SID_PD) > break; > > - if (PD_VDO_SVDM_VER(p[0]) < svdm_version) > + if (PD_VDO_SVDM_VER(p[0]) < svdm_version) { > typec_partner_set_svdm_version(port->partner, > PD_VDO_SVDM_VER(p[0])); > + svdm_version = PD_VDO_SVDM_VER(p[0]); > + } > > tcpm_ams_start(port, DISCOVER_IDENTITY); > - /* 6.4.4.3.1: Only respond as UFP (device) */ > - if (port->data_role == TYPEC_DEVICE && > + /* > + * PD2.0 Spec 6.10.3: respond with NAK as DFP (data host) > + * PD3.1 Spec 6.4.4.2.5.1: respond with NAK if "invalid field" or > + * "wrong configuation" or "Unrecognized" > + */ > + if ((port->data_role == TYPEC_DEVICE || svdm_version >= SVDM_VER_2_0) && > port->nr_snk_vdo) { > /* > * Product Type DFP and Connector Type are not defined in SVDM > * version 1.0 and shall be set to zero. > */ > - if (typec_get_negotiated_svdm_version(typec) < SVDM_VER_2_0) > + if (svdm_version < SVDM_VER_2_0) > response[1] = port->snk_vdo[0] & ~IDH_DFP_MASK > & ~IDH_CONN_MASK; > else > -- > 2.31.1.818.g46aad6cb9e-goog
diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index 9ce8c9af4da5..a1bf0dc5babf 100644 --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -1547,19 +1547,25 @@ static int tcpm_pd_svdm(struct tcpm_port *port, struct typec_altmode *adev, if (PD_VDO_VID(p[0]) != USB_SID_PD) break; - if (PD_VDO_SVDM_VER(p[0]) < svdm_version) + if (PD_VDO_SVDM_VER(p[0]) < svdm_version) { typec_partner_set_svdm_version(port->partner, PD_VDO_SVDM_VER(p[0])); + svdm_version = PD_VDO_SVDM_VER(p[0]); + } tcpm_ams_start(port, DISCOVER_IDENTITY); - /* 6.4.4.3.1: Only respond as UFP (device) */ - if (port->data_role == TYPEC_DEVICE && + /* + * PD2.0 Spec 6.10.3: respond with NAK as DFP (data host) + * PD3.1 Spec 6.4.4.2.5.1: respond with NAK if "invalid field" or + * "wrong configuation" or "Unrecognized" + */ + if ((port->data_role == TYPEC_DEVICE || svdm_version >= SVDM_VER_2_0) && port->nr_snk_vdo) { /* * Product Type DFP and Connector Type are not defined in SVDM * version 1.0 and shall be set to zero. */ - if (typec_get_negotiated_svdm_version(typec) < SVDM_VER_2_0) + if (svdm_version < SVDM_VER_2_0) response[1] = port->snk_vdo[0] & ~IDH_DFP_MASK & ~IDH_CONN_MASK; else
In USB PD Spec Rev 3.1 Ver 1.0, section "6.12.5 Applicability of Structured VDM Commands", DFP is allowed and recommended to respond to Discovery Identity with ACK. And in section "6.4.4.2.5.1 Commands other than Attention", NAK should be returned only when receiving Messages with invalid fields, Messages in wrong situation, or unrecognize Messages. Still keep the original design for SVDM Version 1.0 for backward compatibilities. Fixes: 193a68011fdc ("staging: typec: tcpm: Respond to Discover Identity commands") Signed-off-by: Kyle Tso <kyletso@google.com> --- drivers/usb/typec/tcpm/tcpm.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)