英特尔 North Mux-Agent¶
简介¶
North Mux-Agent 是英特尔 PMC 固件的一个功能,它在大多数具有 PMC 微控制器的基于英特尔的平台上都受支持。它用于配置系统上的各种 USB 多路复用器/解多路复用器。允许从操作系统配置 mux-agent 的平台具有一个 ACPI 设备对象(节点),其 HID 为 “INTC105C”,代表它。
North Mux-Agent(又名英特尔 PMC Mux 控制或简称为 mux-agent)驱动程序通过使用 PMC IPC 方法(drivers/platform/x86/intel_scu_ipc.c)与 PMC 微控制器通信。该驱动程序向 USB Type-C Mux 类注册,允许 USB Type-C 控制器和接口驱动程序配置电缆插头的方向和模式(使用备用模式)。该驱动程序还向 USB 角色类注册,以便支持 USB 主机和设备模式。该驱动程序位于此处:drivers/usb/typec/mux/intel_pmc_mux.c。
端口节点¶
常规¶
对于系统上 mux-agent 控制下的每个 USB Type-C 连接器,在 PMC mux-agent 设备节点下都有一个单独的子节点。这些节点不代表实际的连接器,而是代表 mux-agent 中与连接器关联的“通道”
Scope (_SB.PCI0.PMC.MUX)
{
Device (CH0)
{
Name (_ADR, 0)
}
Device (CH1)
{
Name (_ADR, 1)
}
}
_PLD(设备物理位置)¶
可选的 _PLD 对象可以与端口(通道)节点一起使用。如果提供了 _PLD,它应该与连接器节点 _PLD 匹配
Scope (_SB.PCI0.PMC.MUX)
{
Device (CH0)
{
Name (_ADR, 0)
Method (_PLD, 0, NotSerialized)
{
/* Consider this as pseudocode. */
Return (\_SB.USBC.CON0._PLD())
}
}
}
Mux-agent 特定的 _DSD 设备属性¶
端口号¶
为了配置 USB Type-C 连接器后面的多路复用器,PMC 固件需要知道与连接器关联的 USB2 端口和 USB3 端口。驱动程序通过读取名为 “usb2-port-number” 和 “usb3-port-number” 的特定 _DSD 设备属性来提取正确的端口号。这些属性具有整数值,表示端口索引。端口索引号基于 1,值 0 是非法的。驱动程序在将 mux-agent 特定消息发送到 PMC 时,按原样使用从这些设备属性中提取的数字
Name (_DSD, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package() {
Package () {"usb2-port-number", 6},
Package () {"usb3-port-number", 3},
},
})
方向¶
根据平台的不同,来自连接器的数据和 SBU 线从 mux-agent 的角度来看可能是“固定的”,这意味着 mux-agent 驱动程序不应根据电缆插头的方向配置它们。例如,如果平台上的重定时器处理电缆插头的方向,则可能会发生这种情况。驱动程序使用特定的设备属性 “sbu-orientation”(SBU)和 “hsl-orientation”(数据)来了解这些线路是否是“固定的”,以及固定到哪个方向。这些属性的值是一个字符串值,它可以是为 USB Type-C 连接器方向定义的字符串之一:“normal” 或 “reversed”
Name (_DSD, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package() {
Package () {"sbu-orientation", "normal"},
Package () {"hsl-orientation", "normal"},
},
})
ASL 示例¶
以下 ASL 是一个示例,显示了 mux-agent 节点以及在其控制下的两个连接器
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"},
},
})
}
}
}