From 56ae32aa9f6f1bf9e8f6ff36f6d7ea757f632f9c Mon Sep 17 00:00:00 2001 From: Tomasz Michalec Date: Wed, 20 Jul 2022 14:04:32 +0200 Subject: zephyr: skyrim: usb_mux: Split struct usb_mux in skyrim board Update skyrim board to use new struct usb_mux_chain. LOW_COVERAGE_REASON=no test for skyrim yet and missing required usb mux emulators (PS8818, ANX7483) BUG=b:236274003 TEST=zmake build -a TEST=./twister -T zephyr/test BRANCH=None Cq-Depend: chromium:3779618 Signed-off-by: Tomasz Michalec Change-Id: Ia572fa040a220b5f7129026c210be986edccb061 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3780419 Reviewed-by: Keith Short Commit-Queue: Tomasz Michalec Tested-by: Tomasz Michalec --- zephyr/projects/skyrim/src/usbc_config.c | 99 +++++++++++++--------- .../projects/skyrim/src/winterhold/usbc_config.c | 99 +++++++++++++--------- 2 files changed, 118 insertions(+), 80 deletions(-) diff --git a/zephyr/projects/skyrim/src/usbc_config.c b/zephyr/projects/skyrim/src/usbc_config.c index 957d32cf8b..7f969ecb17 100644 --- a/zephyr/projects/skyrim/src/usbc_config.c +++ b/zephyr/projects/skyrim/src/usbc_config.c @@ -98,14 +98,20 @@ struct usb_mux_driver ioex_sbu_mux_driver = { * Since NX3DV221GM is not a i2c device, .i2c_port and * .i2c_addr_flags are not required here. */ -struct usb_mux usbc0_sbu_mux = { - .usb_port = USBC_PORT_C0, - .driver = &ioex_sbu_mux_driver, +struct usb_mux_chain usbc0_sbu_mux = { + .mux = + &(const struct usb_mux){ + .usb_port = USBC_PORT_C0, + .driver = &ioex_sbu_mux_driver, + }, }; -struct usb_mux usbc1_sbu_mux = { - .usb_port = USBC_PORT_C1, - .driver = &ioex_sbu_mux_driver, +struct usb_mux_chain usbc1_sbu_mux = { + .mux = + &(const struct usb_mux){ + .usb_port = USBC_PORT_C1, + .driver = &ioex_sbu_mux_driver, + }, }; int baseboard_anx7483_c0_mux_set(const struct usb_mux *me, @@ -165,13 +171,16 @@ int baseboard_anx7483_c1_mux_set(const struct usb_mux *me, return EC_SUCCESS; } -struct usb_mux usbc0_anx7483 = { - .usb_port = USBC_PORT_C0, - .i2c_port = I2C_PORT_TCPC0, - .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS, - .driver = &anx7483_usb_retimer_driver, - .board_set = &baseboard_anx7483_c0_mux_set, - .next_mux = &usbc0_sbu_mux, +struct usb_mux_chain usbc0_anx7483 = { + .mux = + &(const struct usb_mux){ + .usb_port = USBC_PORT_C0, + .i2c_port = I2C_PORT_TCPC0, + .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS, + .driver = &anx7483_usb_retimer_driver, + .board_set = &baseboard_anx7483_c0_mux_set, + }, + .next = &usbc0_sbu_mux, }; __overridable int board_c1_ps8818_mux_set(const struct usb_mux *me, @@ -188,38 +197,48 @@ __overridable int board_c1_ps8818_mux_set(const struct usb_mux *me, return 0; } -struct usb_mux usbc1_ps8818 = { - .usb_port = USBC_PORT_C1, - .i2c_port = I2C_PORT_TCPC1, - .flags = USB_MUX_FLAG_RESETS_IN_G3, - .i2c_addr_flags = PS8818_I2C_ADDR_FLAGS, - .driver = &ps8818_usb_retimer_driver, - .board_set = &board_c1_ps8818_mux_set, +struct usb_mux_chain usbc1_ps8818 = { + .mux = + &(const struct usb_mux){ + .usb_port = USBC_PORT_C1, + .i2c_port = I2C_PORT_TCPC1, + .flags = USB_MUX_FLAG_RESETS_IN_G3, + .i2c_addr_flags = PS8818_I2C_ADDR_FLAGS, + .driver = &ps8818_usb_retimer_driver, + .board_set = &board_c1_ps8818_mux_set, + }, }; -struct usb_mux usbc1_anx7483 = { - .usb_port = USBC_PORT_C1, - .i2c_port = I2C_PORT_TCPC1, - .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS, - .driver = &anx7483_usb_retimer_driver, - .board_set = &baseboard_anx7483_c1_mux_set, - .next_mux = &usbc1_sbu_mux, +struct usb_mux_chain usbc1_anx7483 = { + .mux = + &(const struct usb_mux){ + .usb_port = USBC_PORT_C1, + .i2c_port = I2C_PORT_TCPC1, + .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS, + .driver = &anx7483_usb_retimer_driver, + .board_set = &baseboard_anx7483_c1_mux_set, + }, + .next = &usbc1_sbu_mux, }; -struct usb_mux usb_muxes[] = { +struct usb_mux_chain usb_muxes[] = { [USBC_PORT_C0] = { - .usb_port = USBC_PORT_C0, - .i2c_port = I2C_PORT_USB_MUX, - .i2c_addr_flags = AMD_FP6_C0_MUX_I2C_ADDR, - .driver = &amd_fp6_usb_mux_driver, - .next_mux = &usbc0_anx7483, + .mux = &(const struct usb_mux) { + .usb_port = USBC_PORT_C0, + .i2c_port = I2C_PORT_USB_MUX, + .i2c_addr_flags = AMD_FP6_C0_MUX_I2C_ADDR, + .driver = &amd_fp6_usb_mux_driver, + }, + .next = &usbc0_anx7483, }, [USBC_PORT_C1] = { - .usb_port = USBC_PORT_C1, - .i2c_port = I2C_PORT_USB_MUX, - .i2c_addr_flags = AMD_FP6_C4_MUX_I2C_ADDR, - .driver = &amd_fp6_usb_mux_driver, - /* .next_mux = filled in by setup_mux based on fw_config */ + .mux = &(const struct usb_mux) { + .usb_port = USBC_PORT_C1, + .i2c_port = I2C_PORT_USB_MUX, + .i2c_addr_flags = AMD_FP6_C4_MUX_I2C_ADDR, + .driver = &amd_fp6_usb_mux_driver, + }, + /* .next = filled in by setup_mux based on fw_config */ } }; BUILD_ASSERT(ARRAY_SIZE(usb_muxes) == CONFIG_USB_PD_PORT_MAX_COUNT); @@ -259,10 +278,10 @@ static void setup_mux(void) if (val == FW_IO_DB_PS8811_PS8818) { CPRINTSUSB("C1: Setting PS8818 mux"); - usb_muxes[USBC_PORT_C1].next_mux = &usbc1_ps8818; + usb_muxes[USBC_PORT_C1].next = &usbc1_ps8818; } else if (val == FW_IO_DB_NONE_ANX7483) { CPRINTSUSB("C1: Setting ANX7483 mux"); - usb_muxes[USBC_PORT_C1].next_mux = &usbc1_anx7483; + usb_muxes[USBC_PORT_C1].next = &usbc1_anx7483; } else { CPRINTSUSB("Unexpected DB_IO board: %d", val); } diff --git a/zephyr/projects/skyrim/src/winterhold/usbc_config.c b/zephyr/projects/skyrim/src/winterhold/usbc_config.c index 9b51298ef4..0623079191 100644 --- a/zephyr/projects/skyrim/src/winterhold/usbc_config.c +++ b/zephyr/projects/skyrim/src/winterhold/usbc_config.c @@ -97,14 +97,20 @@ struct usb_mux_driver ioex_sbu_mux_driver = { * Since NX3DV221GM is not a i2c device, .i2c_port and * .i2c_addr_flags are not required here. */ -struct usb_mux usbc0_sbu_mux = { - .usb_port = USBC_PORT_C0, - .driver = &ioex_sbu_mux_driver, +struct usb_mux_chain usbc0_sbu_mux = { + .mux = + &(const struct usb_mux){ + .usb_port = USBC_PORT_C0, + .driver = &ioex_sbu_mux_driver, + }, }; -struct usb_mux usbc1_sbu_mux = { - .usb_port = USBC_PORT_C1, - .driver = &ioex_sbu_mux_driver, +struct usb_mux_chain usbc1_sbu_mux = { + .mux = + &(const struct usb_mux){ + .usb_port = USBC_PORT_C1, + .driver = &ioex_sbu_mux_driver, + }, }; int baseboard_anx7483_c0_mux_set(const struct usb_mux *me, @@ -164,13 +170,16 @@ int baseboard_anx7483_c1_mux_set(const struct usb_mux *me, return EC_SUCCESS; } -struct usb_mux usbc0_anx7483 = { - .usb_port = USBC_PORT_C0, - .i2c_port = I2C_PORT_TCPC0, - .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS, - .driver = &anx7483_usb_retimer_driver, - .board_set = &baseboard_anx7483_c0_mux_set, - .next_mux = &usbc0_sbu_mux, +struct usb_mux_chain usbc0_anx7483 = { + .mux = + &(const struct usb_mux){ + .usb_port = USBC_PORT_C0, + .i2c_port = I2C_PORT_TCPC0, + .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS, + .driver = &anx7483_usb_retimer_driver, + .board_set = &baseboard_anx7483_c0_mux_set, + }, + .next = &usbc0_sbu_mux, }; __overridable int board_c1_ps8818_mux_set(const struct usb_mux *me, @@ -187,38 +196,48 @@ __overridable int board_c1_ps8818_mux_set(const struct usb_mux *me, return 0; } -struct usb_mux usbc1_ps8818 = { - .usb_port = USBC_PORT_C1, - .i2c_port = I2C_PORT_TCPC1, - .flags = USB_MUX_FLAG_RESETS_IN_G3, - .i2c_addr_flags = PS8818_I2C_ADDR_FLAGS, - .driver = &ps8818_usb_retimer_driver, - .board_set = &board_c1_ps8818_mux_set, +struct usb_mux_chain usbc1_ps8818 = { + .mux = + &(const struct usb_mux){ + .usb_port = USBC_PORT_C1, + .i2c_port = I2C_PORT_TCPC1, + .flags = USB_MUX_FLAG_RESETS_IN_G3, + .i2c_addr_flags = PS8818_I2C_ADDR_FLAGS, + .driver = &ps8818_usb_retimer_driver, + .board_set = &board_c1_ps8818_mux_set, + }, }; -struct usb_mux usbc1_anx7483 = { - .usb_port = USBC_PORT_C1, - .i2c_port = I2C_PORT_TCPC1, - .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS, - .driver = &anx7483_usb_retimer_driver, - .board_set = &baseboard_anx7483_c1_mux_set, - .next_mux = &usbc1_sbu_mux, +struct usb_mux_chain usbc1_anx7483 = { + .mux = + &(const struct usb_mux){ + .usb_port = USBC_PORT_C1, + .i2c_port = I2C_PORT_TCPC1, + .i2c_addr_flags = ANX7483_I2C_ADDR0_FLAGS, + .driver = &anx7483_usb_retimer_driver, + .board_set = &baseboard_anx7483_c1_mux_set, + }, + .next = &usbc1_sbu_mux, }; -struct usb_mux usb_muxes[] = { +struct usb_mux_chain usb_muxes[] = { [USBC_PORT_C0] = { - .usb_port = USBC_PORT_C0, - .i2c_port = I2C_PORT_USB_MUX, - .i2c_addr_flags = AMD_FP6_C0_MUX_I2C_ADDR, - .driver = &amd_fp6_usb_mux_driver, - .next_mux = &usbc0_anx7483, + .mux = &(const struct usb_mux) { + .usb_port = USBC_PORT_C0, + .i2c_port = I2C_PORT_USB_MUX, + .i2c_addr_flags = AMD_FP6_C0_MUX_I2C_ADDR, + .driver = &amd_fp6_usb_mux_driver, + }, + .next = &usbc0_anx7483, }, [USBC_PORT_C1] = { - .usb_port = USBC_PORT_C1, - .i2c_port = I2C_PORT_USB_MUX, - .i2c_addr_flags = AMD_FP6_C4_MUX_I2C_ADDR, - .driver = &amd_fp6_usb_mux_driver, - /* .next_mux = filled in by setup_mux based on fw_config */ + .mux = &(const struct usb_mux) { + .usb_port = USBC_PORT_C1, + .i2c_port = I2C_PORT_USB_MUX, + .i2c_addr_flags = AMD_FP6_C4_MUX_I2C_ADDR, + .driver = &amd_fp6_usb_mux_driver, + }, + /* .next = filled in by setup_mux based on fw_config */ } }; BUILD_ASSERT(ARRAY_SIZE(usb_muxes) == CONFIG_USB_PD_PORT_MAX_COUNT); @@ -258,10 +277,10 @@ static void setup_mux(void) if (val == FW_IO_DB_PS8811_PS8818) { CPRINTSUSB("C1: Setting PS8818 mux"); - usb_muxes[USBC_PORT_C1].next_mux = &usbc1_ps8818; + usb_muxes[USBC_PORT_C1].next = &usbc1_ps8818; } else if (val == FW_IO_DB_NONE_ANX7483) { CPRINTSUSB("C1: Setting ANX7483 mux"); - usb_muxes[USBC_PORT_C1].next_mux = &usbc1_anx7483; + usb_muxes[USBC_PORT_C1].next = &usbc1_anx7483; } else { CPRINTSUSB("Unexpected DB_IO board: %d", val); } -- cgit v1.2.1