diff mbox

usb: typec: tcpm: Fix sink PDO starting index for PPS APDO selection

Message ID 20180717143619.80EEB3FBB7@swsrvapps-01.diasemi.com (mailing list archive)
State New, archived
Headers show

Commit Message

Adam Thomson July 17, 2018, 2:36 p.m. UTC
There is a bug in the sink PDO search code when trying to select
a PPS APDO. The current code actually sets the starting index for
searching to whatever value 'i' is, rather than choosing index 1
to avoid the first PDO (always 5V fixed). As a result, for sources
which support PPS but whose PPS APDO index does not match with the
supporting sink PPS APDO index for the platform, no valid PPS APDO
will be found so this feature will not be permitted.

Sadly in testing, both Source and Sink capabilities matched up and
this was missed. Code is now updated to correctly set the start
index to 1, and testing with additional PPS capable sources show
this to work as expected.

Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
---
 drivers/usb/typec/tcpm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Guenter Roeck July 17, 2018, 3:51 p.m. UTC | #1
On Tue, Jul 17, 2018 at 03:36:19PM +0100, Adam Thomson wrote:
> There is a bug in the sink PDO search code when trying to select
> a PPS APDO. The current code actually sets the starting index for
> searching to whatever value 'i' is, rather than choosing index 1
> to avoid the first PDO (always 5V fixed). As a result, for sources
> which support PPS but whose PPS APDO index does not match with the
> supporting sink PPS APDO index for the platform, no valid PPS APDO
> will be found so this feature will not be permitted.
> 
> Sadly in testing, both Source and Sink capabilities matched up and
> this was missed. Code is now updated to correctly set the start
> index to 1, and testing with additional PPS capable sources show
> this to work as expected.
> 
> Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>

Reviewed-by: Guenter Roeck <linux@roeck-us.net>

> ---
>  drivers/usb/typec/tcpm.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
> index 74e0cda..4f1f421 100644
> --- a/drivers/usb/typec/tcpm.c
> +++ b/drivers/usb/typec/tcpm.c
> @@ -2238,7 +2238,7 @@ static unsigned int tcpm_pd_select_pps_apdo(struct tcpm_port *port)
>  			 * PPS APDO. Again skip the first sink PDO as this will
>  			 * always be 5V 3A.
>  			 */
> -			for (j = i; j < port->nr_snk_pdo; j++) {
> +			for (j = 1; j < port->nr_snk_pdo; j++) {
>  				pdo = port->snk_pdo[j];
>  
>  				switch (pdo_type(pdo)) {
> -- 
> 1.9.1
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Heikki Krogerus July 20, 2018, 10:42 a.m. UTC | #2
On Tue, Jul 17, 2018 at 03:36:19PM +0100, Adam Thomson wrote:
> There is a bug in the sink PDO search code when trying to select
> a PPS APDO. The current code actually sets the starting index for
> searching to whatever value 'i' is, rather than choosing index 1
> to avoid the first PDO (always 5V fixed). As a result, for sources
> which support PPS but whose PPS APDO index does not match with the
> supporting sink PPS APDO index for the platform, no valid PPS APDO
> will be found so this feature will not be permitted.
> 
> Sadly in testing, both Source and Sink capabilities matched up and
> this was missed. Code is now updated to correctly set the start
> index to 1, and testing with additional PPS capable sources show
> this to work as expected.
> 
> Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
>  drivers/usb/typec/tcpm.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
> index 74e0cda..4f1f421 100644
> --- a/drivers/usb/typec/tcpm.c
> +++ b/drivers/usb/typec/tcpm.c
> @@ -2238,7 +2238,7 @@ static unsigned int tcpm_pd_select_pps_apdo(struct tcpm_port *port)
>  			 * PPS APDO. Again skip the first sink PDO as this will
>  			 * always be 5V 3A.
>  			 */
> -			for (j = i; j < port->nr_snk_pdo; j++) {
> +			for (j = 1; j < port->nr_snk_pdo; j++) {
>  				pdo = port->snk_pdo[j];
>  
>  				switch (pdo_type(pdo)) {

Thanks,
Greg KH July 20, 2018, 1:59 p.m. UTC | #3
On Tue, Jul 17, 2018 at 03:36:19PM +0100, Adam Thomson wrote:
> There is a bug in the sink PDO search code when trying to select
> a PPS APDO. The current code actually sets the starting index for
> searching to whatever value 'i' is, rather than choosing index 1
> to avoid the first PDO (always 5V fixed). As a result, for sources
> which support PPS but whose PPS APDO index does not match with the
> supporting sink PPS APDO index for the platform, no valid PPS APDO
> will be found so this feature will not be permitted.
> 
> Sadly in testing, both Source and Sink capabilities matched up and
> this was missed. Code is now updated to correctly set the start
> index to 1, and testing with additional PPS capable sources show
> this to work as expected.
> 
> Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
> ---
>  drivers/usb/typec/tcpm.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
> index 74e0cda..4f1f421 100644
> --- a/drivers/usb/typec/tcpm.c
> +++ b/drivers/usb/typec/tcpm.c
> @@ -2238,7 +2238,7 @@ static unsigned int tcpm_pd_select_pps_apdo(struct tcpm_port *port)
>  			 * PPS APDO. Again skip the first sink PDO as this will
>  			 * always be 5V 3A.
>  			 */
> -			for (j = i; j < port->nr_snk_pdo; j++) {
> +			for (j = 1; j < port->nr_snk_pdo; j++) {
>  				pdo = port->snk_pdo[j];
>  
>  				switch (pdo_type(pdo)) {

What commit id does this "fix"?

Does it need to go into 4.18-final?  To the stable kernels?

thanks,

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Adam Thomson July 20, 2018, 2:16 p.m. UTC | #4
On 20 July 2018 14:59, Greg Kroah-Hartman wrote:

> On Tue, Jul 17, 2018 at 03:36:19PM +0100, Adam Thomson wrote:
> > There is a bug in the sink PDO search code when trying to select
> > a PPS APDO. The current code actually sets the starting index for
> > searching to whatever value 'i' is, rather than choosing index 1
> > to avoid the first PDO (always 5V fixed). As a result, for sources
> > which support PPS but whose PPS APDO index does not match with the
> > supporting sink PPS APDO index for the platform, no valid PPS APDO
> > will be found so this feature will not be permitted.
> >
> > Sadly in testing, both Source and Sink capabilities matched up and
> > this was missed. Code is now updated to correctly set the start
> > index to 1, and testing with additional PPS capable sources show
> > this to work as expected.
> >
> > Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
> > ---
> >  drivers/usb/typec/tcpm.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
> > index 74e0cda..4f1f421 100644
> > --- a/drivers/usb/typec/tcpm.c
> > +++ b/drivers/usb/typec/tcpm.c
> > @@ -2238,7 +2238,7 @@ static unsigned int tcpm_pd_select_pps_apdo(struct
> tcpm_port *port)
> >  			 * PPS APDO. Again skip the first sink PDO as this will
> >  			 * always be 5V 3A.
> >  			 */
> > -			for (j = i; j < port->nr_snk_pdo; j++) {
> > +			for (j = 1; j < port->nr_snk_pdo; j++) {
> >  				pdo = port->snk_pdo[j];
> >
> >  				switch (pdo_type(pdo)) {
> 
> What commit id does this "fix"?
> 
> Does it need to go into 4.18-final?  To the stable kernels?

Sorry, missed that info. This fixes commit:

2eadc33f40d4c59dd0649f8b6958872d85ad05d7
'typec: tcpm: Add core support for sink side PPS'

This patch only went into v4.18-rc1 so should only be targeted for v4.18-final.

Do you want me to resend with this information added?
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Greg KH July 20, 2018, 2:39 p.m. UTC | #5
On Fri, Jul 20, 2018 at 02:16:33PM +0000, Adam Thomson wrote:
> On 20 July 2018 14:59, Greg Kroah-Hartman wrote:
> 
> > On Tue, Jul 17, 2018 at 03:36:19PM +0100, Adam Thomson wrote:
> > > There is a bug in the sink PDO search code when trying to select
> > > a PPS APDO. The current code actually sets the starting index for
> > > searching to whatever value 'i' is, rather than choosing index 1
> > > to avoid the first PDO (always 5V fixed). As a result, for sources
> > > which support PPS but whose PPS APDO index does not match with the
> > > supporting sink PPS APDO index for the platform, no valid PPS APDO
> > > will be found so this feature will not be permitted.
> > >
> > > Sadly in testing, both Source and Sink capabilities matched up and
> > > this was missed. Code is now updated to correctly set the start
> > > index to 1, and testing with additional PPS capable sources show
> > > this to work as expected.
> > >
> > > Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
> > > ---
> > >  drivers/usb/typec/tcpm.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
> > > index 74e0cda..4f1f421 100644
> > > --- a/drivers/usb/typec/tcpm.c
> > > +++ b/drivers/usb/typec/tcpm.c
> > > @@ -2238,7 +2238,7 @@ static unsigned int tcpm_pd_select_pps_apdo(struct
> > tcpm_port *port)
> > >  			 * PPS APDO. Again skip the first sink PDO as this will
> > >  			 * always be 5V 3A.
> > >  			 */
> > > -			for (j = i; j < port->nr_snk_pdo; j++) {
> > > +			for (j = 1; j < port->nr_snk_pdo; j++) {
> > >  				pdo = port->snk_pdo[j];
> > >
> > >  				switch (pdo_type(pdo)) {
> > 
> > What commit id does this "fix"?
> > 
> > Does it need to go into 4.18-final?  To the stable kernels?
> 
> Sorry, missed that info. This fixes commit:
> 
> 2eadc33f40d4c59dd0649f8b6958872d85ad05d7
> 'typec: tcpm: Add core support for sink side PPS'
> 
> This patch only went into v4.18-rc1 so should only be targeted for v4.18-final.
> 
> Do you want me to resend with this information added?

It's ok, this time, I'll go hand-edit it...

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Adam Thomson July 20, 2018, 2:44 p.m. UTC | #6
On 20 July 2018 15:40, Greg Kroah-Hartman wrote:

> On Fri, Jul 20, 2018 at 02:16:33PM +0000, Adam Thomson wrote:
> > On 20 July 2018 14:59, Greg Kroah-Hartman wrote:
> >
> > > On Tue, Jul 17, 2018 at 03:36:19PM +0100, Adam Thomson wrote:
> > > > There is a bug in the sink PDO search code when trying to select
> > > > a PPS APDO. The current code actually sets the starting index for
> > > > searching to whatever value 'i' is, rather than choosing index 1
> > > > to avoid the first PDO (always 5V fixed). As a result, for sources
> > > > which support PPS but whose PPS APDO index does not match with the
> > > > supporting sink PPS APDO index for the platform, no valid PPS APDO
> > > > will be found so this feature will not be permitted.
> > > >
> > > > Sadly in testing, both Source and Sink capabilities matched up and
> > > > this was missed. Code is now updated to correctly set the start
> > > > index to 1, and testing with additional PPS capable sources show
> > > > this to work as expected.
> > > >
> > > > Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
> > > > ---
> > > >  drivers/usb/typec/tcpm.c | 2 +-
> > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > >
> > > > diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
> > > > index 74e0cda..4f1f421 100644
> > > > --- a/drivers/usb/typec/tcpm.c
> > > > +++ b/drivers/usb/typec/tcpm.c
> > > > @@ -2238,7 +2238,7 @@ static unsigned int tcpm_pd_select_pps_apdo(struct
> > > tcpm_port *port)
> > > >  			 * PPS APDO. Again skip the first sink PDO as this will
> > > >  			 * always be 5V 3A.
> > > >  			 */
> > > > -			for (j = i; j < port->nr_snk_pdo; j++) {
> > > > +			for (j = 1; j < port->nr_snk_pdo; j++) {
> > > >  				pdo = port->snk_pdo[j];
> > > >
> > > >  				switch (pdo_type(pdo)) {
> > >
> > > What commit id does this "fix"?
> > >
> > > Does it need to go into 4.18-final?  To the stable kernels?
> >
> > Sorry, missed that info. This fixes commit:
> >
> > 2eadc33f40d4c59dd0649f8b6958872d85ad05d7
> > 'typec: tcpm: Add core support for sink side PPS'
> >
> > This patch only went into v4.18-rc1 so should only be targeted for v4.18-final.
> >
> > Do you want me to resend with this information added?
> 
> It's ok, this time, I'll go hand-edit it...

Thanks :)
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/usb/typec/tcpm.c b/drivers/usb/typec/tcpm.c
index 74e0cda..4f1f421 100644
--- a/drivers/usb/typec/tcpm.c
+++ b/drivers/usb/typec/tcpm.c
@@ -2238,7 +2238,7 @@  static unsigned int tcpm_pd_select_pps_apdo(struct tcpm_port *port)
 			 * PPS APDO. Again skip the first sink PDO as this will
 			 * always be 5V 3A.
 			 */
-			for (j = i; j < port->nr_snk_pdo; j++) {
+			for (j = 1; j < port->nr_snk_pdo; j++) {
 				pdo = port->snk_pdo[j];
 
 				switch (pdo_type(pdo)) {