paljtoslave.S revision 8008
1#include "dc21164FromGasSources.h" // DECchip 21164 specific definitions 2#include "ev5_defs.h" 3#include "fromHudsonOsf.h" // OSF/1 specific definitions 4#include "fromHudsonMacros.h" // Global macro definitions 5#include "ev5_impure.h" // Scratch & logout area data structures 6#include "platform.h" // Platform specific definitions 7 8 9 .global palJToSlave 10 .text 3 11 12 /* 13 * args: 14 a0: here 15 a1: boot location 16 a2: CSERVE_J_KTOPAL 17 a3: restrart_pv 18 a4: vptb 19 a5: my_rpb 20 21 */ 22palJToSlave: 23 24 /* 25 * SRM Console Architecture III 3-26 26 */ 27 28 ALIGN_BRANCH 29 30 bis a3, zero, pv 31 bis zero, zero, t11 32 bis zero, zero, ra 33 34 /* Point the Vptbr to a2 */ 35 36 mtpr a4, mVptBr // Load Mbox copy 37 mtpr a4, iVptBr // Load Ibox copy 38 STALL // don't dual issue the load with mtpr -pb 39 40 /* Turn on superpage mapping in the mbox and icsr */ 41 lda t0, (2<<MCSR_V_SP)(zero) // Get a '10' (binary) in MCSR<SP> 42 STALL // don't dual issue the load with mtpr -pb 43 mtpr t0, mcsr // Set the super page mode enable bit 44 STALL // don't dual issue the load with mtpr -pb 45 46 lda t0, 0(zero) 47 mtpr t0, dtbAsn 48 mtpr t0, itbAsn 49 50 LDLI (t1,0x20000000) 51 STALL // don't dual issue the load with mtpr -pb 52 mfpr t0, icsr // Enable superpage mapping 53 STALL // don't dual issue the load with mtpr -pb 54 bis t0, t1, t0 55 mtpr t0, icsr 56 57 STALL // Required stall to update chip ... 58 STALL 59 STALL 60 STALL 61 STALL 62 63 ldq_p s0, PCB_Q_PTBR(a5) 64 sll s0, VA_S_OFF, s0 // Shift PTBR into position 65 STALL // don't dual issue the load with mtpr -pb 66 mtpr s0, ptPtbr // PHYSICAL MBOX INST -> MT PT20 IN 0,1 67 STALL // don't dual issue the load with mtpr -pb 68 ldq_p sp, PCB_Q_KSP(a5) 69 70 //mtpr a0, excAddr // Load the dispatch address. 71 //STALL // don't dual issue the load with mtpr -pb 72 //bis a3, zero, a0 // first free PFN 73 // ldq_p a1, PCB_Q_PTBR(a5) // ptbr 74 75 //ldq_p a2, 24(zero) // argc 76 //ldq_p a3, 32(zero) // argv 77 //ldq_p a4, 40(zero) // environ 78 //lda a5, 0(zero) // osf_param 79 //STALL // don't dual issue the load with mtpr -pb 80 mtpr zero, dtbIa // Flush all D-stream TB entries 81 mtpr zero, itbIa // Flush all I-stream TB entries 82 83 84 mtpr a1, excAddr // Load the dispatch address. 85 86 STALL // don't dual issue the load with mtpr -pb 87 STALL // don't dual issue the load with mtpr -pb 88 mtpr zero, dtbIa // Flush all D-stream TB entries 89 mtpr zero, itbIa // Flush all I-stream TB entries 90 br zero, 2f 91 92 ALIGN_BLOCK 93 942: NOP 95 mtpr zero, icFlush // Flush the icache. 96 NOP 97 NOP 98 99 NOP // Required NOPs ... 1-10 100 NOP 101 NOP 102 NOP 103 NOP 104 NOP 105 NOP 106 NOP 107 NOP 108 NOP 109 110 NOP // Required NOPs ... 11-20 111 NOP 112 NOP 113 NOP 114 NOP 115 NOP 116 NOP 117 NOP 118 NOP 119 NOP 120 121 NOP // Required NOPs ... 21-30 122 NOP 123 NOP 124 NOP 125 NOP 126 NOP 127 NOP 128 NOP 129 NOP 130 NOP 131 132 NOP // Required NOPs ... 31-40 133 NOP 134 NOP 135 NOP 136 NOP 137 NOP 138 NOP 139 NOP 140 NOP 141 NOP 142 143 144 145 NOP // Required NOPs ... 41-44 146 NOP 147 NOP 148 NOP 149 150 hw_rei_stall // Dispatch to kernel 151 152