1.. SPDX-License-Identifier: GPL-2.0 2 3.. include:: ../../disclaimer-zh_CN.rst 4 5:Original: Documentation/arch/loongarch/irq-chip-model.rst 6:Translator: Huacai Chen <chenhuacai@loongson.cn> 7 8================================== 9LoongArch的IRQ芯片模型(层级关系) 10================================== 11 12目前,基于LoongArch的处理器(如龙芯3A5000)只能与LS7A芯片组配合工作。LoongArch计算机 13中的中断控制器(即IRQ芯片)包括CPUINTC(CPU Core Interrupt Controller)、LIOINTC( 14Legacy I/O Interrupt Controller)、EIOINTC(Extended I/O Interrupt Controller)、 15HTVECINTC(Hyper-Transport Vector Interrupt Controller)、PCH-PIC(LS7A芯片组的主中 16断控制器)、PCH-LPC(LS7A芯片组的LPC中断控制器)和PCH-MSI(MSI中断控制器)。 17 18CPUINTC是一种CPU内部的每个核本地的中断控制器,LIOINTC/EIOINTC/HTVECINTC是CPU内部的 19全局中断控制器(每个芯片一个,所有核共享),而PCH-PIC/PCH-LPC/PCH-MSI是CPU外部的中 20断控制器(在配套芯片组里面)。这些中断控制器(或者说IRQ芯片)以一种层次树的组织形式 21级联在一起,一共有两种层级关系模型(传统IRQ模型和扩展IRQ模型)。 22 23传统IRQ模型 24=========== 25 26在这种模型里面,IPI(Inter-Processor Interrupt)和CPU本地时钟中断直接发送到CPUINTC, 27CPU串口(UARTs)中断发送到LIOINTC,而其他所有设备的中断则分别发送到所连接的PCH-PIC/ 28PCH-LPC/PCH-MSI,然后被HTVECINTC统一收集,再发送到LIOINTC,最后到达CPUINTC:: 29 30 +-----+ +---------+ +-------+ 31 | IPI | --> | CPUINTC | <-- | Timer | 32 +-----+ +---------+ +-------+ 33 ^ 34 | 35 +---------+ +-------+ 36 | LIOINTC | <-- | UARTs | 37 +---------+ +-------+ 38 ^ 39 | 40 +-----------+ 41 | HTVECINTC | 42 +-----------+ 43 ^ ^ 44 | | 45 +---------+ +---------+ 46 | PCH-PIC | | PCH-MSI | 47 +---------+ +---------+ 48 ^ ^ ^ 49 | | | 50 +---------+ +---------+ +---------+ 51 | PCH-LPC | | Devices | | Devices | 52 +---------+ +---------+ +---------+ 53 ^ 54 | 55 +---------+ 56 | Devices | 57 +---------+ 58 59扩展IRQ模型 60=========== 61 62在这种模型里面,IPI(Inter-Processor Interrupt)和CPU本地时钟中断直接发送到CPUINTC, 63CPU串口(UARTs)中断发送到LIOINTC,而其他所有设备的中断则分别发送到所连接的PCH-PIC/ 64PCH-LPC/PCH-MSI,然后被EIOINTC统一收集,再直接到达CPUINTC:: 65 66 +-----+ +---------+ +-------+ 67 | IPI | --> | CPUINTC | <-- | Timer | 68 +-----+ +---------+ +-------+ 69 ^ ^ 70 | | 71 +---------+ +---------+ +-------+ 72 | EIOINTC | | LIOINTC | <-- | UARTs | 73 +---------+ +---------+ +-------+ 74 ^ ^ 75 | | 76 +---------+ +---------+ 77 | PCH-PIC | | PCH-MSI | 78 +---------+ +---------+ 79 ^ ^ ^ 80 | | | 81 +---------+ +---------+ +---------+ 82 | PCH-LPC | | Devices | | Devices | 83 +---------+ +---------+ +---------+ 84 ^ 85 | 86 +---------+ 87 | Devices | 88 +---------+ 89 90虚拟扩展IRQ模型 91=============== 92 93在这种模型里面, IPI(Inter-Processor Interrupt) 和CPU本地时钟中断直接发送到CPUINTC, 94CPU串口 (UARTs) 中断发送到PCH-PIC, 而其他所有设备的中断则分别发送到所连接的PCH_PIC/ 95PCH-MSI, 然后V-EIOINTC统一收集,再直接到达CPUINTC:: 96 97 +-----+ +-------------------+ +-------+ 98 | IPI |--> | CPUINTC(0-255vcpu)| <-- | Timer | 99 +-----+ +-------------------+ +-------+ 100 ^ 101 | 102 +-----------+ 103 | V-EIOINTC | 104 +-----------+ 105 ^ ^ 106 | | 107 +---------+ +---------+ 108 | PCH-PIC | | PCH-MSI | 109 +---------+ +---------+ 110 ^ ^ ^ 111 | | | 112 +--------+ +---------+ +---------+ 113 | UARTs | | Devices | | Devices | 114 +--------+ +---------+ +---------+ 115 116V-EIOINTC 是EIOINTC的扩展, 仅工作在虚拟机模式下, 中断经EIOINTC最多可个路由到 1174个虚拟CPU. 但中断经V-EIOINTC最多可个路由到256个虚拟CPU. 118 119传统的EIOINTC中断控制器,中断路由分为两个部分:8比特用于控制路由到哪个CPU, 1204比特用于控制路由到特定CPU的哪个中断管脚。控制CPU路由的8比特前4比特用于控制 121路由到哪个EIOINTC节点,后4比特用于控制此节点哪个CPU。中断路由在选择CPU路由 122和CPU中断管脚路由时,使用bitmap编码方式而不是正常编码方式,所以对于一个 123EIOINTC中断控制器节点,中断只能路由到CPU0 - CPU3,中断管脚IP0-IP3。 124 125V-EIOINTC新增了两个寄存器,支持中断路由到更多CPU个和中断管脚。 126 127V-EIOINTC功能寄存器 128------------------- 129功能寄存器是只读寄存器,用于显示V-EIOINTC支持的特性,目前两个支持两个特性 130EXTIOI_HAS_INT_ENCODE 和 EXTIOI_HAS_CPU_ENCODE。 131 132特性EXTIOI_HAS_INT_ENCODE是传统EIOINTC中断控制器的一个特性,如果此比特为1, 133显示CPU中断管脚路由方式支持正常编码,而不是bitmap编码,所以中断可以路由到 134管脚IP0 - IP15。 135 136特性EXTIOI_HAS_CPU_ENCODE是V-EIOINTC新增特性,如果此比特为1,表示CPU路由 137方式支持正常编码,而不是bitmap编码,所以中断可以路由到CPU0 - CPU255。 138 139V-EIOINTC配置寄存器 140------------------- 141配置寄存器是可读写寄存器,为了兼容性考虑,如果不写此寄存器,中断路由采用 142和传统EIOINTC相同的路由设置。如果对应比特设置为1,表示采用正常路由方式而 143不是bitmap编码的路由方式。 144 145高级扩展IRQ模型 146=============== 147 148在这种模型里面,IPI(Inter-Processor Interrupt)和CPU本地时钟中断直接发送到CPUINTC, 149CPU串口(UARTs)中断发送到LIOINTC,PCH-MSI中断发送到AVECINTC,而后通过AVECINTC直接 150送达CPUINTC,而其他所有设备的中断则分别发送到所连接的PCH-PIC/PCH-LPC,然后由EIOINTC 151统一收集,再直接到达CPUINTC:: 152 153 +-----+ +-----------------------+ +-------+ 154 | IPI | --> | CPUINTC | <-- | Timer | 155 +-----+ +-----------------------+ +-------+ 156 ^ ^ ^ 157 | | | 158 +---------+ +----------+ +---------+ +-------+ 159 | EIOINTC | | AVECINTC | | LIOINTC | <-- | UARTs | 160 +---------+ +----------+ +---------+ +-------+ 161 ^ ^ 162 | | 163 +---------+ +---------+ 164 | PCH-PIC | | PCH-MSI | 165 +---------+ +---------+ 166 ^ ^ ^ 167 | | | 168 +---------+ +---------+ +---------+ 169 | Devices | | PCH-LPC | | Devices | 170 +---------+ +---------+ +---------+ 171 ^ 172 | 173 +---------+ 174 | Devices | 175 +---------+ 176 177ACPI相关的定义 178============== 179 180CPUINTC:: 181 182 ACPI_MADT_TYPE_CORE_PIC; 183 struct acpi_madt_core_pic; 184 enum acpi_madt_core_pic_version; 185 186LIOINTC:: 187 188 ACPI_MADT_TYPE_LIO_PIC; 189 struct acpi_madt_lio_pic; 190 enum acpi_madt_lio_pic_version; 191 192EIOINTC:: 193 194 ACPI_MADT_TYPE_EIO_PIC; 195 struct acpi_madt_eio_pic; 196 enum acpi_madt_eio_pic_version; 197 198HTVECINTC:: 199 200 ACPI_MADT_TYPE_HT_PIC; 201 struct acpi_madt_ht_pic; 202 enum acpi_madt_ht_pic_version; 203 204PCH-PIC:: 205 206 ACPI_MADT_TYPE_BIO_PIC; 207 struct acpi_madt_bio_pic; 208 enum acpi_madt_bio_pic_version; 209 210PCH-MSI:: 211 212 ACPI_MADT_TYPE_MSI_PIC; 213 struct acpi_madt_msi_pic; 214 enum acpi_madt_msi_pic_version; 215 216PCH-LPC:: 217 218 ACPI_MADT_TYPE_LPC_PIC; 219 struct acpi_madt_lpc_pic; 220 enum acpi_madt_lpc_pic_version; 221 222参考文献 223======== 224 225龙芯3A5000的文档: 226 227 https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-3A5000-usermanual-1.02-CN.pdf (中文版) 228 229 https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-3A5000-usermanual-1.02-EN.pdf (英文版) 230 231龙芯LS7A芯片组的文档: 232 233 https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-7A1000-usermanual-2.00-CN.pdf (中文版) 234 235 https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-7A1000-usermanual-2.00-EN.pdf (英文版) 236 237.. note:: 238 - CPUINTC:即《龙芯架构参考手册卷一》第7.4节所描述的CSR.ECFG/CSR.ESTAT寄存器及其 239 中断控制逻辑; 240 - LIOINTC:即《龙芯3A5000处理器使用手册》第11.1节所描述的“传统I/O中断”; 241 - EIOINTC:即《龙芯3A5000处理器使用手册》第11.2节所描述的“扩展I/O中断”; 242 - HTVECINTC:即《龙芯3A5000处理器使用手册》第14.3节所描述的“HyperTransport中断”; 243 - PCH-PIC/PCH-MSI:即《龙芯7A1000桥片用户手册》第5章所描述的“中断控制器”; 244 - PCH-LPC:即《龙芯7A1000桥片用户手册》第24.3节所描述的“LPC中断”。 245