diff options
-rw-r--r-- | zephyr/shim/src/ztest_system.c | 33 | ||||
-rw-r--r-- | zephyr/test/drivers/overlay.dts | 46 | ||||
-rw-r--r-- | zephyr/test/drivers/prj.conf | 8 | ||||
-rw-r--r-- | zephyr/test/drivers/src/stubs.c | 57 |
4 files changed, 101 insertions, 43 deletions
diff --git a/zephyr/shim/src/ztest_system.c b/zephyr/shim/src/ztest_system.c index 7da949dd84..7df64d3b2b 100644 --- a/zephyr/shim/src/ztest_system.c +++ b/zephyr/shim/src/ztest_system.c @@ -5,6 +5,10 @@ #include "system.h" #include "cros_version.h" +#include "battery.h" +#include "charge_manager.h" + +#define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ## args) /* Ongoing actions preventing going into deep-sleep mode. */ atomic_t sleep_mask; @@ -80,3 +84,32 @@ void system_reset(int flags) { __builtin_unreachable(); } + +int system_can_boot_ap(void) +{ + int soc = -1; + int pow = -1; + +#if defined(CONFIG_BATTERY) && \ + defined(CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON) + /* Require a minimum battery level to power on. If battery isn't + * present, battery_state_of_charge_abs returns false. + */ + if (battery_state_of_charge_abs(&soc) == EC_SUCCESS && + soc >= CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON) + return 1; +#endif + +#if defined(CONFIG_CHARGE_MANAGER) && \ + defined(CONFIG_CHARGER_MIN_POWER_MW_FOR_POWER_ON) + pow = charge_manager_get_power_limit_uw() / 1000; + if (pow >= CONFIG_CHARGER_MIN_POWER_MW_FOR_POWER_ON) + return 1; +#else + /* For fixed AC system */ + return 1; +#endif + + CPRINTS("Not enough power to boot (%d %%, %d mW)", soc, pow); + return 0; +} diff --git a/zephyr/test/drivers/overlay.dts b/zephyr/test/drivers/overlay.dts index f45210d621..ca38a578aa 100644 --- a/zephyr/test/drivers/overlay.dts +++ b/zephyr/test/drivers/overlay.dts @@ -89,6 +89,50 @@ gpios = <&gpio0 15 GPIO_INPUT>; enum-name = "GPIO_SWITCHCAP_PG_INT_L"; }; + gpio_ap_rst_l: ap_rst_l { + gpios = <&gpio0 16 GPIO_INPUT>; + enum-name = "GPIO_AP_RST_L"; + }; + gpio_ps_hold: ps_hold { + gpios = <&gpio0 17 (GPIO_INPUT | GPIO_PULL_DOWN)>; + enum-name = "GPIO_PS_HOLD"; + }; + gpio_mb_power_good: mb_power_good { + gpios = <&gpio0 18 (GPIO_INPUT | GPIO_PULL_DOWN)>; + enum-name = "GPIO_POWER_GOOD"; + }; + gpio_ap_suspend: ap_suspend { + gpios = <&gpio0 19 GPIO_INPUT>; + enum-name = "GPIO_AP_SUSPEND"; + }; + gpio_pmic_kpd_pwr_odl: pmic_kpd_pwr_odl { + gpios = <&gpio0 20 GPIO_ODR_HIGH>; + enum-name = "GPIO_PMIC_KPD_PWR_ODL"; + }; + gpio_pmic_resin_l: pmic_resin_l { + gpios = <&gpio0 21 GPIO_ODR_HIGH>; + enum-name = "GPIO_PMIC_RESIN_L"; + }; + gpio_warm_reset_l: warm_reset_l { + gpios = <&gpio0 22 GPIO_INPUT>; + enum-name = "GPIO_WARM_RESET_L"; + }; + gpio_lid_open_ec: lid_open_ec { + gpios = <&gpio0 23 GPIO_INPUT>; + enum-name = "GPIO_LID_OPEN"; + }; + gpio_switchcap_on: switchcap_on { + gpios = <&gpio0 24 GPIO_OUT_LOW>; + enum-name = "GPIO_SWITCHCAP_ON"; + }; + gpio_ec_pwr_btn_odl: ec_pwr_btn_odl { + gpios = <&gpio0 25 GPIO_INPUT>; + enum-name = "GPIO_POWER_BUTTON_L"; + }; + gpio_src_vph_pwr_pg: src_vph_pwr_pg { + gpios = <&gpio0 26 (GPIO_INPUT | GPIO_PULL_DOWN)>; + enum-name = "GPIO_SWITCHCAP_PG"; + }; }; named-i2c-ports { compatible = "named-i2c-ports"; @@ -566,7 +610,7 @@ }; &gpio0 { - ngpios = <16>; + ngpios = <27>; }; &i2c0 { diff --git a/zephyr/test/drivers/prj.conf b/zephyr/test/drivers/prj.conf index 1d79c2a840..a4cc8beead 100644 --- a/zephyr/test/drivers/prj.conf +++ b/zephyr/test/drivers/prj.conf @@ -113,3 +113,11 @@ CONFIG_PLATFORM_EC_POWERSEQ_PP5000_CONTROL=n # USB-C CONFIG_PLATFORM_EC_USBC_PPC_SYV682C=y CONFIG_PLATFORM_EC_USBC_PPC_SYV682X=y + +# Chipset for Herobrine +CONFIG_AP_ARM_QUALCOMM_SC7280=y +CONFIG_PLATFORM_EC_POWERSEQ_HOST_SLEEP=y + +CONFIG_PLATFORM_EC_LID_SWITCH=y +CONFIG_PLATFORM_EC_POWER_BUTTON=y +CONFIG_PLATFORM_EC_HOST_INTERFACE_ESPI=y
\ No newline at end of file diff --git a/zephyr/test/drivers/src/stubs.c b/zephyr/test/drivers/src/stubs.c index 9ebf768098..d46f899101 100644 --- a/zephyr/test/drivers/src/stubs.c +++ b/zephyr/test/drivers/src/stubs.c @@ -325,48 +325,6 @@ uint16_t tcpc_get_alert_status(void) return status; } -enum power_state power_chipset_init(void) -{ - return POWER_G3; -} - -enum power_state power_handle_state(enum power_state state) -{ - switch (state) { - case POWER_G3S5: - case POWER_S5S3: - case POWER_S3S0: - case POWER_S0S3: - case POWER_S3S5: - case POWER_S5G3: -#ifdef CONFIG_POWER_S0IX - case POWER_S0ixS0: - case POWER_S0S0ix: -#endif - /* - * Wait for event in transition states to prevent dead loop in - * chipset task - */ - task_wait_event(-1); - break; - default: - break; - } - - return state; -} - -void chipset_reset(enum chipset_shutdown_reason reason) -{ -} - -void chipset_force_shutdown(enum chipset_shutdown_reason reason) -{ -} - -/* Power signals list. Must match order of enum power_signal. */ -const struct power_signal_info power_signal_list[] = {}; - void tcpc_alert_event(enum gpio_signal signal) { int port; @@ -429,3 +387,18 @@ static void stubs_interrupt_init(void) gpio_enable_interrupt(GPIO_SWITCHCAP_PG_INT_L); } DECLARE_HOOK(HOOK_INIT, stubs_interrupt_init, HOOK_PRIO_INIT_I2C + 1); + +void board_set_switchcap_power(int enable) +{ + gpio_set_level(GPIO_SWITCHCAP_ON, enable); +} + +int board_is_switchcap_enabled(void) +{ + return gpio_get_level(GPIO_SWITCHCAP_ON); +} + +int board_is_switchcap_power_good(void) +{ + return gpio_get_level(GPIO_SWITCHCAP_PG); +} |