source: trunk/softs/tests_cc_vcache/test_mmu_basic/test.S @ 678

Last change on this file since 678 was 520, checked in by bouyer, 11 years ago

Re-add the tests; reverting previous which was done at the wrong level (sorry)

File size: 1.9 KB
Line 
1/*
2 * Basic MMU checks: we can read mapped addresses, we can't read unmapped
3 * addresses
4 */
5#include <registers.h>
6#include <misc.h>
7#include <vcache.h>
8
9        .text
10        .globl  _start
11_start:
12        .set noreorder
13        la      k0, TTY_BASE
14        la      k1, EXIT_BASE
15
16        PRINT(startstr)
17
18        la      a0, pte1
19        srl     a0, a0, 13
20        mtc2    a0, VC_PTPR
21        nop
22
23        li      a0, VC_TLB_EN_ITLB | VC_TLB_EN_DTLB | VC_TLB_EN_ICACHE | VC_TLB_EN_DCACHE
24        mtc2    a0, VC_TLB_EN
25
26        PRINT(mmustr)
27
28        /* we can read our magic number at 0x00200000 */
29        la      s0, 0x00200000
30        move    a0, s0
31        PRINTX
32        PUTCHAR(':')
33        PUTCHAR(' ')
34        lw      a0, 0(s0)
35        PRINTX
36        PUTCHAR('\n')
37        /* but not at 0x00000000 */
38        la      s0, 0x00000000
39        move    a0, s0
40        PRINTX
41        PUTCHAR(':')
42        PUTCHAR(' ')
43        lw      a0, 0(s0) /* this should trigger the exception */
44        PRINTX
45
46        /* we shouldn't get there */
47        EXIT(1)
48
49        .globl excep
50excep:
51        .set noreorder
52        PRINT(statusstr)
53        mfc0    a0, COP0_STATUS
54        PRINTX
55
56        PRINT(causestr)
57        mfc0    a0, COP0_CAUSE
58        PRINTX
59
60        PRINT(pcstr)
61        mfc0    a0, COP0_EXPC
62        PRINTX
63
64        PRINT(badvastr)
65        mfc0    a0, COP_0_BADVADDR
66        PRINTX
67
68        li      a0, '\n'
69        sb      a0, 0(k0)
70
71        EXIT(0)
72
73        .rodata:
74statusstr: .ascii "status \0"
75causestr: .ascii " cause \0"
76pcstr: .ascii " pc \0"
77badvastr: .ascii " badva \0"
78mmustr: .ascii "mmu started\n\0"
79startstr: .ascii "start\n\0"
80
81        .org EXCEP_ADDRESS - BOOT_ADDRESS
82        .globl evect
83evect:
84        j       excep
85        nop
86        .data
87testval:
88        .word MAGIC1
89        .align 13
90        .globl pte1
91pte1:
92        .word 0x0                            /* map PA 0 at VA 0 */
93        .word PTE1_V | PTE1_C | PTE1_W | 0x0 /* map PA 0 at VA 0x00200000 */
94        .org pte1 + (BOOT_ADDRESS >> 21) * 4
95        .word PTE1_V | PTE1_C | PTE1_X | (BOOT_ADDRESS >> 21) /* map PA 0xbfc00000 at VA 0xbfc00000 */
96        .org pte1 + (TTY_BASE >> 21) * 4
97        .word PTE1_V | PTE1_W | (TTY_BASE >> 21) /* map PA 0xd0200000 at VA 0xd0200000 */
98        .org pte1 + (EXIT_BASE >> 21) * 4
99        .word PTE1_V | PTE1_W | (EXIT_BASE >> 21) /* map PA 0xe0000000 at VA 0xe0000000 */
100        .org pte1 + 8192
101        .word 0
102
Note: See TracBrowser for help on using the repository browser.