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