1999-06-27 TLB miss。ROM モニタのワークのmap
日曜は他の仕事をやろうと思ってたのに、TLB のところをいじってたらいつのまにか夜だった。ダメ。
pmap_enter でいけるかな〜、と試してみたんだけど、
0xfff00000 なんて変なアドレスはやっぱりダメのようだ。
結局 mips/mips/locore_mips3.S の tlb miss のところで、runtime に
0xfff????? = 0x03f????? な TLB を作ってやることにした。
R4000 の TLB まわりの資料が無いので全然わからん...。
TLB miss で panic: out of universe する個所でさらに
fault address をチェックして、0xfff00000 以上ならば
0xfff????? = 0x03f????? な TLB を作って復帰させてやる。
わからないまま見よう見まね(cut & paste とも言う)で作ったら
なんとなく動いちゃったよ。
しばらくはこれでいい。
で、無事、APbus の attach の所で、ROM モニタワークの dump に成功。
これでどんなデバイスがつながってるやら、hardware i/o address やらの情報が
取り出し放題だ。しかも apcall 使えばドライバ書かずにデバイス叩けるぞ。
やるかどうかはわかんないけど...
次は割り込みについて調べないと。
Ether をなんとかして動かさないとなにもできん...
#そろそろ backup とっとかないと、何かあった時泣きを見るな...
* * *
ってもう今日はやめようと思ったんだけど、他の仕事する気も無くなったので、
ROMモニタワークをもっと細かく dump (device の link chain をおっかける) してたら、
やっぱりうまくメモリが map できてないことが発覚。
隣のページを見にいっちゃってる?
0xfff????? の TLB を map したところだな。
TLBLO0/LO1 とか EVEN/ODD ってのがよくわかってないから、きっとこのへんなはずだ。
やっぱり R4000 の TLB の構造を理解しないまま書いてはいけなかったらしい。(そりゃそうだ)
R4000 の pdf はたしか MIPS (SGI) の site にあったはずなので、続きはそれを落としてプリントアウトしてからだな。
というわけで今日はもう掃除してメシくって原稿描いて寝ることにしよう。
* * *
AM1:33...
とかいいつつ、メシ食った後やっぱりいじってる。
R4000 の pdf 落として Adobe Acrobat Reader で見ながらもっかい書き修したら、ちゃんと動いちゃったよ。
何が悪かったかというと、つまり偶数ページのTLBエントリに対して、偶数と奇数のページを lo0 と lo1 に map しなければいけなかったのがうまくできてなかったようだ。
いや、なんとなくそうやったつもりだったんだけど、bit の意味とかわかってなかったのでそのせいね。きっと。
やはりマニュアルは偉大だ。
というわけで今度こそここまで。
次回は割り込み。
...までは行かないかな。
config_found とか config_search まわりがまだイマイチよくわかってないので手間取るかも。
EOF