デバイスツリーの割り込みノードに3つのセルがある場合それはArm GIC (Generic Interrupt Controller)を用いた割り込みが想定されている。検索で簡単に出ないしよく忘れるので3つのセルそれぞれの意味についてここに書いておく。
最初に正解URLリスト
- https://community.arm.com/oss-platforms/w/docs/525/device-tree
- https://elixir.bootlin.com/linux/latest/source/Documentation/devicetree/bindings/interrupt-controller/arm,gic.yaml
- https://elixir.bootlin.com/linux/latest/source/Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.yaml
interrupts = <0x0 0x30 0x4>;
1番目のセルは割り込みの種類を表す。
- 0x0のときSPI (Shared Peripheral Interrupt)
- 0x1のときPPI (Private Peripheral Interrupt)
- 0x2のときExtended SPI range (GICv3+)
- 0x3のときExtended PPI range (GICv3+)
2番目のセルは割り込み番号を表す。
- SPIのとき0-987 (0x000-0x3db)の値を取る
- PPIのとき0-15 (0x0-0xf)の値を取る
- Extended SPIのとき0-1023 (0x000-0xfff)の値を取る (GICv3+)
- Extended PPIのとき0-127 (0x00-0x7f)の値を取る (GICv3+)
SPIのときの割り込み番号はLinuxシステム上の割り込み番号としては32 (=0x20)のオフセットがかかっている。したがってシステム上の割り込みの値は32-1019等デバイスツリーに記載の素の値よりも大きくなることに注意が必要。
3番目のセルは割り込みの種類を表す
3番目のセルの下位4ビットは次のいずれかの値を取る
- 0x1 立ち上がりエッジ割り込み
- 0x2 立ち下がりエッジ割り込み (SPIでは無効) (GICv2-)
- 0x4 アクティブハイ レベル割り込み
- 0x8 アクティブロー レベル割り込み (SPIでは無効) (GICv2-)
上位8ビットはPPIのCPUマスクを表していることになっている。GICv3については4番目のセルを用いてPPIのCPUアフィニティを表す。