summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Yilun Lin <yllin@chromium.org>2023-04-07 16:26:53 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-05-12 09:46:42 +0000
commit58008e49b6ef5b75965fe4abc507597066860e64 (patch)
treecb6223458ba6c0b30b3dbe2b85d9148f32c8715c
parent71411640b887ca37c80783bef8ab4ec1d5a15c28 (diff)
downloadchrome-ec-58008e49b6ef5b75965fe4abc507597066860e64.tar.gz
kingler: add usbc test
This CL adds the initial USB-C tests on kingler BUG=b:272664811 TEST=twister -ci zephyr/test Change-Id: I14395ce84442f40e6fd05f7c14a2814fb24ebb9a Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4483240 Reviewed-by: Ting Shen <phoenixshen@chromium.org> Tested-by: Eric Yilun Lin <yllin@google.com> Auto-Submit: Eric Yilun Lin <yllin@google.com> Commit-Queue: Ting Shen <phoenixshen@chromium.org>
-rw-r--r--zephyr/program/corsola/include/variant_db_detection.h10
-rw-r--r--zephyr/program/corsola/npcx_adc.dtsi1
-rw-r--r--zephyr/test/kingler/CMakeLists.txt59
-rw-r--r--zephyr/test/kingler/Kconfig5
-rw-r--r--zephyr/test/kingler/common.dtsi112
-rw-r--r--zephyr/test/kingler/kingler.default.overlay1
-rw-r--r--zephyr/test/kingler/kingler.usbc.conf28
-rw-r--r--zephyr/test/kingler/kingler.usbc.overlay118
-rw-r--r--zephyr/test/kingler/prj.conf4
-rw-r--r--zephyr/test/kingler/src/fakes.c12
-rw-r--r--zephyr/test/kingler/src/kingler_usbc.c78
-rw-r--r--zephyr/test/kingler/testcase.yaml8
12 files changed, 358 insertions, 78 deletions
diff --git a/zephyr/program/corsola/include/variant_db_detection.h b/zephyr/program/corsola/include/variant_db_detection.h
index e98ba3067d..cf86e1ae1c 100644
--- a/zephyr/program/corsola/include/variant_db_detection.h
+++ b/zephyr/program/corsola/include/variant_db_detection.h
@@ -8,6 +8,8 @@
#ifndef __CROS_EC_CORSOLA_DB_DETECTION_H
#define __CROS_EC_CORSOLA_DB_DETECTION_H
+#include <stdint.h>
+
enum corsola_db_type {
CORSOLA_DB_UNINIT = -1,
CORSOLA_DB_NONE,
@@ -16,19 +18,19 @@ enum corsola_db_type {
CORSOLA_DB_COUNT,
};
-#ifdef CONFIG_VARIANT_CORSOLA_DB_DETECTION
/*
* Get the connected daughterboard type.
*
* @return The daughterboard type.
*/
+#ifdef CONFIG_VARIANT_CORSOLA_DB_DETECTION
enum corsola_db_type corsola_get_db_type(void);
-#else
+#elif !defined(CONFIG_TEST)
inline enum corsola_db_type corsola_get_db_type(void)
{
return CORSOLA_DB_NONE;
-};
-#endif /* CONFIG_VARIANT_CORSOLA_DB_DETECTION */
+}
+#endif
/* return the adjusted port count for board overridden usbc/charger functions.
*/
diff --git a/zephyr/program/corsola/npcx_adc.dtsi b/zephyr/program/corsola/npcx_adc.dtsi
index 7b69abe48a..cd6a9c1bef 100644
--- a/zephyr/program/corsola/npcx_adc.dtsi
+++ b/zephyr/program/corsola/npcx_adc.dtsi
@@ -7,6 +7,7 @@
* Kingler and Steelix use the same dts, take care of this when modify it.
*/
+
/ {
named-adc-channels {
compatible = "named-adc-channels";
diff --git a/zephyr/test/kingler/CMakeLists.txt b/zephyr/test/kingler/CMakeLists.txt
index 0cecc14b8f..f361e6eb3e 100644
--- a/zephyr/test/kingler/CMakeLists.txt
+++ b/zephyr/test/kingler/CMakeLists.txt
@@ -12,27 +12,38 @@ zephyr_include_directories("${PLATFORM_EC_PROGRAM_DIR}/corsola/include")
target_sources(app PRIVATE src/fakes.c)
-target_sources_ifdef(CONFIG_TEST_STEELIX_RUSTY
-app PRIVATE ${PLATFORM_EC_PROGRAM_DIR}/corsola/steelix/src/board.c)
-target_sources_ifdef(CONFIG_TEST_FORM_FACTOR_CONVERTIBLE
- app PRIVATE src/tablet.c)
-target_sources_ifdef(CONFIG_TEST_FORM_FACTOR_CLAMSHELL
- app PRIVATE src/clamshell.c)
-target_sources_ifdef(CONFIG_VARIANT_CORSOLA_DB_DETECTION
-app PRIVATE ${PLATFORM_EC_PROGRAM_DIR}/corsola/src/variant_db_detection.c)
-target_sources_ifdef(CONFIG_TEST_DB_DETECT_TYPEC
- app PRIVATE src/db_detect_typec.c)
-target_sources_ifdef(CONFIG_TEST_DB_DETECT_HDMI
- app PRIVATE src/db_detect_hdmi.c
- ${PLATFORM_EC}/zephyr/shim/src/usb_muxes.c
- ${PLATFORM_EC}/driver/usb_mux/usb_mux.c
- ${PLATFORM_EC}/driver/usb_mux/virtual.c)
-target_sources_ifdef(CONFIG_TEST_DB_DETECT_NONE
- app PRIVATE src/db_detect_none.c)
-target_sources_ifdef(CONFIG_TEST_ALT_SENSOR_PROBE
- app PRIVATE src/alt_sensor.c)
-target_sources_ifdef(CONFIG_TEST_KINGLER_CCD
-app PRIVATE src/ccd.c ${PLATFORM_EC_PROGRAM_DIR}/corsola/src/board.c)
-target_sources_ifdef(CONFIG_TEST_VOLTORB
- app PRIVATE src/voltorb_usbc.c
- ${PLATFORM_EC_PROGRAM_DIR}/corsola/voltorb/src/usbc.c)
+target_sources_ifdef(
+ CONFIG_TEST_KINGLER_USBC
+ app
+ PRIVATE
+ ${PLATFORM_EC_PROGRAM_DIR}/corsola/src/npcx_usbc.c
+ ${PLATFORM_EC_PROGRAM_DIR}/corsola/src/npcx_usb_pd_policy.c
+ ${PLATFORM_EC_PROGRAM_DIR}/corsola/src/usb_pd_policy.c
+ ${PLATFORM_EC_PROGRAM_DIR}/corsola/src/usbc.c
+ src/kingler_usbc.c)
+target_sources_ifdef(CONFIG_TEST_STEELIX_RUSTY app PRIVATE
+ ${PLATFORM_EC_PROGRAM_DIR}/corsola/steelix/src/board.c)
+target_sources_ifdef(CONFIG_TEST_FORM_FACTOR_CONVERTIBLE app PRIVATE
+ src/tablet.c)
+target_sources_ifdef(CONFIG_TEST_FORM_FACTOR_CLAMSHELL app PRIVATE
+ src/clamshell.c)
+target_sources_ifdef(
+ CONFIG_VARIANT_CORSOLA_DB_DETECTION app PRIVATE
+ ${PLATFORM_EC_PROGRAM_DIR}/corsola/src/variant_db_detection.c)
+target_sources_ifdef(CONFIG_TEST_DB_DETECT_TYPEC app PRIVATE
+ src/db_detect_typec.c)
+target_sources_ifdef(
+ CONFIG_TEST_DB_DETECT_HDMI
+ app
+ PRIVATE
+ src/db_detect_hdmi.c
+ ${PLATFORM_EC}/zephyr/shim/src/usb_muxes.c
+ ${PLATFORM_EC}/driver/usb_mux/usb_mux.c
+ ${PLATFORM_EC}/driver/usb_mux/virtual.c)
+target_sources_ifdef(CONFIG_TEST_DB_DETECT_NONE app PRIVATE
+ src/db_detect_none.c)
+target_sources_ifdef(CONFIG_TEST_ALT_SENSOR_PROBE app PRIVATE src/alt_sensor.c)
+target_sources_ifdef(CONFIG_TEST_KINGLER_CCD app PRIVATE src/ccd.c
+ ${PLATFORM_EC_PROGRAM_DIR}/corsola/src/board.c)
+target_sources_ifdef(CONFIG_TEST_VOLTORB app PRIVATE src/voltorb_usbc.c
+ ${PLATFORM_EC_PROGRAM_DIR}/corsola/voltorb/src/usbc.c)
diff --git a/zephyr/test/kingler/Kconfig b/zephyr/test/kingler/Kconfig
index a8449fe8c6..4cde54ce6d 100644
--- a/zephyr/test/kingler/Kconfig
+++ b/zephyr/test/kingler/Kconfig
@@ -2,6 +2,11 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+config TEST_KINGLER_USBC
+ bool "Run the tests intended for kingler"
+ help
+ Include USB-C tests into the binary.
+
config TEST_STEELIX_RUSTY
bool "Run the tests intended for steelix and rusty"
help
diff --git a/zephyr/test/kingler/common.dtsi b/zephyr/test/kingler/common.dtsi
index c04844f227..e3b03c57a8 100644
--- a/zephyr/test/kingler/common.dtsi
+++ b/zephyr/test/kingler/common.dtsi
@@ -4,7 +4,9 @@
*/
#include <board-overlays/native_posix.dts>
+#include <dt-bindings/usb_pd_tcpm.h>
#include <npcx_emul.dts>
+#include <zephyr/dt-bindings/gpio/gpio.h>
/ {
usbc {
@@ -25,6 +27,11 @@
compatible = "cros-ec,usb-mux-chain";
usb-muxes = <&virtual_mux_1>;
};
+ usb_mux_chain_1_hdmi_db: usb-mux-chain-1-hdmi-db {
+ compatible = "cros-ec,usb-mux-chain";
+ alternative-chain;
+ usb-muxes = <&virtual_mux_1>;
+ };
};
port0-muxes {
virtual_mux_0: virtual-mux-0 {
@@ -38,6 +45,41 @@
};
};
+ adc0: adc {
+ compatible = "zephyr,adc-emul";
+ nchannels = <6>;
+ ref-internal-mv = <3300>;
+ #io-channel-cells = <1>;
+ status = "okay";
+ };
+
+ named-adc-channels {
+ compatible = "named-adc-channels";
+
+ adc_charger_pmon_r {
+ enum-name = "ADC_PSYS";
+ io-channels = <&adc0 0>;
+ /*
+ * ISL9238C PSYS output is 1.44 uA/W over 33K resistor.
+ */
+ mul = <21043>;
+ };
+ adc_ec_id0 {
+ enum-name = "ADC_ID_0";
+ io-channels = <&adc0 1>;
+ };
+ adc_ec_id1 {
+ enum-name = "ADC_ID_1";
+ io-channels = <&adc0 2>;
+ };
+ adc_charger_amon_r {
+ enum-name = "ADC_AMON_BMON";
+ io-channels = <&adc0 3>;
+ mul = <1000>;
+ div = <18>;
+ };
+ };
+
/* These are temporary just to get the test to build.
* Should be replaced with the correct accel drivers,
* but we're not testing that code right now anyway.
@@ -81,36 +123,17 @@
/* list of sensors in force mode */
accel-force-mode-sensors = <&lid_accel>;
};
+
named-i2c-ports {
compatible = "named-i2c-ports";
i2c_sensor: i2c-sensor {
- i2c-port = <&i2c0_0>;
+ i2c-port = <&i2c_ctrl0>;
enum-names = "I2C_PORT_SENSOR";
};
i2c_eeprom: i2c-eeprom {
- i2c-port = <&i2c3_0>;
- enum-names = "I2C_PORT_EEPROM";
- };
- };
- /* TODO(jbettis): Move the i2c ports and pinctrls to npcx_emul.dts,
- * and add all of them instead of just these.
- */
- soc-if {
- i2c0_0: io_i2c_ctrl0_port0 {
- compatible = "nuvoton,npcx-i2c-port";
- #address-cells = <1>;
- #size-cells = <0>;
- port = <0x00>;
- controller = <&i2c_ctrl0>;
- status = "disabled";
- };
- i2c3_0: io_i2c_ctrl3_port0 {
- compatible = "nuvoton,npcx-i2c-port";
- #address-cells = <1>;
- #size-cells = <0>;
- port = <0x30>;
- controller = <&i2c_ctrl3>;
- status = "disabled";
+ i2c-port = <&i2c_ctrl3>;
+ enum-names = "I2C_PORT_EEPROM", "I2C_PORT_BATTERY",
+ "I2C_PORT_CHARGER";
};
};
pinctrl: pinctrl {
@@ -138,43 +161,31 @@
};
};
-&i2c0_0 {
- status = "okay";
- clock-frequency = <I2C_BITRATE_FAST>;
- pinctrl-0 = <&i2c0_0_sda_scl_gpb4_b5>;
- pinctrl-names = "default";
-};
-
&i2c_ctrl0 {
status = "okay";
-};
-&i2c_ctrl2 {
- status = "okay";
-};
-i2c_pwr_cbi: &i2c3_0 {
- status = "okay";
- clock-frequency = <I2C_BITRATE_FAST>;
- pinctrl-0 = <&i2c3_0_sda_scl_gpd0_d1>;
- pinctrl-names = "default";
-
- charger: isl923x@9 {
- compatible = "intersil,isl923x";
+ battery: sb@b {
+ compatible = "zephyr,smart-battery-emul";
status = "okay";
- reg = <0x9>;
+ reg = <0xb>;
+ cycle-count = <99>;
+ version = "BATTERY_SPEC_VER_1_1_WITH_PEC";
+ /* Real battery voltages are multiples of 4.4V. */
+ desired-charg-volt = <5000>;
+ desired-charg-cur = <1000>;
+ mf-name = "LGC";
+ dev-name = "AC17A8M";
};
};
-&i2c_ctrl3 {
+&i2c_ctrl2 {
status = "okay";
};
-&i2c_ctrl5 {
+&i2c_ctrl3 {
status = "okay";
-};
-&i2c_ctrl3 {
cbi_eeprom: eeprom@50 {
compatible = "atmel,at24";
reg = <0x50>;
@@ -184,3 +195,8 @@ i2c_pwr_cbi: &i2c3_0 {
timeout = <5>;
};
};
+
+&i2c_ctrl5 {
+ status = "okay";
+};
+
diff --git a/zephyr/test/kingler/kingler.default.overlay b/zephyr/test/kingler/kingler.default.overlay
index 908022f5e2..adc3f89451 100644
--- a/zephyr/test/kingler/kingler.default.overlay
+++ b/zephyr/test/kingler/kingler.default.overlay
@@ -6,3 +6,4 @@
#include "common.dtsi"
#include "../program/corsola/npcx_interrupts.dtsi"
#include "../program/corsola/npcx_gpio.dtsi"
+#include "../program/corsola/usba.dtsi"
diff --git a/zephyr/test/kingler/kingler.usbc.conf b/zephyr/test/kingler/kingler.usbc.conf
new file mode 100644
index 0000000000..cb04e5c550
--- /dev/null
+++ b/zephyr/test/kingler/kingler.usbc.conf
@@ -0,0 +1,28 @@
+# Copyright 2023 The ChromiumOS Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+CONFIG_PLATFORM_EC_TCPC_INTERRUPT=y
+CONFIG_PLATFORM_EC_USB_PORT_POWER_DUMB=y
+CONFIG_PLATFORM_EC_USBC=y
+CONFIG_PLATFORM_EC_USB_PORT_POWER_DUMB_CUSTOM_HOOK=y
+CONFIG_PLATFORM_EC_USBC_PPC=y
+CONFIG_PLATFORM_EC_BATTERY_FUEL_GAUGE=y
+CONFIG_PLATFORM_EC_VBOOT_HASH=n
+CONFIG_PLATFORM_EC_SWITCH=n
+CONFIG_PLATFORM_EC_USB_PD_DISCHARGE_PPC=y
+CONFIG_PLATFORM_EC_USB_PD_VBUS_MEASURE_BY_BOARD=y
+CONFIG_PLATFORM_EC_CHARGER_SENSE_RESISTOR=10
+CONFIG_PLATFORM_EC_CHARGER_SENSE_RESISTOR_AC=20
+CONFIG_PLATFORM_EC_EXTPOWER=y
+CONFIG_PLATFORM_EC_HOSTCMD=y
+CONFIG_PLATFORM_EC_USB_PD_TCPM_ANX7447=y
+CONFIG_VARIANT_CORSOLA_DB_DETECTION=n
+CONFIG_PLATFORM_EC_BACKLIGHT_LID=n
+CONFIG_PLATFORM_EC_CHARGER_ISL9238C=y
+CONFIG_PLATFORM_EC_CHARGE_MANAGER=y
+CONFIG_PLATFORM_EC_CHARGER=y
+CONFIG_PLATFORM_EC_LID_SWITCH=y
+CONFIG_PLATFORM_EC_CHARGE_RAMP_HW=y
+CONFIG_PLATFORM_EC_USB_CHARGER=y
+CONFIG_PLATFORM_EC_USB_PD_TCPM_ANX7447=y
diff --git a/zephyr/test/kingler/kingler.usbc.overlay b/zephyr/test/kingler/kingler.usbc.overlay
new file mode 100644
index 0000000000..b697edf791
--- /dev/null
+++ b/zephyr/test/kingler/kingler.usbc.overlay
@@ -0,0 +1,118 @@
+/* Copyright 2023 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include <zephyr/dt-bindings/gpio/gpio.h>
+#include <dt-bindings/usb_pd_tcpm.h>
+
+#include "common.dtsi"
+#include "../program/corsola/npcx_interrupts.dtsi"
+#include "../program/corsola/npcx_gpio.dtsi"
+#include "../program/corsola/usba.dtsi"
+
+/ {
+ usbc {
+ port0@0 {
+ bc12 = <&pi3usb9201_emul0>;
+ tcpc = <&anx7447_emul0>;
+ ppc = <&nx20p348x_emul0>;
+ chg = <&charger_emul>;
+ usb-mux-chain-0 {
+ compatible = "cros-ec,usb-mux-chain";
+ usb-muxes = <&virtual_mux_0>;
+ };
+ };
+
+ port1@1 {
+ /* We have rt1718s emulator, but use tcpci_emul instead
+ * for better test integration of the GPIO pin control.
+ */
+ tcpc = <&rt1718s_emul1>;
+ ppc = <&nx20p348x_emul1>;
+ usb_mux_chain_1_hdmi_db: usb-mux-chain-1-hdmi-db {
+ compatible = "cros-ec,usb-mux-chain";
+ alternative-chain;
+ usb-muxes = <&virtual_mux_1>;
+ };
+ };
+ };
+
+ batteries {
+ default_battery: lgc_ac17a8m {
+ compatible = "lgc,ac17a8m", "battery-smart";
+ /**
+ * this has to be strictly lower than the desired
+ * voltage in smart battery emulator (5000mV).
+ */
+ voltage_min = <4000>;
+ };
+ };
+};
+
+&i2c_ctrl0 {
+ anx7447_emul0: anx7447_emul@2c {
+ compatible = "cros,anx7447-tcpc-emul";
+ status = "okay";
+ reg = <0x2c>;
+ tcpc-flags = <(
+ TCPC_FLAGS_VBUS_MONITOR |
+ TCPC_FLAGS_ALERT_OD |
+ TCPC_FLAGS_CONTROL_VCONN |
+ TCPC_FLAGS_CONTROL_FRS)>;
+ };
+
+ /* TODO: drop this node when the Kconfig dependency is fixed. */
+ tcpci_emul0: tcpci_emul@82 {
+ compatible = "cros,tcpci-generic-emul";
+ status = "okay";
+ reg = <0x82>;
+ };
+
+ nx20p348x_emul0: nx20p348x_emul@71 {
+ compatible = "nxp,nx20p348x";
+ status = "okay";
+ reg = <0x71>;
+ irq-gpios = < &gpio6 7 GPIO_ACTIVE_HIGH>;
+ };
+
+ pi3usb9201_emul0: pi3usb9201@5d {
+ compatible = "pericom,pi3usb9201";
+ reg = <0x5d>;
+ irq = <&int_usb_c0_bc12>;
+ };
+};
+
+&i2c_ctrl3 {
+ status = "okay";
+
+ charger_emul: isl923x@9 {
+ compatible = "cros,isl923x-emul";
+ status = "okay";
+ reg = <0x9>;
+ battery = <&battery>;
+ };
+
+ rt1718s_emul1: rt1718s_emul@2c {
+ compatible = "cros,rt1718s-tcpc-emul", "richtek,rt1718s-tcpc";
+ status = "okay";
+ reg = <0x2c>;
+ tcpc-flags = <(TCPC_FLAGS_ALERT_OD |
+ TCPC_FLAGS_CONTROL_VCONN |
+ TCPC_FLAGS_CONTROL_FRS)>;
+ };
+
+ /* TODO: drop this node when the Kconfig dependency is fixed. */
+ tcpci_emul1: tcpci_emul@82 {
+ compatible = "cros,tcpci-generic-emul";
+ status = "okay";
+ reg = <0x82>;
+ };
+
+ nx20p348x_emul1: nx20p348x_emul@71 {
+ compatible = "nxp,nx20p348x";
+ status = "okay";
+ reg = <0x71>;
+ irq-gpios = < &gpiod 4 GPIO_ACTIVE_HIGH >;
+ };
+};
diff --git a/zephyr/test/kingler/prj.conf b/zephyr/test/kingler/prj.conf
index 17ffd4fb17..bfa73043cd 100644
--- a/zephyr/test/kingler/prj.conf
+++ b/zephyr/test/kingler/prj.conf
@@ -12,6 +12,7 @@ CONFIG_PLATFORM_EC_HOOKS=y
CONFIG_CROS_EC=y
CONFIG_PLATFORM_EC=y
+CONFIG_PLATFORM_EC_GPIO_INIT_PRIORITY=49
CONFIG_PLATFORM_EC_DYNAMIC_MOTION_SENSOR_COUNT=y
CONFIG_PLATFORM_EC_GMR_TABLET_MODE=y
CONFIG_PLATFORM_EC_TABLET_MODE=y
@@ -23,3 +24,6 @@ CONFIG_PLATFORM_EC_BOARD_VERSION_CBI=y
CONFIG_EEPROM=y
CONFIG_EEPROM_SIMULATOR=n
CONFIG_EMUL_EEPROM_AT2X=y
+
+CONFIG_LOG=y
+CONFIG_LOG_MODE_MINIMAL=y
diff --git a/zephyr/test/kingler/src/fakes.c b/zephyr/test/kingler/src/fakes.c
index 412e02fef9..6c67447e88 100644
--- a/zephyr/test/kingler/src/fakes.c
+++ b/zephyr/test/kingler/src/fakes.c
@@ -9,16 +9,24 @@
FAKE_VOID_FUNC(power_button_interrupt, enum gpio_signal);
FAKE_VOID_FUNC(button_interrupt, enum gpio_signal);
-FAKE_VOID_FUNC(lid_interrupt, enum gpio_signal);
FAKE_VOID_FUNC(chipset_reset_request_interrupt, enum gpio_signal);
FAKE_VOID_FUNC(power_signal_interrupt, enum gpio_signal);
FAKE_VOID_FUNC(chipset_watchdog_interrupt, enum gpio_signal);
FAKE_VOID_FUNC(extpower_interrupt, enum gpio_signal);
-FAKE_VOID_FUNC(xhci_interrupt, enum gpio_signal);
FAKE_VOID_FUNC(switch_interrupt, enum gpio_signal);
+#ifndef CONFIG_TEST_KINGLER_USBC
+FAKE_VOID_FUNC(xhci_interrupt, enum gpio_signal);
+FAKE_VOID_FUNC(lid_interrupt, enum gpio_signal);
+FAKE_VOID_FUNC(usb_a0_interrupt, enum gpio_signal);
FAKE_VOID_FUNC(tcpc_alert_event, enum gpio_signal);
FAKE_VOID_FUNC(ppc_interrupt, enum gpio_signal);
FAKE_VOID_FUNC(bc12_interrupt, enum gpio_signal);
+FAKE_VOID_FUNC(pd_power_supply_reset, int);
+FAKE_VOID_FUNC(pd_set_power_supply_ready, int);
+FAKE_VALUE_FUNC(int, board_set_active_charge_port, int);
+FAKE_VALUE_FUNC(int, pd_snk_is_vbus_provided, int);
+FAKE_VALUE_FUNC(int, pd_check_vconn_swap, int);
+#endif
FAKE_VOID_FUNC(chipset_warm_reset_interrupt, enum gpio_signal);
#ifndef CONFIG_TEST_KINGLER_CCD
FAKE_VOID_FUNC(ccd_interrupt, enum gpio_signal);
diff --git a/zephyr/test/kingler/src/kingler_usbc.c b/zephyr/test/kingler/src/kingler_usbc.c
new file mode 100644
index 0000000000..afd8cdbccd
--- /dev/null
+++ b/zephyr/test/kingler/src/kingler_usbc.c
@@ -0,0 +1,78 @@
+/* Copyright 2023 The ChromiumOS Authors
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "driver/tcpm/tcpm.h"
+#include "ec_app_main.h"
+#include "usb_charge.h"
+#include "usb_pd.h"
+#include "usbc_ppc.h"
+#include "variant_db_detection.h"
+
+#include <zephyr/drivers/gpio/gpio_emul.h>
+#include <zephyr/fff.h>
+#include <zephyr/kernel.h>
+#include <zephyr/logging/log.h>
+#include <zephyr/ztest.h>
+
+#define LOG_LEVEL 0
+LOG_MODULE_REGISTER(npcx_usbc);
+
+FAKE_VALUE_FUNC(enum corsola_db_type, corsola_get_db_type);
+FAKE_VALUE_FUNC(bool, in_interrupt_context);
+FAKE_VOID_FUNC(bmi3xx_interrupt);
+FAKE_VOID_FUNC(hdmi_hpd_interrupt);
+FAKE_VOID_FUNC(ps185_hdmi_hpd_mux_set);
+FAKE_VALUE_FUNC(bool, ps8743_field_update, const struct usb_mux *, uint8_t,
+ uint8_t, uint8_t);
+
+#define FFF_FAKES_LIST(FAKE) \
+ FAKE(corsola_get_db_type) \
+ FAKE(in_interrupt_context) \
+ FAKE(bmi3xx_interrupt) \
+ FAKE(hdmi_hpd_interrupt) \
+ FAKE(ps185_hdmi_hpd_mux_set) \
+ FAKE(ps8743_field_update)
+
+struct kingler_usbc_fixture {
+ int place_holder;
+};
+
+static void *kingler_usbc_setup(void)
+{
+ static struct kingler_usbc_fixture f;
+
+ return &f;
+}
+
+static void kingler_usbc_reset_rule_before(const struct ztest_unit_test *test,
+ void *data)
+{
+ ARG_UNUSED(test);
+ ARG_UNUSED(data);
+ FFF_FAKES_LIST(RESET_FAKE);
+ FFF_RESET_HISTORY();
+}
+
+ZTEST_RULE(kingler_usbc_reset_rule, kingler_usbc_reset_rule_before, NULL);
+ZTEST_SUITE(kingler_usbc, NULL, kingler_usbc_setup, NULL, NULL, NULL);
+
+ZTEST_F(kingler_usbc, test_power_supply)
+{
+ pd_power_supply_reset(0);
+ zassert_equal(0, ppc_is_sourcing_vbus(0));
+ zassert_equal(0, ppc_is_sourcing_vbus(1));
+
+ zassert_equal(EC_SUCCESS, pd_set_power_supply_ready(0));
+ zassert_equal(1, ppc_is_sourcing_vbus(0));
+ zassert_equal(0, ppc_is_sourcing_vbus(1));
+
+ pd_power_supply_reset(0);
+ zassert_equal(0, ppc_is_sourcing_vbus(0));
+ zassert_equal(0, ppc_is_sourcing_vbus(1));
+
+ /* TODO: test C1 port after resolve the PPC emulator always accessing
+ * the same one with different index.
+ */
+}
diff --git a/zephyr/test/kingler/testcase.yaml b/zephyr/test/kingler/testcase.yaml
index 04e580fe22..6bfa6f7b7e 100644
--- a/zephyr/test/kingler/testcase.yaml
+++ b/zephyr/test/kingler/testcase.yaml
@@ -1,6 +1,14 @@
common:
platform_allow: native_posix
tests:
+ kingler.usbc:
+ extra_configs:
+ - CONFIG_TEST_KINGLER_USBC=y
+ extra_conf_files:
+ - prj.conf
+ - kingler.usbc.conf
+ extra_dtc_overlay_files:
+ - kingler.usbc.overlay
kingler.steelix:
extra_configs:
- CONFIG_TEST_STEELIX_RUSTY=y