qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/4] powerpc: Improve emulation of the BookE MMU


From: Andreas Färber
Subject: Re: [Qemu-devel] [PATCH 1/4] powerpc: Improve emulation of the BookE MMU
Date: Sat, 11 Sep 2010 16:42:19 +0200

Am 11.09.2010 um 16:09 schrieb Edgar E. Iglesias:

Improve the emulation of the BookE MMU to be able to boot linux
on virtex5 boards.

Signed-off-by: Edgar E. Iglesias <address@hidden>
---
target-ppc/helper.c | 46 +++++++++++++++++++++++++++++++++++++++ +------
1 files changed, 40 insertions(+), 6 deletions(-)

diff --git a/target-ppc/helper.c b/target-ppc/helper.c
index a7ec1f4..4c810d1 100644
--- a/target-ppc/helper.c
+++ b/target-ppc/helper.c
[...]
@@ -1445,7 +1452,10 @@ int cpu_ppc_handle_mmu_fault (CPUState *env, target_ulong address, int rw,
                    break;
                case POWERPC_MMU_BOOKE:
                    /* XXX: TODO */

Is this TODO still valid now? If yes, could you please fill in what needs to be done there.

- cpu_abort(env, "BookE MMU model is not implemented\n");
+                    env->exception_index = POWERPC_EXCP_ITLB;
+                    env->error_code = 0;
+                    env->spr[SPR_BOOKE_DEAR] = address;
+                    env->spr[SPR_BOOKE_ESR] = 0x00000000;
                    return -1;
                case POWERPC_MMU_BOOKE_FSL:
                    /* XXX: TODO */
[...]
@@ -1557,7 +1571,14 @@ int cpu_ppc_handle_mmu_fault (CPUState *env, target_ulong address, int rw,
                    break;
                case POWERPC_MMU_BOOKE:
                    /* XXX: TODO */

Same here.

- cpu_abort(env, "BookE MMU model is not implemented\n");
+                    env->exception_index = POWERPC_EXCP_DTLB;
+                    env->error_code = 0;
+                    env->spr[SPR_BOOKE_DEAR] = address;
+                    if (rw) {
+                        env->spr[SPR_BOOKE_ESR] = 0x00800000;
+                    } else {
+                        env->spr[SPR_BOOKE_ESR] = 0x00000000;
+                    }
                    return -1;
                case POWERPC_MMU_BOOKE_FSL:
                    /* XXX: TODO */
[...]
@@ -1848,8 +1876,7 @@ void ppc_tlb_invalidate_all (CPUPPCState *env)
        cpu_abort(env, "MPC8xx MMU model is not implemented\n");
        break;
    case POWERPC_MMU_BOOKE:
-        /* XXX: TODO */

Here you removed it, for comparison.

Andreas

-        cpu_abort(env, "BookE MMU model is not implemented\n");
+        tlb_flush(env, 1);
        break;
    case POWERPC_MMU_BOOKE_FSL:
        /* XXX: TODO */
[snip]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]