mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
CPU boot mode
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3231 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
9437454a84
commit
40ce0a9a8f
6 changed files with 21 additions and 10 deletions
|
@ -145,6 +145,7 @@
|
|||
/* MMU */
|
||||
#define MMU_E (1<<0)
|
||||
#define MMU_NF (1<<1)
|
||||
#define MMU_BM (1<<14)
|
||||
|
||||
#define PTE_ENTRYTYPE_MASK 3
|
||||
#define PTE_ACCESS_MASK 0x1c
|
||||
|
|
|
@ -110,7 +110,14 @@ int get_physical_address (CPUState *env, target_phys_addr_t *physical, int *prot
|
|||
unsigned long page_offset;
|
||||
|
||||
virt_addr = address & TARGET_PAGE_MASK;
|
||||
|
||||
if ((env->mmuregs[0] & MMU_E) == 0) { /* MMU disabled */
|
||||
// Boot mode: instruction fetches are taken from PROM
|
||||
if (rw == 2 && (env->mmuregs[0] & MMU_BM)) {
|
||||
*physical = 0xff0000000ULL | (address & 0x3ffffULL);
|
||||
*prot = PAGE_READ | PAGE_EXEC;
|
||||
return 0;
|
||||
}
|
||||
*physical = address;
|
||||
*prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC;
|
||||
return 0;
|
||||
|
|
|
@ -337,8 +337,8 @@ void helper_st_asi(int asi, int size)
|
|||
oldreg = env->mmuregs[reg];
|
||||
switch(reg) {
|
||||
case 0:
|
||||
env->mmuregs[reg] &= ~(MMU_E | MMU_NF);
|
||||
env->mmuregs[reg] |= T1 & (MMU_E | MMU_NF);
|
||||
env->mmuregs[reg] &= ~(MMU_E | MMU_NF | MMU_BM);
|
||||
env->mmuregs[reg] |= T1 & (MMU_E | MMU_NF | MMU_BM);
|
||||
// Mappings generated during no-fault mode or MMU
|
||||
// disabled mode are invalid in normal mode
|
||||
if (oldreg != env->mmuregs[reg])
|
||||
|
|
|
@ -3486,8 +3486,9 @@ void cpu_reset(CPUSPARCState *env)
|
|||
env->pstate = PS_PRIV;
|
||||
env->pc = 0x1fff0000000ULL;
|
||||
#else
|
||||
env->pc = 0xffd00000;
|
||||
env->pc = 0;
|
||||
env->mmuregs[0] &= ~(MMU_E | MMU_NF);
|
||||
env->mmuregs[0] |= MMU_BM;
|
||||
#endif
|
||||
env->npc = env->pc + 4;
|
||||
#endif
|
||||
|
@ -3584,7 +3585,7 @@ int cpu_sparc_register (CPUSPARCState *env, const sparc_def_t *def)
|
|||
env->version = def->iu_version;
|
||||
env->fsr = def->fpu_version;
|
||||
#if !defined(TARGET_SPARC64)
|
||||
env->mmuregs[0] = def->mmu_version;
|
||||
env->mmuregs[0] |= def->mmu_version;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue