mywiki:hw:mips:tlb
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| mywiki:hw:mips:tlb [2014/07/25 16:34] – shaoguoh | mywiki:hw:mips:tlb [2022/04/02 17:29] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 711: | Line 711: | ||
| </ | </ | ||
| + | ====== Shao Guohua TLB ASM test ====== | ||
| + | <file asm tlb.asm> | ||
| + | ##probe failure | ||
| + | #define TLB_INDEX_P_OFFSET 31 | ||
| + | #define TLB_INDEX_P_MAKS 0x80000000 | ||
| + | |||
| + | #define TLB_INDEX_INDEX_OFFSET 0 | ||
| + | #define TLB_INDEX_INDEX_MASK 0x3F | ||
| + | |||
| + | |||
| + | #define TLB_ENTRYLO_R_OFFSET 30 | ||
| + | #define TLB_ENTRYLO_R_MASK | ||
| + | |||
| + | #define TLB_ENTRYLO_PFN_OFFSET 6 | ||
| + | #define TLB_ENTRYLO_PFN_MASK | ||
| + | |||
| + | ##cache coherency | ||
| + | ##3 WB Cacheable, noncoherent, | ||
| + | ##4 CWBE Cacheable, write-back, write-allocate, | ||
| + | ##5 CWB Cacheable, write-back, write-allocate, | ||
| + | ##6 - Reserved | ||
| + | ##7 UCA Uncached Accelerated | ||
| + | ## | ||
| + | #define TLB_ENTRYLO_C_OFFSET 3 | ||
| + | #define TLB_ENTRYLO_C_MASK | ||
| + | |||
| + | ##dirt or writable | ||
| + | #define TLB_ENTRYLO_D_OFFSET 2 | ||
| + | #define TLB_ENTRYLO_D_MASK | ||
| + | ##valid bit | ||
| + | #define TLB_ENTRYLO_V_OFFSET 1 | ||
| + | #define TLB_ENTRYLO_V_MASK | ||
| + | |||
| + | ##global | ||
| + | #define TLB_ENTRYLO_G_OFFSET 0 | ||
| + | #define TLB_ENTRYLO_G_MASK | ||
| + | |||
| + | #define TLB_ENTRYHI_VPN2_OFFSET | ||
| + | #define TLB_ENTRYHI_VPN2_MASK | ||
| + | #define TLB_ENTRYHI_EHINV_OFFSET 10 | ||
| + | #define TLB_ENTRYHI_EHINV_MASK | ||
| + | #define TLB_ENTRYHI_ASID_OFFSET | ||
| + | #define TLB_ENTRYHI_ASI_MASK | ||
| + | |||
| + | |||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | ##pagemask = 0x0; | ||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | |||
| + | ## | ||
| + | ## | ||
| + | ## | ||
| + | ##if ((i == (pages -1)) && !last_odd_page_vld ) ##last odd page not valid | ||
| + | ##{ | ||
| + | ## | ||
| + | ## | ||
| + | ##} | ||
| + | ##else | ||
| + | ## | ||
| + | |||
| + | .data | ||
| + | str_index: .asciiz " | ||
| + | str_entryhi: | ||
| + | str_entrylo0: | ||
| + | str_entrylo1: | ||
| + | str_pagemask: | ||
| + | str_newline: | ||
| + | str_size: | ||
| + | |||
| + | |||
| + | #define MAP_TLB_BASE | ||
| + | #define TLB_4K_PAGE_OFFSET 12 | ||
| + | #define ENTRYHI_DEFAULT 0x0 | ||
| + | #define TLB_ENTRYLO_DEFAULT_G ( (5<< TLB_ENTRYLO_C_OFFSET) | (1<< TLB_ENTRYLO_D_OFFSET) | (1<< TLB_ENTRYLO_V_OFFSET) | (1<< TLB_ENTRYLO_G_OFFSET)) | ||
| + | #define TLB_ENTRYLO_DEFAULT_P ( (5<< TLB_ENTRYLO_C_OFFSET) | (1<< TLB_ENTRYLO_D_OFFSET) | (1<< TLB_ENTRYLO_V_OFFSET) ) | ||
| + | |||
| + | |||
| + | .text | ||
| + | .globl __start | ||
| + | |||
| + | __start: | ||
| + | li $t6, 0x20060000 | ||
| + | li $t0, 154333 | ||
| + | |||
| + | _set_tlb_global: | ||
| + | #EntryHi: | ||
| + | # | ||
| + | #| 31 13| 12 8 | 7 0 | | ||
| + | #| VPN2 | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | #| 31 6| 5 3 | 2 | 1 | 0 | | ||
| + | #| PFN | C | D | V | G | | ||
| + | # | ||
| + | #Mask | ||
| + | # | ||
| + | #| 31 29| 28 13| 12 0 | | ||
| + | #| 0 0| Mask | 0 0 | | ||
| + | # | ||
| + | #t0 -- MPE shared code/data size need to map | ||
| + | #t1 -- Index | ||
| + | #t2-- entryhi | ||
| + | #t3 -- entrylo | ||
| + | #t4 -- asid | ||
| + | #t5 -- pagemask | ||
| + | #t6 -- physical address, virtual address is harded coded here, ie, 0xc000 0000 | ||
| + | #V0 -- tmp register | ||
| + | |||
| + | #prepare $t1 for Index | ||
| + | li $t1, 0 | ||
| + | |||
| + | #prepare $t2 for entryhi | ||
| + | li $t2, 0xC0000000 | ||
| + | |||
| + | #prepare $t3 for entrylo | ||
| + | add $t3, $t6, 0 # | ||
| + | srl $t3, $t3, 12 # | ||
| + | sll $t3, $t3, 6 # | ||
| + | addi $t3, $t3, 0x2f # | ||
| + | |||
| + | #$t4 for asid | ||
| + | li $t4, 0 | ||
| + | |||
| + | #$t5 for pagemask | ||
| + | li $t5, 0 | ||
| + | |||
| + | tlb_g_loop: | ||
| + | ble $t0, 0, _set_tlb_global_done | ||
| + | nop | ||
| + | |||
| + | #print size | ||
| + | li $v0, 4 | ||
| + | la $a0, str_size | ||
| + | syscall | ||
| + | li $v0, 1 | ||
| + | addi $a0, $t0, 0 | ||
| + | syscall | ||
| + | li $v0, 4 | ||
| + | la $a0, str_newline | ||
| + | syscall | ||
| + | |||
| + | #write even index | ||
| + | li $v0, 4 | ||
| + | la $a0, str_index | ||
| + | syscall | ||
| + | li $v0, 1 | ||
| + | addi $a0, $t1, 0 | ||
| + | syscall | ||
| + | li $v0, 4 | ||
| + | la $a0, str_newline | ||
| + | syscall | ||
| + | |||
| + | #write even entryhi | ||
| + | li $v0, 4 | ||
| + | la $a0, str_entryhi | ||
| + | syscall | ||
| + | li $v0, 1 | ||
| + | addi $a0, $t2, 0 | ||
| + | syscall | ||
| + | li $v0, 4 | ||
| + | la $a0, str_newline | ||
| + | syscall | ||
| + | |||
| + | #write even entrylo0 | ||
| + | li $v0, 4 | ||
| + | la $a0, str_entrylo0 | ||
| + | syscall | ||
| + | li $v0, 1 | ||
| + | addi $a0, $t3, 0 | ||
| + | syscall | ||
| + | li $v0, 4 | ||
| + | la $a0, str_newline | ||
| + | syscall | ||
| + | #write even pagemask | ||
| + | li $v0, 4 | ||
| + | la $a0, str_pagemask | ||
| + | syscall | ||
| + | li $v0, 1 | ||
| + | addi $a0, $t5, 0 | ||
| + | syscall | ||
| + | li $v0, 4 | ||
| + | la $a0, str_newline | ||
| + | syscall | ||
| + | #wlbwt | ||
| + | |||
| + | #update odd page | ||
| + | addi $t3, $t3, 0x40 | ||
| + | #write entrylo1 | ||
| + | li $v0, 4 | ||
| + | la $a0, str_entrylo1 | ||
| + | syscall | ||
| + | li $v0, 1 | ||
| + | addi $a0, $t3, 0 | ||
| + | syscall | ||
| + | li $v0, 4 | ||
| + | la $a0, str_newline | ||
| + | syscall | ||
| + | #wlbwt | ||
| + | |||
| + | #prepare next tlb index-- | ||
| + | #update size $t0 reduce 2 * 4K since one tlb support 2 pages | ||
| + | li $v0, 0x2000 | ||
| + | sub $t0, $t0, $v0 | ||
| + | |||
| + | #update index $t1 | ||
| + | li $v0, 1 | ||
| + | add $t1, $t1, $v0 | ||
| + | |||
| + | #update entryhi $t2 | ||
| + | addi $t2, $t2, 0x2000 # | ||
| + | |||
| + | #update entrylo $t3 | ||
| + | addi $t3, $t3, 0x40 | ||
| + | |||
| + | li $v0, 4 | ||
| + | la $a0, str_newline | ||
| + | syscall | ||
| + | |||
| + | j tlb_g_loop | ||
| + | nop | ||
| + | |||
| + | |||
| + | _set_tlb_global_done: | ||
| + | li $v0, 10 | ||
| + | syscall | ||
| + | </ | ||
mywiki/hw/mips/tlb.1406277256.txt.gz · Last modified: (external edit)
