diff options
-rw-r--r-- | driver/retimer/bb_retimer.c | 5 | ||||
-rw-r--r-- | include/driver/retimer/bb_retimer.h | 5 | ||||
-rw-r--r-- | zephyr/CMakeLists.txt | 2 | ||||
-rw-r--r-- | zephyr/Kconfig.retimer | 20 | ||||
-rw-r--r-- | zephyr/shim/include/config_chip.h | 14 |
5 files changed, 46 insertions, 0 deletions
diff --git a/driver/retimer/bb_retimer.c b/driver/retimer/bb_retimer.c index 170aac6c23..c515505900 100644 --- a/driver/retimer/bb_retimer.c +++ b/driver/retimer/bb_retimer.c @@ -540,6 +540,10 @@ static int retimer_init(const struct usb_mux *me) rv = bb_retimer_read(me, BB_RETIMER_REG_VENDOR_ID, &data); if (rv != EC_SUCCESS) return rv; +#ifdef CONFIG_USBC_RETIMER_INTEL_HB + if (data != BB_RETIMER_DEVICE_ID) + return EC_ERROR_INVAL; +#else if ((data != BB_RETIMER_VENDOR_ID_1) && data != BB_RETIMER_VENDOR_ID_2) return EC_ERROR_INVAL; @@ -549,6 +553,7 @@ static int retimer_init(const struct usb_mux *me) return rv; if (data != BB_RETIMER_DEVICE_ID) return EC_ERROR_INVAL; +#endif return EC_SUCCESS; } diff --git a/include/driver/retimer/bb_retimer.h b/include/driver/retimer/bb_retimer.h index 2bfb806e37..6a311bd2ca 100644 --- a/include/driver/retimer/bb_retimer.h +++ b/include/driver/retimer/bb_retimer.h @@ -17,7 +17,12 @@ #define BB_RETIMER_VENDOR_ID_2 0x8087 #define BB_RETIMER_REG_DEVICE_ID 1 +#ifdef CONFIG_USBC_RETIMER_INTEL_HB +/* HB has no Device ID field instead it is combined with Vendor ID */ +#define BB_RETIMER_DEVICE_ID 0x0D9C8087 +#else #define BB_RETIMER_DEVICE_ID 0x15EE +#endif /* Connection State Register Attributes */ #define BB_RETIMER_REG_CONNECTION_STATE 4 diff --git a/zephyr/CMakeLists.txt b/zephyr/CMakeLists.txt index 9173c67253..f5e1c2572a 100644 --- a/zephyr/CMakeLists.txt +++ b/zephyr/CMakeLists.txt @@ -406,6 +406,8 @@ zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_USBC_RETIMER_ANX7483 "${PLATFORM_EC}/driver/retimer/anx7483.c") zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_USBC_RETIMER_INTEL_BB "${PLATFORM_EC}/driver/retimer/bb_retimer.c") +zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_USBC_RETIMER_INTEL_HB + "${PLATFORM_EC}/driver/retimer/bb_retimer.c") zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_USBC_RETIMER_PS8818 "${PLATFORM_EC}/driver/retimer/ps8818.c") zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_USBC_RETIMER_ANX7451 diff --git a/zephyr/Kconfig.retimer b/zephyr/Kconfig.retimer index 8233b6fe2b..f328ffea17 100644 --- a/zephyr/Kconfig.retimer +++ b/zephyr/Kconfig.retimer @@ -25,6 +25,26 @@ config PLATFORM_EC_USBC_RETIMER_INTEL_BB - Multifunction Display (MFD): two unidirectional lanes of DP and one bidirectional lane of USB3.1 Gen1/2 +config PLATFORM_EC_USBC_RETIMER_INTEL_HB + bool "Support Intel Hayden Bridge retimer" + help + Enable this to support the Intel Hayden Bridge Thunderbolt / USB / + DisplayPort retimer. + + Intel Hayden Bridge is a Type-C multi-protocol retimer to be used + in on-board applications. Hayden Bridge offers the ability to latch + protocol signals into on-chip memory before retransmitting them + onwards. It can be used to extend the physical length of the system + without increasing high-frequency jitter. + + Hayden Bridge supports spec compliant retimer of following + protocols: + - Display Port: four unidirectional DP lanes + - USB3.2 Gen1/2: two bi-directional USB lanes + - Thunderbolt/USB4: two bi-directional USB4 lanes + - Multifunction Display (MFD): two unidirectional lanes of DP and + one bi-directional lane of USB3.2 Gen1/2 + config PLATFORM_EC_USBC_RETIMER_INTEL_BB_RUNTIME_CONFIG bool "Use runtime configuration of Intel Burnside Bridge" depends on PLATFORM_EC_USBC_RETIMER_INTEL_BB diff --git a/zephyr/shim/include/config_chip.h b/zephyr/shim/include/config_chip.h index f11ec4c507..67b9d0c6fd 100644 --- a/zephyr/shim/include/config_chip.h +++ b/zephyr/shim/include/config_chip.h @@ -1592,6 +1592,20 @@ extern struct jump_data mock_jump_data; #define CONFIG_USBC_RETIMER_INTEL_BB #endif +#undef CONFIG_USBC_RETIMER_INTEL_HB +#ifdef CONFIG_PLATFORM_EC_USBC_RETIMER_INTEL_HB + +#define USBC_PORT_C0_HB_RETIMER_I2C_ADDR \ + DT_REG_ADDR(DT_NODELABEL(usb_c0_hb_retimer)) +#define USBC_PORT_C1_HB_RETIMER_I2C_ADDR \ + DT_REG_ADDR(DT_NODELABEL(usb_c1_hb_retimer)) +#define USBC_PORT_C2_HB_RETIMER_I2C_ADDR \ + DT_REG_ADDR(DT_NODELABEL(usb_c2_hb_retimer)) +#define USBC_PORT_C3_HB_RETIMER_I2C_ADDR \ + DT_REG_ADDR(DT_NODELABEL(usb_c3_hb_retimer)) +#define CONFIG_USBC_RETIMER_INTEL_HB +#endif + #undef CONFIG_USBC_RETIMER_INTEL_BB_RUNTIME_CONFIG #ifdef CONFIG_PLATFORM_EC_USBC_RETIMER_INTEL_BB_RUNTIME_CONFIG #define CONFIG_USBC_RETIMER_INTEL_BB_RUNTIME_CONFIG |