Tim Wawrzynczak submitted this change.

View Change

Approvals: build bot (Jenkins): Verified Furquan Shaikh: Looks good to me, approved
ec/google/chromeec: Update some PD and DisplayPort APIs

1. Update google_chromeec_pd_get_amode() to return bitmask.
2. Update google_chromeec_wait_for_displayport() to handle the
updated return value of google_chromeec_pd_get_amode().
3. Drop google_chromeec_pd_get_amode() from ec.h and make it static
because it's not used outside of ec.c.

BUG=b:192947843

Signed-off-by: Derek Huang <derek.huang@intel.corp-partner.google.com>
Change-Id: I6020c4305e30018d4c97d862c16e8d642c951765
Reviewed-on: https://review.coreboot.org/c/coreboot/+/58058
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
---
M src/ec/google/chromeec/ec.c
M src/ec/google/chromeec/ec.h
2 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c
index 650fd14..9086693 100644
--- a/src/ec/google/chromeec/ec.c
+++ b/src/ec/google/chromeec/ec.c
@@ -1542,9 +1542,10 @@
* Check if EC/TCPM is in an alternate mode or not.
*
* @param svid SVID of the alternate mode to check
- * @return 0: Not in the mode. -1: Error. 1: Yes.
+ * @return 0: Not in the mode. -1: Error.
+ * >=1: bitmask of the ports that are in the mode.
*/
-int google_chromeec_pd_get_amode(uint16_t svid)
+static int google_chromeec_pd_get_amode(uint16_t svid)
{
struct ec_response_usb_pd_ports resp;
struct chromeec_command cmd = {
@@ -1557,6 +1558,7 @@
.cmd_dev_index = 0,
};
int i;
+ int ret = 0;

if (google_chromeec_command(&cmd) < 0)
return -1;
@@ -1582,12 +1584,12 @@
if (google_chromeec_command(&cmd) < 0)
return -1;
if (resp2.svid == svid)
- return 1;
+ ret |= BIT(i);
svid_idx++;
} while (resp2.svid);
}

- return 0;
+ return ret;
}

#define USB_SID_DISPLAYPORT 0xff01
@@ -1595,20 +1597,31 @@
/**
* Wait for DisplayPort to be ready
*
- * @param timeout Wait aborts after <timeout> ms.
- * @return 1: Success or 0: Timeout.
+ * @param timeout_ms Wait aborts after <timeout_ms> ms.
+ * @return -1: Error. 0: Timeout.
+ * >=1: Bitmask of the ports that DP device is connected
*/
-int google_chromeec_wait_for_displayport(long timeout)
+int google_chromeec_wait_for_displayport(long timeout_ms)
{
struct stopwatch sw;
+ int ret = 0;

printk(BIOS_INFO, "Waiting for DisplayPort\n");
- stopwatch_init_msecs_expire(&sw, timeout);
- while (google_chromeec_pd_get_amode(USB_SID_DISPLAYPORT) != 1) {
+ stopwatch_init_msecs_expire(&sw, timeout_ms);
+ while (1) {
+ ret = google_chromeec_pd_get_amode(USB_SID_DISPLAYPORT);
+ if (ret > 0)
+ break;
+
+ if (ret < 0) {
+ printk(BIOS_ERR, "Can't get alternate mode!\n");
+ return ret;
+ }
+
if (stopwatch_expired(&sw)) {
printk(BIOS_WARNING,
"DisplayPort not ready after %ldms. Abort.\n",
- timeout);
+ timeout_ms);
return 0;
}
mdelay(200);
@@ -1616,7 +1629,7 @@
printk(BIOS_INFO, "DisplayPort ready after %lu ms\n",
stopwatch_duration_msecs(&sw));

- return 1;
+ return ret;
}

int google_chromeec_get_keybd_config(struct ec_response_keybd_config *keybd)
diff --git a/src/ec/google/chromeec/ec.h b/src/ec/google/chromeec/ec.h
index ebb7ae2..6fa58a9 100644
--- a/src/ec/google/chromeec/ec.h
+++ b/src/ec/google/chromeec/ec.h
@@ -26,7 +26,6 @@
int google_ec_running_ro(void);
enum ec_image google_chromeec_get_current_image(void);
void google_chromeec_init(void);
-int google_chromeec_pd_get_amode(uint16_t svid);
/* Check for the current mux state in EC
* in: int port physical port number of the type-c port
* out: uint8_t flags representing the status of the mux such as
@@ -36,7 +35,11 @@
/* Returns data role and type of device connected */
int google_chromeec_usb_pd_get_info(int port, bool *ufp, bool *dbg_acc,
bool *active_cable, uint8_t *dp_mode);
-int google_chromeec_wait_for_displayport(long timeout);
+/* Poll (up to `timeout_ms` ms) for DisplayPort to be ready
+ * Return: -1: Error. 0: Timeout.
+ * >=1: Bitmask of the ports that DP device is connected
+ */
+int google_chromeec_wait_for_displayport(long timeout_ms);

/* Device events */
uint64_t google_chromeec_get_device_enabled_events(void);

2 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one.

To view, visit change 58058. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I6020c4305e30018d4c97d862c16e8d642c951765
Gerrit-Change-Number: 58058
Gerrit-PatchSet: 5
Gerrit-Owner: Derek Huang <derek.huang@intel.corp-partner.google.com>
Gerrit-Reviewer: Furquan Shaikh <furquan@google.com>
Gerrit-Reviewer: Tim Wawrzynczak <twawrzynczak@chromium.org>
Gerrit-Reviewer: build bot (Jenkins) <no-reply@coreboot.org>
Gerrit-CC: Paul Menzel <paulepanter@mailbox.org>
Gerrit-MessageType: merged