← Documents Documentation/devicetree/bindings/arm/omap/crossbar.txt GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings

TI interrupt crossbar

많은 subsystem IRQ source를 parent interrupt controller input에 mux하는 crossbar binding입니다.

Source pathDocumentation/devicetree/bindings/arm/omap/crossbar.txt
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약과 해설

crossbar.txt:1-55

Reserved와 hard-wired IRQ를 제외하고 request number를 parent GIC SPI input에 mapping합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 Some socs have a large number of interrupts requests to service
2 the needs of its many peripherals and subsystems. All of the
3 interrupt lines from the subsystems are not needed at the same
4 time, so they have to be muxed to the irq-controller appropriately.
5 In such places a interrupt controllers are preceded by an CROSSBAR
6 that provides flexibility in muxing the device requests to the controller
7 inputs.
8
9 Required properties:
10 - compatible : Should be "ti,irq-crossbar"
11 - reg: Base address and the size of the crossbar registers.
12 - interrupt-controller: indicates that this block is an interrupt controller.
13 - ti,max-irqs: Total number of irqs available at the parent interrupt controller.
14 - ti,max-crossbar-sources: Maximum number of crossbar sources that can be routed.
15 - ti,reg-size: Size of a individual register in bytes. Every individual
16 register is assumed to be of same size. Valid sizes are 1, 2, 4.
17 - ti,irqs-reserved: List of the reserved irq lines that are not muxed using
18 crossbar. These interrupt lines are reserved in the soc,
19 so crossbar bar driver should not consider them as free
20 lines.
21
22 Optional properties:
23 - ti,irqs-skip: This is similar to "ti,irqs-reserved", but these are for
24 SOC-specific hard-wiring of those irqs which unexpectedly bypasses the
25 crossbar. These irqs have a crossbar register, but still cannot be used.
26
27 - ti,irqs-safe-map: integer which maps to a safe configuration to use
28 when the interrupt controller irq is unused (when not provided, default is 0)
29
30 Examples:
31 crossbar_mpu: crossbar@4a002a48 {
32 compatible = "ti,irq-crossbar";
33 reg = <0x4a002a48 0x130>;
34 ti,max-irqs = <160>;
35 ti,max-crossbar-sources = <400>;
36 ti,reg-size = <2>;
37 ti,irqs-reserved = <0 1 2 3 5 6 131 132>;
38 ti,irqs-skip = <10 133 139 140>;
39 };
40
41 Consumer:
42 ========
43 See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt and
44 Documentation/devicetree/bindings/interrupt-controller/arm,gic.yaml for
45 further details.
46
47 An interrupt consumer on an SoC using crossbar will use:
48 interrupts = <GIC_SPI request_number interrupt_level>
49
50 Example:
51 device_x@4a023000 {
52 /* Crossbar 8 used */
53 interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
54 ...
55 };
56

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

Interrupt crossbar controller

1-40

일부 SoC에는 많은 peripheral과 subsystem의 요구를 처리하기 위한 interrupt request가 매우 많습니다. 모든 subsystem interrupt line이 동시에 필요하지 않으므로 irq-controller input에 적절히 mux해야 합니다.

이 경우 interrupt controller 앞에 CROSSBAR를 두어 device request를 controller input에 유연하게 mapping합니다.

필수 `compatible`은 `ti,irq-crossbar`, `reg`는 crossbar register base와 크기, `interrupt-controller`는 이 block이 interrupt controller임을 나타냅니다.

`ti,max-irqs`는 parent interrupt controller가 제공하는 총 IRQ 수, `ti,max-crossbar-sources`는 routing 가능한 최대 crossbar source 수입니다. `ti,reg-size`는 각 register 크기이며 모든 register가 같은 크기라고 가정하고 1, 2, 4 byte만 허용합니다.

`ti,irqs-reserved`는 crossbar로 mux하지 않는 reserved IRQ line 목록입니다. SoC에서 예약된 line이므로 driver가 free line으로 취급해서는 안 됩니다.

Optional `ti,irqs-skip`은 SoC-specific hard-wiring으로 crossbar를 예상과 다르게 우회하는 IRQ 목록입니다. Crossbar register가 있어도 사용할 수 없습니다.

Optional `ti,irqs-safe-map`은 interrupt controller IRQ가 사용되지 않을 때 적용할 safe configuration을 나타내는 정수이며 생략하면 기본값은 0입니다.

Crossbar node 예

crossbar_mpu: crossbar@4a002a48 {
        compatible = "ti,irq-crossbar";
        reg = <0x4a002a48 0x130>;
        ti,max-irqs = <160>;
        ti,max-crossbar-sources = <400>;
        ti,reg-size = <2>;
        ti,irqs-reserved = <0 1 2 3 5 6 131 132>;
        ti,irqs-skip = <10 133 139 140>;
};
Interrupt crossbar routing
Peripheral/subsystem IRQ sources최대 ti,max-crossbar-sources
Reserved/skip filtering사용할 수 없는 source와 line 제외
ti,irq-crossbarRegister별 source 선택
Parent IRQ controllerti,max-irqs input

많은 subsystem request를 제한된 parent IRQ input에 mapping합니다.

Crossbar IRQ 목록 의미
Property의미
ti,irqs-reservedSoC가 예약하여 crossbar가 사용하지 않는 IRQ line
ti,irqs-skipHardware가 crossbar를 우회하므로 register가 있어도 사용할 수 없는 IRQ
ti,irqs-safe-map사용하지 않는 parent IRQ에 적용할 safe source, 기본 0

Reserved, skip과 safe map의 차이를 정리합니다.

Crossbar interrupt consumer

41-55

Consumer

자세한 내용은 `Documentation/devicetree/bindings/interrupt-controller/interrupts.txt`와 `Documentation/devicetree/bindings/interrupt-controller/arm,gic.yaml`을 참조하십시오.

Crossbar를 사용하는 SoC의 interrupt consumer는 `interrupts = <GIC_SPI request_number interrupt_level>` 형식을 사용합니다.

Crossbar request 8을 level-high SPI로 사용하는 예

device_x@4a023000 {
        /* Crossbar 8 used */
        interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
        ...
};