summaryrefslogtreecommitdiff
path: root/board/zinger
diff options
context:
space:
mode:
authorAlec Berg <alecaberg@chromium.org>2014-10-02 10:07:37 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-10-07 05:53:13 +0000
commitd5d2a71c96438a5d545d2fb71f10678409f93c9e (patch)
tree8d710c74fa60d6fde9cca2697aab07d9c66bc226 /board/zinger
parentc817472c07cd99ec37886bd2ff7eddcc4d3e7568 (diff)
downloadchrome-ec-d5d2a71c96438a5d545d2fb71f10678409f93c9e.tar.gz
pd: zinger: move sending info VDM from UFP to DFP
Changed sending of info VDM from the UFP side in SNK_DISCONNECTED to the DFP side in SRC_READY to match the PD spec. Only the DFP is supposed to send VDMs, and by default the power source is the DFP. This affects simple DFPs such as power adapters, they must initiate the info VDM once a power contract has been negotiated. BUG=none BRANCH=samus TEST=load onto samus_pd and zinger and make sure that when you attached zinger to samus, samus receives info VDM and prints out something like: VDM/7 [11] 18d1000b Dev:1 SW:2280 RW:0 Change-Id: I16ceac31939fdc1c74be7323e628dd8706e1283b Signed-off-by: Alec Berg <alecaberg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/221174 Reviewed-by: Todd Broch <tbroch@chromium.org>
Diffstat (limited to 'board/zinger')
-rw-r--r--board/zinger/board.h3
-rw-r--r--board/zinger/usb_pd_policy.c26
2 files changed, 20 insertions, 9 deletions
diff --git a/board/zinger/board.h b/board/zinger/board.h
index e7e31232a0..93b7379d37 100644
--- a/board/zinger/board.h
+++ b/board/zinger/board.h
@@ -19,10 +19,11 @@
/* Optional features */
#define CONFIG_USB_POWER_DELIVERY
+#define CONFIG_USB_PD_CUSTOM_VDM
#undef CONFIG_USB_PD_DUAL_ROLE
#undef CONFIG_USB_PD_INTERNAL_COMP
-#define CONFIG_USB_PD_CUSTOM_VDM
#undef CONFIG_USB_PD_RX_COMP_IRQ
+#define CONFIG_USB_PD_SIMPLE_DFP
#define CONFIG_HW_CRC
#define CONFIG_RSA
#define CONFIG_SHA256
diff --git a/board/zinger/usb_pd_policy.c b/board/zinger/usb_pd_policy.c
index c15e79169e..177826bb51 100644
--- a/board/zinger/usb_pd_policy.c
+++ b/board/zinger/usb_pd_policy.c
@@ -374,10 +374,25 @@ void pd_adc_interrupt(void)
DECLARE_IRQ(STM32_IRQ_ADC_COMP, pd_adc_interrupt, 1);
/* ----------------- Vendor Defined Messages ------------------ */
+static uint32_t info_data[6];
+uint32_t *pd_get_info(void)
+{
+ void *hash;
+
+ /* calculate RW hash */
+ hash = flash_hash_rw();
+ /* copy first 20 bytes of RW hash */
+ memcpy(info_data, hash, 5 * sizeof(uint32_t));
+ /* copy other info into data msg */
+ info_data[5] = VDO_INFO(USB_PD_HARDWARE_DEVICE_ID,
+ ver_get_numcommits(), !is_ro_mode());
+
+ return info_data;
+}
+
int pd_custom_vdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload)
{
static int flash_offset;
- void *hash;
int cmd = PD_VDO_CMD(payload[0]);
int rsize = 1;
debug_printf("%T] VDM/%d [%d] %08x\n", cnt, cmd, payload[0]);
@@ -394,13 +409,8 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload)
cpu_reset();
break;
case VDO_CMD_READ_INFO:
- hash = flash_hash_rw();
- /* copy the 20 first bytes of the hash into response */
- memcpy(payload + 1, hash, 5 * sizeof(uint32_t));
- /* copy other info into response */
- payload[6] = VDO_INFO(USB_PD_HARDWARE_DEVICE_ID,
- ver_get_numcommits(),
- !is_ro_mode());
+ /* copy info into response */
+ memcpy(payload + 1, pd_get_info(), 24);
rsize = 7;
break;
case VDO_CMD_FLASH_ERASE: