Line 168... |
Line 168... |
|
|
/* Sys call exception handler */
|
/* Sys call exception handler */
|
void sys_call_handler (void)
|
void sys_call_handler (void)
|
{
|
{
|
/* Set supervisor mode */
|
/* Set supervisor mode */
|
mtspr (SPR_ESR_BASE, mfspr (SPR_ESR_BASE) | SPR_SR_SUPV);
|
mtspr (SPR_ESR_BASE, mfspr (SPR_ESR_BASE) | SPR_SR_SM);
|
}
|
}
|
|
|
/* DTLB miss exception handler */
|
/* DTLB miss exception handler */
|
void dtlb_miss_handler (void)
|
void dtlb_miss_handler (void)
|
{
|
{
|
Line 744... |
Line 744... |
/* Write user */
|
/* Write user */
|
dtlb_val = DTLB_PR_NOLIMIT | SPR_DTLBTR_UWE;
|
dtlb_val = DTLB_PR_NOLIMIT | SPR_DTLBTR_UWE;
|
mtspr (SPR_DTLBTR_BASE(DTLB_WAYS - 1) + set, ea | (DTLB_PR_NOLIMIT & ~SPR_DTLBTR_UWE));
|
mtspr (SPR_DTLBTR_BASE(DTLB_WAYS - 1) + set, ea | (DTLB_PR_NOLIMIT & ~SPR_DTLBTR_UWE));
|
|
|
/* Set user mode */
|
/* Set user mode */
|
mtspr (SPR_SR, mfspr (SPR_SR) & ~SPR_SR_SUPV);
|
mtspr (SPR_SR, mfspr (SPR_SR) & ~SPR_SR_SM);
|
|
|
REG32(RAM_START + (RAM_SIZE/2) + (set*PAGE_SIZE) + 0) = 0xffeeddcc;
|
REG32(RAM_START + (RAM_SIZE/2) + (set*PAGE_SIZE) + 0) = 0xffeeddcc;
|
ASSERT(dpage_fault_count == 3);
|
ASSERT(dpage_fault_count == 3);
|
REG32(RAM_START + (RAM_SIZE/2) + (set*PAGE_SIZE) + 4) = 0xbbaa9988;
|
REG32(RAM_START + (RAM_SIZE/2) + (set*PAGE_SIZE) + 4) = 0xbbaa9988;
|
ASSERT(dpage_fault_count == 3);
|
ASSERT(dpage_fault_count == 3);
|
Line 763... |
Line 763... |
/* Read user mode */
|
/* Read user mode */
|
dtlb_val = DTLB_PR_NOLIMIT | SPR_DTLBTR_URE;
|
dtlb_val = DTLB_PR_NOLIMIT | SPR_DTLBTR_URE;
|
mtspr (SPR_DTLBTR_BASE(DTLB_WAYS - 1) + set, ea | (DTLB_PR_NOLIMIT & ~SPR_DTLBTR_URE));
|
mtspr (SPR_DTLBTR_BASE(DTLB_WAYS - 1) + set, ea | (DTLB_PR_NOLIMIT & ~SPR_DTLBTR_URE));
|
|
|
/* Set user mode */
|
/* Set user mode */
|
mtspr (SPR_SR, mfspr (SPR_SR) & ~SPR_SR_SUPV);
|
mtspr (SPR_SR, mfspr (SPR_SR) & ~SPR_SR_SM);
|
|
|
tmp = REG32(RAM_START + (RAM_SIZE/2) + (set*PAGE_SIZE) + 0);
|
tmp = REG32(RAM_START + (RAM_SIZE/2) + (set*PAGE_SIZE) + 0);
|
ASSERT(dpage_fault_count == 4);
|
ASSERT(dpage_fault_count == 4);
|
ASSERT(tmp == 0xffeeddcc);
|
ASSERT(tmp == 0xffeeddcc);
|
tmp = REG32(RAM_START + (RAM_SIZE/2) + (set*PAGE_SIZE) + 4);
|
tmp = REG32(RAM_START + (RAM_SIZE/2) + (set*PAGE_SIZE) + 4);
|
Line 1104... |
Line 1104... |
/* Execute user */
|
/* Execute user */
|
itlb_val = SPR_ITLBTR_CI | SPR_ITLBTR_UXE;
|
itlb_val = SPR_ITLBTR_CI | SPR_ITLBTR_UXE;
|
mtspr (SPR_ITLBTR_BASE(ITLB_WAYS - 1) + set, ea | (ITLB_PR_NOLIMIT & ~SPR_ITLBTR_UXE));
|
mtspr (SPR_ITLBTR_BASE(ITLB_WAYS - 1) + set, ea | (ITLB_PR_NOLIMIT & ~SPR_ITLBTR_UXE));
|
|
|
/* Set user mode */
|
/* Set user mode */
|
mtspr (SPR_SR, mfspr (SPR_SR) & ~SPR_SR_SUPV);
|
mtspr (SPR_SR, mfspr (SPR_SR) & ~SPR_SR_SM);
|
|
|
call (ea);
|
call (ea);
|
ASSERT(ipage_fault_count == 2);
|
ASSERT(ipage_fault_count == 2);
|
call (ea + 8);
|
call (ea + 8);
|
ASSERT(ipage_fault_count == 2);
|
ASSERT(ipage_fault_count == 2);
|