0

Microblaze (実際には OVP でシミュレート) で TLB をセットアップしようとしていますがC_USE_MMU3.

これは私のブートコードです:

    .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

以下の行は、期待どおりに更新r10x00040000れます。

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ですか?

4

1 に答える 1