diff options
author | Diana Z <dzigterman@chromium.org> | 2023-04-20 10:57:48 -0600 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-05-08 19:51:03 +0000 |
commit | 1dbb4df1fb4a11c9c0b6c95c34a4b6dedbd4e32f (patch) | |
tree | 424e6e13a90482dfb2bc577db01052215d01c80d | |
parent | 7834245c40904dafda75f5102b089aa201644171 (diff) | |
download | chrome-ec-1dbb4df1fb4a11c9c0b6c95c34a4b6dedbd4e32f.tar.gz |
Skyrim: Keep retimer enabled in suspend
The A1 retimer needs to remain enabled in suspend in order to prevent
issues with USB detection on resume. Enable and disable on the
transition into/out of S5 instead.
BUG=b:273849234,b:280957965
TEST=on frostflow, ensure USB file transfer is able to resume after
suspend
Change-Id: I0186d54a76c14f3d0141fbeec75ed5b13aa599d7
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4455299
Tested-by: Diana Z <dzigterman@chromium.org>
Commit-Queue: Diana Z <dzigterman@chromium.org>
Reviewed-by: Robert Zieba <robertzieba@google.com>
-rw-r--r-- | zephyr/program/skyrim/frostflow/src/usb_mux_config.c | 4 | ||||
-rw-r--r-- | zephyr/program/skyrim/src/power_signals.c | 12 | ||||
-rw-r--r-- | zephyr/test/skyrim/tests/baseboard/src/power_signals.c | 18 |
3 files changed, 27 insertions, 7 deletions
diff --git a/zephyr/program/skyrim/frostflow/src/usb_mux_config.c b/zephyr/program/skyrim/frostflow/src/usb_mux_config.c index a46668b65c..c7c03bc8cb 100644 --- a/zephyr/program/skyrim/frostflow/src/usb_mux_config.c +++ b/zephyr/program/skyrim/frostflow/src/usb_mux_config.c @@ -183,7 +183,7 @@ test_export_static void board_resume_change(struct ap_power_ev_callback *cb, default: return; - case AP_POWER_RESUME: + case AP_POWER_STARTUP: /* Any retimer tuning can be done after the retimer turns on */ hook_call_deferred(&baseboard_a1_retimer_setup_data, 20 * MSEC); break; @@ -195,7 +195,7 @@ void board_callback_init(void) static struct ap_power_ev_callback cb; /* Setup a resume callback */ - ap_power_ev_init_callback(&cb, board_resume_change, AP_POWER_RESUME); + ap_power_ev_init_callback(&cb, board_resume_change, AP_POWER_STARTUP); ap_power_ev_add_callback(&cb); } DECLARE_HOOK(HOOK_INIT, board_callback_init, HOOK_PRIO_DEFAULT); diff --git a/zephyr/program/skyrim/src/power_signals.c b/zephyr/program/skyrim/src/power_signals.c index 5814359606..ede5d1ec75 100644 --- a/zephyr/program/skyrim/src/power_signals.c +++ b/zephyr/program/skyrim/src/power_signals.c @@ -65,9 +65,13 @@ baseboard_suspend_change(struct ap_power_ev_callback *cb, return; case AP_POWER_SUSPEND: - /* Disable display backlight and retimer */ + /* Disable display backlight */ gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(gpio_ec_disable_disp_bl), 1); + break; + + case AP_POWER_SHUTDOWN: + /* Retimer disable */ ioex_set_level(IOEX_USB_A1_RETIMER_EN, 0); break; @@ -75,6 +79,9 @@ baseboard_suspend_change(struct ap_power_ev_callback *cb, /* Enable retimer and display backlight */ gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(gpio_ec_disable_disp_bl), 0); + break; + + case AP_POWER_STARTUP: ioex_set_level(IOEX_USB_A1_RETIMER_EN, 1); /* Any retimer tuning can be done after the retimer turns on */ break; @@ -106,7 +113,8 @@ test_export_static void baseboard_init(void) /* Setup a suspend/resume callback */ ap_power_ev_init_callback(&cb, baseboard_suspend_change, - AP_POWER_RESUME | AP_POWER_SUSPEND); + AP_POWER_STARTUP | AP_POWER_SHUTDOWN | + AP_POWER_RESUME | AP_POWER_SUSPEND); ap_power_ev_add_callback(&cb); /* Enable Power Group interrupts. */ gpio_enable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_pg_groupc_s0)); diff --git a/zephyr/test/skyrim/tests/baseboard/src/power_signals.c b/zephyr/test/skyrim/tests/baseboard/src/power_signals.c index c4bfba04a7..82e42acaa1 100644 --- a/zephyr/test/skyrim/tests/baseboard/src/power_signals.c +++ b/zephyr/test/skyrim/tests/baseboard/src/power_signals.c @@ -87,19 +87,31 @@ ZTEST(power_signals, test_baseboard_suspend_change) { const struct gpio_dt_spec *gpio_ec_disable_disp_bl = GPIO_DT_FROM_NODELABEL(gpio_ec_disable_disp_bl); - const struct gpio_dt_spec *usb_a1_retimer_en = - GPIO_DT_FROM_NODELABEL(usb_a1_retimer_en); struct ap_power_ev_data data; data.event = AP_POWER_SUSPEND; baseboard_suspend_change(NULL, data); zassert_true(gpio_emul_output_get_dt(gpio_ec_disable_disp_bl)); - zassert_false(gpio_emul_output_get_dt(usb_a1_retimer_en)); data.event = AP_POWER_RESUME; baseboard_suspend_change(NULL, data); zassert_false(gpio_emul_output_get_dt(gpio_ec_disable_disp_bl)); +} + +ZTEST(power_signals, test_baseboard_shutdown_change) +{ + const struct gpio_dt_spec *usb_a1_retimer_en = + GPIO_DT_FROM_NODELABEL(usb_a1_retimer_en); + + struct ap_power_ev_data data; + + data.event = AP_POWER_SHUTDOWN; + baseboard_suspend_change(NULL, data); + zassert_false(gpio_emul_output_get_dt(usb_a1_retimer_en)); + + data.event = AP_POWER_STARTUP; + baseboard_suspend_change(NULL, data); zassert_true(gpio_emul_output_get_dt(usb_a1_retimer_en)); } |