From 1e7f22e5e65eab1471d0b91f3a3f1fe341cb9d3c Mon Sep 17 00:00:00 2001 From: Todd Broch Date: Fri, 7 Oct 2016 16:42:16 -0700 Subject: Re-enable Google USBC peripheral FW updates. Signed-off-by: Todd Broch BRANCH=glados,gru,oak BUG=chrome-os-partner:57458 TEST=usbpd_GFU Original-Change-Id: I5a6bfde742a5c698680f99f342b1696084fd002a Originally-Reviewed-on: https://chromium-review.googlesource.com/397862 Commit-Ready: Todd Broch Tested-by: Todd Broch Reviewed-by: Benson Leung Reviewed-by: Vincent Palatin (cherry picked from commit 35e580b7a9d0dedbb2664dbfd694ab5bd3a87226) Change-Id: I01461d8b18eb4b6164c3dccaccdd14b47b12d674 Reviewed-on: https://chromium-review.googlesource.com/494073 Tested-by: Todd Broch Trybot-Ready: Todd Broch Reviewed-by: Benson Leung Reviewed-by: Vincent Palatin Commit-Queue: Todd Broch --- board/bob/usb_pd_policy.c | 16 +++++++++++++++- board/elm/usb_pd_policy.c | 16 +++++++++++++++- board/glados/usb_pd_policy.c | 16 +++++++++++++++- board/kevin/usb_pd_policy.c | 16 +++++++++++++++- board/oak/usb_pd_policy.c | 16 +++++++++++++++- board/reef/usb_pd_policy.c | 16 +++++++++++++++- 6 files changed, 90 insertions(+), 6 deletions(-) diff --git a/board/bob/usb_pd_policy.c b/board/bob/usb_pd_policy.c index 59518d3aed..beaae9a66b 100644 --- a/board/bob/usb_pd_policy.c +++ b/board/bob/usb_pd_policy.c @@ -218,7 +218,7 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, { int cmd = PD_VDO_CMD(payload[0]); uint16_t dev_id = 0; - int is_rw; + int is_rw, is_latest; /* make sure we have some payload */ if (cnt == 0) @@ -237,6 +237,20 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, dev_id = VDO_INFO_HW_DEV_ID(payload[6]); is_rw = VDO_INFO_IS_RW(payload[6]); + is_latest = pd_dev_store_rw_hash(port, + dev_id, + payload + 1, + is_rw ? + SYSTEM_IMAGE_RW : + SYSTEM_IMAGE_RO); + + /* + * Send update host event unless our RW hash is + * already known to be the latest update RW. + */ + if (!is_rw || !is_latest) + pd_send_host_event(PD_EVENT_UPDATE_DEVICE); + CPRINTF("DevId:%d.%d SW:%d RW:%d\n", HW_DEV_ID_MAJ(dev_id), HW_DEV_ID_MIN(dev_id), diff --git a/board/elm/usb_pd_policy.c b/board/elm/usb_pd_policy.c index 05cfe97e0b..b03d52e71e 100644 --- a/board/elm/usb_pd_policy.c +++ b/board/elm/usb_pd_policy.c @@ -168,7 +168,7 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, { int cmd = PD_VDO_CMD(payload[0]); uint16_t dev_id = 0; - int is_rw; + int is_rw, is_latest; /* make sure we have some payload */ if (cnt == 0) @@ -187,6 +187,20 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, dev_id = VDO_INFO_HW_DEV_ID(payload[6]); is_rw = VDO_INFO_IS_RW(payload[6]); + is_latest = pd_dev_store_rw_hash(port, + dev_id, + payload + 1, + is_rw ? + SYSTEM_IMAGE_RW : + SYSTEM_IMAGE_RO); + + /* + * Send update host event unless our RW hash is + * already known to be the latest update RW. + */ + if (!is_rw || !is_latest) + pd_send_host_event(PD_EVENT_UPDATE_DEVICE); + CPRINTF("DevId:%d.%d SW:%d RW:%d\n", HW_DEV_ID_MAJ(dev_id), HW_DEV_ID_MIN(dev_id), diff --git a/board/glados/usb_pd_policy.c b/board/glados/usb_pd_policy.c index 77aa25a8e3..9e25021328 100644 --- a/board/glados/usb_pd_policy.c +++ b/board/glados/usb_pd_policy.c @@ -170,7 +170,7 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, { int cmd = PD_VDO_CMD(payload[0]); uint16_t dev_id = 0; - int is_rw; + int is_rw, is_latest; /* make sure we have some payload */ if (cnt == 0) @@ -189,6 +189,20 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, dev_id = VDO_INFO_HW_DEV_ID(payload[6]); is_rw = VDO_INFO_IS_RW(payload[6]); + is_latest = pd_dev_store_rw_hash(port, + dev_id, + payload + 1, + is_rw ? + SYSTEM_IMAGE_RW : + SYSTEM_IMAGE_RO); + + /* + * Send update host event unless our RW hash is + * already known to be the latest update RW. + */ + if (!is_rw || !is_latest) + pd_send_host_event(PD_EVENT_UPDATE_DEVICE); + CPRINTF("DevId:%d.%d SW:%d RW:%d\n", HW_DEV_ID_MAJ(dev_id), HW_DEV_ID_MIN(dev_id), diff --git a/board/kevin/usb_pd_policy.c b/board/kevin/usb_pd_policy.c index 06d15896d7..f2bc95cc9b 100644 --- a/board/kevin/usb_pd_policy.c +++ b/board/kevin/usb_pd_policy.c @@ -218,7 +218,7 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, { int cmd = PD_VDO_CMD(payload[0]); uint16_t dev_id = 0; - int is_rw; + int is_rw, is_latest; /* make sure we have some payload */ if (cnt == 0) @@ -237,6 +237,20 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, dev_id = VDO_INFO_HW_DEV_ID(payload[6]); is_rw = VDO_INFO_IS_RW(payload[6]); + is_latest = pd_dev_store_rw_hash(port, + dev_id, + payload + 1, + is_rw ? + SYSTEM_IMAGE_RW : + SYSTEM_IMAGE_RO); + + /* + * Send update host event unless our RW hash is + * already known to be the latest update RW. + */ + if (!is_rw || !is_latest) + pd_send_host_event(PD_EVENT_UPDATE_DEVICE); + CPRINTF("DevId:%d.%d SW:%d RW:%d\n", HW_DEV_ID_MAJ(dev_id), HW_DEV_ID_MIN(dev_id), diff --git a/board/oak/usb_pd_policy.c b/board/oak/usb_pd_policy.c index 458b6dcb90..357afabd8f 100644 --- a/board/oak/usb_pd_policy.c +++ b/board/oak/usb_pd_policy.c @@ -181,7 +181,7 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, { int cmd = PD_VDO_CMD(payload[0]); uint16_t dev_id = 0; - int is_rw; + int is_rw, is_latest; /* make sure we have some payload */ if (cnt == 0) @@ -200,6 +200,20 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, dev_id = VDO_INFO_HW_DEV_ID(payload[6]); is_rw = VDO_INFO_IS_RW(payload[6]); + is_latest = pd_dev_store_rw_hash(port, + dev_id, + payload + 1, + is_rw ? + SYSTEM_IMAGE_RW : + SYSTEM_IMAGE_RO); + + /* + * Send update host event unless our RW hash is + * already known to be the latest update RW. + */ + if (!is_rw || !is_latest) + pd_send_host_event(PD_EVENT_UPDATE_DEVICE); + CPRINTF("DevId:%d.%d SW:%d RW:%d\n", HW_DEV_ID_MAJ(dev_id), HW_DEV_ID_MIN(dev_id), diff --git a/board/reef/usb_pd_policy.c b/board/reef/usb_pd_policy.c index a50ae51216..31acb5717f 100644 --- a/board/reef/usb_pd_policy.c +++ b/board/reef/usb_pd_policy.c @@ -177,7 +177,7 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, { int cmd = PD_VDO_CMD(payload[0]); uint16_t dev_id = 0; - int is_rw; + int is_rw, is_latest; /* make sure we have some payload */ if (cnt == 0) @@ -196,6 +196,20 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, dev_id = VDO_INFO_HW_DEV_ID(payload[6]); is_rw = VDO_INFO_IS_RW(payload[6]); + is_latest = pd_dev_store_rw_hash(port, + dev_id, + payload + 1, + is_rw ? + SYSTEM_IMAGE_RW : + SYSTEM_IMAGE_RO); + + /* + * Send update host event unless our RW hash is + * already known to be the latest update RW. + */ + if (!is_rw || !is_latest) + pd_send_host_event(PD_EVENT_UPDATE_DEVICE); + CPRINTF("DevId:%d.%d SW:%d RW:%d\n", HW_DEV_ID_MAJ(dev_id), HW_DEV_ID_MIN(dev_id), -- cgit v1.2.1