|
|
1.1 ! root 1: ! 2: #include "definitions" ! 3: ! 4: extern long ss1, savvec4, savvec5, savvec7, u0p1pt, iob2; ! 5: extern long Tpsl, Failpc, test_va; ! 6: ! 7: /* This test check the Uncachable bit in PTE of P1PT */ ! 8: ! 9: ucbit_chk() ! 10: { long *temp; ! 11: ! 12: if (ss1) writes("** Subtest6 : PTE non_cachable bit test\n"); ! 13: return(0); ! 14: temp = (long *)0; ! 15: asm("mfpr $SBR,_savvec4"); ! 16: savvec4 |= 0xc0000000; ! 17: asm("mtpr _savvec4,$P0BR"); /* Double map P0 into System space */ ! 18: asm("mtpr _savvec4,$P1BR"); /* Double map P1 into System space */ ! 19: asm("mfpr $SLR,_savvec4"); ! 20: asm("mtpr _savvec4,$P0LR"); ! 21: asm("mtpr _savvec4,$P1LR"); ! 22: ! 23: asm("mtpr $3,$DCK"); ! 24: asm("mtpr $0,$TBIA"); ! 25: asm("mtpr $0,$PADC"); ! 26: asm("mtpr $1,$MME"); ! 27: asm("jmp *$0f"); /* Go virtual */ ! 28: asm("0:"); ! 29: asm("mtpr $TB_OFF,$DCR"); /* Turn off Translation buffer */ ! 30: pte_nc(IOB2); ! 31: asm("mtpr $TB_ON,$DCR"); /* Turn on Translation buffer */ ! 32: asm("mtpr $0,$MME"); ! 33: asm("mtpr $0,$P0LR"); ! 34: asm("mtpr $0,$P1LR"); ! 35: ! 36: } ! 37: ! 38: asm(".set TDCK,0x658"); /* Addr of DCK in processor storage area */ ! 39: asm(".set P1DC,24"); ! 40: ! 41: pte_nc(pte_no) ! 42: long pte_no; ! 43: { ! 44: long old_pte; ! 45: register long *vaddr, aval, pte1, *pte_adr, paddr, eval; ! 46: /* vaddr = R12; aval = R11; pte1 = R10; pte_adr = R9; paddr = R8 */ ! 47: ! 48: eval = 0xabbaabba; /* Test pattern */ ! 49: asm("mfpr $P1BR,_savvec7"); ! 50: pte_adr = (long *)savvec7; ! 51: pte_adr += pte_no; /* Address of PTE used in test */ ! 52: asm("movpsl _Tpsl"); ! 53: ! 54: vaddr = (long *)((pte_no<<PGSHIFT) | P1ADDR); /* VA of test loc */ ! 55: test_va = (long)vaddr; ! 56: paddr = ((long)vaddr) & 0x3fffffff; /* PA of test loc */ ! 57: *vaddr = eval; /* Write pattern to test loc,also go in cache */ ! 58: fixmuc_pte(P1BR,pte_no,&old_pte,0); /* Set PTE_N bit to 0 */ ! 59: pte1 = old_pte | 0x01000000; /* Set PTE_N bit to 1 */ ! 60: ! 61: asm("movl $0,*$TDCK"); /* Set DCK in PSA to 0 */ ! 62: asm("mtpr $0,$MME"); /* Disable MME */ ! 63: asm("mtpr r8,$P1DC"); /* Purge test loc. in data cache */ ! 64: /* Using PA, Now DCK should be 0 */ ! 65: asm("mtpr $1,$MME"); /* Enable MME again */ ! 66: asm("mtpr $DC_ON,$DCR"); /* Enable data cache */ ! 67: asm("Uc0:"); ! 68: aval = *vaddr; /* Read test loc, should get a hit ! */ ! 69: if (aval == eval) ! 70: { ! 71: asm("mtpr $3,$DCK"); ! 72: asm("movab Uc0,_Failpc"); ! 73: writes("** fail to get a cache hit\n"); ! 74: ac_error1(); ! 75: writes("** PTE : "); writeh(old_pte); ! 76: writes("\n** Expected value (purge pattern) : ");writeh(0); ! 77: writes("\n** Actual value : ");writeh(aval);writec('\n'); ! 78: asm("halt"); ! 79: } ! 80: aval = aval; /* Dummy !! */ ! 81: asm("movl r10,(r9)"); /* Write PTE with PTE_N == 1 back */ ! 82: asm("Uc1:"); ! 83: aval = *vaddr; /* Read back ,should be from memory */ ! 84: asm("mtpr $3,$DCK"); ! 85: asm("mtpr $DC_OFF,$DCR"); /* Disable data cache */ ! 86: if (aval != eval) /* check result */ ! 87: { /* ERROR */ ! 88: writes("** Page is cached even the PTE uncachable bit is set\n"); ! 89: asm("movab Uc1,_Failpc"); ! 90: ac_error1(); ! 91: writes("** PTE : "); writeh(pte1); writec('\n'); ! 92: writes("** Expected value : ");writeh(eval);writec('\n'); ! 93: writes("** Actual value : ");writeh(aval);writec('\n'); ! 94: asm("halt"); ! 95: } ! 96: } ! 97:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.