GIC interrupts devicetree

/ Embedded

デバイスツリーの割り込みノードに3つのセルがある場合それはArm GIC (Generic Interrupt Controller)を用いた割り込みが想定されている。検索で簡単に出ないしよく忘れるので3つのセルそれぞれの意味についてここに書いておく。

最初に正解URLリスト

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アフィニティを表す。