[coreboot-gerrit] Change in coreboot[master]: chromeec: Make google_chromeec_wait_for_display wait for HPD
Daisuke Nojiri (Code Review)
gerrit at coreboot.org
Sat Feb 17 03:56:51 CET 2018
Daisuke Nojiri has uploaded this change for review. ( https://review.coreboot.org/23801
Change subject: chromeec: Make google_chromeec_wait_for_display wait for HPD
......................................................................
chromeec: Make google_chromeec_wait_for_display wait for HPD
Some type-c monitors do not immediately assert HPD. If we continue
to boot without HPD asserted, Depthcharge fails to show pictures
on a monitor even if HPD is asserted later.
This patch makes google_chromeec_wait_for_display wait until
EC_CMD_GET_HPD returns EC_RES_SUCCESS.
BUG=b:72387533
BRANCH=none
TEST=Verify Depthcharge can show dev warning screen on a type-c
monitor.
Change-Id: I07aee3bcca3bca93db66578014500b578402a4de
Signed-off-by: Daisuke Nojiri <dnojiri at chromium.org>
---
M src/ec/google/chromeec/ec.c
M src/ec/google/chromeec/ec_commands.h
2 files changed, 38 insertions(+), 4 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/01/23801/1
diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c
index c902c3f..1005266 100644
--- a/src/ec/google/chromeec/ec.c
+++ b/src/ec/google/chromeec/ec.c
@@ -986,7 +986,25 @@
return 0;
}
-const static long wait_for_display_timeout_ms = 2000;
+static int google_chromeec_get_hpd(void)
+{
+ struct chromeec_command cmd;
+ cmd.cmd_code = EC_CMD_GET_HPD;
+ cmd.cmd_version = 0;
+ cmd.cmd_data_in = NULL;
+ cmd.cmd_size_in = 0;
+ cmd.cmd_data_out = NULL;
+ cmd.cmd_size_out = 0;
+ cmd.cmd_dev_index = 0;
+ return google_chromeec_command(&cmd) == EC_RES_SUCCESS ? 1 : 0;
+}
+
+/*
+ * TODO: If no monitor is plugged in or other monitor port (e.g. HDMI) is used,
+ * this timeout always needs to expire. Make EC detect type-c device presence
+ * and abort earlier when waiting does not make sense.
+ */
+const static long wait_for_display_timeout_ms = 3000;
#define USB_SID_DISPLAYPORT 0xff01
@@ -994,17 +1012,31 @@
{
struct stopwatch sw;
- printk(BIOS_INFO, "Waiting for display\n");
+ printk(BIOS_INFO, "Waiting for DisplayPort\n");
stopwatch_init_msecs_expire(&sw, wait_for_display_timeout_ms);
while (google_chromeec_pd_get_amode(USB_SID_DISPLAYPORT) != 1) {
if (stopwatch_expired(&sw)) {
printk(BIOS_WARNING,
- "Display not ready after %ldms. Abort.\n",
+ "DisplayPort not ready after %ldms. Abort.\n",
wait_for_display_timeout_ms);
return;
}
mdelay(200);
}
- printk(BIOS_INFO, "Display ready after %lu ms\n",
+ printk(BIOS_INFO, "DisplayPort ready after %lu ms\n",
+ stopwatch_duration_msecs(&sw));
+
+ printk(BIOS_INFO, "Waiting for HPD\n");
+ stopwatch_init_msecs_expire(&sw, wait_for_display_timeout_ms);
+ while (!google_chromeec_get_hpd()) {
+ if (stopwatch_expired(&sw)) {
+ printk(BIOS_WARNING,
+ "HPD not ready after %ldms. Abort.\n",
+ wait_for_display_timeout_ms);
+ return;
+ }
+ mdelay(200);
+ }
+ printk(BIOS_INFO, "HPD ready after %lu ms\n",
stopwatch_duration_msecs(&sw));
}
diff --git a/src/ec/google/chromeec/ec_commands.h b/src/ec/google/chromeec/ec_commands.h
index 4f46fab..a5a5623 100644
--- a/src/ec/google/chromeec/ec_commands.h
+++ b/src/ec/google/chromeec/ec_commands.h
@@ -4420,6 +4420,8 @@
uint8_t data[]; /* For string and raw data */
};
+#define EC_CMD_GET_HPD 0x0121
+
/*****************************************************************************/
/* The command range 0x200-0x2FF is reserved for Rotor. */
--
To view, visit https://review.coreboot.org/23801
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I07aee3bcca3bca93db66578014500b578402a4de
Gerrit-Change-Number: 23801
Gerrit-PatchSet: 1
Gerrit-Owner: Daisuke Nojiri <dnojiri at chromium.org>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180217/209b10cc/attachment.html>
More information about the coreboot-gerrit
mailing list