Changeset 408 for soft/giet_vm/giet_common/utils.c
- Timestamp:
- Sep 29, 2014, 10:47:26 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
soft/giet_vm/giet_common/utils.c
r399 r408 22 22 extern static_scheduler_t* _schedulers[NB_PROCS_MAX<<(X_WIDTH+Y_WIDTH)]; 23 23 24 25 24 /////////////////////////////////////////////////////////////////////////////////// 26 25 // CP0 registers access functions 27 26 /////////////////////////////////////////////////////////////////////////////////// 28 27 29 /////////////////////////////////////////////////////////////////////////////////// 30 // Returns the value contained in CP0 SCHED register 31 // (virtual base address of the processor scheduler). 32 /////////////////////////////////////////////////////////////////////////////////// 28 ///////////////////////// 33 29 unsigned int _get_sched() 34 30 { … … 38 34 return ret; 39 35 } 40 /////////////////////////////////////////////////////////////////////////////////// 41 // Returns EPC register content. 42 /////////////////////////////////////////////////////////////////////////////////// 36 /////////////////////// 43 37 unsigned int _get_epc() 44 38 { … … 48 42 return ret; 49 43 } 50 /////////////////////////////////////////////////////////////////////////////////// 51 // Returns BVAR register content. 52 /////////////////////////////////////////////////////////////////////////////////// 44 //////////////////////// 53 45 unsigned int _get_bvar() 54 46 { … … 58 50 return ret; 59 51 } 60 /////////////////////////////////////////////////////////////////////////////////// 61 // Returns CR register content. 62 /////////////////////////////////////////////////////////////////////////////////// 52 ////////////////////// 63 53 unsigned int _get_cr() 64 54 { … … 68 58 return ret; 69 59 } 70 /////////////////////////////////////////////////////////////////////////////////// 71 // Returns SR register content 72 /////////////////////////////////////////////////////////////////////////////////// 60 ////////////////////// 73 61 unsigned int _get_sr() 74 62 { … … 78 66 return ret; 79 67 } 80 ////////////////////////////////////////////////////////////////////////////// 81 // This function set a new value for the CP0 status register. 82 ////////////////////////////////////////////////////////////////////////////// 83 void _set_sr(unsigned int val) 84 { 85 asm volatile( "mtc0 %0, $12 \n" 86 : 87 :"r" (val) ); 88 } 89 ////////////////////////////////////////////////////////////////////////////// 90 // Returns processor index 91 ////////////////////////////////////////////////////////////////////////////// 68 ////////////////////////// 92 69 unsigned int _get_procid() 93 70 { … … 97 74 return (ret & 0x3FF); 98 75 } 99 ////////////////////////////////////////////////////////////////////////////// 100 // Returns local time (32 bits value) 101 // boot_proctime() 102 ////////////////////////////////////////////////////////////////////////////// 76 //////////////////////////// 103 77 unsigned int _get_proctime() 104 78 { … … 108 82 return ret; 109 83 } 110 ////////////////////////////////////////////////////////////////////////////// 111 // Save SR value into save_sr_ptr variable and disable IRQs. 112 ////////////////////////////////////////////////////////////////////////////// 84 85 ///////////////////////////////////////////// 113 86 void _it_disable( unsigned int * save_sr_ptr) 114 87 { … … 123 96 *save_sr_ptr = sr; 124 97 } 125 126 ////////////////////////////////////////////////////////////////////////////// 127 // Restores previous SR value. 128 ////////////////////////////////////////////////////////////////////////////// 98 ////////////////////////////////////////////// 129 99 void _it_restore( unsigned int * save_sr_ptr ) 130 100 { … … 136 106 } 137 107 138 ////////////////////////////////////////////////////////////////////////////// 139 // This function set a new value in CP0 SCHED register. 140 // (virtual base address of the processor scheduler). 141 ////////////////////////////////////////////////////////////////////////////// 108 ///////////////////////////////// 142 109 void _set_sched(unsigned int val) 143 110 { … … 146 113 :"r" (val) ); 147 114 } 115 ////////////////////////////// 116 void _set_sr(unsigned int val) 117 { 118 asm volatile ( "mtc0 %0, $12 \n" 119 : 120 :"r" (val) ); 121 } 122 148 123 149 124 /////////////////////////////////////////////////////////////////////////////////// … … 151 126 /////////////////////////////////////////////////////////////////////////////////// 152 127 153 /////////////////////////////////////////////////////////////////////////////////// 154 // Returns PTPR register content. 155 /////////////////////////////////////////////////////////////////////////////////// 128 //////////////////////////// 156 129 unsigned int _get_mmu_ptpr() 157 130 { … … 161 134 return ret; 162 135 } 163 /////////////////////////////////////////////////////////////////////////////////// 164 // Returns MODE register content. 165 /////////////////////////////////////////////////////////////////////////////////// 136 //////////////////////////// 166 137 unsigned int _get_mmu_mode() 167 138 { … … 171 142 return ret; 172 143 } 173 ////////////////////////////////////////////////////////////////////////////// 174 // This function set a new value for the MMU PTPR register. 175 ////////////////////////////////////////////////////////////////////////////// 144 //////////////////////////////////// 176 145 void _set_mmu_ptpr(unsigned int val) 177 146 { 178 asm volatile ( "mtc2 %0, $0 147 asm volatile ( "mtc2 %0, $0 \n" 179 148 : 180 149 :"r" (val) 181 150 :"memory" ); 182 151 } 183 ////////////////////////////////////////////////////////////////////////////// 184 // This function set a new value for the MMU MODE register. 185 ////////////////////////////////////////////////////////////////////////////// 152 //////////////////////////////////// 186 153 void _set_mmu_mode(unsigned int val) 187 154 { 188 asm volatile ( "mtc2 %0, $1 155 asm volatile ( "mtc2 %0, $1 \n" 189 156 : 190 157 :"r" (val) 191 158 :"memory" ); 192 159 } 160 //////////////////////////////////////////// 161 void _set_mmu_dcache_inval(unsigned int val) 162 { 163 asm volatile ( "mtc2 %0, $7 \n" 164 : 165 :"r" (val) 166 :"memory" ); 167 } 168 193 169 194 170 //////////////////////////////////////////////////////////////////////////// … … 1033 1009 /////////////////////////////////////////////////////////////////////////////////// 1034 1010 // Invalidate all data cache lines corresponding to a memory 1035 // buffer (identified by an address and a size). 1036 // TODO This should be replaced by a write to the CP2 MMU_DCACHE_INVAL 1037 // register, to be more processor independant. 1038 /////////////////////////////////////////////////////////////////////////////////// 1039 void _dcache_buf_invalidate( void * buffer, 1040 unsigned int size) 1041 { 1042 unsigned int i; 1011 // buffer (identified by virtual base address and size). 1012 /////////////////////////////////////////////////////////////////////////////////// 1013 void _dcache_buf_invalidate( unsigned int buf_vbase, 1014 unsigned int buf_size ) 1015 { 1016 unsigned int offset; 1043 1017 unsigned int tmp; 1044 unsigned int line_size; 1018 unsigned int line_size; // bytes 1045 1019 1046 1020 // compute data cache line size based on config register (bits 12:10) … … 1048 1022 "mfc0 %0, $16, 1" 1049 1023 : "=r" (tmp) ); 1024 1050 1025 tmp = ((tmp >> 10) & 0x7); 1051 1026 line_size = 2 << tmp; 1052 1027 1053 1028 // iterate on cache lines 1054 for (i = 0; i < size; i += line_size) 1055 { 1056 asm volatile( 1057 " cache %0, %1" 1058 : :"i" (0x11), "R" (*((unsigned char *) buffer + i)) ); 1029 for ( offset = 0; offset < buf_size; offset += line_size) 1030 { 1031 _set_mmu_dcache_inval( buf_vbase + offset ); 1059 1032 } 1060 1033 } … … 1110 1083 if ( vobj_id != 0xFFFFFFFF ) 1111 1084 { 1112 *vaddr = vobjs[vobj_id].v addr;1085 *vaddr = vobjs[vobj_id].vbase; 1113 1086 *length = vobjs[vobj_id].length; 1114 1087 return 0;
Note: See TracChangeset
for help on using the changeset viewer.