summaryrefslogtreecommitdiff
path: root/docs/usb-c.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/usb-c.md')
-rw-r--r--docs/usb-c.md219
1 files changed, 0 insertions, 219 deletions
diff --git a/docs/usb-c.md b/docs/usb-c.md
deleted file mode 100644
index 1e009f82b2..0000000000
--- a/docs/usb-c.md
+++ /dev/null
@@ -1,219 +0,0 @@
-# EC Implementation of USB-C Power Delivery and Alternate Modes
-
-USB-C PD requires a complex state machine as USB-C PD can operate in many
-different modes. This includes but isn't limited to:
-
-* Negotiated power contracts. Either side of the cable can source or sink
- power up to 100W (if supported by device).
-* Reversed cable mode. This requires a mux to switch the signals before
- getting to the SoC (or AP).
-* Debug accessory mode, e.g. [Case Closed Debugging (CCD)]
-* Multiple uses for the 4 differential pair signals including
- * USB SuperSpeed mode (up to 4 lanes for USB data)
- * DisplayPort Alternate Mode (up to 4 lanes for DisplayPort data)
- * Dock Mode (2 lanes for USB data, and 2 lanes for DisplayPort)
- * Audio Accessory mode. (1 lane is used for L and R analog audio signal)
-
-For a more complete list of USB-C Power Delivery features, see the
-[USB-C PD spec][USB PD Spec Id].
-
-This document covers various touch points to consider for USB-C PD and Alternate
-Modes in the EC codebase.
-
-[TOC]
-
-## Glossary
-
-* PD {#pd}
- * Power Delivery. Protocol over USB-C connector that allows up to 100W of
- power. Not supported on USB-A or USB-B connectors. A good overview of
- USB PD is found in the [Introduction to USB Power Delivery] application
- note.
-* TCPC {#tcpc}
- * Type-C Port Controller. Typically a separate IC connected through I2C,
- sometimes embedded within the EC as a hardware sub module. The TCPC
- interprets physical layer signals on CC lines and Vbus, and sends that
- information to the TCPM to decide what action to take. In older designs,
- there was a separate EC (running this codebase) that acted as the TCPC
- that communicated with the main EC (also running this codebase), which
- acted as the TCPM. More info in the official
- [TCPC spec][USB TCPM Spec Id].
-* TCPM {#tcpm}
- * Type-C Port Manager. Manages the state of the USB-C connection. Makes
- decisions about what state to transition to. This is the code running on
- the EC itself.
-* PE {#pe}
- * Policy Engine. According to the [TypeC spec][USB TC Spec Id], the policy
- engine is the state machine that decides how the USB-C connection
- progresses through different states and which USB-C PD features are
- available, such as Try.SRC
-* TC {#tc}
- * Type-C physical layer.
-* PPC {#ppc}
- * Power Path Controller. An optional, separate IC that isolates various
- USB-C signals from each other and the rest of the board. This IC should
- prevent shorts and over current/voltage scenarios for Vbus. Some PPCs
- will protect signals other than Vbus as well.
-* SSMUX {#ssmux}
- * SuperSpeed Mux. This is typically the same IC as the TCPC; it enables
- the mirrored orientation of the USB-C cable to go to the correct pins on
- SoC. Also, allows the SuperSpeed signal to be used for different
- purposes, such as USB data or DisplayPort.
-* SVDM {#svdm}
- * Structured Vendor Defined Messages are a class of [USB PD](#pd) messages
- to enable non-power related communication between port partners. SVDMs
- are used to negotiate and set the display port mode on a USB-C
- connection.
-* DRP {#drp}
- * Dual Role Power Port. A USB-C port that can act as either a power Source
- or power Sink.
-* UFP {#ufp}
- * Upstream Facing Port. The USB data role that is typical for a peripheral
- (e.g. HID keyboard).
-* DFP {#dfp}
-
- * Downstream Facing Port. The USB Data role that is typical for a host
- machine (e.g. device running ChromeOS).
-
-* E-Mark {#emark}
-
- * Electronically marked cable. A USB-C cable that contains an embedded
- chip in the cable, used to identify the capabilities of the cable.
-
-* VCONN {#vconn}
-
- * Connector Voltage. A dedicated power supply rail for [E-Mark](#emark)
- cables and other accessory functions (such as display dongles, and
- docks). VCONN re-uses one of the CC1/CC2 signals to provide 5 volt, 1
- watt, of power.
-
-## Different PD stacks
-
-Right now platform/ec has two different implementations of USB-C PD stack.
-
-1. The older implementation is mainly contained within
- [`usb_pd_protocol.c`](../common/usb_pd_protocol.c) and
- [`usb_pd_policy.c`](../common/usb_pd_policy.c)
-2. The newer implementation is found under [`common/usbc`](../common/usbc) and
- is broken up into multiple different files and state machines
- * Policy engine state machine files, `usb_pe_*_sm.c`.
- * Protocol engine state machine file, `usb_prl_*_sm.c`.
- * State machine framework file, `usb_sm.c`.
- * Type-C physical layer state machine files, `usb_tc_*_sm.c`.
- * USB-C PD Task file, `usbc_task.c`.
-
-The older implementation supports firmware for device types other than
-Chromebooks. For example, the older stack supports the Zinger, which is the
-USB-C charging device that shipped with Samus, the Google Chromebook Pixel 2.
-The Zinger implements the charger only side of the USB PD protocol.
-
-To use the newer USB-C PD stack implementation, see
-[TCPMv2 Overview](usb-tcpmv2.md).
-
-## Implementation Considerations
-
-In both older and newer implementations, the following details apply:
-
-* For each USB-C port, there must be two tasks: `PD_C#` and `PD_INT_C#`, where
- `#` is the port number starting from `0`.
- * The `PD_C#` task runs the state machine (old or new) for the port and
- communicates with the TCPC, MUX, and PPC. This task needs a large task
- stack.
- * The `PD_INT_C#` tasks run at a higher priority than the state machine
- task, and its sole job is to receive interrupts from the TCPC as quickly
- as possible then send appropriate messages to other tasks (including
- `PD_C#`). This task shouldn't need much stack space, but the i2c
- recovery code requires a decent amount of stack space so it ends up
- needing a fair amount too.
-* Saving PD state between EC jumps
- * PD communication is disabled in locked RO images (normal state for
- customer devices). When the jump from RO to RW happens relatively
- quickly (e.g. there is not a long memory training step), then there
- aren't many problems when RW takes over and negotiates higher PD
- contracts.
- * To support factory use cases that don't have a battery (and are
- therefore unlocked), PD communication is enabled in unlocked RO. This
- allows systems without software sync enabled to get a higher power
- contract than 15W in RO.
- * We save and restore PD state between RO -> RW and RW -> RO jump to allow
- us to maintain a higher negotiated power through the full jump and
- re-initialization process. For example, for each port we save the power
- role, data role, and Vconn sourcing state in battery-backed or
- non-volatile RAM. This allows the firmware image that is initializing to
- restore an existing SNK contract (Chromebook as SNK) without cutting
- power. We don't cut the power from the external supplier because we
- issue a SoftReset (leaves Vbus intact) instead of a HardReset (drops
- Vbus) in this contract resume case.
- * Both use cases where we actually are able to restore the PD contract
- require an unlocked RO (e.g. factory) otherwise RO cannot communicate
- via PD and will drop the higher PD contract (by applying Rp/Rp on the CC
- lines temporarily)
- * The RO->RW use case is for an unlocked (e.g. factory) device that
- negotiated power and we want to keep that contract after we jump to
- RW in the normal software sync boot process. This is especially
- useful when there is no battery and Vbus is our only power source.
- * The RW->RO use case happens when we are performing auxiliary FW
- upgrades during software sync and BIOS instructs the EC to jump back
- to RO. We'll also try to maintain contracts over an EC reset when
- unlocked.
-
-## Configuration
-
-There are many `CONFIG_*` options and driver structs that are needed in the
-board.h and board.c implementation.
-
-### TCPC Config
-
-The `tcpc_config` array of `tcpc_config_t` structs defined in `board.c` (or
-baseboard equivalent) should be defined for every board. The index in the
-`tcpc_config` array corresponds to the USB-C port number. This struct should
-point to the specific TCPC driver that corresponds to the TCPC that is being
-used on that port. The i2c port and address for the TCPC are also specified
-here.
-
-### SSMUX Config
-
-The `usb_muxes` array of `usb_mux` structs defined in `board.c` (or baseboard
-equivalent) should be defined for every board. Normally the standard
-`tcpci_tcpm_usb_mux_driver` driver works, especially if TCPC and MUX are the
-same IC.
-
-If the signal strength for the high-speed data lines needs to be tuned for a
-specific hardware layout, the `board_init` field on the `usb_mux` is called
-every time the mux is woken up from a low power state and should be used for
-setting custom board tuning parameters.
-
-### PPC Config
-
-Some boards have an additional IC that sits between the physical USB-C connector
-and the rest of the board. The PPC IC gates whether the Vbus line is an input or
-output signal, based on i2c settings or gpio pins. A PPC also typically provides
-over voltage and over current protection on multiple USB-C pins.
-
-The `ppc_chips` array of `ppc_config_t` structs defined in `board.c` (or
-baseboard equivalent) sets the appropriate driver and i2c port/address for the
-PPC IC.
-
-### Useful Config Options
-
-Many USB-C policies and features are gated by various `CONFIG_*` options that
-should be defined in `board.h` (or baseboard equivalent).
-
-Most USB-C options will start with `CONFIG_USB_PD_` or `CONFIG_USBC_`. For their
-full descriptions see [config.h][config header link]
-
-## Interactions with other tasks
-
-TODO(https://crbug.com/974302): mention `USB_CHG_P#` and `CHARGER`
-
-## Upgrading FW for TCPCs
-
-TODO(https://crbug.com/974302): Mention how this works even though it is in
-depthcharge. Probing now. Need new driver in depthcharge
-
-[Case Closed Debugging (CCD)]: https://chromium.googlesource.com/chromiumos/platform/ec/+/cr50_stab/docs/case_closed_debugging_cr50.md
-[Introduction to USB Power Delivery]: https://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en575003
-[USB PD Spec Id]: https://www.usb.org/document-library/usb-power-delivery
-[USB TC Spec Id]: https://www.usb.org/document-library/usb-type-cr-cable-and-connector-specification-revision-20-august-2019
-[USB TCPM Spec Id]: https://www.usb.org/document-library/usb-type-ctm-port-controller-interface-specification
-[config header link]: ../include/config.h