This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

cache contents miss fit with main tlb

since I did:

1、set I and C bit in SCTLR_EL3

2、enable MMU

3、setup page table

4、change memory attr of address space 0x30000000-0x3020000000 (sram) as  inner shareable|write back|r/w allocate

5、read and write 0x30000000 more than 2 times 

I found that:

1、L1 cache contes only contains addresses related with page table (0xFXXXXXXX-)

2、main TLB contains addresses related with both page table and 0x30000000

my question is:

1、does this mean no data from 0x30000000  was caches ?

2、what's the reason cause this?

thanks.

Parents
  • 2、enable MMU

    3、setup page table

    4、change memory attr of address space 0x30000000-0x3020000000 (sram) as  inner shareable|write back|r/w allocate

    This might just be how you described the steps, but you really need to have done (3) before (2).

    In step (4), did you invalidate the TLB after changing the translation table entry?  (The Arm Arm has an example sequences in K13.5.3 - TLB maintenance instructions and barriers).

    What did the translation table entries for 0x30000000 say before you modified them in step (4)?

    If you create the translations table with 0x30000000 already marked as IS/WB/RW before enabling the MMU, do you then see 0x30000000 in the cache after (5)? 

    My suspicion is that you're not invalidating the TLBs in step (4), and thus the MMU is using a stale translation

Reply
  • 2、enable MMU

    3、setup page table

    4、change memory attr of address space 0x30000000-0x3020000000 (sram) as  inner shareable|write back|r/w allocate

    This might just be how you described the steps, but you really need to have done (3) before (2).

    In step (4), did you invalidate the TLB after changing the translation table entry?  (The Arm Arm has an example sequences in K13.5.3 - TLB maintenance instructions and barriers).

    What did the translation table entries for 0x30000000 say before you modified them in step (4)?

    If you create the translations table with 0x30000000 already marked as IS/WB/RW before enabling the MMU, do you then see 0x30000000 in the cache after (5)? 

    My suspicion is that you're not invalidating the TLBs in step (4), and thus the MMU is using a stale translation

Children