Print machine check address for Book-E.

Bits in mcsr indicate if the address is valid, and whether it's a physical
address or effective address.

Sponsored by:	Alex Perez/Inertial Computing
This commit is contained in:
Justin Hibbits 2015-11-30 02:40:41 +00:00
parent 68a71d75c2
commit 6035018b9a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=291463
2 changed files with 9 additions and 1 deletions

View File

@ -652,7 +652,9 @@
#elif defined(BOOKE)
#define SPR_MCARU 0x239 /* ..8 Machine Check Address register upper bits */
#define SPR_MCSR 0x23c /* ..8 Machine Check Syndrome register */
#define SPR_MCAR 0x23d /* ..8 Machine Check Address register */
#define SPR_ESR 0x003e /* ..8 Exception Syndrome Register */
#define ESR_PIL 0x08000000 /* Program interrupt - illegal */

View File

@ -401,6 +401,9 @@ static void
printtrap(u_int vector, struct trapframe *frame, int isfatal, int user)
{
uint16_t ver;
#ifdef BOOKE
vm_paddr_t pa;
#endif
printf("\n");
printf("%s %s trap:\n", isfatal ? "fatal" : "handled",
@ -429,7 +432,10 @@ printtrap(u_int vector, struct trapframe *frame, int isfatal, int user)
printf(" msssr0 = 0x%lx\n",
(u_long)mfspr(SPR_MSSSR0));
#elif defined(BOOKE)
printf(" mcsr = 0x%lx\n", (u_long)mfspr(SPR_MCSR));
pa = mfspr(SPR_MCARU);
pa = (pa << 32) | mfspr(SPR_MCAR);
printf(" mcsr = 0x%lx\n", (u_long)mfspr(SPR_MCSR));
printf(" mcar = 0x%jx\n", (uintmax_t)pa);
#endif
break;
}