diff options
author | Aseda Aboagye <aaboagye@google.com> | 2019-11-27 23:59:24 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-12-10 22:49:35 +0000 |
commit | 5ebaed65363f96873a348bbf8468d6a6e67117bc (patch) | |
tree | 178a62de51ec3a3b29f499970d2792ec7c925c4d /test | |
parent | 68650b554531de4cd2480b5cec5589d483bc0dba (diff) | |
download | chrome-ec-5ebaed65363f96873a348bbf8468d6a6e67117bc.tar.gz |
usb_pd_policy: Make a lot of objects common
There is a board specific usb_pd_policy.c file that contains a lot of
code for handling DisplayPort Alternate mode, Google Firmware Update
Alternate mode, as well as some PD policy functions such as deciding to
Accept or Reject a data role swap or a power role swap. Several boards
simply copy/paste this code from project to project as a lot of this
functionality is not actually board specific.
This commit tries to refactor this by pulling the functions that are not
mainly board specific into common code. The functions are made
overridable such that boards that truly do require a different
implementation may do so.
Additionally, this consolidation changes the policy behaviour for some
boards, but they should be for the better. Some examples include that
data swaps are always allowed if we are a UFP (no system image
requirement), power swaps are allowed to become a sink if we are no
longer dual role (e.g. - in suspend), and DisplayPort Alternate Mode is
not entered if the AP is off.
In order to facilitate this refactor, a couple CONFIG_* options were
introduced:
- CONFIG_USB_PD_DP_HPD_GPIO
/* HPD is sent to the GPU from the EC via a GPIO */
- CONFIG_USB_PD_CUSTOM_VDO
/*
* Define this if a board needs custom SNK and/or SRC PDOs.
*
* The default SRC PDO is a fixed 5V/1.5A with PDO_FIXED_FLAGS indicating
* Dual-Role power, USB Communication Capable, and Dual-Role data.
*
* The default SNK PDOs are:
* - Fixed 5V/500mA with the same PDO_FIXED_FLAGS
* - Variable (non-battery) min 4.75V, max PD_MAX_VOLTAGE_MV,
* operational current PD_MAX_CURRENT_MA,
* - Battery min 4.75V, max PD_MAX_VOLTAGE_MV, operational power
* PD_OPERATING_POWER_MW
*/
BUG=chromium:1021724,b:141458448
BRANCH=<as many as we can that are still supported>
TEST=`make -j buildall`
TEST=Flash a kohaku, verify that DP Alt Mode still works with a variety
of DP peripherals
TEST=Repeat above with a nocturne
TEST=Repeat above with an atlas
Change-Id: I18fd7e22dc77fe1dc6c21c38cd7f1bc53cae86cb
Signed-off-by: Aseda Aboagye <aaboagye@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1949052
Tested-by: Aseda Aboagye <aaboagye@chromium.org>
Reviewed-by: Paul Fagerburg <pfagerburg@chromium.org>
Reviewed-by: Diana Z <dzigterman@chromium.org>
Reviewed-by: Denis Brockus <dbrockus@chromium.org>
Commit-Queue: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'test')
-rw-r--r-- | test/build.mk | 8 | ||||
-rw-r--r-- | test/fake_usbc.c | 37 |
2 files changed, 32 insertions, 13 deletions
diff --git a/test/build.mk b/test/build.mk index 4284374df0..74e602151c 100644 --- a/test/build.mk +++ b/test/build.mk @@ -156,11 +156,11 @@ usb_sm_framework_h3-y=usb_sm_framework_h3.o usb_sm_framework_h2-y=usb_sm_framework_h3.o usb_sm_framework_h1-y=usb_sm_framework_h3.o usb_sm_framework_h0-y=usb_sm_framework_h3.o -usb_typec_vpd-y=usb_typec_ctvpd.o vpd_api.o usb_sm_checks.o -usb_typec_ctvpd-y=usb_typec_ctvpd.o vpd_api.o usb_sm_checks.o +usb_typec_vpd-y=usb_typec_ctvpd.o vpd_api.o usb_sm_checks.o fake_usbc.o +usb_typec_ctvpd-y=usb_typec_ctvpd.o vpd_api.o usb_sm_checks.o fake_usbc.o usb_typec_drp_acc_trysrc-y=usb_typec_drp_acc_trysrc.o vpd_api.o \ - usb_sm_checks.o -usb_prl-y=usb_prl.o usb_sm_checks.o + usb_sm_checks.o fake_usbc.o +usb_prl-y=usb_prl.o usb_sm_checks.o fake_usbc.o usb_pe_drp-y=usb_pe_drp.o usb_sm_checks.o \ fake_battery.o fake_prl.o fake_usbc.o utils-y=utils.o diff --git a/test/fake_usbc.c b/test/fake_usbc.c index a563f3d4d8..d074876f6f 100644 --- a/test/fake_usbc.c +++ b/test/fake_usbc.c @@ -8,12 +8,15 @@ #include "usb_tc_sm.h" #include "usb_pd.h" -int pd_is_vbus_present(int port) +__overridable int pd_is_vbus_present(int port) { return 0; } -void pd_request_data_swap(int port) +__overridable void pd_request_data_swap(int port) +{} + +__overridable void pd_request_power_swap(int port) {} void pd_request_vconn_swap_off(int port) @@ -24,26 +27,26 @@ void pd_request_vconn_swap_on(int port) static enum pd_data_role data_role; -enum pd_data_role tc_get_data_role(int port) +__overridable enum pd_data_role tc_get_data_role(int port) { return data_role; } -void tc_set_data_role(int port, enum pd_data_role role) +__overridable void tc_set_data_role(int port, enum pd_data_role role) { data_role = role; } static enum pd_power_role power_role; -enum pd_power_role tc_get_power_role(int port) +__overridable enum pd_power_role tc_get_power_role(int port) { return power_role; } -void tc_set_power_role(int port, enum pd_power_role role) +__overridable void tc_set_power_role(int port, enum pd_power_role role) { power_role = role; } -enum pd_cable_plug tc_get_cable_plug(int port) +__overridable enum pd_cable_plug tc_get_cable_plug(int port) { return PD_PLUG_FROM_DFP_UFP; } @@ -112,8 +115,24 @@ void tc_prs_src_snk_assert_rd(int port) void tc_set_timeout(int port, uint64_t timeout) {} -void tc_start_error_recovery(int port) +__overridable void tc_start_error_recovery(int port) {} -void tc_snk_power_off(int port) +__overridable void tc_snk_power_off(int port) {} + +int pd_dev_store_rw_hash(int port, uint16_t dev_id, uint32_t *rw_hash, + uint32_t ec_current_image) +{ + return 0; +} + +enum pd_dual_role_states pd_get_dual_role(int port) +{ + return PD_DRP_TOGGLE_ON; +} + +__overridable int pd_get_role(int port) +{ + return PD_ROLE_SINK; +} |