diff options
author | Patryk Duda <pdk@semihalf.com> | 2020-11-23 16:30:37 +0100 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-11-23 18:40:49 +0000 |
commit | 264c5edd3df88195cdbe9e1f81aba6f0d36d8cdb (patch) | |
tree | 8aaa2a2ec20552126833a58a2de23c293cf510e5 /baseboard | |
parent | 5421f90715c09ef638ce3d9b0661d51e8108017f (diff) | |
download | chrome-ec-264c5edd3df88195cdbe9e1f81aba6f0d36d8cdb.tar.gz |
PD: Fix passing information about polarity when DTS is connected
Commit 7dec638eb577aaa3a00d0551d73c276b94ebacb2 introduced two polarity
modes POLARITY_CC1_DTS, POLARITY_CC2_DTS in enum tcpc_cc_polarity, but
in many places there was an assumption that value other than 0 means
that cable is inverted, the most notable example is usb_mux_set(). As a
result kernel sometimes was not reporting SuperSpeed depending on if
cable was inverted or not.
This patch adds mapping from polarity with DTS to polarity without DTS
where necessary.
BUG=b:162254118
BRANCH=none
TEST=Connect ServoV4 to eve and run servod. Make sure that USB-C muxer
is connects USB3.0 lines (servod should set it).
Flash EC ToT on eve. Boot ChromeOS and go to Developer Console.
Run 'dmesg -w', check if device (eg. ethernet adapter) is attached as
SuperSpeed device. Unplug cable, invert and plug again. Kernel
should report that device is attached as SuperSpeed.
Signed-off-by: Patryk Duda <pdk@semihalf.com>
Change-Id: I354ef7047240cc8b5db01936b3780fae7387edb5
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2555157
Reviewed-by: Jett Rink <jettrink@chromium.org>
Reviewed-by: Denis Brockus <dbrockus@chromium.org>
Commit-Queue: Jett Rink <jettrink@chromium.org>
Diffstat (limited to 'baseboard')
-rw-r--r-- | baseboard/grunt/usb_pd_policy.c | 4 | ||||
-rw-r--r-- | baseboard/kukui/usb_pd_policy.c | 4 | ||||
-rw-r--r-- | baseboard/trogdor/usb_pd_policy.c | 6 | ||||
-rw-r--r-- | baseboard/zork/usb_pd_policy.c | 6 |
4 files changed, 11 insertions, 9 deletions
diff --git a/baseboard/grunt/usb_pd_policy.c b/baseboard/grunt/usb_pd_policy.c index 4b28081785..f9cfc8c834 100644 --- a/baseboard/grunt/usb_pd_policy.c +++ b/baseboard/grunt/usb_pd_policy.c @@ -116,7 +116,7 @@ __override int svdm_dp_config(int port, uint32_t *payload) */ if (mux_mode == USB_PD_MUX_DP_ENABLED) usb_mux_set(port, USB_PD_MUX_NONE, USB_SWITCH_CONNECT, - pd_get_polarity(port)); + polarity_rm_dts(pd_get_polarity(port))); payload[0] = VDO(USB_SID_DISPLAYPORT, 1, CMD_DP_CONFIG | VDO_OPOS(opos)); @@ -132,7 +132,7 @@ __override void svdm_dp_post_config(int port) /* Connect the SBU and USB lines to the connector. */ ppc_set_sbu(port, 1); usb_mux_set(port, svdm_dp_mux_mode(port), USB_SWITCH_CONNECT, - pd_get_polarity(port)); + polarity_rm_dts(pd_get_polarity(port))); dp_flags[port] |= DP_FLAGS_DP_ON; if (!(dp_flags[port] & DP_FLAGS_HPD_HI_PENDING)) diff --git a/baseboard/kukui/usb_pd_policy.c b/baseboard/kukui/usb_pd_policy.c index 02e16ae624..b17552a08c 100644 --- a/baseboard/kukui/usb_pd_policy.c +++ b/baseboard/kukui/usb_pd_policy.c @@ -22,9 +22,9 @@ static int board_get_polarity(int port) { /* Krane's aux mux polarity is reversed. Workaround to flip it back. */ if (IS_ENABLED(BOARD_KRANE) && board_get_version() == 3) - return !pd_get_polarity(port); + return !polarity_rm_dts(pd_get_polarity(port)); - return pd_get_polarity(port); + return polarity_rm_dts(pd_get_polarity(port)); } static uint8_t vbus_en; diff --git a/baseboard/trogdor/usb_pd_policy.c b/baseboard/trogdor/usb_pd_policy.c index 023922038a..ef5c470611 100644 --- a/baseboard/trogdor/usb_pd_policy.c +++ b/baseboard/trogdor/usb_pd_policy.c @@ -195,7 +195,8 @@ __override int svdm_dp_attention(int port, uint32_t *payload) * lanes DP). */ usb_mux_set(port, USB_PD_MUX_DOCK, - USB_SWITCH_CONNECT, pd_get_polarity(port)); + USB_SWITCH_CONNECT, + polarity_rm_dts(pd_get_polarity(port))); } else { /* Disconnect the DP port selection mux. */ gpio_set_level(GPIO_DP_MUX_OE_L, 1); @@ -207,7 +208,8 @@ __override int svdm_dp_attention(int port, uint32_t *payload) /* Disconnect the DP but keep the USB SS lines in TCPC chip. */ usb_mux_set(port, USB_PD_MUX_USB_ENABLED, - USB_SWITCH_CONNECT, pd_get_polarity(port)); + USB_SWITCH_CONNECT, + polarity_rm_dts(pd_get_polarity(port))); } if (chipset_in_state(CHIPSET_STATE_ANY_SUSPEND) && diff --git a/baseboard/zork/usb_pd_policy.c b/baseboard/zork/usb_pd_policy.c index ad106c8b6b..f988fd18d0 100644 --- a/baseboard/zork/usb_pd_policy.c +++ b/baseboard/zork/usb_pd_policy.c @@ -119,7 +119,7 @@ __override int svdm_dp_config(int port, uint32_t *payload) */ if (mux_mode == USB_PD_MUX_DP_ENABLED) usb_mux_set(port, USB_PD_MUX_NONE, USB_SWITCH_CONNECT, - pd_get_polarity(port)); + polarity_rm_dts(pd_get_polarity(port))); payload[0] = VDO(USB_SID_DISPLAYPORT, 1, CMD_DP_CONFIG | VDO_OPOS(opos)); @@ -134,7 +134,7 @@ __override void svdm_dp_post_config(int port) /* Connect the SBU and USB lines to the connector. */ ppc_set_sbu(port, 1); usb_mux_set(port, svdm_dp_mux_mode(port), USB_SWITCH_CONNECT, - pd_get_polarity(port)); + polarity_rm_dts(pd_get_polarity(port))); dp_flags[port] |= DP_FLAGS_DP_ON; if (!(dp_flags[port] & DP_FLAGS_HPD_HI_PENDING)) @@ -155,7 +155,7 @@ __override void svdm_safe_dp_mode(int port) dp_status[port] = 0; usb_mux_set(port, USB_PD_MUX_NONE, USB_SWITCH_CONNECT, - pd_get_polarity(port)); + polarity_rm_dts(pd_get_polarity(port))); } __override void svdm_exit_dp_mode(int port) |