Patch "usb: typec: tcpm: During PR_SWAP, source caps should be sent only after tSwapSourceStart" has been added to the 5.9-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    usb: typec: tcpm: During PR_SWAP, source caps should be sent only after tSwapSourceStart

to the 5.9-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     usb-typec-tcpm-during-pr_swap-source-caps-should-be-.patch
and it can be found in the queue-5.9 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 5fa8a5c48a28ce39d7b4fc635aece49616444e12
Author: Badhri Jagan Sridharan <badhri@xxxxxxxxxx>
Date:   Mon Aug 17 11:38:27 2020 -0700

    usb: typec: tcpm: During PR_SWAP, source caps should be sent only after tSwapSourceStart
    
    [ Upstream commit 6bbe2a90a0bb4af8dd99c3565e907fe9b5e7fd88 ]
    
    The patch addresses the compliance test failures while running
    TD.PD.CP.E3, TD.PD.CP.E4, TD.PD.CP.E5 of the "Deterministic PD
    Compliance MOI" test plan published in https://www.usb.org/usbc.
    For a product to be Type-C compliant, it's expected that these tests
    are run on usb.org certified Type-C compliance tester as mentioned in
    https://www.usb.org/usbc.
    
    The purpose of the tests TD.PD.CP.E3, TD.PD.CP.E4, TD.PD.CP.E5 is to
    verify the PR_SWAP response of the device. While doing so, the test
    asserts that Source Capabilities message is NOT received from the test
    device within tSwapSourceStart min (20 ms) from the time the last bit
    of GoodCRC corresponding to the RS_RDY message sent by the UUT was
    sent. If it does then the test fails.
    
    This is in line with the requirements from the USB Power Delivery
    Specification Revision 3.0, Version 1.2:
    "6.6.8.1 SwapSourceStartTimer
    The SwapSourceStartTimer Shall be used by the new Source, after a
    Power Role Swap or Fast Role Swap, to ensure that it does not send
    Source_Capabilities Message before the new Sink is ready to receive
    the
    Source_Capabilities Message. The new Source Shall Not send the
    Source_Capabilities Message earlier than tSwapSourceStart after the
    last bit of the EOP of GoodCRC Message sent in response to the PS_RDY
    Message sent by the new Source indicating that its power supply is
    ready."
    
    The patch makes sure that TCPM does not send the Source_Capabilities
    Message within tSwapSourceStart(20ms) by transitioning into
    SRC_STARTUP only after  tSwapSourceStart(20ms).
    
    Signed-off-by: Badhri Jagan Sridharan <badhri@xxxxxxxxxx>
    Reviewed-by: Guenter Roeck <linux@xxxxxxxxxxxx>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20200817183828.1895015-1-badhri@xxxxxxxxxx
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
index a48e3f90d1961..1e676ee44c937 100644
--- a/drivers/usb/typec/tcpm/tcpm.c
+++ b/drivers/usb/typec/tcpm/tcpm.c
@@ -3573,7 +3573,7 @@ static void run_state_machine(struct tcpm_port *port)
 		 */
 		tcpm_set_pwr_role(port, TYPEC_SOURCE);
 		tcpm_pd_send_control(port, PD_CTRL_PS_RDY);
-		tcpm_set_state(port, SRC_STARTUP, 0);
+		tcpm_set_state(port, SRC_STARTUP, PD_T_SWAP_SRC_START);
 		break;
 
 	case VCONN_SWAP_ACCEPT:
diff --git a/include/linux/usb/pd.h b/include/linux/usb/pd.h
index b6c233e79bd45..1df895e4680b2 100644
--- a/include/linux/usb/pd.h
+++ b/include/linux/usb/pd.h
@@ -473,6 +473,7 @@ static inline unsigned int rdo_max_power(u32 rdo)
 #define PD_T_ERROR_RECOVERY	100	/* minimum 25 is insufficient */
 #define PD_T_SRCSWAPSTDBY      625     /* Maximum of 650ms */
 #define PD_T_NEWSRC            250     /* Maximum of 275ms */
+#define PD_T_SWAP_SRC_START	20	/* Minimum of 20ms */
 
 #define PD_T_DRP_TRY		100	/* 75 - 150 ms */
 #define PD_T_DRP_TRYWAIT	600	/* 400 - 800 ms */



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux