Microblaze (実際には OVP でシミュレート) で TLB をセットアップしようとしていますがC_USE_MMU
、3
.
これは私のブートコードです:
.global _start
.section .vectors.reset, "ax"
.align 2
.ent _start
.type _start, @function
_start:
brai _actualstart
.end _start
....
.section .text
.global _actualstart
.align 4
.ent _actualstart
.type _actualstart, @function
_actualstart:
mfs r1, rmsr
nop
ori r1, r1, 0x00040000
mts rmsr, r1
nop
addik r3, r0, 0x3F /* Microblaze TLB has 64 entries */
_zeroouttlb:
mts rtlbx, r3
mts rtlbhi, r0
mts rtlblo, r0
bgtid r3, _zeroouttlb /* Uses delay slot */
addik r3, r3, -1
以下の行は、期待どおりに更新r1
さ0x00040000
れます。
ori r1, r1, 0x00040000
しかし、次の行では:
mts rmsr, r1
の値msr
は変更されないため、コードは次のように失敗します。
mts rtlbhi, r0
と:
Fatal (MB_TLB) Attempting Write to TLBHI when no MMU available
(msr
更新されていないため、まだ読み取りが行われている0x00000000
ため、プロセッサは MMU サポートが利用できないことを正しく評価しています)。
私のコードが を更新しないのはなぜmsr
ですか?