summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2023-04-20 10:57:48 -0600
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-05-08 19:51:03 +0000
commit1dbb4df1fb4a11c9c0b6c95c34a4b6dedbd4e32f (patch)
tree424e6e13a90482dfb2bc577db01052215d01c80d
parent7834245c40904dafda75f5102b089aa201644171 (diff)
downloadchrome-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.c4
-rw-r--r--zephyr/program/skyrim/src/power_signals.c12
-rw-r--r--zephyr/test/skyrim/tests/baseboard/src/power_signals.c18
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));
}