From: Andrew May <acmay@acmay.homeip.net>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] 4xx booting into Linux userspace
Date: Sat, 17 Jan 2009 00:25:13 -0800 [thread overview]
Message-ID: <20090117002513.2e2a5aed@acmay.homeip.net> (raw)
Thanks for including my last patch. And please CC me since I am not on
the list.
I finally got a 405 linux kernel booted into userspace.
The op_helper change is pretty straight forward, where the "tlb->attr"
values should have been set from the tlbwe_lo function instead of the
high function.
I am not sure that the tlb->attr bits completely line up with the
tlbwe_lo bits, since I don't know how else they are used besides the
zone bits.
For the helper.c I am not sure on the best way to deal with things.
The first change should be ok, where the zone mapping was just off.
But the other part where the 405 SPR doesn't seem to match up with
SPR's used in the core TLB lookup code.
But with these changes I am able to get to userspace login prompt.
===========================================================
diff --git a/trunk/target-ppc/op_helper.c b/trunk/target-ppc/op_helper.c
index a3392b1..bbfde68 100644
--- a/trunk/target-ppc/op_helper.c
+++ b/trunk/target-ppc/op_helper.c
@@ -3765,7 +3765,6 @@ void helper_4xx_tlbwe_hi (target_ulong entry, target_ulong val)
cpu_abort(env, "Little-endian TLB entries are not supported by now\n");
}
tlb->PID = env->spr[SPR_40x_PID]; /* PID */
- tlb->attr = val & 0xFF;
#if defined (DEBUG_SOFTWARE_TLB)
if (loglevel != 0) {
fprintf(logfile, "%s: set up TLB %d RPN " PADDRX " EPN " ADDRX
@@ -3803,6 +3802,7 @@ void helper_4xx_tlbwe_lo (target_ulong entry, target_ulong val)
entry &= 0x3F;
tlb = &env->tlb[entry].tlbe;
tlb->RPN = val & 0xFFFFFC00;
+ tlb->attr = val & 0xFF;
tlb->prot &= ~(PAGE_EXEC | PAGE_WRITE);
tlb->prot |= PAGE_READ;
if (val & 0x200)
diff --git a/trunk/target-ppc/helper.c b/trunk/target-ppc/helper.c
index a953e1f..4148a4d 100644
--- a/trunk/target-ppc/helper.c
+++ b/trunk/target-ppc/helper.c
@@ -1222,11 +1222,13 @@ static int mmu40x_get_physical_address (CPUState *env, mmu_ctx_t *ctx,
env->spr[SPR_40x_PID], 0, i) < 0)
continue;
zsel = (tlb->attr >> 4) & 0xF;
- zpr = (env->spr[SPR_40x_ZPR] >> (28 - (2 * zsel))) & 0x3;
+ zpr = (env->spr[SPR_40x_ZPR] >> (30 - (2 * zsel))) & 0x3;
#if defined (DEBUG_SOFTWARE_TLB)
if (loglevel != 0) {
- fprintf(logfile, "%s: TLB %d zsel %d zpr %d rw %d attr %08x\n",
- __func__, i, zsel, zpr, rw, tlb->attr);
+ fprintf(logfile, "%s: Addr %08x TLB %d zsel %d zpr %d Z %08x rw %d attr %08x "
+ "AT %d prot %04x PR %d\n",
+ __func__, address, i, zsel, zpr, env->spr[SPR_40x_ZPR], rw, tlb->attr,
+ access_type, tlb->prot, pr );
}
#endif
/* Check execute enable bit */
@@ -2204,15 +2206,21 @@ static always_inline void powerpc_excp (CPUState *env,
}
goto store_next;
case POWERPC_EXCP_DSI: /* Data storage exception */
-#if defined (DEBUG_EXCEPTIONS)
+#if 1 || defined (DEBUG_EXCEPTIONS)
if (loglevel != 0) {
- fprintf(logfile, "DSI exception: DSISR=" ADDRX" DAR=" ADDRX "\n",
- env->spr[SPR_DSISR], env->spr[SPR_DAR]);
+ fprintf(logfile, "DSI exception: DSISR=" ADDRX" DAR=" ADDRX
+ " Vecotor " ADDRX " NIP " ADDRX "\n",
+ env->spr[SPR_DSISR], env->spr[SPR_DAR],
+ env->excp_vectors[excp],
+ env->nip );
}
#endif
new_msr &= ~((target_ulong)1 << MSR_RI);
if (lpes1 == 0)
new_msr |= (target_ulong)MSR_HVB;
+ /*Not sure why this isn't the same */
+ env->spr[SPR_40x_DEAR] = env->spr[SPR_DAR];
+ env->spr[SPR_40x_ESR] = 0x00800000;
goto store_next;
case POWERPC_EXCP_ISI: /* Instruction storage exception */
#if defined (DEBUG_EXCEPTIONS)
next reply other threads:[~2009-01-17 8:25 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-17 8:25 Andrew May [this message]
2009-01-20 6:54 ` [Qemu-devel] Re: 4xx booting into Linux userspace Andrew May
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090117002513.2e2a5aed@acmay.homeip.net \
--to=acmay@acmay.homeip.net \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).