mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 16:53:55 -06:00
CRIS: Segmented addressing only for kernel mode.
Segmented translation through the CRIS MMU is only done for accesses in kernel mode. In user-mode, all accesses are treated as paged regardless of the mode config in RW_MM_CFG. Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
This commit is contained in:
parent
cef290b878
commit
218951ef4d
2 changed files with 5 additions and 3 deletions
|
@ -172,8 +172,6 @@ void do_interrupt(CPUState *env)
|
||||||
env->dslot = 0;
|
env->dslot = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
env->pc = ldl_code(env->pregs[PR_EBP] + ex_vec * 4);
|
|
||||||
|
|
||||||
if (env->pregs[PR_CCS] & U_FLAG) {
|
if (env->pregs[PR_CCS] & U_FLAG) {
|
||||||
/* Swap stack pointers. */
|
/* Swap stack pointers. */
|
||||||
env->pregs[PR_USP] = env->regs[R_SP];
|
env->pregs[PR_USP] = env->regs[R_SP];
|
||||||
|
@ -182,6 +180,10 @@ void do_interrupt(CPUState *env)
|
||||||
|
|
||||||
/* Apply the CRIS CCS shift. Clears U if set. */
|
/* Apply the CRIS CCS shift. Clears U if set. */
|
||||||
cris_shift_ccs(env);
|
cris_shift_ccs(env);
|
||||||
|
|
||||||
|
/* Now that we are in kernel mode, load the handlers address. */
|
||||||
|
env->pc = ldl_code(env->pregs[PR_EBP] + ex_vec * 4);
|
||||||
|
|
||||||
D_LOG("%s isr=%x vec=%x ccs=%x pid=%d erp=%x\n",
|
D_LOG("%s isr=%x vec=%x ccs=%x pid=%d erp=%x\n",
|
||||||
__func__, env->pc, ex_vec,
|
__func__, env->pc, ex_vec,
|
||||||
env->pregs[PR_CCS],
|
env->pregs[PR_CCS],
|
||||||
|
|
|
@ -345,7 +345,7 @@ int cris_mmu_translate(struct cris_mmu_result *res,
|
||||||
}
|
}
|
||||||
|
|
||||||
seg = vaddr >> 28;
|
seg = vaddr >> 28;
|
||||||
if (cris_mmu_segmented_addr(seg, env->sregs[SFR_RW_MM_CFG]))
|
if (!is_user && cris_mmu_segmented_addr(seg, env->sregs[SFR_RW_MM_CFG]))
|
||||||
{
|
{
|
||||||
uint32_t base;
|
uint32_t base;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue