新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

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 を定期的にしているようだ。おそらく、深い眠りにはいるのだけど、ときどき、起こしてやんないとタイマー関連が更新されないからだろうね。起こした後にきっと何もしないとまたも深い眠りに入る、、、を繰り返すのだと思う。