@@ -36,11 +36,10 @@ inline void mmu_dtlb_map(unsigned int vpfn, unsigned int pfn)
36
36
37
37
asm volatile ("ori %0, %0, 1\n\t"
38
38
"wcsr tlbpaddr, %0" :: "r" (pfn ) : );
39
-
39
+ /*
40
40
asm volatile ("xor r11, r11, r11\n\t"
41
41
"ori r11, r11, 0x5\n\t"
42
- "wcsr tlbctrl, r11" ::: "r11" );
43
-
42
+ "wcsr tlbctrl, r11" ::: "r11"); */
44
43
}
45
44
46
45
inline void mmu_itlb_map (unsigned int vpfn , unsigned int pfn )
@@ -50,42 +49,34 @@ inline void mmu_itlb_map(unsigned int vpfn, unsigned int pfn)
50
49
51
50
asm volatile ("wcsr tlbpaddr, %0" :: "r" (get_pfn (pfn )) : );
52
51
53
- asm volatile ("xor r11, r11, r11\n\t"
52
+ /* asm volatile ("xor r11, r11, r11\n\t"
54
53
"ori r11, r11, 0x4\n\t"
55
- "wcsr tlbctrl, r11" ::: "r11" );
54
+ "wcsr tlbctrl, r11" ::: "r11"); */
56
55
}
57
56
58
57
inline void mmu_dtlb_invalidate_line (unsigned int vaddr )
59
58
{
60
- asm volatile ("ori %0, %0, 1 \n\t"
59
+ asm volatile ("ori %0, %0, 0x21 \n\t"
61
60
"wcsr tlbvaddr, %0" :: "r" (vaddr ) : );
62
-
63
- asm volatile ("xor r11, r11, r11\n\t"
64
- "ori r11, r11, 0x21\n\t"
65
- "wcsr tlbctrl, r11" ::: "r11" );
66
61
}
67
62
68
63
inline void mmu_itlb_invalidate_line (unsigned int vaddr )
69
64
{
70
- asm volatile ("ori %0, %0, 0 \n\t"
65
+ asm volatile ("ori %0, %0, 0x20 \n\t"
71
66
"wcsr tlbvaddr, %0" :: "r" (vaddr ) : );
72
-
73
- asm volatile ("xor r11, r11, r11\n\t"
74
- "ori r11, r11, 0x20\n\t"
75
- "wcsr tlbctrl, r11" ::: "r11" );
76
67
}
77
68
78
69
inline void mmu_dtlb_invalidate (void )
79
70
{
80
71
register unsigned int cmd = DTLB_CTRL_FLUSH_CMD ;
81
- asm volatile ("wcsr tlbctrl, %0" :: "r" (cmd ) : );
72
+ // asm volatile("wcsr tlbctrl, %0" :: "r"(cmd) : );
82
73
83
74
}
84
75
85
76
inline void mmu_itlb_invalidate (void )
86
77
{
87
78
register unsigned int cmd = ITLB_CTRL_FLUSH_CMD ;
88
- asm volatile ("wcsr tlbctrl, %0" :: "r" (cmd ) : );
79
+ // asm volatile("wcsr tlbctrl, %0" :: "r"(cmd) : );
89
80
90
81
}
91
82
@@ -103,11 +94,17 @@ unsigned int read_word_with_mmu_enabled(unsigned int vaddr)
103
94
cmd1 = DTLB_CTRL_ENABLE_CMD ;
104
95
cmd2 = DTLB_CTRL_DISABLE_CMD ;
105
96
106
- asm volatile ("wcsr tlbctrl, %2\n\t" // Activates the MMU
97
+ asm volatile ("rcsr r11, PSW\n\t"
98
+ "ori r11, r11, 64\n\t"
99
+ "wcsr PSW, r11\n\t" // Activates the MMU
100
+ //"wcsr tlbctrl, %2\n\t" // Activates the MMU
107
101
"xor r0, r0, r0\n\t"
108
102
"lw %0, (%1+0)\n\t" // Reads from virtual address "addr"
109
- "wcsr tlbctrl, %3\n\t" // Disactivates the MMU
110
- "xor r0, r0, r0\n\t" : "=&r" (data ) : "r" (vaddr ), "r" (cmd1 ), "r" (cmd2 ) :
103
+ "mvi r10, ~(64)\n\t"
104
+ "and r11, r11, r10\n\t"
105
+ "wcsr PSW, r11\n\t" // Disactivates the MMU
106
+ //"wcsr tlbctrl, %3\n\t" // Disactivates the MMU
107
+ "xor r0, r0, r0\n\t" : "=&r" (data ) : "r" (vaddr )/*, "r"(cmd1), "r"(cmd2)*/ : "r11" , "r10"
111
108
);
112
109
113
110
return data ;
@@ -116,15 +113,15 @@ unsigned int read_word_with_mmu_enabled(unsigned int vaddr)
116
113
unsigned int write_word_with_mmu_enabled (register unsigned int vaddr , register unsigned int data )
117
114
{
118
115
asm volatile (
119
- "xor r11, r11, r11 \n\t"
120
- "ori r11, r11, 0x11 \n\t"
121
- "wcsr tlbctrl , r11\n\t" // Activates the MMU
116
+ "rcsr r11, PSW \n\t"
117
+ "ori r11, r11, 64 \n\t"
118
+ "wcsr PSW , r11\n\t" // Activates the MMU
122
119
"xor r0, r0, r0\n\t"
123
120
"sw (%0 + 0), %1\n\t" // Reads from virtual address "addr"
124
- "xor r11, r11, r11 \n\t"
125
- "ori r11, r11, 0x9 \n\t"
126
- "wcsr tlbctrl , r11\n\t" // Disactivates the MMU
127
- "xor r0, r0, r0\n\t" :: "r" (vaddr ), "r" (data ) : "r11"
121
+ "mvi r10, ~(64) \n\t"
122
+ "and r11, r11, r10 \n\t"
123
+ "wcsr PSW , r11\n\t" // Disactivates the MMU
124
+ "xor r0, r0, r0\n\t" :: "r" (vaddr ), "r" (data ) : "r11" , "r10"
128
125
);
129
126
}
130
127
/*
0 commit comments