マルチプロセッサシステムで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
とりあえずベアメタルのRaspberry Pi 4でCプログラムを動かしたいならここを見とけば大丈夫.
- Learning operating system development using Linux kernel and Raspberry Pi
Raspberry Pi 3(aarch64)向け
- Building an Operating System for the Raspberry Pi
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のデータシート
- BareMetalで遊ぶ Raspberry Pi 4 - GIC v2編-/BareMetal Raspberry Pi 4 - GICv2 -
BCM2711に載ってる割り込みコントローラ(GICv2)について
- Mailbox property interface
mailboxをいじるときに見る.
- Raspberry Pi 3でBareMetalやってみた 〜スクリーン表示〜
mailboxを実際にいじって画面表示をしている記事.
- R-Pi Troubleshooting
ラズパイのトラブルシューティング.ラズパイの緑LEDがチカチカして起動しないよ〜ってときにお世話になった.
- OSのタスク切り替え処理とAArch64(ARM64)の関数呼び出し規約 - Qiita
- QEMUのRaspberry Pi 3モデルで割り込み
Raspberry Pi 3向けだが,AArch64の割り込みを扱っているので参考になる.
ブログをまた新しくした
mkei.hatenablog.comがほしかったので.