| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) | |
| %YAML 1.2 | |
| --- | |
| $id: http://devicetree.org/schemas/interrupt-controller/aspeed,ast2700-interrupt.yaml# | |
| $schema: http://devicetree.org/meta-schemas/core.yaml# | |
| title: ASPEED AST2700 Interrupt Controllers (INTC0/INTC1) | |
| description: | | |
| The ASPEED AST2700 SoC integrates two interrupt controller designs: | |
| - INTC0: Primary controller that routes interrupt sources to upstream, | |
| processor-specific interrupt controllers | |
| - INTC1: Secondary controller whose interrupt outputs feed into INTC0 | |
| The SoC contains four processors to which interrupts can be routed: | |
| - PSP: Primary Service Processor (Cortex-A35) | |
| - SSP: Secondary Service Processor (Cortex-M4) | |
| - TSP: Tertiary Service Processor (Cortex-M4) | |
| - BMCU: Boot MCU (a RISC-V microcontroller) | |
| The following diagram illustrates the overall architecture of the | |
| ASPEED AST2700 interrupt controllers: | |
| +-----------+ +-----------+ | |
| | INTC0 | | INTC1(0) | | |
| +-----------+ +-----------+ | |
| | Router | +-----------+ | Router | | |
| | out int | +Peripheral + | out int | | |
| +-----------+ | 0 0 <-+Controllers+ | INTM | +-----------+ | |
| |PSP GIC <-|---+ . . | +-----------+ | . . <-+Peripheral + | |
| +-----------+ | . . | | . . | +Controllers+ | |
| +-----------+ | . . | | . . | +-----------+ | |
| |SSP NVIC <-|---+ . . <----------------+ . . | | |
| +-----------+ | . . | | . . | | |
| +-----------+ | . . <-------- | . . | | |
| |TSP NVIC <-|---+ . . | | ----+ . . | | |
| +-----------+ | . . | | | | O P | | |
| | . . | | | +-----------+ | |
| | . . <---- | -------------------- | |
| | . . | | | +-----------+ | | |
| | M N | | ---------+ INTC1(1) | | | |
| +-----------+ | +-----------+ | | |
| | . | | |
| | +-----------+ | | |
| -------------+ INTC1(N) | | | |
| +-----------+ | | |
| +--------------+ | | |
| + BMCU APLIC <-+--------------------------------------------- | |
| +--------------+ | |
| INTC0 supports: | |
| - 128 local peripheral interrupt inputs | |
| - Fan-in from up to three INTC1 instances via banked interrupt lines (INTM) | |
| - Local peripheral interrupt outputs | |
| - Merged interrupt outputs | |
| - Software interrupt outputs (SWINT) | |
| - Configurable interrupt routes targeting the PSP, SSP, and TSP | |
| INTC1 supports: | |
| - 192 local peripheral interrupt inputs | |
| - Banked interrupt outputs (INTM, 5 x 6 banks x 32 interrupts per bank) | |
| - Configurable interrupt routes targeting the PSP, SSP, TSP, and BMCU | |
| One INTC1 instance is always present, on the SoC's IO die. A further two | |
| instances may be attached to the SoC's one INTC0 instance via LTPI (LVDS | |
| Tunneling Protocol & Interface). | |
| Interrupt numbering model | |
| ------------------------- | |
| The binding uses a controller-local numbering model. Peripheral device | |
| nodes use the INTCx local interrupt number (hwirq) in their 'interrupts' or | |
| 'interrupts-extended' properties. | |
| For AST2700, INTC0 exposes the following (inclusive) input ranges: | |
| - 000..479: Independent interrupts | |
| - 480..489: INTM0-INTM9 | |
| - 490..499: INTM10-INTM19 | |
| - 500..509: INTM20-INTM29 | |
| - 510..519: INTM30-INTM39 | |
| - 520..529: INTM40-INTM49 | |
| INTC0's (inclusive) output ranges are as follows: | |
| - 000..127: 1:1 local peripheral interrupt output to PSP | |
| - 144..151: Software interrupts from the SSP output to PSP | |
| - 152..159: Software interrupts from the TSP output to PSP | |
| - 192..201: INTM0-INTM9 banked outputs to PSP | |
| - 208..217: INTM30-INTM39 banked outputs to PSP | |
| - 224..233: INTM40-INTM49 banked outputs to PSP | |
| - 256..383: 1:1 local peripheral interrupt output to SSP | |
| - 384..393: INTM10-INTM19 banked outputs to SSP | |
| - 400..407: Software interrupts from the PSP output to SSP | |
| - 408..415: Software interrupts from the TSP output to SSP | |
| - 426..553: 1:1 local peripheral interrupt output to TSP | |
| - 554..563: INTM20-INTM29 banked outputs to TSP | |
| - 570..577: Software interrupts from the PSP output to TSP | |
| - 578..585: Software interrupts from the SSP output to TSP | |
| Inputs and outputs for INTC1 instances are context-dependent. However, for the | |
| first instance of INTC1, the (inclusive) output ranges are: | |
| - 00..05: INTM0-INTM5 | |
| - 10..15: INTM10-INTM15 | |
| - 20..25: INTM20-INTM25 | |
| - 30..35: INTM30-INTM35 | |
| - 40..45: INTM40-INTM45 | |
| - 50..50: BootMCU | |
| maintainers: | |
| - Ryan Chen <ryan_chen@aspeedtech.com> | |
| - Andrew Jeffery <andrew@codeconstruct.com.au> | |
| properties: | |
| compatible: | |
| enum: | |
| - aspeed,ast2700-intc0 | |
| - aspeed,ast2700-intc1 | |
| reg: | |
| maxItems: 1 | |
| interrupt-controller: true | |
| '#interrupt-cells': | |
| const: 1 | |
| description: Single cell encoding the INTC local interrupt number (hwirq). | |
| aspeed,interrupt-ranges: | |
| description: | | |
| Describes how ranges of controller output pins are routed to a parent | |
| interrupt controller. | |
| Each range entry is encoded as: | |
| <out count phandle parent-specifier...> | |
| where: | |
| - out: First controller interrupt output index in the range. | |
| - count: Number of consecutive controller interrupt outputs and parent | |
| interrupt inputs in this range. | |
| - phandle: Phandle to the parent interrupt controller node. | |
| - parent-specifier: Interrupt specifier, as defined by the parent | |
| interrupt controller binding. | |
| $ref: /schemas/types.yaml#/definitions/uint32-array | |
| minItems: 3 | |
| items: | |
| description: Range descriptors with a parent interrupt specifier. | |
| required: | |
| - compatible | |
| - reg | |
| - interrupt-controller | |
| - '#interrupt-cells' | |
| - aspeed,interrupt-ranges | |
| additionalProperties: false | |
| examples: | |
| - | | |
| #include <dt-bindings/interrupt-controller/arm-gic.h> | |
| interrupt-controller@12100000 { | |
| compatible = "aspeed,ast2700-intc0"; | |
| reg = <0x12100000 0x3b00>; | |
| interrupt-parent = <&gic>; | |
| interrupt-controller; | |
| #interrupt-cells = <1>; | |
| aspeed,interrupt-ranges = | |
| <0 128 &gic GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>, | |
| <144 8 &gic GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>, | |
| <152 8 &gic GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>, | |
| <192 10 &gic GIC_SPI 192 IRQ_TYPE_LEVEL_HIGH>, | |
| <208 10 &gic GIC_SPI 208 IRQ_TYPE_LEVEL_HIGH>, | |
| <224 10 &gic GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>, | |
| <256 128 &ssp_nvic 0 0>, | |
| <384 10 &ssp_nvic 160 0>, | |
| <400 8 &ssp_nvic 144 0>, | |
| <408 8 &ssp_nvic 152 0>, | |
| <426 128 &tsp_nvic 0 0>, | |
| <554 10 &tsp_nvic 160 0>, | |
| <570 8 &tsp_nvic 144 0>, | |
| <578 8 &tsp_nvic 152 0>; | |
| }; |