summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2018-01-26 17:36:44 -0800
committerAaron Durbin <adurbin@chromium.org>2018-02-17 04:00:26 +0000
commitebb86be9fcaf64daa71e8ee3bff52c6982708a23 (patch)
tree565568e3bf50e7ce7e453c12a3f9d573fb8dad4f
parent476c2c5808a77508f31d47ce871c32a97c6e6eeb (diff)
chromeec: Add google_chromeec_wait_for_display
The google_chromeec_wait_for_display API checks whether a display is ready or not. It waits in a loop until EC says it entered DisplayPort alternative mode or times out in 2 seconds. BUG=b:72387533 BRANCH=none TEST=See 23746 "mb/google/fizz: Wait until display is ready" Change-Id: Ieee5db77bd6e147936ea8fc735dcbeffec98c0f8 Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-on: https://review.coreboot.org/23745 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
-rw-r--r--src/ec/google/chromeec/ec.c24
-rw-r--r--src/ec/google/chromeec/ec.h1
2 files changed, 25 insertions, 0 deletions
diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c
index 7fc360af64..764c6ac74f 100644
--- a/src/ec/google/chromeec/ec.c
+++ b/src/ec/google/chromeec/ec.c
@@ -29,6 +29,7 @@
#include <rtc.h>
#include <stdlib.h>
#include <security/vboot/vboot_common.h>
+#include <timer.h>
#include "chip.h"
#include "ec.h"
@@ -984,3 +985,26 @@ int google_chromeec_pd_get_amode(uint16_t svid)
return 0;
}
+
+const static long wait_for_display_timeout_ms = 2000;
+
+#define USB_SID_DISPLAYPORT 0xff01
+
+void google_chromeec_wait_for_display(void)
+{
+ struct stopwatch sw;
+
+ printk(BIOS_INFO, "Waiting for display\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",
+ wait_for_display_timeout_ms);
+ return;
+ }
+ mdelay(200);
+ }
+ printk(BIOS_INFO, "Display ready after %lu ms\n",
+ stopwatch_duration_msecs(&sw));
+}
diff --git a/src/ec/google/chromeec/ec.h b/src/ec/google/chromeec/ec.h
index 945e0b9891..1ff07b7117 100644
--- a/src/ec/google/chromeec/ec.h
+++ b/src/ec/google/chromeec/ec.h
@@ -37,6 +37,7 @@ bool google_chromeec_is_uhepi_supported(void);
int google_ec_running_ro(void);
void google_chromeec_init(void);
int google_chromeec_pd_get_amode(uint16_t svid);
+void google_chromeec_wait_for_display(void);
/* Device events */
uint64_t google_chromeec_get_device_enabled_events(void);