diff options
author | Aseda Aboagye <aaboagye@google.com> | 2019-11-27 23:59:24 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-07-17 04:22:26 +0000 |
commit | 8b3bd40250f9c33c76213133e8d8f0ecd788575e (patch) | |
tree | 750bd88e5ba0deaaa3966f5f60ed58c88cc6988f /board/servo_v4/usb_pd_policy.c | |
parent | 7acd08b38b03023046c44fd5f7035aa2c3ef0fb8 (diff) | |
download | chrome-ec-8b3bd40250f9c33c76213133e8d8f0ecd788575e.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=firmware-atlas-11827.B
TEST=With other PD Policies patches, flash atlas and run faft_ec&pd
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>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2296085
Tested-by: Dawid Niedźwiecki <dn@semihalf.com>
Reviewed-by: caveh jalali <caveh@chromium.org>
Commit-Queue: Dossym Nurmukhanov <dossym@chromium.org>
Diffstat (limited to 'board/servo_v4/usb_pd_policy.c')
-rw-r--r-- | board/servo_v4/usb_pd_policy.c | 35 |
1 files changed, 9 insertions, 26 deletions
diff --git a/board/servo_v4/usb_pd_policy.c b/board/servo_v4/usb_pd_policy.c index f874e4dbe9..98f753cd45 100644 --- a/board/servo_v4/usb_pd_policy.c +++ b/board/servo_v4/usb_pd_policy.c @@ -458,13 +458,7 @@ int charge_manager_get_source_pdo(const uint32_t **src_pdo, const int port) return pdo_cnt; } -int pd_is_valid_input_voltage(int mv) -{ - /* Any voltage less than the max is allowed */ - return 1; -} - -void pd_transition_voltage(int idx) +__override void pd_transition_voltage(int idx) { timestamp_t deadline; uint32_t ma, mv; @@ -553,12 +547,7 @@ int pd_snk_is_vbus_provided(int port) GPIO_USB_DET_PP_CHG); } -int pd_board_checks(void) -{ - return EC_SUCCESS; -} - -int pd_check_power_swap(int port) +__override int pd_check_power_swap(int port) { /* * When only host VBUS is available, then servo_v4 is not setting @@ -578,18 +567,18 @@ int pd_check_power_swap(int port) return 0; } -int pd_check_data_swap(int port, int data_role) +__override int pd_check_data_swap(int port, int data_role) { /* Servo can allow data role swaps */ return 1; } -void pd_execute_data_swap(int port, int data_role) +__override void pd_execute_data_swap(int port, int data_role) { /* Should we do something here? */ } -void pd_check_pr_role(int port, int pr_role, int flags) +__override void pd_check_pr_role(int port, int pr_role, int flags) { /* * TODO(crosbug.com/p/60792): CHG port can't do a power swap as it's SNK @@ -599,7 +588,7 @@ void pd_check_pr_role(int port, int pr_role, int flags) } -void pd_check_dr_role(int port, int dr_role, int flags) +__override void pd_check_dr_role(int port, int dr_role, int flags) { if (port == CHG) return; @@ -612,13 +601,7 @@ void pd_check_dr_role(int port, int dr_role, int flags) /* ----------------- Vendor Defined Messages ------------------ */ -const struct svdm_response svdm_rsp = { - .identity = NULL, - .svids = NULL, - .modes = NULL, -}; - -int pd_custom_vdm(int port, int cnt, uint32_t *payload, +__override int pd_custom_vdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload) { int cmd = PD_VDO_CMD(payload[0]); @@ -643,8 +626,8 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, -const struct svdm_amode_fx supported_modes[] = {}; -const int supported_modes_cnt = ARRAY_SIZE(supported_modes); +__override const struct svdm_amode_fx supported_modes[] = {}; +__override const int supported_modes_cnt = ARRAY_SIZE(supported_modes); static void print_cc_mode(void) |