162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci.. include:: ../../disclaimer-zh_CN.rst
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci:Original: Documentation/arch/loongarch/irq-chip-model.rst
662306a36Sopenharmony_ci:Translator: Huacai Chen <chenhuacai@loongson.cn>
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci==================================
962306a36Sopenharmony_ciLoongArch的IRQ芯片模型(层级关系)
1062306a36Sopenharmony_ci==================================
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci目前,基于LoongArch的处理器(如龙芯3A5000)只能与LS7A芯片组配合工作。LoongArch计算机
1362306a36Sopenharmony_ci中的中断控制器(即IRQ芯片)包括CPUINTC(CPU Core Interrupt Controller)、LIOINTC(
1462306a36Sopenharmony_ciLegacy I/O Interrupt Controller)、EIOINTC(Extended I/O Interrupt Controller)、
1562306a36Sopenharmony_ciHTVECINTC(Hyper-Transport Vector Interrupt Controller)、PCH-PIC(LS7A芯片组的主中
1662306a36Sopenharmony_ci断控制器)、PCH-LPC(LS7A芯片组的LPC中断控制器)和PCH-MSI(MSI中断控制器)。
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciCPUINTC是一种CPU内部的每个核本地的中断控制器,LIOINTC/EIOINTC/HTVECINTC是CPU内部的
1962306a36Sopenharmony_ci全局中断控制器(每个芯片一个,所有核共享),而PCH-PIC/PCH-LPC/PCH-MSI是CPU外部的中
2062306a36Sopenharmony_ci断控制器(在配套芯片组里面)。这些中断控制器(或者说IRQ芯片)以一种层次树的组织形式
2162306a36Sopenharmony_ci级联在一起,一共有两种层级关系模型(传统IRQ模型和扩展IRQ模型)。
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci传统IRQ模型
2462306a36Sopenharmony_ci===========
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci在这种模型里面,IPI(Inter-Processor Interrupt)和CPU本地时钟中断直接发送到CPUINTC,
2762306a36Sopenharmony_ciCPU串口(UARTs)中断发送到LIOINTC,而其他所有设备的中断则分别发送到所连接的PCH-PIC/
2862306a36Sopenharmony_ciPCH-LPC/PCH-MSI,然后被HTVECINTC统一收集,再发送到LIOINTC,最后到达CPUINTC::
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci     +-----+     +---------+     +-------+
3162306a36Sopenharmony_ci     | IPI | --> | CPUINTC | <-- | Timer |
3262306a36Sopenharmony_ci     +-----+     +---------+     +-------+
3362306a36Sopenharmony_ci                      ^
3462306a36Sopenharmony_ci                      |
3562306a36Sopenharmony_ci                 +---------+     +-------+
3662306a36Sopenharmony_ci                 | LIOINTC | <-- | UARTs |
3762306a36Sopenharmony_ci                 +---------+     +-------+
3862306a36Sopenharmony_ci                      ^
3962306a36Sopenharmony_ci                      |
4062306a36Sopenharmony_ci                +-----------+
4162306a36Sopenharmony_ci                | HTVECINTC |
4262306a36Sopenharmony_ci                +-----------+
4362306a36Sopenharmony_ci                 ^         ^
4462306a36Sopenharmony_ci                 |         |
4562306a36Sopenharmony_ci           +---------+ +---------+
4662306a36Sopenharmony_ci           | PCH-PIC | | PCH-MSI |
4762306a36Sopenharmony_ci           +---------+ +---------+
4862306a36Sopenharmony_ci             ^     ^           ^
4962306a36Sopenharmony_ci             |     |           |
5062306a36Sopenharmony_ci     +---------+ +---------+ +---------+
5162306a36Sopenharmony_ci     | PCH-LPC | | Devices | | Devices |
5262306a36Sopenharmony_ci     +---------+ +---------+ +---------+
5362306a36Sopenharmony_ci          ^
5462306a36Sopenharmony_ci          |
5562306a36Sopenharmony_ci     +---------+
5662306a36Sopenharmony_ci     | Devices |
5762306a36Sopenharmony_ci     +---------+
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci扩展IRQ模型
6062306a36Sopenharmony_ci===========
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci在这种模型里面,IPI(Inter-Processor Interrupt)和CPU本地时钟中断直接发送到CPUINTC,
6362306a36Sopenharmony_ciCPU串口(UARTs)中断发送到LIOINTC,而其他所有设备的中断则分别发送到所连接的PCH-PIC/
6462306a36Sopenharmony_ciPCH-LPC/PCH-MSI,然后被EIOINTC统一收集,再直接到达CPUINTC::
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci          +-----+     +---------+     +-------+
6762306a36Sopenharmony_ci          | IPI | --> | CPUINTC | <-- | Timer |
6862306a36Sopenharmony_ci          +-----+     +---------+     +-------+
6962306a36Sopenharmony_ci                       ^       ^
7062306a36Sopenharmony_ci                       |       |
7162306a36Sopenharmony_ci                +---------+ +---------+     +-------+
7262306a36Sopenharmony_ci                | EIOINTC | | LIOINTC | <-- | UARTs |
7362306a36Sopenharmony_ci                +---------+ +---------+     +-------+
7462306a36Sopenharmony_ci                 ^       ^
7562306a36Sopenharmony_ci                 |       |
7662306a36Sopenharmony_ci          +---------+ +---------+
7762306a36Sopenharmony_ci          | PCH-PIC | | PCH-MSI |
7862306a36Sopenharmony_ci          +---------+ +---------+
7962306a36Sopenharmony_ci            ^     ^           ^
8062306a36Sopenharmony_ci            |     |           |
8162306a36Sopenharmony_ci    +---------+ +---------+ +---------+
8262306a36Sopenharmony_ci    | PCH-LPC | | Devices | | Devices |
8362306a36Sopenharmony_ci    +---------+ +---------+ +---------+
8462306a36Sopenharmony_ci         ^
8562306a36Sopenharmony_ci         |
8662306a36Sopenharmony_ci    +---------+
8762306a36Sopenharmony_ci    | Devices |
8862306a36Sopenharmony_ci    +---------+
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ciACPI相关的定义
9162306a36Sopenharmony_ci==============
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ciCPUINTC::
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci  ACPI_MADT_TYPE_CORE_PIC;
9662306a36Sopenharmony_ci  struct acpi_madt_core_pic;
9762306a36Sopenharmony_ci  enum acpi_madt_core_pic_version;
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ciLIOINTC::
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci  ACPI_MADT_TYPE_LIO_PIC;
10262306a36Sopenharmony_ci  struct acpi_madt_lio_pic;
10362306a36Sopenharmony_ci  enum acpi_madt_lio_pic_version;
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ciEIOINTC::
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci  ACPI_MADT_TYPE_EIO_PIC;
10862306a36Sopenharmony_ci  struct acpi_madt_eio_pic;
10962306a36Sopenharmony_ci  enum acpi_madt_eio_pic_version;
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ciHTVECINTC::
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci  ACPI_MADT_TYPE_HT_PIC;
11462306a36Sopenharmony_ci  struct acpi_madt_ht_pic;
11562306a36Sopenharmony_ci  enum acpi_madt_ht_pic_version;
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ciPCH-PIC::
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ci  ACPI_MADT_TYPE_BIO_PIC;
12062306a36Sopenharmony_ci  struct acpi_madt_bio_pic;
12162306a36Sopenharmony_ci  enum acpi_madt_bio_pic_version;
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ciPCH-MSI::
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ci  ACPI_MADT_TYPE_MSI_PIC;
12662306a36Sopenharmony_ci  struct acpi_madt_msi_pic;
12762306a36Sopenharmony_ci  enum acpi_madt_msi_pic_version;
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ciPCH-LPC::
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci  ACPI_MADT_TYPE_LPC_PIC;
13262306a36Sopenharmony_ci  struct acpi_madt_lpc_pic;
13362306a36Sopenharmony_ci  enum acpi_madt_lpc_pic_version;
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci参考文献
13662306a36Sopenharmony_ci========
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci龙芯3A5000的文档:
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ci  https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-3A5000-usermanual-1.02-CN.pdf (中文版)
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci  https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-3A5000-usermanual-1.02-EN.pdf (英文版)
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ci龙芯LS7A芯片组的文档:
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci  https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-7A1000-usermanual-2.00-CN.pdf (中文版)
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci  https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-7A1000-usermanual-2.00-EN.pdf (英文版)
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci.. note::
15162306a36Sopenharmony_ci    - CPUINTC:即《龙芯架构参考手册卷一》第7.4节所描述的CSR.ECFG/CSR.ESTAT寄存器及其
15262306a36Sopenharmony_ci      中断控制逻辑;
15362306a36Sopenharmony_ci    - LIOINTC:即《龙芯3A5000处理器使用手册》第11.1节所描述的“传统I/O中断”;
15462306a36Sopenharmony_ci    - EIOINTC:即《龙芯3A5000处理器使用手册》第11.2节所描述的“扩展I/O中断”;
15562306a36Sopenharmony_ci    - HTVECINTC:即《龙芯3A5000处理器使用手册》第14.3节所描述的“HyperTransport中断”;
15662306a36Sopenharmony_ci    - PCH-PIC/PCH-MSI:即《龙芯7A1000桥片用户手册》第5章所描述的“中断控制器”;
15762306a36Sopenharmony_ci    - PCH-LPC:即《龙芯7A1000桥片用户手册》第24.3节所描述的“LPC中断”。
158