Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / Documentation / translations / zh_CN / arch / loongarch / irq-chip-model.rst
blobd4ff80de47b638b0f17dabef36af272339df7780
1 .. SPDX-License-Identifier: GPL-2.0
3 .. include:: ../../disclaimer-zh_CN.rst
5 :Original: Documentation/arch/loongarch/irq-chip-model.rst
6 :Translator: Huacai Chen <chenhuacai@loongson.cn>
8 ==================================
9 LoongArch的IRQ芯片模型(层级关系)
10 ==================================
12 目前,基于LoongArch的处理器(如龙芯3A5000)只能与LS7A芯片组配合工作。LoongArch计算机
13 中的中断控制器(即IRQ芯片)包括CPUINTC(CPU Core Interrupt Controller)、LIOINTC(
14 Legacy I/O Interrupt Controller)、EIOINTC(Extended I/O Interrupt Controller)、
15 HTVECINTC(Hyper-Transport Vector Interrupt Controller)、PCH-PIC(LS7A芯片组的主中
16 断控制器)、PCH-LPC(LS7A芯片组的LPC中断控制器)和PCH-MSI(MSI中断控制器)。
18 CPUINTC是一种CPU内部的每个核本地的中断控制器,LIOINTC/EIOINTC/HTVECINTC是CPU内部的
19 全局中断控制器(每个芯片一个,所有核共享),而PCH-PIC/PCH-LPC/PCH-MSI是CPU外部的中
20 断控制器(在配套芯片组里面)。这些中断控制器(或者说IRQ芯片)以一种层次树的组织形式
21 级联在一起,一共有两种层级关系模型(传统IRQ模型和扩展IRQ模型)。
23 传统IRQ模型
24 ===========
26 在这种模型里面,IPI(Inter-Processor Interrupt)和CPU本地时钟中断直接发送到CPUINTC,
27 CPU串口(UARTs)中断发送到LIOINTC,而其他所有设备的中断则分别发送到所连接的PCH-PIC/
28 PCH-LPC/PCH-MSI,然后被HTVECINTC统一收集,再发送到LIOINTC,最后到达CPUINTC::
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      +---------+
59 扩展IRQ模型
60 ===========
62 在这种模型里面,IPI(Inter-Processor Interrupt)和CPU本地时钟中断直接发送到CPUINTC,
63 CPU串口(UARTs)中断发送到LIOINTC,而其他所有设备的中断则分别发送到所连接的PCH-PIC/
64 PCH-LPC/PCH-MSI,然后被EIOINTC统一收集,再直接到达CPUINTC::
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     +---------+
90 虚拟扩展IRQ模型
91 ===============
93 在这种模型里面, IPI(Inter-Processor Interrupt) 和CPU本地时钟中断直接发送到CPUINTC,
94 CPU串口 (UARTs) 中断发送到PCH-PIC, 而其他所有设备的中断则分别发送到所连接的PCH_PIC/
95 PCH-MSI, 然后V-EIOINTC统一收集,再直接到达CPUINTC::
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             +--------+ +---------+ +---------+
116 V-EIOINTC 是EIOINTC的扩展, 仅工作在虚拟机模式下, 中断经EIOINTC最多可个路由到
117 4个虚拟CPU. 但中断经V-EIOINTC最多可个路由到256个虚拟CPU.
119 传统的EIOINTC中断控制器,中断路由分为两个部分:8比特用于控制路由到哪个CPU,
120 4比特用于控制路由到特定CPU的哪个中断管脚。控制CPU路由的8比特前4比特用于控制
121 路由到哪个EIOINTC节点,后4比特用于控制此节点哪个CPU。中断路由在选择CPU路由
122 和CPU中断管脚路由时,使用bitmap编码方式而不是正常编码方式,所以对于一个
123 EIOINTC中断控制器节点,中断只能路由到CPU0 - CPU3,中断管脚IP0-IP3。
125 V-EIOINTC新增了两个寄存器,支持中断路由到更多CPU个和中断管脚。
127 V-EIOINTC功能寄存器
128 -------------------
129 功能寄存器是只读寄存器,用于显示V-EIOINTC支持的特性,目前两个支持两个特性
130 EXTIOI_HAS_INT_ENCODE 和 EXTIOI_HAS_CPU_ENCODE。
132 特性EXTIOI_HAS_INT_ENCODE是传统EIOINTC中断控制器的一个特性,如果此比特为1,
133 显示CPU中断管脚路由方式支持正常编码,而不是bitmap编码,所以中断可以路由到
134 管脚IP0 - IP15。
136 特性EXTIOI_HAS_CPU_ENCODE是V-EIOINTC新增特性,如果此比特为1,表示CPU路由
137 方式支持正常编码,而不是bitmap编码,所以中断可以路由到CPU0 - CPU255。
139 V-EIOINTC配置寄存器
140 -------------------
141 配置寄存器是可读写寄存器,为了兼容性考虑,如果不写此寄存器,中断路由采用
142 和传统EIOINTC相同的路由设置。如果对应比特设置为1,表示采用正常路由方式而
143 不是bitmap编码的路由方式。
145 高级扩展IRQ模型
146 ===============
148 在这种模型里面,IPI(Inter-Processor Interrupt)和CPU本地时钟中断直接发送到CPUINTC,
149 CPU串口(UARTs)中断发送到LIOINTC,PCH-MSI中断发送到AVECINTC,而后通过AVECINTC直接
150 送达CPUINTC,而其他所有设备的中断则分别发送到所连接的PCH-PIC/PCH-LPC,然后由EIOINTC
151 统一收集,再直接到达CPUINTC::
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              +---------+
177 ACPI相关的定义
178 ==============
180 CPUINTC::
182   ACPI_MADT_TYPE_CORE_PIC;
183   struct acpi_madt_core_pic;
184   enum acpi_madt_core_pic_version;
186 LIOINTC::
188   ACPI_MADT_TYPE_LIO_PIC;
189   struct acpi_madt_lio_pic;
190   enum acpi_madt_lio_pic_version;
192 EIOINTC::
194   ACPI_MADT_TYPE_EIO_PIC;
195   struct acpi_madt_eio_pic;
196   enum acpi_madt_eio_pic_version;
198 HTVECINTC::
200   ACPI_MADT_TYPE_HT_PIC;
201   struct acpi_madt_ht_pic;
202   enum acpi_madt_ht_pic_version;
204 PCH-PIC::
206   ACPI_MADT_TYPE_BIO_PIC;
207   struct acpi_madt_bio_pic;
208   enum acpi_madt_bio_pic_version;
210 PCH-MSI::
212   ACPI_MADT_TYPE_MSI_PIC;
213   struct acpi_madt_msi_pic;
214   enum acpi_madt_msi_pic_version;
216 PCH-LPC::
218   ACPI_MADT_TYPE_LPC_PIC;
219   struct acpi_madt_lpc_pic;
220   enum acpi_madt_lpc_pic_version;
222 参考文献
223 ========
225 龙芯3A5000的文档:
227   https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-3A5000-usermanual-1.02-CN.pdf (中文版)
229   https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-3A5000-usermanual-1.02-EN.pdf (英文版)
231 龙芯LS7A芯片组的文档:
233   https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-7A1000-usermanual-2.00-CN.pdf (中文版)
235   https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-7A1000-usermanual-2.00-EN.pdf (英文版)
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中断”。