Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void itlb_miss_handler(void)
- {
- unsigned int vaddr, paddr;
- // unsigned int vaddr;
- unsigned int EA;
- unsigned int PSW;
- asm volatile("mv %0, ea": "=r"(EA) :: );
- asm volatile("rcsr %0, itlbma" : "=r"(vaddr) :: );
- // If the following line is commented, then EA == itlb_miss_handler and upon eret we are doomed. If it is un-commented, then EA has a correct value and everything goes fine !
- // asm volatile("rcsr %0, PSW" : "=r"(PSW) :: );
- printf("ea == 0x%08X\n", EA);
- // printf("Address 0x%08X caused an ITLB page fault\n", vaddr);
- // printf("PSW == 0x%08X\n", PSW);
- // asm volatile("mv EA, %0" :: "r"(vaddr) : );
- paddr = get_mmu_mapping_for(vaddr);
- if (paddr == A_BAD_ADDR)
- {
- puts("No such mapping !");
- puts("Unrecoverable ITLB page fault !");
- panic();
- }
- if (!is_itlb_mapping(vaddr))
- {
- puts("Mapping not in ITLB");
- panic();
- }
- // printf("Refilling ITLB with mapping 0x%08X->0x%08X\n", vaddr, paddr);
- mmu_itlb_map(vaddr, paddr);
- }
- With "asm volatile("rcsr %0, PSW" : "=r"(PSW) :: );" un-commented:
- yann@debian:~/dev/milkymist-mmu/tools$ ./flterm --port /dev/ttyUSB0
- [FLTERM] Starting...
- BIOS> itlbtest
- stack == 0x47FFFEE8
- f() is located at 0x00865a80
- Mapping f() into virtual memory at 0x44004000 [physical == 0x44005000]
- mapping 0x00860000->0x00860000 in slot 29 [0x446617d8]
- mapping 0x00861000->0x00861000 in slot 28 [0x446617cc]
- mapping 0x00862000->0x00862000 in slot 27 [0x446617c0]
- mapping 0x00863000->0x00863000 in slot 26 [0x446617b4]
- mapping 0x00864000->0x00864000 in slot 25 [0x446617a8]
- mapping 0x00865000->0x00865000 in slot 24 [0x4466179c]
- mapping 0x00866000->0x00866000 in slot 23 [0x44661790]
- mapping 0x00867000->0x00867000 in slot 22 [0x44661784]
- mapping 0x00868000->0x00868000 in slot 21 [0x44661778]
- mapping 0x00869000->0x00869000 in slot 20 [0x4466176c]
- mapping 0x0086A000->0x0086A000 in slot 19 [0x44661760]
- mapping 0x0086B000->0x0086B000 in slot 18 [0x44661754]
- mapping 0x0086C000->0x0086C000 in slot 17 [0x44661748]
- mapping 0x0086D000->0x0086D000 in slot 16 [0x4466173c]
- mapping 0x0086E000->0x0086E000 in slot 15 [0x44661730]
- mapping 0x0086F000->0x0086F000 in slot 14 [0x44661724]
- mapping 0x00870000->0x00870000 in slot 13 [0x44661718]
- mapping 0x00871000->0x00871000 in slot 12 [0x4466170c]
- mapping 0x00872000->0x00872000 in slot 11 [0x44661700]
- mapping 0x00873000->0x00873000 in slot 10 [0x446616f4]
- mapping 0x00874000->0x00874000 in slot 9 [0x446616e8]
- mapping 0x47FFF000->0x47FFF000 in slot 8 [0x446616dc]
- Already mapped, updating metadata !
- Mapping DONE
- Printing MMU mappings :
- [8] 0x47FFF000 -> 0x47FFF000: DTLB
- [9] 0x00874000 -> 0x00874000: ITLB DTLB
- [10] 0x00873000 -> 0x00873000: ITLB DTLB
- [11] 0x00872000 -> 0x00872000: ITLB DTLB
- [12] 0x00871000 -> 0x00871000: ITLB DTLB
- [13] 0x00870000 -> 0x00870000: ITLB DTLB
- [14] 0x0086F000 -> 0x0086F000: ITLB DTLB
- [15] 0x0086E000 -> 0x0086E000: ITLB DTLB
- [16] 0x0086D000 -> 0x0086D000: ITLB DTLB
- [17] 0x0086C000 -> 0x0086C000: ITLB DTLB
- [18] 0x0086B000 -> 0x0086B000: ITLB DTLB
- [19] 0x0086A000 -> 0x0086A000: ITLB DTLB
- [20] 0x00869000 -> 0x00869000: ITLB DTLB
- [21] 0x00868000 -> 0x00868000: ITLB DTLB
- [22] 0x00867000 -> 0x00867000: ITLB DTLB
- [23] 0x00866000 -> 0x00866000: ITLB DTLB
- [24] 0x00865000 -> 0x00865000: ITLB DTLB
- [25] 0x00864000 -> 0x00864000: ITLB DTLB
- [26] 0x00863000 -> 0x00863000: ITLB DTLB
- [27] 0x00862000 -> 0x00862000: ITLB DTLB
- [28] 0x00861000 -> 0x00861000: ITLB DTLB
- [29] 0x00860000 -> 0x00860000: ITLB DTLB
- Instruction and Data caches have been invalidated
- ea == 0x00865A80
- @ea == 0x00866FE8
- ea == 0x00866FF8
- ea == 0x0086830C
- totolol
- test 5 � abcd
- Call DONE
- BIOS>
- It works nicely.
- With "asm volatile("rcsr %0, PSW" : "=r"(PSW) :: );" commented:
- BIOS> itlbtest
- stack == 0x47FFFEE8
- f() is located at 0x00865a7c
- Mapping f() into virtual memory at 0x44004000 [physical == 0x44005000]
- mapping 0x00860000->0x00860000 in slot 29 [0x446617d8]
- mapping 0x00861000->0x00861000 in slot 28 [0x446617cc]
- mapping 0x00862000->0x00862000 in slot 27 [0x446617c0]
- mapping 0x00863000->0x00863000 in slot 26 [0x446617b4]
- mapping 0x00864000->0x00864000 in slot 25 [0x446617a8]
- mapping 0x00865000->0x00865000 in slot 24 [0x4466179c]
- mapping 0x00866000->0x00866000 in slot 23 [0x44661790]
- mapping 0x00867000->0x00867000 in slot 22 [0x44661784]
- mapping 0x00868000->0x00868000 in slot 21 [0x44661778]
- mapping 0x00869000->0x00869000 in slot 20 [0x4466176c]
- mapping 0x0086A000->0x0086A000 in slot 19 [0x44661760]
- mapping 0x0086B000->0x0086B000 in slot 18 [0x44661754]
- mapping 0x0086C000->0x0086C000 in slot 17 [0x44661748]
- mapping 0x0086D000->0x0086D000 in slot 16 [0x4466173c]
- mapping 0x0086E000->0x0086E000 in slot 15 [0x44661730]
- mapping 0x0086F000->0x0086F000 in slot 14 [0x44661724]
- mapping 0x00870000->0x00870000 in slot 13 [0x44661718]
- mapping 0x00871000->0x00871000 in slot 12 [0x4466170c]
- mapping 0x00872000->0x00872000 in slot 11 [0x44661700]
- mapping 0x00873000->0x00873000 in slot 10 [0x446616f4]
- mapping 0x00874000->0x00874000 in slot 9 [0x446616e8]
- mapping 0x47FFF000->0x47FFF000 in slot 8 [0x446616dc]
- Already mapped, updating metadata !
- Mapping DONE
- Printing MMU mappings :
- [8] 0x47FFF000 -> 0x47FFF000: DTLB
- [9] 0x00874000 -> 0x00874000: ITLB DTLB
- [10] 0x00873000 -> 0x00873000: ITLB DTLB
- [11] 0x00872000 -> 0x00872000: ITLB DTLB
- [12] 0x00871000 -> 0x00871000: ITLB DTLB
- [13] 0x00870000 -> 0x00870000: ITLB DTLB
- [14] 0x0086F000 -> 0x0086F000: ITLB DTLB
- [15] 0x0086E000 -> 0x0086E000: ITLB DTLB
- [16] 0x0086D000 -> 0x0086D000: ITLB DTLB
- [17] 0x0086C000 -> 0x0086C000: ITLB DTLB
- [18] 0x0086B000 -> 0x0086B000: ITLB DTLB
- [19] 0x0086A000 -> 0x0086A000: ITLB DTLB
- [20] 0x00869000 -> 0x00869000: ITLB DTLB
- [21] 0x00868000 -> 0x00868000: ITLB DTLB
- [22] 0x00867000 -> 0x00867000: ITLB DTLB
- [23] 0x00866000 -> 0x00866000: ITLB DTLB
- [24] 0x00865000 -> 0x00865000: ITLB DTLB
- [25] 0x00864000 -> 0x00864000: ITLB DTLB
- [26] 0x00863000 -> 0x00863000: ITLB DTLB
- [27] 0x00862000 -> 0x00862000: ITLB DTLB
- [28] 0x00861000 -> 0x00861000: ITLB DTLB
- [29] 0x00860000 -> 0x00860000: ITLB DTLB
- Instruction and Data caches have been invalidated
- ea == 0x00865A7C
- @ea == 0x00866FE4
- ea == 0x00860120
- ea == 0x00860120
- ea == 0x00860120
- ea == 0x00860120
- ea == 0x00860120
- ea == 0x00860120
- ea == 0x00860120
- ea == 0x00860120
- ea == 0x00860120
- ea == 0x00860120
- ea == 0x00860120
- ea == 0x00860120
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement