summaryrefslogtreecommitdiff
path: root/common/usbc/usb_retimer_fw_update.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/usbc/usb_retimer_fw_update.c')
-rw-r--r--common/usbc/usb_retimer_fw_update.c189
1 files changed, 0 insertions, 189 deletions
diff --git a/common/usbc/usb_retimer_fw_update.c b/common/usbc/usb_retimer_fw_update.c
deleted file mode 100644
index 1ff198c78f..0000000000
--- a/common/usbc/usb_retimer_fw_update.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/* Copyright 2021 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdbool.h>
-#include <stdint.h>
-#include "compile_time_macros.h"
-#include "console.h"
-#include "hooks.h"
-#include "timer.h"
-#include "usb_common.h"
-#include "usb_mux.h"
-#include "usb_tc_sm.h"
-
-#ifdef CONFIG_COMMON_RUNTIME
-#define CPRINTS(format, args...) cprints(CC_USBPD, format, ## args)
-#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ## args)
-#else
-#define CPRINTS(format, args...)
-#define CPRINTF(format, args...)
-#endif
-
-/*
- * Retimer firmware update is initiated by AP.
- * The operations requested by AP are:
- * 0 - USB_RETIMER_FW_UPDATE_QUERY_PORT
- * 1 - USB_RETIMER_FW_UPDATE_SUSPEND_PD
- * 2 - USB_RETIMER_FW_UPDATE_RESUME_PD
- * 3 - USB_RETIMER_FW_UPDATE_GET_MUX
- * 4 - USB_RETIMER_FW_UPDATE_SET_USB
- * 5 - USB_RETIMER_FW_UPDATE_SET_SAFE
- * 6 - USB_RETIMER_FW_UPDATE_SET_TBT
- * 7 - USB_RETIMER_FW_UPDATE_DISCONNECT
- *
- * Operation 0 is processed immediately.
- * Operations 1 to 7 are deferred and processed inside tc_run().
- * Operations 1/2/3 can be processed any time; while 4/5/6/7 have
- * to be processed when PD task is suspended.
- * Two TC flags are created for this situation.
- * If Op 1/2/3 is received, TC_FLAGS_USB_RETIMER_FW_UPDATE_RUN
- * is set, PD task will be waken up and process it.
- * If 4/5/6/7 is received, TC_FLAGS_USB_RETIMER_FW_UPDATE_LTD_RUN is
- * set, PD task should be in suspended mode and process it.
- *
- */
-
-#define SUSPEND 1
-#define RESUME 0
-
-/* Track current port AP requested to update retimer firmware */
-static int cur_port;
-static int last_op; /* Operation received from AP via ACPI_WRITE */
-/* Operation result returned to ACPI_READ */
-static int last_result;
-
-int usb_retimer_fw_update_get_result(void)
-{
- int result = 0;
-
- switch (last_op) {
- case USB_RETIMER_FW_UPDATE_SUSPEND_PD:
- if (last_result == USB_RETIMER_FW_UPDATE_ERR) {
- result = last_result;
- break;
- }
- /* fall through */
- case USB_RETIMER_FW_UPDATE_RESUME_PD:
- result = pd_is_port_enabled(cur_port);
- break;
- case USB_RETIMER_FW_UPDATE_QUERY_PORT:
- result = usb_mux_retimer_fw_update_port_info();
- break;
- case USB_RETIMER_FW_UPDATE_GET_MUX:
- case USB_RETIMER_FW_UPDATE_SET_USB:
- case USB_RETIMER_FW_UPDATE_SET_SAFE:
- case USB_RETIMER_FW_UPDATE_SET_TBT:
- case USB_RETIMER_FW_UPDATE_DISCONNECT:
- result = last_result;
- break;
- default:
- break;
- }
-
- return result;
-}
-
-static void deferred_pd_suspend(void)
-{
- pd_set_suspend(cur_port, SUSPEND);
-}
-DECLARE_DEFERRED(deferred_pd_suspend);
-
-static inline mux_state_t retimer_fw_update_usb_mux_get(int port)
-{
- return usb_mux_get(port) & USB_RETIMER_FW_UPDATE_MUX_MASK;
-}
-
-void usb_retimer_fw_update_process_op_cb(int port)
-{
- switch (last_op) {
- case USB_RETIMER_FW_UPDATE_SUSPEND_PD:
- last_result = 0;
- /*
- * Do not perform retimer firmware update process
- * if battery is not present, or battery level is low.
- */
- if (!pd_firmware_upgrade_check_power_readiness(port)) {
- last_result = USB_RETIMER_FW_UPDATE_ERR;
- break;
- }
-
- /*
- * If the port has entered low power mode, the PD task
- * is paused and will not complete processing of
- * pd_set_suspend(). Move pd_set_suspend() into a deferred
- * call so that it runs from the HOOKS task and can generate
- * a wake event to the PD task and enter suspended mode.
- */
- hook_call_deferred(&deferred_pd_suspend_data, 0);
- break;
- case USB_RETIMER_FW_UPDATE_RESUME_PD:
- pd_set_suspend(port, RESUME);
- break;
- case USB_RETIMER_FW_UPDATE_GET_MUX:
- last_result = retimer_fw_update_usb_mux_get(port);
- break;
- case USB_RETIMER_FW_UPDATE_SET_USB:
- usb_mux_set(port, USB_PD_MUX_USB_ENABLED,
- USB_SWITCH_CONNECT, pd_get_polarity(port));
- last_result = retimer_fw_update_usb_mux_get(port);
- break;
- case USB_RETIMER_FW_UPDATE_SET_SAFE:
- usb_mux_set_safe_mode(port);
- last_result = retimer_fw_update_usb_mux_get(port);
- break;
- case USB_RETIMER_FW_UPDATE_SET_TBT:
- usb_mux_set(port, USB_PD_MUX_TBT_COMPAT_ENABLED,
- USB_SWITCH_CONNECT, pd_get_polarity(port));
- last_result = retimer_fw_update_usb_mux_get(port);
- break;
- case USB_RETIMER_FW_UPDATE_DISCONNECT:
- usb_mux_set(port, USB_PD_MUX_NONE,
- USB_SWITCH_DISCONNECT, pd_get_polarity(port));
- last_result = retimer_fw_update_usb_mux_get(port);
- break;
- default:
- break;
- }
-}
-
-void usb_retimer_fw_update_process_op(int port, int op)
-{
- ASSERT(port >= 0 && port < CONFIG_USB_PD_PORT_MAX_COUNT);
-
- /*
- * TODO(b/179220036): check not overlapping requests;
- * not change cur_port if retimer scan is in progress
- */
- last_op = op;
-
- switch (op) {
- case USB_RETIMER_FW_UPDATE_QUERY_PORT:
- break;
- /* Operations can't be processed in ISR, defer to later */
- case USB_RETIMER_FW_UPDATE_GET_MUX:
- last_result = USB_RETIMER_FW_UPDATE_INVALID_MUX;
- tc_usb_firmware_fw_update_run(port);
- break;
- case USB_RETIMER_FW_UPDATE_SUSPEND_PD:
- case USB_RETIMER_FW_UPDATE_RESUME_PD:
- cur_port = port;
- tc_usb_firmware_fw_update_run(port);
- break;
- case USB_RETIMER_FW_UPDATE_SET_USB:
- case USB_RETIMER_FW_UPDATE_SET_SAFE:
- case USB_RETIMER_FW_UPDATE_SET_TBT:
- case USB_RETIMER_FW_UPDATE_DISCONNECT:
- if (pd_is_port_enabled(port)) {
- last_result = USB_RETIMER_FW_UPDATE_ERR;
- } else {
- last_result = USB_RETIMER_FW_UPDATE_INVALID_MUX;
- tc_usb_firmware_fw_update_limited_run(port);
- }
- break;
- default:
- break;
- }
-}