QEMU の mpcore.c
グローバルタイマーが実装されていない。
みんなつかってないのかな?
とおもったら、どうも xilinx の mpcore.c がおかしい。プライベートエリアが特別なのだろうか?すくなくとも ARM の出している mpcore の仕様書とは違う。qemu のオリジナルの a9mpcore.c はちゃんと
/* Memory map (addresses are offsets from PERIPHBASE): * 0x0000-0x00ff -- Snoop Control Unit * 0x0100-0x01ff -- GIC CPU interface * 0x0200-0x02ff -- Global Timer * 0x0300-0x05ff -- nothing * 0x0600-0x06ff -- private timers and watchdogs * 0x0700-0x0fff -- nothing * 0x1000-0x1fff -- GIC Distributor * * We should implement the global timer but don't currently do so. */
となっている。なんかやっぱり global timer は怪しい。実装がない。Xilinx 版はウォッチドックもプライベートタイマーもない。TTC0 を使えということか、、、、
xen の tegra の実装ではやはり tegra のタイマーを使っている。意味的には global timer を使いたいということだが、rising edge しかつかえないので使いにくいのかな、、、あと電源管理関係で lp2wakeup なんてのもあって、どうも Low Power のための wakeup を定期的にしているようだ。おそらく、深い眠りにはいるのだけど、ときどき、起こしてやんないとタイマー関連が更新されないからだろうね。起こした後にきっと何もしないとまたも深い眠りに入る、、、を繰り返すのだと思う。