diff options
author | David Huang <david.huang@quanta.corp-partner.google.com> | 2020-07-06 17:02:19 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-07-07 18:21:23 +0000 |
commit | 5ccfff7bc7c392168ac956b36ffe529863fd704a (patch) | |
tree | 4312626d3b3e92ae9b0122b70dcd2b7d8de0abe6 /board/terrador | |
parent | 8a7c9a1cd52a4b8f52d9f4a63e919386ddafc7a0 (diff) | |
download | chrome-ec-5ccfff7bc7c392168ac956b36ffe529863fd704a.tar.gz |
Terrador: supports bb_retimer for C0/C1 port
add bb retimer for C0/C1 port
BUG=b:151978872
BRANCH=master
TEST=Use console "i2cscan" get usb_0_mix/usb_0_mix and bb to read bb
retimer register.
Change-Id: I832265a69b30beca6e49840f90333abd6b297ec7
Signed-off-by: David Huang <david.huang@quanta.corp-partner.google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2282724
Commit-Queue: Keith Short <keithshort@chromium.org>
Reviewed-by: Keith Short <keithshort@chromium.org>
Diffstat (limited to 'board/terrador')
-rw-r--r-- | board/terrador/board.c | 35 | ||||
-rw-r--r-- | board/terrador/board.h | 4 | ||||
-rw-r--r-- | board/terrador/gpio.inc | 17 |
3 files changed, 47 insertions, 9 deletions
diff --git a/board/terrador/board.c b/board/terrador/board.c index 9d53cdcea7..cad71b18a7 100644 --- a/board/terrador/board.c +++ b/board/terrador/board.c @@ -105,11 +105,18 @@ const struct i2c_port_t i2c_ports[] = { .sda = GPIO_EC_I2C2_USB_C1_SDA, }, { + .name = "usb_0_mix", + .port = I2C_PORT_USB_0_MIX, + .kbps = 100, + .scl = GPIO_EC_I2C3_USB_0_MIX_SCL, + .sda = GPIO_EC_I2C3_USB_0_MIX_SDA, + }, + { .name = "usb_1_mix", .port = I2C_PORT_USB_1_MIX, .kbps = 100, - .scl = GPIO_EC_I2C3_USB_1_MIX_SCL, - .sda = GPIO_EC_I2C3_USB_1_MIX_SDA, + .scl = GPIO_EC_I2C4_USB_1_MIX_SCL, + .sda = GPIO_EC_I2C4_USB_1_MIX_SDA, }, { .name = "power", @@ -185,11 +192,35 @@ void board_reset_pd_mcu(void) /* TODO(b/159025015): Terrador: check USB PD reset operation */ } +/* USBC mux configuration - Tiger Lake includes internal mux */ +struct usb_mux usbc0_usb4_mb_retimer = { + .usb_port = USBC_PORT_C0, + .driver = &bb_usb_retimer, + .i2c_port = I2C_PORT_USB_0_MIX, + .i2c_addr_flags = USBC_PORT_C0_BB_RETIMER_I2C_ADDR, +}; +/***************************************************************************** + * USB-C MUX/Retimer dynamic configuration. + */ +static void setup_mux(void) +{ + CPRINTS("C0 supports bb-retimer"); + /* USB-C port 0 have a retimer */ + usb_muxes[USBC_PORT_C0].next_mux = &usbc0_usb4_mb_retimer; +} + __override void board_cbi_init(void) { /* * TODO(b/159025015): Terrador: check FW_CONFIG fields for USB DB type */ + setup_mux(); + /* Reassign USB_C0_RT_RST_ODL */ + bb_controls[USBC_PORT_C0].shared_nvm = false; + bb_controls[USBC_PORT_C0].usb_ls_en_gpio = GPIO_USB_C0_LS_EN; + bb_controls[USBC_PORT_C0].retimer_rst_gpio = GPIO_USB_C0_RT_RST_ODL; + bb_controls[USBC_PORT_C0].force_power_gpio = GPIO_USB_C0_RT_FORCE_PWR; + } /******************************************************************************/ diff --git a/board/terrador/board.h b/board/terrador/board.h index 19f437b5af..7ed46c4df1 100644 --- a/board/terrador/board.h +++ b/board/terrador/board.h @@ -70,6 +70,7 @@ /* Enabling USB4 mode */ #define CONFIG_USB_PD_USB4 +#define USBC_PORT_C0_BB_RETIMER_I2C_ADDR 0x40 /* USB Type A Features */ @@ -119,7 +120,8 @@ #define I2C_PORT_SENSOR NPCX_I2C_PORT0_0 #define I2C_PORT_USB_C0 NPCX_I2C_PORT1_0 #define I2C_PORT_USB_C1 NPCX_I2C_PORT2_0 -#define I2C_PORT_USB_1_MIX NPCX_I2C_PORT3_0 +#define I2C_PORT_USB_0_MIX NPCX_I2C_PORT3_0 +#define I2C_PORT_USB_1_MIX NPCX_I2C_PORT4_1 #define I2C_PORT_POWER NPCX_I2C_PORT5_0 #define I2C_PORT_EEPROM NPCX_I2C_PORT7_0 diff --git a/board/terrador/gpio.inc b/board/terrador/gpio.inc index e4ba79f457..058838d54e 100644 --- a/board/terrador/gpio.inc +++ b/board/terrador/gpio.inc @@ -59,7 +59,7 @@ UNIMPLEMENTED(PCH_DSW_PWROK) #ifdef VOLTEER_POWER_SEQUENCE /* Optional power sequencing signals that are not stuffed by default */ -GPIO(EN_DRAM_VDDQ, PIN(F, 2), GPIO_OUT_LOW) +GPIO(EN_DRAM_VDDQ, PIN(4, 0), GPIO_OUT_LOW) GPIO(EN_PP1050_STG, PIN(C, 0), GPIO_OUT_LOW) GPIO(EN_PP5000_USB_AG, PIN(A, 7), GPIO_OUT_LOW) GPIO(EN_PPVAR_VCCIN_AUX, PIN(8, 1), GPIO_OUT_LOW) @@ -101,14 +101,16 @@ GPIO(EC_PCH_INT_ODL, PIN(B, 0), GPIO_ODR_HIGH) * so it's safe to define GPIOs compatible with both designs. * TODO (b/149858568): remove board ID=0 support. */ -GPIO(USB_C1_RT_RST_ODL_BOARDID_0, PIN(3, 2), GPIO_ODR_LOW) /* USB_C1 Reset on boards without board ID */ -GPIO(USB_C1_RT_RST_ODL, PIN(8, 3), GPIO_ODR_LOW) /* USB_C1 Reset on boards board ID >=1 */ +GPIO(USB_C0_RT_RST_ODL, PIN(6, 1), GPIO_ODR_LOW) /* USB_C0 Reset */ +GPIO(USB_C1_RT_RST_ODL, PIN(8, 3), GPIO_ODR_LOW) /* USB_C1 Reset */ GPIO(USB_C0_OC_ODL, PIN(B, 1), GPIO_ODR_HIGH) GPIO(USB_C1_OC_ODL, PIN(5, 0), GPIO_ODR_HIGH) /* Don't have a load switch for retimer */ +UNIMPLEMENTED(USB_C0_LS_EN) UNIMPLEMENTED(USB_C1_LS_EN) /* Retimer Force Power enable is connected to AP */ +UNIMPLEMENTED(USB_C0_RT_FORCE_PWR) UNIMPLEMENTED(USB_C1_RT_FORCE_PWR) /* Misc Signals */ @@ -129,8 +131,10 @@ GPIO(EC_I2C1_USB_C0_SCL, PIN(9, 0), GPIO_INPUT) GPIO(EC_I2C1_USB_C0_SDA, PIN(8, 7), GPIO_INPUT) GPIO(EC_I2C2_USB_C1_SCL, PIN(9, 2), GPIO_INPUT) GPIO(EC_I2C2_USB_C1_SDA, PIN(9, 1), GPIO_INPUT) -GPIO(EC_I2C3_USB_1_MIX_SCL, PIN(D, 1), GPIO_INPUT) -GPIO(EC_I2C3_USB_1_MIX_SDA, PIN(D, 0), GPIO_INPUT) +GPIO(EC_I2C3_USB_0_MIX_SCL, PIN(D, 1), GPIO_INPUT) +GPIO(EC_I2C3_USB_0_MIX_SDA, PIN(D, 0), GPIO_INPUT) +GPIO(EC_I2C4_USB_1_MIX_SCL, PIN(F, 3), GPIO_INPUT) +GPIO(EC_I2C4_USB_1_MIX_SDA, PIN(F, 2), GPIO_INPUT) GPIO(EC_I2C5_POWER_SCL, PIN(3, 3), GPIO_INPUT) GPIO(EC_I2C5_POWER_SDA, PIN(3, 6), GPIO_INPUT) GPIO(EC_I2C7_EEPROM_SCL, PIN(B, 3), GPIO_INPUT) @@ -140,7 +144,7 @@ GPIO(EC_I2C7_EEPROM_SDA, PIN(B, 2), GPIO_INPUT) GPIO(EC_BATT_PRES_ODL, PIN(E, 1), GPIO_INPUT) /* Physical HPD pins are not needed on EC as these are configured by PMC */ -GPIO(USB_C0_DP_HPD, PIN(F, 3), GPIO_INPUT) +GPIO(USB_C0_DP_HPD, PIN(B, 7), GPIO_INPUT) GPIO(USB_C1_DP_HPD, PIN(7, 0), GPIO_INPUT) /* Alternate functions GPIO definitions */ @@ -148,6 +152,7 @@ ALTERNATE(PIN_MASK(B, BIT(5) | BIT(4)), 0, MODULE_I2C, (GPIO_INPUT | GPIO_SEL_1P ALTERNATE(PIN_MASK(9, BIT(0) | BIT(2) | BIT(1)), 0, MODULE_I2C, 0) /* I2C1 SCL / I2C2 */ ALTERNATE(PIN_MASK(8, BIT(7)), 0, MODULE_I2C, 0) /* I2C1 SDA */ ALTERNATE(PIN_MASK(D, BIT(1) | BIT(0)), 0, MODULE_I2C, 0) /* I2C3 */ +ALTERNATE(PIN_MASK(F, BIT(3) | BIT(2)), 0, MODULE_I2C, 0) /* I2C4 */ ALTERNATE(PIN_MASK(3, BIT(3) | BIT(6)), 0, MODULE_I2C, 0) /* I2C5 */ ALTERNATE(PIN_MASK(B, BIT(3) | BIT(2)), 0, MODULE_I2C, 0) /* I2C7 */ |