Rev 1881 | Rev 1899 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1881 | Rev 1887 | ||
---|---|---|---|
Line 112... | Line 112... | ||
112 | SET_TLB_TAG(g1, MEM_CONTEXT_KERNEL) |
112 | SET_TLB_TAG(g1, MEM_CONTEXT_KERNEL) |
113 | stxa %g1, [VA_DMMU_TAG_ACCESS] %asi |
113 | stxa %g1, [VA_DMMU_TAG_ACCESS] %asi |
114 | membar #Sync |
114 | membar #Sync |
115 | 115 | ||
116 | #define SET_TLB_DATA(r1, r2, imm) \ |
116 | #define SET_TLB_DATA(r1, r2, imm) \ |
117 | set TTE_L | TTE_CP | TTE_P | TTE_W | LMA | imm, %r1; \ |
117 | set TTE_CV | TTE_CP | TTE_P | LMA | imm, %r1; \ |
118 | set PAGESIZE_4M, %r2; \ |
118 | set PAGESIZE_4M, %r2; \ |
119 | sllx %r2, TTE_SIZE_SHIFT, %r2; \ |
119 | sllx %r2, TTE_SIZE_SHIFT, %r2; \ |
120 | or %r1, %r2, %r1; \ |
120 | or %r1, %r2, %r1; \ |
121 | mov 1, %r2; \ |
121 | mov 1, %r2; \ |
122 | sllx %r2, TTE_V_SHIFT, %r2; \ |
122 | sllx %r2, TTE_V_SHIFT, %r2; \ |
123 | or %r1, %r2, %r1; |
123 | or %r1, %r2, %r1; |
124 | 124 | ||
125 | ! write DTLB data and install the kernel mapping |
125 | ! write DTLB data and install the kernel mapping |
126 | SET_TLB_DATA(g1, g2, 0) ! use non-global mapping |
126 | SET_TLB_DATA(g1, g2, TTE_L | TTE_W) ! use non-global mapping |
127 | stxa %g1, [%g0] ASI_DTLB_DATA_IN_REG |
127 | stxa %g1, [%g0] ASI_DTLB_DATA_IN_REG |
128 | membar #Sync |
128 | membar #Sync |
129 | 129 | ||
130 | /* |
130 | /* |
131 | * Because we cannot use global mappings (because we want to |
131 | * Because we cannot use global mappings (because we want to |
Line 138... | Line 138... | ||
138 | SET_TLB_TAG(g1, MEM_CONTEXT_TEMP) |
138 | SET_TLB_TAG(g1, MEM_CONTEXT_TEMP) |
139 | stxa %g1, [VA_DMMU_TAG_ACCESS] %asi |
139 | stxa %g1, [VA_DMMU_TAG_ACCESS] %asi |
140 | membar #Sync |
140 | membar #Sync |
141 | 141 | ||
142 | ! write DTLB data and install the kernel mapping in context 1 |
142 | ! write DTLB data and install the kernel mapping in context 1 |
143 | SET_TLB_DATA(g1, g2, 0) ! use non-global mapping |
143 | SET_TLB_DATA(g1, g2, TTE_W) ! use non-global mapping |
144 | stxa %g1, [%g0] ASI_DTLB_DATA_IN_REG |
144 | stxa %g1, [%g0] ASI_DTLB_DATA_IN_REG |
145 | membar #Sync |
145 | membar #Sync |
146 | 146 | ||
147 | /* |
147 | /* |
148 | * Now is time to take over the IMMU. |
148 | * Now is time to take over the IMMU. |
Line 194... | Line 194... | ||
194 | mov VA_DMMU_TAG_ACCESS, %g2 |
194 | mov VA_DMMU_TAG_ACCESS, %g2 |
195 | stxa %g1, [%g2] ASI_IMMU |
195 | stxa %g1, [%g2] ASI_IMMU |
196 | flush %g5 |
196 | flush %g5 |
197 | 197 | ||
198 | ! write ITLB data and install the permanent kernel mapping in context 0 |
198 | ! write ITLB data and install the permanent kernel mapping in context 0 |
199 | SET_TLB_DATA(g1, g2, 0) ! use non-global mapping |
199 | SET_TLB_DATA(g1, g2, TTE_L) ! use non-global mapping |
200 | stxa %g1, [%g0] ASI_ITLB_DATA_IN_REG |
200 | stxa %g1, [%g0] ASI_ITLB_DATA_IN_REG |
201 | flush %g5 |
201 | flush %g5 |
202 | 202 | ||
203 | ! switch to context 0 |
203 | ! switch to context 0 |
204 | stxa %g0, [VA_PRIMARY_CONTEXT_REG] %asi ! ASI_DMMU is correct here !!! |
204 | stxa %g0, [VA_PRIMARY_CONTEXT_REG] %asi ! ASI_DMMU is correct here !!! |