マルチプロセッサシステムでGICを使うときの注意点

aarch64向け自作OS*1マルチプロセッサ対応をするとき,セカンダリのCPUが一生タイマ割り込みを起こしてくれなくてウンウン唸りながらGICv2のドキュメントを眺めていたところ...

  • If the GIC is implemented as part of a multiprocessor system:

    • Some registers are banked to provide a separate copy for each connected processor. These include the registers associated with PPIs and SGIs, and the GICD_NSACRn, when implemented.

(ARM Generic Interrupt Controller Architecture version 2.0 Architecture Specification, Page 4-77)

知らなかったそんなの...

Register Bankingといって,同じアドレスに複数のレジスタマッピングされていることがあるらしい.MMIOだし,完全にCPU間で共有されているものだと思っていました.

ということで,GICの初期化処理はプロセッサごとに行う必要があります.

Raspberry Pi 4B(AArch64)向けOSを作るにあたって参考になったリンク集

1ヶ月前くらいからちまちまRaspberry Pi 4B向けのOSを作ってます(OSと呼べる代物ではまだないですが).

それを作るにあたって参考にしたリンクをメモとして残しておきます.随時更新します.

リンク集

  • Writing a “bare metal” operating system for Raspberry Pi 4

isometimes.github.io

とりあえずベアメタルのRaspberry Pi 4でCプログラムを動かしたいならここを見とけば大丈夫.

github.com

Raspberry Pi 3(aarch64)向け

jsandler18.github.io

Raspberry Pi 2,3(aarch32)向け

  • BCM2711 ARM Peripherals

https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711/rpi_DATA_2711_1p0.pdf

Raspberry Pi 4Bに載ってるSoCであるBCM2711のデータシート

speakerdeck.com

BCM2711に載ってる割り込みコントローラ(GICv2)について

  • Mailbox property interface

github.com

mailboxをいじるときに見る.

  • Raspberry Pi 3でBareMetalやってみた 〜スクリーン表示〜

qiita.com

mailboxを実際にいじって画面表示をしている記事.

  • R-Pi Troubleshooting

elinux.org

ラズパイのトラブルシューティング.ラズパイの緑LEDがチカチカして起動しないよ〜ってときにお世話になった.

  • OSのタスク切り替え処理とAArch64(ARM64)の関数呼び出し規約 - Qiita

qiita.com

qiita.com

Raspberry Pi 3向けだが,AArch64の割り込みを扱っているので参考になる.