Annotation of cci/d/memman/ucbit.s, revision 1.1.1.1

1.1       root        1: LL0:
                      2:        .data
                      3:        .set SBR,0
                      4:        .set SLR,1
                      5:        .set P0BR,2
                      6:        .set P0LR,3
                      7:        .set P1BR,4
                      8:        .set P1LR,5
                      9:        .set P2BR,6
                     10:        .set P2LR,7
                     11:        .set IPL,8
                     12:        .set MAPEN,9
                     13:        .set MME,9
                     14:        .set TBIA,10
                     15:        .set TBIS,11
                     16:        .set DCK,12
                     17:        .set CCK,13
                     18:        .set PCBB,14
                     19:        .set KSP,19
                     20:        .set USP,20
                     21:        .set CPMDCB,21
                     22:        .set PADC,25
                     23:        .set DCR,27
                     24:        .set DC_ON,1
                     25:        .set DC_OFF,2
                     26:        .set TB_ON,256
                     27:        .set TB_OFF,512
                     28:        .text
                     29:        .align  1
                     30:        .globl  _ucbit_chk
                     31: _ucbit_chk:
                     32:        .word   L21
                     33:  # 
                     34:  # #include "definitions"
                     35:  # 
                     36:  # extern long ss1, savvec4, savvec5, savvec7, u0p1pt, iob2;
                     37:  # extern long Tpsl, Failpc, test_va;
                     38:  # 
                     39:  # /*  This test check the Uncachable bit in PTE of P1PT */
                     40:  # 
                     41:  # ucbit_chk()
                     42:  # {   long *temp;
                     43:        jbr     L23
                     44: L24:
                     45:  # 
                     46:  #     if (ss1) writes("** Subtest6 : PTE non_cachable bit test\n");
                     47:        tstl    _ss1
                     48:        jeql    L25
                     49:        .data   1
                     50: L27:
                     51:        .ascii  "** Subtest6 : PTE non_cachable bit test\12\0"
                     52:        .text
                     53:        pushl   $L27
                     54:        callf   $8,_writes
                     55:  #     temp = (long *)0;
                     56: L25:
                     57:        clrl    -56(fp)
                     58:  #     asm("mfpr $SBR,_savvec4");
                     59: mfpr $SBR,_savvec4
                     60:  #     savvec4 |= 0xc0000000;
                     61:        orl2    $-1073741824,_savvec4
                     62:  #     asm("mtpr _savvec4,$P0BR");     /* Double map P0 into System space */
                     63: mtpr _savvec4,$P0BR
                     64:  #     asm("mtpr _savvec4,$P1BR");     /* Double map P1 into System space */
                     65: mtpr _savvec4,$P1BR
                     66:  #     asm("mfpr $SLR,_savvec4");
                     67: mfpr $SLR,_savvec4
                     68:  #     asm("mtpr _savvec4,$P0LR");
                     69: mtpr _savvec4,$P0LR
                     70:  #     asm("mtpr _savvec4,$P1LR");
                     71: mtpr _savvec4,$P1LR
                     72:  # 
                     73:  #     asm("mtpr $3,$DCK");
                     74: mtpr $3,$DCK
                     75:  #     asm("mtpr $0,$TBIA");
                     76: mtpr $0,$TBIA
                     77:  #     asm("mtpr $0,$PADC");
                     78: mtpr $0,$PADC
                     79:  #     asm("mtpr $1,$MME");
                     80: mtpr $1,$MME
                     81:  #     asm("jmp  *$0f");               /* Go virtual */
                     82: jmp  *$0f
                     83:  # asm("0:");
                     84: 0:
                     85:  #     asm("mtpr $TB_OFF,$DCR");       /* Turn off Translation buffer */
                     86: mtpr $TB_OFF,$DCR
                     87:  #     pte_nc(IOB2);
                     88:        andl3   $1073740800,$_iob2,r0
                     89:        shrl    $10,r0,r0
                     90:        andl2   $1048575,r0
                     91:        pushl   r0
                     92:        callf   $8,_pte_nc
                     93:  #     asm("mtpr $TB_ON,$DCR");        /* Turn on Translation buffer */
                     94: mtpr $TB_ON,$DCR
                     95:  #     asm("mtpr $0,$MME");
                     96: mtpr $0,$MME
                     97:  #     asm("mtpr $0,$P0LR");
                     98: mtpr $0,$P0LR
                     99:  #     asm("mtpr $0,$P1LR");
                    100: mtpr $0,$P1LR
                    101:  # 
                    102:  # }
                    103:        ret
                    104:        .set    L21,0x0
                    105: L23:
                    106:        subl3   $56,fp,sp
                    107:        jbr     L24
                    108:        .data
                    109: .set TDCK,0x658
                    110: .set P1DC,24
                    111:        .text
                    112:        .align  1
                    113:        .globl  _pte_nc
                    114: _pte_nc:
                    115:        .word   L29
                    116:  # 
                    117:  # asm(".set TDCK,0x658");             /* Addr of DCK in processor storage area */
                    118:  # asm(".set P1DC,24");
                    119:  # 
                    120:  # pte_nc(pte_no)
                    121:  # long pte_no;
                    122:  # {
                    123:        jbr     L31
                    124: L32:
                    125:  #     long old_pte;
                    126:  #     register long *vaddr, aval, pte1, *pte_adr, paddr, eval;
                    127:  #     /* vaddr = R12; aval = R11; pte1 = R10; pte_adr = R9; paddr = R8 */
                    128:  # 
                    129:  #     eval = 0xabbaabba;              /* Test pattern */
                    130:        movl    $-1413829702,r7
                    131:  #     asm("mfpr $P1BR,_savvec7");
                    132: mfpr $P1BR,_savvec7
                    133:  #     pte_adr = (long *)savvec7;
                    134:        movl    _savvec7,r9
                    135:  #     pte_adr += pte_no;              /* Address of PTE used in test */
                    136:        shll    $2,4(fp),r0
                    137:        addl2   r0,r9
                    138:  #     asm("movpsl _Tpsl");
                    139: movpsl _Tpsl
                    140:  # 
                    141:  #     vaddr = (long *)((pte_no<<PGSHIFT) | P1ADDR);   /* VA of test loc */
                    142:        shll    $10,4(fp),r0
                    143:        orl2    $1073741824,r0
                    144:        movl    r0,r12
                    145:  #     test_va = (long)vaddr;
                    146:        movl    r12,_test_va
                    147:  #     paddr = ((long)vaddr) & 0x3fffffff;             /* PA of test loc */
                    148:        andl3   $1073741823,r12,r0
                    149:        movl    r0,r8
                    150:  #     *vaddr = eval;          /* Write pattern to test loc,also go in cache */
                    151:        movl    r7,(r12)
                    152:  #     fixmuc_pte(P1BR,pte_no,&old_pte,0);     /* Set PTE_N bit to 0 */
                    153:        pushl   $0
                    154:        subl3   $56,fp,r0
                    155:        pushl   r0
                    156:        pushl   4(fp)
                    157:        pushl   $4
                    158:        callf   $20,_fixmuc_pte
                    159:  #     pte1 = old_pte | 0x01000000;            /* Set PTE_N bit to 1 */
                    160:        orl3    $16777216,-56(fp),r0
                    161:        movl    r0,r10
                    162:  # 
                    163:  #     asm("movl $0,*$TDCK");          /* Set DCK in PSA to 0  */
                    164: movl $0,*$TDCK
                    165:  #     asm("mtpr $0,$MME");            /* Disable MME */
                    166: mtpr $0,$MME
                    167:  #     asm("mtpr r8,$P1DC");           /* Purge test loc. in data cache */
                    168: mtpr r8,$P1DC
                    169:  #                                     /* Using PA, Now DCK should be 0  */    
                    170:  #     asm("mtpr $1,$MME");            /* Enable MME again */
                    171: mtpr $1,$MME
                    172:  #     asm("mtpr $DC_ON,$DCR");        /* Enable data cache */
                    173: mtpr $DC_ON,$DCR
                    174:  # asm("Uc0:");
                    175: Uc0:
                    176:  #     aval = *vaddr;                  /* Read test loc, should get a hit ! */
                    177:        movl    (r12),r11
                    178:  #     if (aval == eval)
                    179:        cmpl    r11,r7
                    180:        jneq    L34
                    181:  #             {
                    182:  #             asm("mtpr $3,$DCK");
                    183: mtpr $3,$DCK
                    184:  #             asm("movab Uc0,_Failpc");
                    185: movab Uc0,_Failpc
                    186:  #             writes("** fail to get a cache hit\n");
                    187:        .data   1
                    188: L35:
                    189:        .ascii  "** fail to get a cache hit\12\0"
                    190:        .text
                    191:        pushl   $L35
                    192:        callf   $8,_writes
                    193:  #             ac_error1();
                    194:        callf   $4,_ac_error1
                    195:  #             writes("** PTE : "); writeh(old_pte);
                    196:        .data   1
                    197: L37:
                    198:        .ascii  "** PTE : \0"
                    199:        .text
                    200:        pushl   $L37
                    201:        callf   $8,_writes
                    202:        pushl   -56(fp)
                    203:        callf   $8,_writeh
                    204:  #             writes("\n** Expected value (purge pattern) : ");writeh(0);
                    205:        .data   1
                    206: L39:
                    207:        .ascii  "\12** Expected value (purge pattern) : \0"
                    208:        .text
                    209:        pushl   $L39
                    210:        callf   $8,_writes
                    211:        pushl   $0
                    212:        callf   $8,_writeh
                    213:  #             writes("\n** Actual value   : ");writeh(aval);writec('\n');
                    214:        .data   1
                    215: L40:
                    216:        .ascii  "\12** Actual value   : \0"
                    217:        .text
                    218:        pushl   $L40
                    219:        callf   $8,_writes
                    220:        pushl   r11
                    221:        callf   $8,_writeh
                    222:        pushl   $10
                    223:        callf   $8,_writec
                    224:  #             asm("halt");
                    225: halt
                    226:  #             }
                    227:  #     aval = aval;                    /* Dummy !! */
                    228: L34:
                    229:        movl    r11,r11
                    230:  #     asm("movl r10,(r9)");           /* Write PTE with PTE_N == 1 back */
                    231: movl r10,(r9)
                    232:  # asm("Uc1:");
                    233: Uc1:
                    234:  #     aval = *vaddr;                  /* Read back ,should be from memory */
                    235:        movl    (r12),r11
                    236:  #     asm("mtpr $3,$DCK");
                    237: mtpr $3,$DCK
                    238:  #     asm("mtpr $DC_OFF,$DCR");       /* Disable data cache */
                    239: mtpr $DC_OFF,$DCR
                    240:  #     if (aval != eval)               /* check result */
                    241:        cmpl    r11,r7
                    242:        jeql    L42
                    243:  #             {               /* ERROR */
                    244:  #            writes("** Page is cached even the PTE uncachable bit is set\n");
                    245:        .data   1
                    246: L43:
                    247:        .ascii  "** Page is cached even the PTE uncachable bit is set\12\0"
                    248:        .text
                    249:        pushl   $L43
                    250:        callf   $8,_writes
                    251:  #             asm("movab Uc1,_Failpc");
                    252: movab Uc1,_Failpc
                    253:  #             ac_error1();
                    254:        callf   $4,_ac_error1
                    255:  #             writes("** PTE : "); writeh(pte1); writec('\n');
                    256:        .data   1
                    257: L44:
                    258:        .ascii  "** PTE : \0"
                    259:        .text
                    260:        pushl   $L44
                    261:        callf   $8,_writes
                    262:        pushl   r10
                    263:        callf   $8,_writeh
                    264:        pushl   $10
                    265:        callf   $8,_writec
                    266:  #             writes("** Expected value : ");writeh(eval);writec('\n');
                    267:        .data   1
                    268: L45:
                    269:        .ascii  "** Expected value : \0"
                    270:        .text
                    271:        pushl   $L45
                    272:        callf   $8,_writes
                    273:        pushl   r7
                    274:        callf   $8,_writeh
                    275:        pushl   $10
                    276:        callf   $8,_writec
                    277:  #             writes("** Actual value   : ");writeh(aval);writec('\n');
                    278:        .data   1
                    279: L46:
                    280:        .ascii  "** Actual value   : \0"
                    281:        .text
                    282:        pushl   $L46
                    283:        callf   $8,_writes
                    284:        pushl   r11
                    285:        callf   $8,_writeh
                    286:        pushl   $10
                    287:        callf   $8,_writec
                    288:  #             asm("halt");
                    289: halt
                    290:  #             }
                    291:  # }
                    292: L42:
                    293:        ret
                    294:        .set    L29,0x1f80
                    295: L31:
                    296:        subl3   $56,fp,sp
                    297:        jbr     L32
                    298:        .data
                    299:  # 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.