台風でガレージがちょっと浸水してしまった。今年は去年のようなゲリラ豪雨
もなく安泰だったのだけれど、ここにきて。ここずっとの雨も相まって、機械
に錆が...。必死にWD-40かけながら錆落としして、油引き。

SH4A続き。 TLBにエントリに乗せるにはPTEH,PTEL,PTEA(TLB拡張モードのみ)に値を設定し てLDTLBする。PTEHは仮想アドレスとアドレススペースID。PTELに入れるのは物 理アドレスの他、色々な(キャッシュ、ページサイズ、プロテクト...)情報だ。 PTEAはPTELに収まりきれなかったものを設定するためにある。
OS側では仮想アドレスをインデックスとして、それに対するページ情報をスト アしている。なのでそのインデックスでPTEHは設定できる。ASID(アドレススペー スID)は、その状況でのアドレス空間の違いを示すものなので、その場での設定 でいい。
ページの設定はその仮想アドレスでインデックスされるものの中に設定されて いる。それをPTEL,PTEAに設定してTLBにロードする。ここでPTEA(Page Table Entry Assistance Register)が必要なのは、PTELだけでは必要な情報をロード できないからだ。
素直に考えると、仮想アドレスでインデックスされるのは
そこで、ハードウェアでは使っていないビットに、種々の情報を押しこめて、 実際にロードする段階でデコードしようという手段になる。
そもそも本当に押しこめるならハードウェアの設計時点で押しこめている。押 しこめる場所としてはハードウェアでリザーブになっている場所だ。そこでも 押しこめなくなると、ソフトウェア的な妥協を入れることになる。
NetBSDの場合、SH4のPCMCIA空間の設定にPTEAを使う。この設定は[11:9]に入れ ている。これはNetBSDが4Kページだということを前提にしてPPNを潰して [11:9]に入れている(4Kページなら[11:10]は使われないビットだからだ)。[9] はリザーブ。
そしてここで今回のSH4AのTLB拡張モードだ。これはPTEAに10bit使う。どうあ がいても押し込めない。
さらにNetBSDではソフトウェア的なワイヤードページにPTELの31bit目を使って いるのだけど、これはSH4までの29bit物理アドレスならいいけれど、32bitアド レスモードでは、かちあってしまっていけない。
物理アドレスで2G以上の空間にあるメモリをサポートしないなら、このままで もOKか。
そうなるとソフトウェアの事情でPPNのマスクを変更しないといけない。うーん...

SH4A続き。 TLBにエントリに乗せるにはPTEH,PTEL,PTEA(TLB拡張モードのみ)に値を設定し てLDTLBする。PTEHは仮想アドレスとアドレススペースID。PTELに入れるのは物 理アドレスの他、色々な(キャッシュ、ページサイズ、プロテクト...)情報だ。 PTEAはPTELに収まりきれなかったものを設定するためにある。
OS側では仮想アドレスをインデックスとして、それに対するページ情報をスト アしている。なのでそのインデックスでPTEHは設定できる。ASID(アドレススペー スID)は、その状況でのアドレス空間の違いを示すものなので、その場での設定 でいい。
ページの設定はその仮想アドレスでインデックスされるものの中に設定されて いる。それをPTEL,PTEAに設定してTLBにロードする。ここでPTEA(Page Table Entry Assistance Register)が必要なのは、PTELだけでは必要な情報をロード できないからだ。
素直に考えると、仮想アドレスでインデックスされるのは
struct
{
uint32_t ptel;
uint32_t ptea;
}
だ。しかし、こうするにはかなりの度胸がいる。できれば32bitに押しこめたい。
そこで、ハードウェアでは使っていないビットに、種々の情報を押しこめて、 実際にロードする段階でデコードしようという手段になる。
そもそも本当に押しこめるならハードウェアの設計時点で押しこめている。押 しこめる場所としてはハードウェアでリザーブになっている場所だ。そこでも 押しこめなくなると、ソフトウェア的な妥協を入れることになる。
NetBSDの場合、SH4のPCMCIA空間の設定にPTEAを使う。この設定は[11:9]に入れ ている。これはNetBSDが4Kページだということを前提にしてPPNを潰して [11:9]に入れている(4Kページなら[11:10]は使われないビットだからだ)。[9] はリザーブ。
そしてここで今回のSH4AのTLB拡張モードだ。これはPTEAに10bit使う。どうあ がいても押し込めない。
さらにNetBSDではソフトウェア的なワイヤードページにPTELの31bit目を使って いるのだけど、これはSH4までの29bit物理アドレスならいいけれど、32bitアド レスモードでは、かちあってしまっていけない。
物理アドレスで2G以上の空間にあるメモリをサポートしないなら、このままで もOKか。
そうなるとソフトウェアの事情でPPNのマスクを変更しないといけない。うーん...
