summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAyushee <ayushee.shah@intel.com>2020-04-06 13:08:42 -0700
committerCommit Bot <commit-bot@chromium.org>2020-05-21 01:49:40 +0000
commit76f87fbf75d04bcd919761f85c17f98a241f4a57 (patch)
tree4e60bb7800fb4e3bc127e96ebbbad4213a3f4fd9
parent378f043758d4022bd6d19541446362f634418dde (diff)
downloadchrome-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.c16
-rw-r--r--driver/retimer/bb_retimer.c8
-rw-r--r--driver/retimer/bb_retimer.h1
-rw-r--r--include/usb_pd.h11
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
*