From b4f4b285f6a6775a3bc4bfbce1740ffdf84bd24e Mon Sep 17 00:00:00 2001 From: David Huang Date: Tue, 17 Aug 2021 11:53:06 +0800 Subject: kano: Change C0/C1 TCPM to RT1715 C0/C1 TCPM change to RT1715. Remove ioexpand function and db type function. C1 support BB retimer. BUG=b:192370253 BRANCH=brya TEST=make buildall -j succeeded. Signed-off-by: David Huang Change-Id: I278779dcd791fa5d2e2ccf85cdc4a8dbbfca2d8c Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3098122 Reviewed-by: caveh jalali --- board/kano/board.c | 7 --- board/kano/board.h | 15 ++---- board/kano/gpio.inc | 7 ++- board/kano/usbc_config.c | 124 +++++++++++------------------------------------ 4 files changed, 34 insertions(+), 119 deletions(-) diff --git a/board/kano/board.c b/board/kano/board.c index 3b8af7090b..3701d5bfbf 100644 --- a/board/kano/board.c +++ b/board/kano/board.c @@ -40,13 +40,6 @@ const int usb_port_enable[USB_PORT_COUNT] = { }; BUILD_ASSERT(ARRAY_SIZE(usb_port_enable) == USB_PORT_COUNT); -/******************************************************************************/ - -__override void board_cbi_init(void) -{ - config_usb_db_type(); -} - /* Called on AP S3 -> S0 transition */ static void board_chipset_resume(void) { diff --git a/board/kano/board.h b/board/kano/board.h index a95e96d099..5cfb00a7ce 100644 --- a/board/kano/board.h +++ b/board/kano/board.h @@ -75,15 +75,12 @@ /* USB Type C and USB PD defines */ #define CONFIG_USB_PD_REQUIRE_AP_MODE_ENTRY -#define CONFIG_IO_EXPANDER -#define CONFIG_IO_EXPANDER_NCT38XX -#define CONFIG_IO_EXPANDER_PORT_COUNT 1 - -#define CONFIG_USB_PD_TCPM_PS8815 #define CONFIG_USBC_RETIMER_INTEL_BB #define CONFIG_USBC_PPC_SYV682X -#define CONFIG_USBC_PPC_NX20P3483 + +#undef CONFIG_USB_PD_TCPM_NCT38XX +#define CONFIG_USB_PD_TCPM_RT1715 /* TODO: b/177608416 - measure and check these values on brya */ #define PD_POWER_SUPPLY_TURN_ON_DELAY 30000 /* us */ @@ -165,6 +162,7 @@ * see b/174768555#comment22 */ #define USBC_PORT_C0_BB_RETIMER_I2C_ADDR 0x56 +#define USBC_PORT_C1_BB_RETIMER_I2C_ADDR 0x56 /* Enabling Thunderbolt-compatible mode */ #define CONFIG_USB_PD_TBT_COMPAT_MODE @@ -220,11 +218,6 @@ enum sensor_id { SENSOR_COUNT }; -enum ioex_port { - IOEX_C0_NCT38XX = 0, - IOEX_PORT_COUNT -}; - enum battery_type { BATTERY_POWER_TECH, BATTERY_LGC011, diff --git a/board/kano/gpio.inc b/board/kano/gpio.inc index 2991583124..465f0fd4db 100644 --- a/board/kano/gpio.inc +++ b/board/kano/gpio.inc @@ -28,9 +28,8 @@ */ GPIO(EC_KSO_02_INV, PIN(1, 7), GPIO_OUT_LOW) - -IOEX(USB_C0_OC_ODL, EXPIN(IOEX_C0_NCT38XX, 0, 4), GPIO_ODR_HIGH) -IOEX(USB_C0_FRS_EN, EXPIN(IOEX_C0_NCT38XX, 0, 6), GPIO_LOW) -IOEX(USB_C0_RT_RST_ODL, EXPIN(IOEX_C0_NCT38XX, 0, 7), GPIO_ODR_LOW) +GPIO(USB_C0_OC_ODL, PIN(D, 4), GPIO_ODR_HIGH) +GPIO(USB_C0_FRS_EN, PIN(6, 0), GPIO_LOW) +GPIO(USB_C0_RT_RST_ODL, PIN(C, 2), GPIO_ODR_LOW) GPIO(USB_C1_OC_ODL, PIN(E, 1), GPIO_ODR_HIGH) diff --git a/board/kano/usbc_config.c b/board/kano/usbc_config.c index 8b53b219c0..b27d859315 100644 --- a/board/kano/usbc_config.c +++ b/board/kano/usbc_config.c @@ -10,11 +10,9 @@ #include "compile_time_macros.h" #include "console.h" #include "driver/bc12/pi3usb9201_public.h" -#include "driver/ppc/nx20p348x.h" #include "driver/ppc/syv682x_public.h" #include "driver/retimer/bb_retimer_public.h" -#include "driver/tcpm/nct38xx.h" -#include "driver/tcpm/ps8xxx_public.h" +#include "driver/tcpm/rt1715.h" #include "driver/tcpm/tcpci.h" #include "ec_commands.h" #include "fw_config.h" @@ -42,18 +40,18 @@ const struct tcpc_config_t tcpc_config[] = { .bus_type = EC_BUS_TYPE_I2C, .i2c_info = { .port = I2C_PORT_USB_C0_C2_TCPC, - .addr_flags = NCT38XX_I2C_ADDR1_1_FLAGS, + .addr_flags = RT1715_I2C_ADDR_FLAGS, }, - .drv = &nct38xx_tcpm_drv, + .drv = &rt1715_tcpm_drv, .flags = TCPC_FLAGS_TCPCI_REV2_0, }, [USBC_PORT_C1] = { .bus_type = EC_BUS_TYPE_I2C, .i2c_info = { .port = I2C_PORT_USB_C1_TCPC, - .addr_flags = PS8751_I2C_ADDR1_FLAGS, + .addr_flags = RT1715_I2C_ADDR_FLAGS, }, - .drv = &ps8xxx_tcpm_drv, + .drv = &rt1715_tcpm_drv, .flags = TCPC_FLAGS_TCPCI_REV2_0 | TCPC_FLAGS_TCPCI_REV2_0_NO_VSAFE0V, }, @@ -71,8 +69,8 @@ struct ppc_config_t ppc_chips[] = { [USBC_PORT_C1] = { /* Compatible with Silicon Mitus SM536A0 */ .i2c_port = I2C_PORT_USB_C1_PPC, - .i2c_addr_flags = NX20P3483_ADDR2_FLAGS, - .drv = &nx20p348x_drv, + .i2c_addr_flags = SYV682x_ADDR3_FLAGS, + .drv = &syv682x_drv, }, }; BUILD_ASSERT(ARRAY_SIZE(ppc_chips) == USBC_PORT_COUNT); @@ -86,15 +84,10 @@ static const struct usb_mux usbc0_tcss_usb_mux = { .hpd_update = &virtual_hpd_update, }; -/* - * USB3 DB mux configuration - the top level mux still needs to be set - * to the virtual_usb_mux_driver so the AP gets notified of mux changes - * and updates the TCSS configuration on state changes. - */ -static const struct usb_mux usbc1_usb3_db_retimer = { +static const struct usb_mux usbc1_tcss_usb_mux = { .usb_port = USBC_PORT_C1, - .driver = &tcpci_tcpm_usb_mux_driver, - .hpd_update = &ps8xxx_tcpc_update_hpd_status, + .driver = &virtual_usb_mux_driver, + .hpd_update = &virtual_hpd_update, }; const struct usb_mux usb_muxes[] = { @@ -106,11 +99,11 @@ const struct usb_mux usb_muxes[] = { .next_mux = &usbc0_tcss_usb_mux, }, [USBC_PORT_C1] = { - /* PS8815 DB */ .usb_port = USBC_PORT_C1, - .driver = &virtual_usb_mux_driver, - .hpd_update = &virtual_hpd_update, - .next_mux = &usbc1_usb3_db_retimer, + .driver = &bb_usb_retimer, + .i2c_port = I2C_PORT_USB_C1_MUX, + .i2c_addr_flags = USBC_PORT_C1_BB_RETIMER_I2C_ADDR, + .next_mux = &usbc1_tcss_usb_mux, }, }; BUILD_ASSERT(ARRAY_SIZE(usb_muxes) == USBC_PORT_COUNT); @@ -128,42 +121,12 @@ const struct pi3usb9201_config_t pi3usb9201_bc12_chips[] = { }; BUILD_ASSERT(ARRAY_SIZE(pi3usb9201_bc12_chips) == USBC_PORT_COUNT); -/* - * USB C0 and C2 uses burnside bridge chips and have their reset - * controlled by their respective TCPC chips acting as GPIO expanders. - * - * ioex_init() is normally called before we take the TCPCs out of - * reset, so we need to start in disabled mode, then explicitly - * call ioex_init(). - */ - -struct ioexpander_config_t ioex_config[] = { - [IOEX_C0_NCT38XX] = { - .i2c_host_port = I2C_PORT_USB_C0_C2_TCPC, - .i2c_addr_flags = NCT38XX_I2C_ADDR1_1_FLAGS, - .drv = &nct38xx_ioexpander_drv, - .flags = IOEX_FLAGS_DISABLED, - }, -}; -BUILD_ASSERT(ARRAY_SIZE(ioex_config) == CONFIG_IO_EXPANDER_PORT_COUNT); - -void config_usb_db_type(void) -{ - enum ec_cfg_usb_db_type db_type = ec_cfg_usb_db_type(); - - /* - * TODO(b/180434685): implement multiple DB types - */ - - CPRINTS("Configured USB DB type number is %d", db_type); -} - __override int bb_retimer_power_enable(const struct usb_mux *me, bool enable) { - enum ioex_signal rst_signal; + enum gpio_signal rst_signal; if (me->usb_port == USBC_PORT_C0) { - rst_signal = IOEX_USB_C0_RT_RST_ODL; + rst_signal = GPIO_USB_C0_RT_RST_ODL; } else { return EC_ERROR_INVAL; } @@ -180,14 +143,14 @@ __override int bb_retimer_power_enable(const struct usb_mux *me, bool enable) * retimer_init() function ensures power is up before calling * this function. */ - ioex_set_level(rst_signal, 1); + gpio_set_level(rst_signal, 1); /* * Allow 1ms time for the retimer to power up lc_domain * which powers I2C controller within retimer */ msleep(1); } else { - ioex_set_level(rst_signal, 0); + gpio_set_level(rst_signal, 0); msleep(1); } return EC_SUCCESS; @@ -199,9 +162,7 @@ void board_reset_pd_mcu(void) * TODO(b/179648104): figure out correct timing */ - if (ec_cfg_usb_db_type() != DB_USB_ABSENT) { - gpio_set_level(GPIO_USB_C1_RT_RST_R_ODL, 0); - } + gpio_set_level(GPIO_USB_C1_RT_RST_R_ODL, 0); /* * delay for power-on to reset-off and min. assertion time @@ -209,35 +170,19 @@ void board_reset_pd_mcu(void) msleep(20); - if (ec_cfg_usb_db_type() != DB_USB_ABSENT) { - gpio_set_level(GPIO_USB_C1_RT_RST_R_ODL, 1); - } + gpio_set_level(GPIO_USB_C1_RT_RST_R_ODL, 1); /* wait for chips to come up */ msleep(50); } -static void enable_ioex(int ioex) -{ - ioex_config[ioex].flags &= ~IOEX_FLAGS_DISABLED; - ioex_init(ioex); -} - static void board_tcpc_init(void) { /* Don't reset TCPCs after initial reset */ - if (!system_jumped_late()) { + if (!system_jumped_late()) board_reset_pd_mcu(); - /* - * These IO expander pins are implemented using the - * C0 TCPC, so they must be set up after the TCPC has - * been taken out of reset. - */ - enable_ioex(IOEX_C0_NCT38XX); - } - /* Enable PPC interrupts. */ gpio_enable_interrupt(GPIO_USB_C0_PPC_INT_ODL); @@ -247,11 +192,9 @@ static void board_tcpc_init(void) /* Enable BC1.2 interrupts. */ gpio_enable_interrupt(GPIO_USB_C0_BC12_INT_ODL); - if (ec_cfg_usb_db_type() != DB_USB_ABSENT) { - gpio_enable_interrupt(GPIO_USB_C1_PPC_INT_ODL); - gpio_enable_interrupt(GPIO_USB_C1_TCPC_INT_ODL); - gpio_enable_interrupt(GPIO_USB_C1_BC12_INT_ODL); - } + gpio_enable_interrupt(GPIO_USB_C1_PPC_INT_ODL); + gpio_enable_interrupt(GPIO_USB_C1_TCPC_INT_ODL); + gpio_enable_interrupt(GPIO_USB_C1_BC12_INT_ODL); } DECLARE_HOOK(HOOK_INIT, board_tcpc_init, HOOK_PRIO_INIT_CHIPSET); @@ -262,8 +205,7 @@ uint16_t tcpc_get_alert_status(void) if (gpio_get_level(GPIO_USB_C0_C2_TCPC_INT_ODL) == 0) status |= PD_STATUS_TCPC_ALERT_0 | PD_STATUS_TCPC_ALERT_2; - if ((ec_cfg_usb_db_type() != DB_USB_ABSENT) && - gpio_get_level(GPIO_USB_C1_TCPC_INT_ODL) == 0) + if (gpio_get_level(GPIO_USB_C1_TCPC_INT_ODL) == 0) status |= PD_STATUS_TCPC_ALERT_1; return status; @@ -273,8 +215,7 @@ int ppc_get_alert_status(int port) { if (port == USBC_PORT_C0) return gpio_get_level(GPIO_USB_C0_PPC_INT_ODL) == 0; - else if ((port == USBC_PORT_C1) && - (ec_cfg_usb_db_type() != DB_USB_ABSENT)) + else if (port == USBC_PORT_C1) return gpio_get_level(GPIO_USB_C1_PPC_INT_ODL) == 0; return 0; } @@ -286,8 +227,6 @@ void tcpc_alert_event(enum gpio_signal signal) schedule_deferred_pd_interrupt(USBC_PORT_C0); break; case GPIO_USB_C1_TCPC_INT_ODL: - if (ec_cfg_usb_db_type() == DB_USB_ABSENT) - break; schedule_deferred_pd_interrupt(USBC_PORT_C1); break; default: @@ -302,8 +241,6 @@ void bc12_interrupt(enum gpio_signal signal) task_set_event(TASK_ID_USB_CHG_P0, USB_CHG_EVENT_BC12); break; case GPIO_USB_C1_BC12_INT_ODL: - if (ec_cfg_usb_db_type() == DB_USB_ABSENT) - break; task_set_event(TASK_ID_USB_CHG_P1, USB_CHG_EVENT_BC12); break; default: @@ -318,14 +255,7 @@ void ppc_interrupt(enum gpio_signal signal) syv682x_interrupt(USBC_PORT_C0); break; case GPIO_USB_C1_PPC_INT_ODL: - switch (ec_cfg_usb_db_type()) { - case DB_USB_ABSENT: - case DB_USB_ABSENT2: - break; - case DB_USB3_PS8815: - nx20p348x_interrupt(USBC_PORT_C1); - break; - } + syv682x_interrupt(USBC_PORT_C1); break; default: break; -- cgit v1.2.1