162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci======================================= 462306a36Sopenharmony_ciIRQ chip model (hierarchy) of LoongArch 562306a36Sopenharmony_ci======================================= 662306a36Sopenharmony_ci 762306a36Sopenharmony_ciCurrently, LoongArch based processors (e.g. Loongson-3A5000) can only work together 862306a36Sopenharmony_ciwith LS7A chipsets. The irq chips in LoongArch computers include CPUINTC (CPU Core 962306a36Sopenharmony_ciInterrupt Controller), LIOINTC (Legacy I/O Interrupt Controller), EIOINTC (Extended 1062306a36Sopenharmony_ciI/O Interrupt Controller), HTVECINTC (Hyper-Transport Vector Interrupt Controller), 1162306a36Sopenharmony_ciPCH-PIC (Main Interrupt Controller in LS7A chipset), PCH-LPC (LPC Interrupt Controller 1262306a36Sopenharmony_ciin LS7A chipset) and PCH-MSI (MSI Interrupt Controller). 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ciCPUINTC is a per-core controller (in CPU), LIOINTC/EIOINTC/HTVECINTC are per-package 1562306a36Sopenharmony_cicontrollers (in CPU), while PCH-PIC/PCH-LPC/PCH-MSI are controllers out of CPU (i.e., 1662306a36Sopenharmony_ciin chipsets). These controllers (in other words, irqchips) are linked in a hierarchy, 1762306a36Sopenharmony_ciand there are two models of hierarchy (legacy model and extended model). 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ciLegacy IRQ model 2062306a36Sopenharmony_ci================ 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ciIn this model, IPI (Inter-Processor Interrupt) and CPU Local Timer interrupt go 2362306a36Sopenharmony_cito CPUINTC directly, CPU UARTS interrupts go to LIOINTC, while all other devices 2462306a36Sopenharmony_ciinterrupts go to PCH-PIC/PCH-LPC/PCH-MSI and gathered by HTVECINTC, and then go 2562306a36Sopenharmony_cito LIOINTC, and then CPUINTC:: 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci +-----+ +---------+ +-------+ 2862306a36Sopenharmony_ci | IPI | --> | CPUINTC | <-- | Timer | 2962306a36Sopenharmony_ci +-----+ +---------+ +-------+ 3062306a36Sopenharmony_ci ^ 3162306a36Sopenharmony_ci | 3262306a36Sopenharmony_ci +---------+ +-------+ 3362306a36Sopenharmony_ci | LIOINTC | <-- | UARTs | 3462306a36Sopenharmony_ci +---------+ +-------+ 3562306a36Sopenharmony_ci ^ 3662306a36Sopenharmony_ci | 3762306a36Sopenharmony_ci +-----------+ 3862306a36Sopenharmony_ci | HTVECINTC | 3962306a36Sopenharmony_ci +-----------+ 4062306a36Sopenharmony_ci ^ ^ 4162306a36Sopenharmony_ci | | 4262306a36Sopenharmony_ci +---------+ +---------+ 4362306a36Sopenharmony_ci | PCH-PIC | | PCH-MSI | 4462306a36Sopenharmony_ci +---------+ +---------+ 4562306a36Sopenharmony_ci ^ ^ ^ 4662306a36Sopenharmony_ci | | | 4762306a36Sopenharmony_ci +---------+ +---------+ +---------+ 4862306a36Sopenharmony_ci | PCH-LPC | | Devices | | Devices | 4962306a36Sopenharmony_ci +---------+ +---------+ +---------+ 5062306a36Sopenharmony_ci ^ 5162306a36Sopenharmony_ci | 5262306a36Sopenharmony_ci +---------+ 5362306a36Sopenharmony_ci | Devices | 5462306a36Sopenharmony_ci +---------+ 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ciExtended IRQ model 5762306a36Sopenharmony_ci================== 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ciIn this model, IPI (Inter-Processor Interrupt) and CPU Local Timer interrupt go 6062306a36Sopenharmony_cito CPUINTC directly, CPU UARTS interrupts go to LIOINTC, while all other devices 6162306a36Sopenharmony_ciinterrupts go to PCH-PIC/PCH-LPC/PCH-MSI and gathered by EIOINTC, and then go to 6262306a36Sopenharmony_cito CPUINTC directly:: 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci +-----+ +---------+ +-------+ 6562306a36Sopenharmony_ci | IPI | --> | CPUINTC | <-- | Timer | 6662306a36Sopenharmony_ci +-----+ +---------+ +-------+ 6762306a36Sopenharmony_ci ^ ^ 6862306a36Sopenharmony_ci | | 6962306a36Sopenharmony_ci +---------+ +---------+ +-------+ 7062306a36Sopenharmony_ci | EIOINTC | | LIOINTC | <-- | UARTs | 7162306a36Sopenharmony_ci +---------+ +---------+ +-------+ 7262306a36Sopenharmony_ci ^ ^ 7362306a36Sopenharmony_ci | | 7462306a36Sopenharmony_ci +---------+ +---------+ 7562306a36Sopenharmony_ci | PCH-PIC | | PCH-MSI | 7662306a36Sopenharmony_ci +---------+ +---------+ 7762306a36Sopenharmony_ci ^ ^ ^ 7862306a36Sopenharmony_ci | | | 7962306a36Sopenharmony_ci +---------+ +---------+ +---------+ 8062306a36Sopenharmony_ci | PCH-LPC | | Devices | | Devices | 8162306a36Sopenharmony_ci +---------+ +---------+ +---------+ 8262306a36Sopenharmony_ci ^ 8362306a36Sopenharmony_ci | 8462306a36Sopenharmony_ci +---------+ 8562306a36Sopenharmony_ci | Devices | 8662306a36Sopenharmony_ci +---------+ 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ciACPI-related definitions 8962306a36Sopenharmony_ci======================== 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ciCPUINTC:: 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci ACPI_MADT_TYPE_CORE_PIC; 9462306a36Sopenharmony_ci struct acpi_madt_core_pic; 9562306a36Sopenharmony_ci enum acpi_madt_core_pic_version; 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ciLIOINTC:: 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci ACPI_MADT_TYPE_LIO_PIC; 10062306a36Sopenharmony_ci struct acpi_madt_lio_pic; 10162306a36Sopenharmony_ci enum acpi_madt_lio_pic_version; 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ciEIOINTC:: 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci ACPI_MADT_TYPE_EIO_PIC; 10662306a36Sopenharmony_ci struct acpi_madt_eio_pic; 10762306a36Sopenharmony_ci enum acpi_madt_eio_pic_version; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ciHTVECINTC:: 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci ACPI_MADT_TYPE_HT_PIC; 11262306a36Sopenharmony_ci struct acpi_madt_ht_pic; 11362306a36Sopenharmony_ci enum acpi_madt_ht_pic_version; 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ciPCH-PIC:: 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci ACPI_MADT_TYPE_BIO_PIC; 11862306a36Sopenharmony_ci struct acpi_madt_bio_pic; 11962306a36Sopenharmony_ci enum acpi_madt_bio_pic_version; 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ciPCH-MSI:: 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci ACPI_MADT_TYPE_MSI_PIC; 12462306a36Sopenharmony_ci struct acpi_madt_msi_pic; 12562306a36Sopenharmony_ci enum acpi_madt_msi_pic_version; 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ciPCH-LPC:: 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci ACPI_MADT_TYPE_LPC_PIC; 13062306a36Sopenharmony_ci struct acpi_madt_lpc_pic; 13162306a36Sopenharmony_ci enum acpi_madt_lpc_pic_version; 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ciReferences 13462306a36Sopenharmony_ci========== 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ciDocumentation of Loongson-3A5000: 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-3A5000-usermanual-1.02-CN.pdf (in Chinese) 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-3A5000-usermanual-1.02-EN.pdf (in English) 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ciDocumentation of Loongson's LS7A chipset: 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-7A1000-usermanual-2.00-CN.pdf (in Chinese) 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci https://github.com/loongson/LoongArch-Documentation/releases/latest/download/Loongson-7A1000-usermanual-2.00-EN.pdf (in English) 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci.. Note:: 14962306a36Sopenharmony_ci - CPUINTC is CSR.ECFG/CSR.ESTAT and its interrupt controller described 15062306a36Sopenharmony_ci in Section 7.4 of "LoongArch Reference Manual, Vol 1"; 15162306a36Sopenharmony_ci - LIOINTC is "Legacy I/OInterrupts" described in Section 11.1 of 15262306a36Sopenharmony_ci "Loongson 3A5000 Processor Reference Manual"; 15362306a36Sopenharmony_ci - EIOINTC is "Extended I/O Interrupts" described in Section 11.2 of 15462306a36Sopenharmony_ci "Loongson 3A5000 Processor Reference Manual"; 15562306a36Sopenharmony_ci - HTVECINTC is "HyperTransport Interrupts" described in Section 14.3 of 15662306a36Sopenharmony_ci "Loongson 3A5000 Processor Reference Manual"; 15762306a36Sopenharmony_ci - PCH-PIC/PCH-MSI is "Interrupt Controller" described in Section 5 of 15862306a36Sopenharmony_ci "Loongson 7A1000 Bridge User Manual"; 15962306a36Sopenharmony_ci - PCH-LPC is "LPC Interrupts" described in Section 24.3 of 16062306a36Sopenharmony_ci "Loongson 7A1000 Bridge User Manual". 161