rpi_start.Sを読む (第11回)
さて、今回読むのは次の部分です。
マニュアルにも「MCR p15, 0,, c2, c0, 0 ; Write Translation Table Base Register 0」とあります。
次に進みます。
現時点の物理・仮想の変換バッファを無効化するということでいいのかな。
次は、なにやら重要だよというコメントから始まっています。
謎です。
ドメインアクセスコントロールレジスタのフォーマットは次のようになっていますから、ドメイン0に0x01がセットされていると。
0x01はマニュアルには「Client. Accesses are checked against the access permission bits in the TLB entry.」とあります。TLBエントリのアクセスパーミッションビットに対してチェックを行う、ということかな。
アクセスパーミッション(AP)は10bit,11bitでしたね。
今回読んだ部分では、各種キャッシュを止めて、TTBをセット&無効化し、ドメインアクセスレジスタを設定しました。
211 ldr r0, Ltemp_l1_table /* The page table address */ 212 mcr p15, 0, r0, c2, c0, 0 /* Set Translation Table Base */ 213 214 mov r0, #0 215 mcr p15, 0, r0, c8, c7, 0 /* Invalidate TLBs */ 216 217 /* Set the Domain Access register. Very important! */ 218 mov r0, #((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2)) | DOMAIN_CLIENT) 219 mcr p15, 0, r0, c3, c0, 0さっそく始めましょう。
211 ldr r0, Ltemp_l1_table /* The page table address */ 212 mcr p15, 0, r0, c2, c0, 0 /* Set Translation Table Base */さきほど作成した0x4000のサイズを持つLtemp_l1_tableの先頭アドレスをr0にロードし、TTBをセットしています。Ltemp_l1_tableの先頭アドレスをTTBにするよっ、てことですかね。
マニュアルにも「MCR p15, 0,
次に進みます。
214 mov r0, #0 215 mcr p15, 0, r0, c8, c7, 0 /* Invalidate TLBs */マニュアルによるとc8, c7, 0の組み合わせは「Invalidate unified TLB unlocked entries」とのこと。c8がTLB関連で、c7がunified TLBを指し、0がInvalidate TLB unlocked entriesを指すようです。
現時点の物理・仮想の変換バッファを無効化するということでいいのかな。
次は、なにやら重要だよというコメントから始まっています。
217 /* Set the Domain Access register. Very important! */ 218 mov r0, #((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2)) | DOMAIN_CLIENT) 219 mcr p15, 0, r0, c3, c0, 0久々に定義を追っかける気がしますが、PMAP_DOMAIN_KERNELはpmap.hで次のように定義されています。
#define PMAP_DOMAIN_KERNEL 0 /* The kernel uses domain #0 */DOMAIN_CLIENTはpte.hで次のように定義されています。
/* * Domain Types for the Domain Access Control Register. */ #define DOMAIN_FAULT 0x00 /* no access */ #define DOMAIN_CLIENT 0x01 /* client */ #define DOMAIN_RESERVED 0x02 /* reserved */ #define DOMAIN_MANAGER 0x03 /* manager */えーとつまり、
(0x01 << (0 * 2) | (0x01)なので、0x01ですよね。最初の(DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2))って意味ないような。machdep.cでも似たような書き方をしているのですけど、そういうおまじないってことなんでしょうか。
謎です。
ドメインアクセスコントロールレジスタのフォーマットは次のようになっていますから、ドメイン0に0x01がセットされていると。
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
D15 | D14 | D13 | D12 | D11 | D10 | D9 | D8 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
アクセスパーミッション(AP)は10bit,11bitでしたね。
31-20 | 19 | 18 | 17 | 16 | 15 | 14-12 | 11-10 | 9 | 8-5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
セクションのベースアドレス(12bit) | SBZ | 0 | nG | S | APX | TEX | AP | IMP | ドメイン | XN | C | B | 1 | 0 |
コメント(0件)
- TB-URL http://www.tokuda.net/diary/0813/tb/