diff options
author | Todd Broch <tbroch@chromium.org> | 2015-06-16 15:42:13 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-06-17 13:10:51 +0000 |
commit | b33531e262561e297ba1a02fc829a2110c6df515 (patch) | |
tree | d04c52ccf76036cda1a1b2389e6636660179b496 | |
parent | 859f4d50adf6f5732970239fb72fd521eb693c16 (diff) | |
download | chrome-ec-b33531e262561e297ba1a02fc829a2110c6df515.tar.gz |
pd: Fix pin mode field in DP config VDM.
VESA SCR titled,
'DP Alt Mode Plug Corrections & Protocol Clarif'
Simplified the DP config mode VDM to longer include two separate bytes
for UFP vs DFP pin modes since bits <1:0> designate the desired port
direction.
This change corrects our VDM accordingly so that <23:16> are now zero
(SBZ) and <15:8> carry the appropriate pin mode.
Signed-off-by: Todd Broch <tbroch@chromium.org>
BRANCH=samus_pd
BUG=chromium:501002
TEST=manual,
1. samus -> hoho, dingdong or apple hdmi dongles still drive DPout
2. twinkie console output samus -> hoho shows correct DP config VDM
369.275296 SRC/2 [256f]VDM Vff01:DPCFG,INI:ff018111 00000406
where:
<31:16> = SBZ == 0x0000
<15:08> = PIN_C == 0x04
Change-Id: I1146045dd94458c82b7ed08940af6009658afa05
Reviewed-on: https://chromium-review.googlesource.com/278083
Commit-Queue: Todd Broch <tbroch@chromium.org>
Tested-by: Todd Broch <tbroch@chromium.org>
Reviewed-by: Alec Berg <alecaberg@chromium.org>
-rw-r--r-- | board/glados/usb_pd_policy.c | 3 | ||||
-rw-r--r-- | board/honeybuns/usb_pd_policy.c | 3 | ||||
-rw-r--r-- | board/oak/usb_pd_policy.c | 3 | ||||
-rw-r--r-- | board/ryu/usb_pd_policy.c | 3 | ||||
-rw-r--r-- | board/samus_pd/usb_pd_policy.c | 3 | ||||
-rw-r--r-- | include/usb_pd.h | 9 |
6 files changed, 9 insertions, 15 deletions
diff --git a/board/glados/usb_pd_policy.c b/board/glados/usb_pd_policy.c index 1799c84724..d5e0a235a9 100644 --- a/board/glados/usb_pd_policy.c +++ b/board/glados/usb_pd_policy.c @@ -271,8 +271,7 @@ static int svdm_dp_config(int port, uint32_t *payload) /* board_set_usb_mux(port, TYPEC_MUX_DP, pd_get_polarity(port)); */ payload[0] = VDO(USB_SID_DISPLAYPORT, 1, CMD_DP_CONFIG | VDO_OPOS(opos)); - payload[1] = VDO_DP_CFG(MODE_DP_PIN_E, /* sink pins */ - MODE_DP_PIN_E, /* src pins */ + payload[1] = VDO_DP_CFG(MODE_DP_PIN_E, /* pin mode */ 1, /* DPv1.3 signaling */ 2); /* UFP connected */ return 2; diff --git a/board/honeybuns/usb_pd_policy.c b/board/honeybuns/usb_pd_policy.c index 43d28c3e8b..1debb03ed6 100644 --- a/board/honeybuns/usb_pd_policy.c +++ b/board/honeybuns/usb_pd_policy.c @@ -218,8 +218,7 @@ static int svdm_dp_config(int port, uint32_t *payload) pd_get_polarity(port)); dp_on = 1; payload[0] = VDO(USB_SID_DISPLAYPORT, 1, CMD_DP_CONFIG); - payload[1] = VDO_DP_CFG(MODE_DP_PIN_E, /* sink pins */ - MODE_DP_PIN_E, /* src pins */ + payload[1] = VDO_DP_CFG(MODE_DP_PIN_E, /* pin mode */ 1, /* DPv1.3 signaling */ 2); /* UFP connected */ return 2; diff --git a/board/oak/usb_pd_policy.c b/board/oak/usb_pd_policy.c index 5f403ba45a..cc7abc60d6 100644 --- a/board/oak/usb_pd_policy.c +++ b/board/oak/usb_pd_policy.c @@ -270,8 +270,7 @@ static int svdm_dp_config(int port, uint32_t *payload) /* board_set_usb_mux(port, TYPEC_MUX_DP, pd_get_polarity(port)); */ payload[0] = VDO(USB_SID_DISPLAYPORT, 1, CMD_DP_CONFIG | VDO_OPOS(opos)); - payload[1] = VDO_DP_CFG(MODE_DP_PIN_E, /* sink pins */ - MODE_DP_PIN_E, /* src pins */ + payload[1] = VDO_DP_CFG(MODE_DP_PIN_E, /* pin mode */ 1, /* DPv1.3 signaling */ 2); /* UFP connected */ return 2; diff --git a/board/ryu/usb_pd_policy.c b/board/ryu/usb_pd_policy.c index 1bd5c6e6cd..b783cdc3b8 100644 --- a/board/ryu/usb_pd_policy.c +++ b/board/ryu/usb_pd_policy.c @@ -297,8 +297,7 @@ static int svdm_dp_config(int port, uint32_t *payload) payload[0] = VDO(USB_SID_DISPLAYPORT, 1, CMD_DP_CONFIG | VDO_OPOS(opos)); - payload[1] = VDO_DP_CFG(pin_mode, /* UFP_U as UFP_D */ - 0, /* UFP_U as DFP_D */ + payload[1] = VDO_DP_CFG(pin_mode, /* pin mode */ 1, /* DPv1.3 signaling */ 2); /* UFP_U connected as UFP_D */ return 2; diff --git a/board/samus_pd/usb_pd_policy.c b/board/samus_pd/usb_pd_policy.c index af58c7e004..b196e3f9d3 100644 --- a/board/samus_pd/usb_pd_policy.c +++ b/board/samus_pd/usb_pd_policy.c @@ -315,8 +315,7 @@ static int svdm_dp_config(int port, uint32_t *payload) payload[0] = VDO(USB_SID_DISPLAYPORT, 1, CMD_DP_CONFIG | VDO_OPOS(opos)); - payload[1] = VDO_DP_CFG(pin_mode, /* UFP_U as UFP_D */ - 0, /* UFP_U as DFP_D */ + payload[1] = VDO_DP_CFG(pin_mode, /* pin mode */ 1, /* DPv1.3 signaling */ 2); /* UFP_U connected as UFP_D */ return 2; diff --git a/include/usb_pd.h b/include/usb_pd.h index 80253f9546..2ed26431d9 100644 --- a/include/usb_pd.h +++ b/include/usb_pd.h @@ -564,16 +564,15 @@ struct pd_policy { * DisplayPort Configure VDO * ------------------------- * <31:24> : SBZ - * <23:16> : sink pin assignment requested. Choose one from mode caps. - * <15:8> : source pin assignment requested. Choose one from mode caps. + * <23:16> : SBZ + * <15:8> : Pin assignment requested. Choose one from mode caps. * <7:6> : SBZ * <5:2> : signalling : 1h == DP v1.3, 2h == Gen 2 * Oh is only for USB, remaining values are reserved * <1:0> : cfg : 00 == USB, 01 == DFP_D, 10 == UFP_D, 11 == reserved */ -#define VDO_DP_CFG(snkp, srcp, sig, cfg) \ - (((snkp) & 0xff) << 16 | ((srcp) & 0xff) << 8 \ - | ((sig) & 0xf) << 2 | ((cfg) & 0x3)) +#define VDO_DP_CFG(pin, sig, cfg) \ + (((pin) & 0xff) << 8 | ((sig) & 0xf) << 2 | ((cfg) & 0x3)) #define PD_DP_CFG_DPON(x) (((x & 0x3) == 1) || ((x & 0x3) == 2)) /* |