diff options
author | Ayushee <ayushee.shah@intel.com> | 2020-04-06 13:08:42 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-05-21 01:49:40 +0000 |
commit | 76f87fbf75d04bcd919761f85c17f98a241f4a57 (patch) | |
tree | 4e60bb7800fb4e3bc127e96ebbbad4213a3f4fd9 | |
parent | 378f043758d4022bd6d19541446362f634418dde (diff) | |
download | chrome-ec-76f87fbf75d04bcd919761f85c17f98a241f4a57.tar.gz |
BB retimer: Add 'USB3_Speed' bit
USB3_Speed bit is set to 1 if USB3 Gen1/Gen2 is supported. Hence, added
functions to return cable rev 2.0 speed and cable rev 3.0 speed.
Ref: Burnside Bridge spec Table 13: Connection state register
BUG=b:152544514
BRANCH=None
TEST=Tested on volteer, with a Type-C dock, able to get USB3 Gen1/2
speed by checking "lsusb -t" on CPU console.
Signed-off-by: Ayushee <ayushee.shah@intel.com>
Change-Id: Idd7d7de3446e82ac81025cda36ee8a7e1f274138
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2139279
Reviewed-by: Vijay P Hiremath <vijay.p.hiremath@intel.com>
Reviewed-by: Keith Short <keithshort@chromium.org>
-rw-r--r-- | common/usb_pd_alt_mode_dfp.c | 16 | ||||
-rw-r--r-- | driver/retimer/bb_retimer.c | 8 | ||||
-rw-r--r-- | driver/retimer/bb_retimer.h | 1 | ||||
-rw-r--r-- | include/usb_pd.h | 11 |
4 files changed, 36 insertions, 0 deletions
diff --git a/common/usb_pd_alt_mode_dfp.c b/common/usb_pd_alt_mode_dfp.c index cc8d23eb36..600ad4defd 100644 --- a/common/usb_pd_alt_mode_dfp.c +++ b/common/usb_pd_alt_mode_dfp.c @@ -628,6 +628,22 @@ bool is_usb2_cable_support(int port) cable->attr2.a2_rev30.usb_20_support == USB2_SUPPORTED; } +bool is_cable_speed_gen2_capable(int port) +{ + struct pd_cable *cable = pd_get_cable_attributes(port); + + switch (cable->rev) { + case PD_REV20: + return cable->attr.p_rev20.ss == USB_R20_SS_U31_GEN1_GEN2; + + case PD_REV30: + return cable->attr.p_rev30.ss == USB_R30_SS_U32_U40_GEN2 || + cable->attr.p_rev30.ss == USB_R30_SS_U40_GEN3; + default: + return false; + } +} + /* * TODO(b/152417597): Support SOP and SOP'; eliminate redundant code for port * partner and cable identity discovery. diff --git a/driver/retimer/bb_retimer.c b/driver/retimer/bb_retimer.c index 98b28dc663..34e8ee3507 100644 --- a/driver/retimer/bb_retimer.c +++ b/driver/retimer/bb_retimer.c @@ -185,6 +185,14 @@ static int retimer_set_state(const struct usb_mux *me, mux_state_t mux_state) set_retimer_con |= BB_RETIMER_USB_3_CONNECTION; /* + * Bit 6: USB3_Speed + * 0 – USB3 is limited to Gen1 + * 1 – USB3 Gen1/Gen2 supported + */ + if (is_cable_speed_gen2_capable(port)) + set_retimer_con |= BB_RETIMER_USB_3_SPEED; + + /* * Bit 8: DP_CONNECTION * 0 – No DP connection * 1 – DP connected diff --git a/driver/retimer/bb_retimer.h b/driver/retimer/bb_retimer.h index 6e1c726c95..e70f1a1ee9 100644 --- a/driver/retimer/bb_retimer.h +++ b/driver/retimer/bb_retimer.h @@ -25,6 +25,7 @@ #define BB_RETIMER_RE_TIMER_DRIVER BIT(2) #define BB_RETIMER_USB_2_CONNECTION BIT(4) #define BB_RETIMER_USB_3_CONNECTION BIT(5) +#define BB_RETIMER_USB_3_SPEED BIT(6) #define BB_RETIMER_USB_DATA_ROLE BIT(7) #define BB_RETIMER_DP_CONNECTION BIT(8) #define BB_RETIMER_DP_PIN_ASSIGNMENT BIT(10) diff --git a/include/usb_pd.h b/include/usb_pd.h index 4df3084461..d8b59fe1f5 100644 --- a/include/usb_pd.h +++ b/include/usb_pd.h @@ -1877,6 +1877,17 @@ struct pd_cable *pd_get_cable_attributes(int port); */ bool is_usb2_cable_support(int port); +/* + * Checks if Cable speed is Gen2 or better + * + * @param port USB-C port number + * @return True if Cable supports speed USB_R20_SS_U31_GEN1_GEN2/ + * USB_R30_SS_U32_U40_GEN2/ + * USB_R30_SS_U40_GEN3, + * False otherwise + */ +bool is_cable_speed_gen2_capable(int port); + /** * Set DFP enter mode flags if available * |