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