Revision 5dcb6b91 target-sparc/helper.c
b/target-sparc/helper.c | ||
---|---|---|
117 | 117 |
} |
118 | 118 |
|
119 | 119 |
*access_index = ((rw & 1) << 2) | (rw & 2) | (is_user? 0 : 1); |
120 |
*physical = 0xfffff000;
|
|
120 |
*physical = 0xffffffffffff0000ULL;
|
|
121 | 121 |
|
122 | 122 |
/* SPARC reference MMU table walk: Context table->L1->L2->PTE */ |
123 | 123 |
/* Context base + context number */ |
... | ... | |
203 | 203 |
|
204 | 204 |
/* Even if large ptes, we map only one 4KB page in the cache to |
205 | 205 |
avoid filling it too fast */ |
206 |
*physical = ((pde & PTE_ADDR_MASK) << 4) + page_offset; |
|
206 |
*physical = ((target_phys_addr_t)(pde & PTE_ADDR_MASK) << 4) + page_offset;
|
|
207 | 207 |
return error_code; |
208 | 208 |
} |
209 | 209 |
|
... | ... | |
212 | 212 |
int is_user, int is_softmmu) |
213 | 213 |
{ |
214 | 214 |
target_phys_addr_t paddr; |
215 |
unsigned long vaddr;
|
|
215 |
target_ulong vaddr;
|
|
216 | 216 |
int error_code = 0, prot, ret = 0, access_index; |
217 | 217 |
|
218 | 218 |
error_code = get_physical_address(env, &paddr, &prot, &access_index, address, rw, is_user); |
... | ... | |
220 | 220 |
vaddr = address & TARGET_PAGE_MASK; |
221 | 221 |
paddr &= TARGET_PAGE_MASK; |
222 | 222 |
#ifdef DEBUG_MMU |
223 |
printf("Translate at 0x%lx -> 0x%lx, vaddr 0x%lx\n", (long)address, (long)paddr, (long)vaddr); |
|
223 |
printf("Translate at " TARGET_FMT_lx " -> " TARGET_FMT_plx ", vaddr " |
|
224 |
TARGET_FMT_lx "\n", address, paddr, vaddr); |
|
224 | 225 |
#endif |
225 | 226 |
ret = tlb_set_page_exec(env, vaddr, paddr, prot, is_user, is_softmmu); |
226 | 227 |
return ret; |
... | ... | |
255 | 256 |
uint32_t pde; |
256 | 257 |
|
257 | 258 |
/* Context base + context number */ |
258 |
pde_ptr = (env->mmuregs[1] << 4) + (env->mmuregs[2] << 2); |
|
259 |
pde_ptr = (target_phys_addr_t)(env->mmuregs[1] << 4) + |
|
260 |
(env->mmuregs[2] << 2); |
|
259 | 261 |
pde = ldl_phys(pde_ptr); |
260 | 262 |
|
261 | 263 |
switch (pde & PTE_ENTRYTYPE_MASK) { |
... | ... | |
314 | 316 |
#ifdef DEBUG_MMU |
315 | 317 |
void dump_mmu(CPUState *env) |
316 | 318 |
{ |
317 |
target_ulong va, va1, va2;
|
|
318 |
unsigned int n, m, o;
|
|
319 |
target_phys_addr_t pde_ptr, pa;
|
|
319 |
target_ulong va, va1, va2; |
|
320 |
unsigned int n, m, o; |
|
321 |
target_phys_addr_t pde_ptr, pa; |
|
320 | 322 |
uint32_t pde; |
321 | 323 |
|
322 | 324 |
printf("MMU dump:\n"); |
323 | 325 |
pde_ptr = (env->mmuregs[1] << 4) + (env->mmuregs[2] << 2); |
324 | 326 |
pde = ldl_phys(pde_ptr); |
325 |
printf("Root ptr: " TARGET_FMT_lx ", ctx: %d\n", env->mmuregs[1] << 4, env->mmuregs[2]); |
|
327 |
printf("Root ptr: " TARGET_FMT_plx ", ctx: %d\n", |
|
328 |
(target_phys_addr_t)env->mmuregs[1] << 4, env->mmuregs[2]); |
|
326 | 329 |
for (n = 0, va = 0; n < 256; n++, va += 16 * 1024 * 1024) { |
327 |
pde_ptr = mmu_probe(env, va, 2);
|
|
328 |
if (pde_ptr) {
|
|
330 |
pde = mmu_probe(env, va, 2); |
|
331 |
if (pde) { |
|
329 | 332 |
pa = cpu_get_phys_page_debug(env, va); |
330 |
printf("VA: " TARGET_FMT_lx ", PA: " TARGET_FMT_lx " PDE: " TARGET_FMT_lx "\n", va, pa, pde_ptr); |
|
333 |
printf("VA: " TARGET_FMT_lx ", PA: " TARGET_FMT_plx |
|
334 |
" PDE: " TARGET_FMT_lx "\n", va, pa, pde); |
|
331 | 335 |
for (m = 0, va1 = va; m < 64; m++, va1 += 256 * 1024) { |
332 |
pde_ptr = mmu_probe(env, va1, 1);
|
|
333 |
if (pde_ptr) {
|
|
336 |
pde = mmu_probe(env, va1, 1); |
|
337 |
if (pde) { |
|
334 | 338 |
pa = cpu_get_phys_page_debug(env, va1); |
335 |
printf(" VA: " TARGET_FMT_lx ", PA: " TARGET_FMT_lx " PDE: " TARGET_FMT_lx "\n", va1, pa, pde_ptr); |
|
339 |
printf(" VA: " TARGET_FMT_lx ", PA: " TARGET_FMT_plx |
|
340 |
" PDE: " TARGET_FMT_lx "\n", va1, pa, pde); |
|
336 | 341 |
for (o = 0, va2 = va1; o < 64; o++, va2 += 4 * 1024) { |
337 |
pde_ptr = mmu_probe(env, va2, 0);
|
|
338 |
if (pde_ptr) {
|
|
342 |
pde = mmu_probe(env, va2, 0); |
|
343 |
if (pde) { |
|
339 | 344 |
pa = cpu_get_phys_page_debug(env, va2); |
340 |
printf(" VA: " TARGET_FMT_lx ", PA: " TARGET_FMT_lx " PTE: " TARGET_FMT_lx "\n", va2, pa, pde_ptr); |
|
345 |
printf(" VA: " TARGET_FMT_lx ", PA: " |
|
346 |
TARGET_FMT_plx " PTE: " TARGET_FMT_lx "\n", |
|
347 |
va2, pa, pde); |
|
341 | 348 |
} |
342 | 349 |
} |
343 | 350 |
} |
Also available in: Unified diff