我正在寻求在 Microblaze 上设置 TLB(实际上是在 OVP 上模拟),并已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
?