123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- .. SPDX-License-Identifier: GPL-2.0
- =====================
- Intel North Mux-Agent
- =====================
- Introduction
- ============
- North Mux-Agent is a function of the Intel PMC firmware that is supported on
- most Intel based platforms that have the PMC microcontroller. It's used for
- configuring the various USB Multiplexer/DeMultiplexers on the system. The
- platforms that allow the mux-agent to be configured from the operating system
- have an ACPI device object (node) with HID "INTC105C" that represents it.
- The North Mux-Agent (aka. Intel PMC Mux Control, or just mux-agent) driver
- communicates with the PMC microcontroller by using the PMC IPC method
- (drivers/platform/x86/intel_scu_ipc.c). The driver registers with the USB Type-C
- Mux Class which allows the USB Type-C Controller and Interface drivers to
- configure the cable plug orientation and mode (with Alternate Modes). The driver
- also registers with the USB Role Class in order to support both USB Host and
- Device modes. The driver is located here: drivers/usb/typec/mux/intel_pmc_mux.c.
- Port nodes
- ==========
- General
- For every USB Type-C connector under the mux-agent control on the system, there
- is a separate child node under the PMC mux-agent device node. Those nodes do not
- represent the actual connectors, but instead the "channels" in the mux-agent
- that are associated with the connectors::
- Scope (_SB.PCI0.PMC.MUX)
- {
- Device (CH0)
- {
- Name (_ADR, 0)
- }
- Device (CH1)
- {
- Name (_ADR, 1)
- }
- }
- _PLD (Physical Location of Device)
- The optional _PLD object can be used with the port (the channel) nodes. If _PLD
- is supplied, it should match the connector node _PLD::
- Scope (_SB.PCI0.PMC.MUX)
- {
- Device (CH0)
- {
- Name (_ADR, 0)
- Method (_PLD, 0, NotSerialized)
- {
-
- Return (\_SB.USBC.CON0._PLD())
- }
- }
- }
- Mux-agent specific _DSD Device Properties
- Port Numbers
- ~~~~~~~~~~~~
- In order to configure the muxes behind a USB Type-C connector, the PMC firmware
- needs to know the USB2 port and the USB3 port that is associated with the
- connector. The driver extracts the correct port numbers by reading specific _DSD
- device properties named "usb2-port-number" and "usb3-port-number". These
- properties have integer value that means the port index. The port index number
- is 1's based, and value 0 is illegal. The driver uses the numbers extracted from
- these device properties as-is when sending the mux-agent specific messages to
- the PMC::
- Name (_DSD, Package () {
- ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
- Package() {
- Package () {"usb2-port-number", 6},
- Package () {"usb3-port-number", 3},
- },
- })
- Orientation
- ~~~~~~~~~~~
- Depending on the platform, the data and SBU lines coming from the connector may
- be "fixed" from the mux-agent's point of view, which means the mux-agent driver
- should not configure them according to the cable plug orientation. This can
- happen for example if a retimer on the platform handles the cable plug
- orientation. The driver uses a specific device properties "sbu-orientation"
- (SBU) and "hsl-orientation" (data) to know if those lines are "fixed", and to
- which orientation. The value that these properties have is a string value, and
- it can be one that is defined for the USB Type-C connector orientation: "normal"
- or "reversed"::
- Name (_DSD, Package () {
- ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
- Package() {
- Package () {"sbu-orientation", "normal"},
- Package () {"hsl-orientation", "normal"},
- },
- })
- Example ASL
- ===========
- The following ASL is an example that shows the mux-agent node, and two
- connectors under its control::
- Scope (_SB.PCI0.PMC)
- {
- Device (MUX)
- {
- Name (_HID, "INTC105C")
- Device (CH0)
- {
- Name (_ADR, 0)
- Name (_DSD, Package () {
- ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
- Package() {
- Package () {"usb2-port-number", 6},
- Package () {"usb3-port-number", 3},
- Package () {"sbu-orientation", "normal"},
- Package () {"hsl-orientation", "normal"},
- },
- })
- }
- Device (CH1)
- {
- Name (_ADR, 1)
- Name (_DSD, Package () {
- ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
- Package() {
- Package () {"usb2-port-number", 5},
- Package () {"usb3-port-number", 2},
- Package () {"sbu-orientation", "normal"},
- Package () {"hsl-orientation", "normal"},
- },
- })
- }
- }
- }
|