* [PATCH v2] usb: typec: tcpm: fix multiple times discover svids error
@ 2023-03-16 8:11 Frank Wang
2023-03-17 11:27 ` Heikki Krogerus
0 siblings, 1 reply; 5+ messages in thread
From: Frank Wang @ 2023-03-16 8:11 UTC (permalink / raw)
To: linux, heikki.krogerus, gregkh, heiko
Cc: linux-usb, linux-kernel, linux-rockchip, huangtao, william.wu,
jianwei.zheng, yubing.zhang, wmc, Frank Wang
PD3.0 Spec 6.4.4.3.2 say that only Responder supports 12 or more SVIDs,
the Discover SVIDs Command Shall be executed multiple times until a
Discover SVIDs VDO is returned ending either with a SVID value of
0x0000 in the last part of the last VDO or with a VDO containing two
SVIDs with values of 0x0000.
In the current implementation, if the last VDO does not find that the
Discover SVIDs Command would be executed multiple times even if the
Responder SVIDs are less than 12, and we found some odd dockers just
meet this case. So fix it.
Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
---
drivers/usb/typec/tcpm/tcpm.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
index 66de02a56f512..a3ae2c79f3540 100644
--- a/drivers/usb/typec/tcpm/tcpm.c
+++ b/drivers/usb/typec/tcpm/tcpm.c
@@ -1515,7 +1515,21 @@ static bool svdm_consume_svids(struct tcpm_port *port, const u32 *p, int cnt)
pmdata->svids[pmdata->nsvids++] = svid;
tcpm_log(port, "SVID %d: 0x%x", pmdata->nsvids, svid);
}
- return true;
+
+ /*
+ * PD3.0 Spec 6.4.4.3.2: The SVIDs are returned 2 per VDO (see Table
+ * 6-43), and can be returned maximum 6 VDOs per response (see Figure
+ * 6-19). If the Respondersupports 12 or more SVID then the Discover
+ * SVIDs Command Shall be executed multiple times until a Discover
+ * SVIDs VDO is returned ending either with a SVID value of 0x0000 in
+ * the last part of the last VDO or with a VDO containing two SVIDs
+ * with values of 0x0000.
+ *
+ * However, some odd dockers support SVIDs less than 12 but without
+ * 0x0000 in the last VDO, so we need to break the Discover SVIDs
+ * request and return false here.
+ */
+ return cnt == 7;
abort:
tcpm_log(port, "SVID_DISCOVERY_MAX(%d) too low!", SVID_DISCOVERY_MAX);
return false;
--
2.17.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2] usb: typec: tcpm: fix multiple times discover svids error
2023-03-16 8:11 [PATCH v2] usb: typec: tcpm: fix multiple times discover svids error Frank Wang
@ 2023-03-17 11:27 ` Heikki Krogerus
2023-04-20 8:08 ` Greg KH
0 siblings, 1 reply; 5+ messages in thread
From: Heikki Krogerus @ 2023-03-17 11:27 UTC (permalink / raw)
To: Frank Wang
Cc: linux, gregkh, heiko, linux-usb, linux-kernel, linux-rockchip,
huangtao, william.wu, jianwei.zheng, yubing.zhang, wmc
On Thu, Mar 16, 2023 at 04:11:49PM +0800, Frank Wang wrote:
> PD3.0 Spec 6.4.4.3.2 say that only Responder supports 12 or more SVIDs,
> the Discover SVIDs Command Shall be executed multiple times until a
> Discover SVIDs VDO is returned ending either with a SVID value of
> 0x0000 in the last part of the last VDO or with a VDO containing two
> SVIDs with values of 0x0000.
>
> In the current implementation, if the last VDO does not find that the
> Discover SVIDs Command would be executed multiple times even if the
> Responder SVIDs are less than 12, and we found some odd dockers just
> meet this case. So fix it.
>
> Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
> ---
> drivers/usb/typec/tcpm/tcpm.c | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
> index 66de02a56f512..a3ae2c79f3540 100644
> --- a/drivers/usb/typec/tcpm/tcpm.c
> +++ b/drivers/usb/typec/tcpm/tcpm.c
> @@ -1515,7 +1515,21 @@ static bool svdm_consume_svids(struct tcpm_port *port, const u32 *p, int cnt)
> pmdata->svids[pmdata->nsvids++] = svid;
> tcpm_log(port, "SVID %d: 0x%x", pmdata->nsvids, svid);
> }
> - return true;
> +
> + /*
> + * PD3.0 Spec 6.4.4.3.2: The SVIDs are returned 2 per VDO (see Table
> + * 6-43), and can be returned maximum 6 VDOs per response (see Figure
> + * 6-19). If the Respondersupports 12 or more SVID then the Discover
> + * SVIDs Command Shall be executed multiple times until a Discover
> + * SVIDs VDO is returned ending either with a SVID value of 0x0000 in
> + * the last part of the last VDO or with a VDO containing two SVIDs
> + * with values of 0x0000.
> + *
> + * However, some odd dockers support SVIDs less than 12 but without
> + * 0x0000 in the last VDO, so we need to break the Discover SVIDs
> + * request and return false here.
> + */
> + return cnt == 7;
> abort:
> tcpm_log(port, "SVID_DISCOVERY_MAX(%d) too low!", SVID_DISCOVERY_MAX);
> return false;
This is OK by men, but let's wait for Guenter.
thanks,
--
heikki
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] usb: typec: tcpm: fix multiple times discover svids error
2023-03-17 11:27 ` Heikki Krogerus
@ 2023-04-20 8:08 ` Greg KH
2023-04-20 8:20 ` Heikki Krogerus
2023-04-20 13:49 ` Guenter Roeck
0 siblings, 2 replies; 5+ messages in thread
From: Greg KH @ 2023-04-20 8:08 UTC (permalink / raw)
To: Heikki Krogerus
Cc: Frank Wang, linux, heiko, linux-usb, linux-kernel, linux-rockchip,
huangtao, william.wu, jianwei.zheng, yubing.zhang, wmc
On Fri, Mar 17, 2023 at 01:27:13PM +0200, Heikki Krogerus wrote:
> On Thu, Mar 16, 2023 at 04:11:49PM +0800, Frank Wang wrote:
> > PD3.0 Spec 6.4.4.3.2 say that only Responder supports 12 or more SVIDs,
> > the Discover SVIDs Command Shall be executed multiple times until a
> > Discover SVIDs VDO is returned ending either with a SVID value of
> > 0x0000 in the last part of the last VDO or with a VDO containing two
> > SVIDs with values of 0x0000.
> >
> > In the current implementation, if the last VDO does not find that the
> > Discover SVIDs Command would be executed multiple times even if the
> > Responder SVIDs are less than 12, and we found some odd dockers just
> > meet this case. So fix it.
> >
> > Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
> > ---
> > drivers/usb/typec/tcpm/tcpm.c | 16 +++++++++++++++-
> > 1 file changed, 15 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
> > index 66de02a56f512..a3ae2c79f3540 100644
> > --- a/drivers/usb/typec/tcpm/tcpm.c
> > +++ b/drivers/usb/typec/tcpm/tcpm.c
> > @@ -1515,7 +1515,21 @@ static bool svdm_consume_svids(struct tcpm_port *port, const u32 *p, int cnt)
> > pmdata->svids[pmdata->nsvids++] = svid;
> > tcpm_log(port, "SVID %d: 0x%x", pmdata->nsvids, svid);
> > }
> > - return true;
> > +
> > + /*
> > + * PD3.0 Spec 6.4.4.3.2: The SVIDs are returned 2 per VDO (see Table
> > + * 6-43), and can be returned maximum 6 VDOs per response (see Figure
> > + * 6-19). If the Respondersupports 12 or more SVID then the Discover
> > + * SVIDs Command Shall be executed multiple times until a Discover
> > + * SVIDs VDO is returned ending either with a SVID value of 0x0000 in
> > + * the last part of the last VDO or with a VDO containing two SVIDs
> > + * with values of 0x0000.
> > + *
> > + * However, some odd dockers support SVIDs less than 12 but without
> > + * 0x0000 in the last VDO, so we need to break the Discover SVIDs
> > + * request and return false here.
> > + */
> > + return cnt == 7;
> > abort:
> > tcpm_log(port, "SVID_DISCOVERY_MAX(%d) too low!", SVID_DISCOVERY_MAX);
> > return false;
>
> This is OK by men, but let's wait for Guenter.
What ever happened to this patch?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] usb: typec: tcpm: fix multiple times discover svids error
2023-04-20 8:08 ` Greg KH
@ 2023-04-20 8:20 ` Heikki Krogerus
2023-04-20 13:49 ` Guenter Roeck
1 sibling, 0 replies; 5+ messages in thread
From: Heikki Krogerus @ 2023-04-20 8:20 UTC (permalink / raw)
To: Greg KH
Cc: Frank Wang, linux, heiko, linux-usb, linux-kernel, linux-rockchip,
huangtao, william.wu, jianwei.zheng, yubing.zhang, wmc
On Thu, Apr 20, 2023 at 10:08:59AM +0200, Greg KH wrote:
> On Fri, Mar 17, 2023 at 01:27:13PM +0200, Heikki Krogerus wrote:
> > On Thu, Mar 16, 2023 at 04:11:49PM +0800, Frank Wang wrote:
> > > PD3.0 Spec 6.4.4.3.2 say that only Responder supports 12 or more SVIDs,
> > > the Discover SVIDs Command Shall be executed multiple times until a
> > > Discover SVIDs VDO is returned ending either with a SVID value of
> > > 0x0000 in the last part of the last VDO or with a VDO containing two
> > > SVIDs with values of 0x0000.
> > >
> > > In the current implementation, if the last VDO does not find that the
> > > Discover SVIDs Command would be executed multiple times even if the
> > > Responder SVIDs are less than 12, and we found some odd dockers just
> > > meet this case. So fix it.
> > >
> > > Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
> > > ---
> > > drivers/usb/typec/tcpm/tcpm.c | 16 +++++++++++++++-
> > > 1 file changed, 15 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
> > > index 66de02a56f512..a3ae2c79f3540 100644
> > > --- a/drivers/usb/typec/tcpm/tcpm.c
> > > +++ b/drivers/usb/typec/tcpm/tcpm.c
> > > @@ -1515,7 +1515,21 @@ static bool svdm_consume_svids(struct tcpm_port *port, const u32 *p, int cnt)
> > > pmdata->svids[pmdata->nsvids++] = svid;
> > > tcpm_log(port, "SVID %d: 0x%x", pmdata->nsvids, svid);
> > > }
> > > - return true;
> > > +
> > > + /*
> > > + * PD3.0 Spec 6.4.4.3.2: The SVIDs are returned 2 per VDO (see Table
> > > + * 6-43), and can be returned maximum 6 VDOs per response (see Figure
> > > + * 6-19). If the Respondersupports 12 or more SVID then the Discover
> > > + * SVIDs Command Shall be executed multiple times until a Discover
> > > + * SVIDs VDO is returned ending either with a SVID value of 0x0000 in
> > > + * the last part of the last VDO or with a VDO containing two SVIDs
> > > + * with values of 0x0000.
> > > + *
> > > + * However, some odd dockers support SVIDs less than 12 but without
> > > + * 0x0000 in the last VDO, so we need to break the Discover SVIDs
> > > + * request and return false here.
> > > + */
> > > + return cnt == 7;
> > > abort:
> > > tcpm_log(port, "SVID_DISCOVERY_MAX(%d) too low!", SVID_DISCOVERY_MAX);
> > > return false;
> >
> > This is OK by men, but let's wait for Guenter.
>
> What ever happened to this patch?
I wanted to wait for Guenter's review, but FWIW:
Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
thanks,
--
heikki
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] usb: typec: tcpm: fix multiple times discover svids error
2023-04-20 8:08 ` Greg KH
2023-04-20 8:20 ` Heikki Krogerus
@ 2023-04-20 13:49 ` Guenter Roeck
1 sibling, 0 replies; 5+ messages in thread
From: Guenter Roeck @ 2023-04-20 13:49 UTC (permalink / raw)
To: Greg KH, Heikki Krogerus
Cc: Frank Wang, heiko, linux-usb, linux-kernel, linux-rockchip,
huangtao, william.wu, jianwei.zheng, yubing.zhang, wmc
On 4/20/23 01:08, Greg KH wrote:
> On Fri, Mar 17, 2023 at 01:27:13PM +0200, Heikki Krogerus wrote:
>> On Thu, Mar 16, 2023 at 04:11:49PM +0800, Frank Wang wrote:
>>> PD3.0 Spec 6.4.4.3.2 say that only Responder supports 12 or more SVIDs,
>>> the Discover SVIDs Command Shall be executed multiple times until a
>>> Discover SVIDs VDO is returned ending either with a SVID value of
>>> 0x0000 in the last part of the last VDO or with a VDO containing two
>>> SVIDs with values of 0x0000.
>>>
>>> In the current implementation, if the last VDO does not find that the
>>> Discover SVIDs Command would be executed multiple times even if the
>>> Responder SVIDs are less than 12, and we found some odd dockers just
>>> meet this case. So fix it.
>>>
>>> Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
>>> ---
>>> drivers/usb/typec/tcpm/tcpm.c | 16 +++++++++++++++-
>>> 1 file changed, 15 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
>>> index 66de02a56f512..a3ae2c79f3540 100644
>>> --- a/drivers/usb/typec/tcpm/tcpm.c
>>> +++ b/drivers/usb/typec/tcpm/tcpm.c
>>> @@ -1515,7 +1515,21 @@ static bool svdm_consume_svids(struct tcpm_port *port, const u32 *p, int cnt)
>>> pmdata->svids[pmdata->nsvids++] = svid;
>>> tcpm_log(port, "SVID %d: 0x%x", pmdata->nsvids, svid);
>>> }
>>> - return true;
>>> +
>>> + /*
>>> + * PD3.0 Spec 6.4.4.3.2: The SVIDs are returned 2 per VDO (see Table
>>> + * 6-43), and can be returned maximum 6 VDOs per response (see Figure
>>> + * 6-19). If the Respondersupports 12 or more SVID then the Discover
>>> + * SVIDs Command Shall be executed multiple times until a Discover
>>> + * SVIDs VDO is returned ending either with a SVID value of 0x0000 in
>>> + * the last part of the last VDO or with a VDO containing two SVIDs
>>> + * with values of 0x0000.
>>> + *
>>> + * However, some odd dockers support SVIDs less than 12 but without
>>> + * 0x0000 in the last VDO, so we need to break the Discover SVIDs
>>> + * request and return false here.
>>> + */
>>> + return cnt == 7;
>>> abort:
>>> tcpm_log(port, "SVID_DISCOVERY_MAX(%d) too low!", SVID_DISCOVERY_MAX);
>>> return false;
>>
>> This is OK by men, but let's wait for Guenter.
>
> What ever happened to this patch?
>
It got lost in space.
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Guenter
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-04-20 13:49 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-16 8:11 [PATCH v2] usb: typec: tcpm: fix multiple times discover svids error Frank Wang
2023-03-17 11:27 ` Heikki Krogerus
2023-04-20 8:08 ` Greg KH
2023-04-20 8:20 ` Heikki Krogerus
2023-04-20 13:49 ` Guenter Roeck
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).