Mercurial > nand-ecoscentric
annotate packages/kernel/current/tests/kcache1.c @ 24:306eee292492 ecos-sw-1999-07-16
Merge from eCos master repository on 1999-07-16-05:47:06-BST
| author | jlarmour |
|---|---|
| date | Fri, 16 Jul 1999 21:54:32 +0000 |
| parents | d3fbcdfa1b2f |
| children | 29bc183297e1 |
| rev | line source |
|---|---|
| 0 | 1 /*================================================================= |
| 2 // | |
| 3 // kcache1.c | |
| 4 // | |
| 5 // Cache timing test | |
| 6 // | |
| 7 //========================================================================== | |
| 8 //####COPYRIGHTBEGIN#### | |
| 9 // | |
| 10 // ------------------------------------------- | |
| 11 // The contents of this file are subject to the Cygnus eCos Public License | |
| 12 // Version 1.0 (the "License"); you may not use this file except in | |
| 13 // compliance with the License. You may obtain a copy of the License at | |
| 14 // http://sourceware.cygnus.com/ecos | |
| 15 // | |
| 16 // Software distributed under the License is distributed on an "AS IS" | |
| 17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the | |
| 18 // License for the specific language governing rights and limitations under | |
| 19 // the License. | |
| 20 // | |
| 21 // The Original Code is eCos - Embedded Cygnus Operating System, released | |
| 22 // September 30, 1998. | |
| 23 // | |
| 24 // The Initial Developer of the Original Code is Cygnus. Portions created | |
| 2 | 25 // by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. |
| 0 | 26 // ------------------------------------------- |
| 27 // | |
| 28 //####COPYRIGHTEND#### | |
| 29 //========================================================================== | |
| 30 //#####DESCRIPTIONBEGIN#### | |
| 31 // | |
| 32 // Author(s): dsm | |
| 33 // Contributors: dsm, nickg | |
| 34 // Date: 1998-06-18 | |
| 35 //####DESCRIPTIONEND#### | |
| 36 */ | |
| 37 | |
| 2 | 38 #include <cyg/hal/hal_arch.h> // CYGNUM_HAL_STACK_SIZE_TYPICAL |
| 39 | |
| 0 | 40 #include <cyg/kernel/kapi.h> |
| 41 | |
| 42 #include <cyg/infra/testcase.h> | |
| 43 | |
| 44 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK | |
| 45 #ifdef CYGFUN_KERNEL_API_C | |
| 46 | |
| 47 #include <cyg/infra/diag.h> | |
| 48 #include <cyg/hal/hal_cache.h> | |
| 2 | 49 #include <cyg/hal/hal_intr.h> |
| 0 | 50 |
| 51 // ------------------------------------------------------------------------- | |
| 52 // If the HAL does not supply this, we supply our own version | |
| 53 | |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
54 #ifdef HAL_DCACHE_SYNC |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
55 |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
56 # define HAL_DCACHE_PURGE_ALL() HAL_DCACHE_SYNC() |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
57 |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
58 #else |
| 0 | 59 |
| 60 static cyg_uint8 dca[HAL_DCACHE_SIZE + HAL_DCACHE_LINE_SIZE*2]; | |
| 61 | |
| 62 #define HAL_DCACHE_PURGE_ALL() \ | |
| 63 CYG_MACRO_START \ | |
| 64 volatile cyg_uint8 *addr = &dca[HAL_DCACHE_LINE_SIZE]; \ | |
| 65 volatile cyg_uint8 tmp = 0; \ | |
| 66 int i; \ | |
| 67 for( i = 0; i < HAL_DCACHE_SIZE; i += HAL_DCACHE_LINE_SIZE ) \ | |
| 68 { \ | |
| 69 tmp = addr[i]; \ | |
| 70 } \ | |
| 71 CYG_MACRO_END | |
| 72 | |
| 73 #endif | |
| 74 | |
| 75 // ------------------------------------------------------------------------- | |
| 76 | |
| 77 #define NTHREADS 1 | |
| 2 | 78 #define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL |
| 0 | 79 |
| 80 static cyg_handle_t thread[NTHREADS]; | |
| 81 | |
| 82 static cyg_thread thread_obj[NTHREADS]; | |
| 83 static char stack[NTHREADS][STACKSIZE]; | |
| 84 | |
| 85 #define MAXSIZE 1<<18 | |
| 86 | |
| 87 volatile char m[MAXSIZE]; | |
| 88 | |
| 2 | 89 #ifndef MAX_STRIDE |
| 90 #define MAX_STRIDE 64 | |
| 91 #endif | |
| 92 | |
| 0 | 93 // ------------------------------------------------------------------------- |
| 94 | |
| 95 static void time0(register cyg_uint32 stride) | |
| 96 { | |
| 97 register cyg_uint32 j,k; | |
| 98 cyg_tick_count_t count0, count1; | |
| 99 cyg_ucount32 t; | |
| 100 register char c; | |
| 101 | |
| 102 count0 = cyg_current_time(); | |
| 103 | |
| 2 | 104 k = 0; |
| 105 if ( cyg_test_is_simulator ) | |
| 106 k = 3960; | |
| 107 | |
| 108 for(; k<4000;k++) { | |
| 0 | 109 for(j=0; j<(HAL_DCACHE_SIZE/HAL_DCACHE_LINE_SIZE); j++) { |
| 110 c=m[stride*j]; | |
| 111 } | |
| 112 } | |
| 113 | |
| 114 count1 = cyg_current_time(); | |
| 115 t = count1 - count0; | |
| 116 diag_printf("stride=%d, time=%d\n", stride, t); | |
| 117 } | |
| 118 | |
| 119 // ------------------------------------------------------------------------- | |
| 120 | |
| 121 void time1(void) | |
| 122 { | |
| 123 cyg_uint32 i; | |
| 124 | |
| 2 | 125 for(i=1; i<=MAX_STRIDE; i+=i) { |
| 0 | 126 time0(i); |
| 127 } | |
| 128 } | |
| 129 | |
| 130 // ------------------------------------------------------------------------- | |
|
24
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
131 // With an ICache invalidate in the middle: |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
132 #ifdef HAL_ICACHE_INVALIDATE_ALL |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
133 static void time0II(register cyg_uint32 stride) |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
134 { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
135 register cyg_uint32 j,k; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
136 cyg_tick_count_t count0, count1; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
137 cyg_ucount32 t; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
138 register char c; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
139 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
140 count0 = cyg_current_time(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
141 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
142 k = 0; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
143 if ( cyg_test_is_simulator ) |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
144 k = 3960; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
145 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
146 for(; k<4000;k++) { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
147 for(j=0; j<(HAL_DCACHE_SIZE/HAL_DCACHE_LINE_SIZE); j++) { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
148 HAL_ICACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
149 c=m[stride*j]; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
150 } |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
151 } |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
152 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
153 count1 = cyg_current_time(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
154 t = count1 - count0; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
155 diag_printf("stride=%d, time=%d\n", stride, t); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
156 } |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
157 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
158 // ------------------------------------------------------------------------- |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
159 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
160 void time1II(void) |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
161 { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
162 cyg_uint32 i; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
163 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
164 for(i=1; i<=MAX_STRIDE; i+=i) { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
165 time0II(i); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
166 } |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
167 } |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
168 #endif |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
169 // ------------------------------------------------------------------------- |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
170 // With a DCache invalidate in the middle: |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
171 #ifdef HAL_DCACHE_INVALIDATE_ALL |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
172 static void time0DI(register cyg_uint32 stride) |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
173 { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
174 register cyg_uint32 j,k; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
175 cyg_tick_count_t count0, count1; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
176 cyg_ucount32 t; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
177 register char c; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
178 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
179 count0 = cyg_current_time(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
180 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
181 HAL_DCACHE_SYNC(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
182 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
183 k = 0; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
184 if ( cyg_test_is_simulator ) |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
185 k = 3960; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
186 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
187 for(; k<4000;k++) { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
188 for(j=0; j<(HAL_DCACHE_SIZE/HAL_DCACHE_LINE_SIZE); j++) { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
189 HAL_DCACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
190 c=m[stride*j]; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
191 } |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
192 } |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
193 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
194 count1 = cyg_current_time(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
195 t = count1 - count0; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
196 diag_printf("stride=%d, time=%d\n", stride, t); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
197 } |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
198 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
199 // ------------------------------------------------------------------------- |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
200 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
201 void time1DI(void) |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
202 { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
203 cyg_uint32 i; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
204 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
205 for(i=1; i<=MAX_STRIDE; i+=i) { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
206 time0DI(i); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
207 } |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
208 } |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
209 #endif |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
210 // ------------------------------------------------------------------------- |
| 0 | 211 // This test could be improved by counting number of passes possible |
| 212 // in a given number of ticks. | |
| 213 | |
| 214 static void entry0( cyg_addrword_t data ) | |
| 215 { | |
| 2 | 216 register CYG_INTERRUPT_STATE oldints; |
| 217 | |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
218 #ifdef HAL_CACHE_UNIFIED |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
219 |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
220 HAL_DISABLE_INTERRUPTS(oldints); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
221 HAL_DCACHE_PURGE_ALL(); // rely on above definition |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
222 HAL_UCACHE_INVALIDATE_ALL(); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
223 HAL_UCACHE_DISABLE(); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
224 HAL_RESTORE_INTERRUPTS(oldints); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
225 CYG_TEST_INFO("Cache off"); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
226 time1(); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
227 |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
228 HAL_DISABLE_INTERRUPTS(oldints); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
229 HAL_DCACHE_PURGE_ALL(); // rely on above definition |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
230 HAL_UCACHE_INVALIDATE_ALL(); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
231 HAL_UCACHE_ENABLE(); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
232 HAL_RESTORE_INTERRUPTS(oldints); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
233 CYG_TEST_INFO("Cache on"); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
234 time1(); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
235 |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
236 #else // HAL_CACHE_UNIFIED |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
237 |
| 2 | 238 HAL_DISABLE_INTERRUPTS(oldints); |
| 0 | 239 HAL_DCACHE_PURGE_ALL(); |
| 240 HAL_ICACHE_INVALIDATE_ALL(); | |
| 241 HAL_DCACHE_INVALIDATE_ALL(); | |
| 242 HAL_ICACHE_DISABLE(); | |
| 243 HAL_DCACHE_DISABLE(); | |
| 2 | 244 HAL_RESTORE_INTERRUPTS(oldints); |
| 0 | 245 CYG_TEST_INFO("Dcache off Icache off"); |
| 246 time1(); | |
| 247 | |
| 2 | 248 HAL_DISABLE_INTERRUPTS(oldints); |
| 0 | 249 HAL_DCACHE_PURGE_ALL(); |
| 250 HAL_ICACHE_INVALIDATE_ALL(); | |
| 251 HAL_DCACHE_INVALIDATE_ALL(); | |
| 252 HAL_ICACHE_DISABLE(); | |
| 253 HAL_DCACHE_ENABLE(); | |
| 2 | 254 HAL_RESTORE_INTERRUPTS(oldints); |
| 0 | 255 CYG_TEST_INFO("Dcache on Icache off"); |
| 256 time1(); | |
| 257 | |
| 2 | 258 HAL_DISABLE_INTERRUPTS(oldints); |
| 0 | 259 HAL_DCACHE_PURGE_ALL(); |
| 260 HAL_ICACHE_INVALIDATE_ALL(); | |
| 261 HAL_DCACHE_INVALIDATE_ALL(); | |
| 262 HAL_ICACHE_ENABLE(); | |
| 263 HAL_DCACHE_DISABLE(); | |
| 2 | 264 HAL_RESTORE_INTERRUPTS(oldints); |
| 0 | 265 CYG_TEST_INFO("Dcache off Icache on"); |
| 266 time1(); | |
| 267 | |
| 2 | 268 HAL_DISABLE_INTERRUPTS(oldints); |
| 0 | 269 HAL_DCACHE_PURGE_ALL(); |
| 270 HAL_ICACHE_INVALIDATE_ALL(); | |
| 271 HAL_DCACHE_INVALIDATE_ALL(); | |
| 272 HAL_ICACHE_ENABLE(); | |
| 273 HAL_DCACHE_ENABLE(); | |
| 2 | 274 HAL_RESTORE_INTERRUPTS(oldints); |
| 0 | 275 CYG_TEST_INFO("Dcache on Icache on"); |
| 276 time1(); | |
| 277 | |
| 278 | |
| 2 | 279 HAL_DISABLE_INTERRUPTS(oldints); |
| 0 | 280 HAL_DCACHE_PURGE_ALL(); |
| 281 HAL_ICACHE_INVALIDATE_ALL(); | |
| 282 HAL_DCACHE_INVALIDATE_ALL(); | |
| 283 HAL_ICACHE_DISABLE(); | |
| 284 HAL_DCACHE_DISABLE(); | |
| 2 | 285 HAL_RESTORE_INTERRUPTS(oldints); |
|
24
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
286 CYG_TEST_INFO("Dcache off Icache off (again)"); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
287 time1(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
288 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
289 #if defined(HAL_DCACHE_INVALIDATE_ALL) || defined(HAL_ICACHE_INVALIDATE_ALL) |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
290 HAL_DISABLE_INTERRUPTS(oldints); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
291 HAL_DCACHE_PURGE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
292 HAL_ICACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
293 HAL_DCACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
294 HAL_ICACHE_ENABLE(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
295 HAL_DCACHE_ENABLE(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
296 HAL_RESTORE_INTERRUPTS(oldints); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
297 CYG_TEST_INFO("Dcache on Icache on (again)"); |
| 0 | 298 time1(); |
| 299 | |
|
24
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
300 #ifdef HAL_ICACHE_INVALIDATE_ALL |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
301 HAL_DISABLE_INTERRUPTS(oldints); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
302 HAL_DCACHE_PURGE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
303 HAL_ICACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
304 HAL_DCACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
305 HAL_ICACHE_ENABLE(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
306 HAL_DCACHE_ENABLE(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
307 HAL_RESTORE_INTERRUPTS(oldints); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
308 CYG_TEST_INFO("Dcache on Icache on: invalidate ICache each time"); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
309 time1II(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
310 #endif |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
311 #ifdef HAL_DCACHE_INVALIDATE_ALL |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
312 HAL_DISABLE_INTERRUPTS(oldints); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
313 HAL_DCACHE_PURGE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
314 HAL_ICACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
315 HAL_DCACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
316 HAL_ICACHE_ENABLE(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
317 HAL_DCACHE_ENABLE(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
318 HAL_RESTORE_INTERRUPTS(oldints); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
319 CYG_TEST_INFO("Dcache on Icache on: invalidate DCache (expect bogus times)"); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
320 time1DI(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
321 #endif |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
322 #endif // either INVALIDATE_ALL macro |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
323 |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
324 #endif // HAL_CACHE_UNIFIED |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
325 |
| 0 | 326 CYG_TEST_PASS_FINISH("End of test"); |
| 327 } | |
| 328 | |
| 329 // ------------------------------------------------------------------------- | |
| 330 | |
| 331 void kcache2_main( void ) | |
| 332 { | |
| 333 CYG_TEST_INIT(); | |
| 334 | |
| 335 cyg_thread_create(4, entry0 , (cyg_addrword_t)0, "kcache1", | |
| 2 | 336 (void *)stack[0], STACKSIZE, &thread[0], &thread_obj[0]); |
| 0 | 337 cyg_thread_resume(thread[0]); |
| 338 | |
| 339 cyg_scheduler_start(); | |
| 340 } | |
| 341 | |
| 342 // ------------------------------------------------------------------------- | |
| 343 | |
| 344 externC void | |
| 345 cyg_start( void ) | |
| 346 { | |
| 347 kcache2_main(); | |
| 348 } | |
| 349 | |
| 350 // ------------------------------------------------------------------------- | |
| 351 | |
| 352 #else // def CYGFUN_KERNEL_API_C | |
| 353 #define N_A_MSG "Kernel C API layer disabled" | |
| 354 #endif // def CYGFUN_KERNEL_API_C | |
| 355 #else // def CYGVAR_KERNEL_COUNTERS_CLOCK | |
| 356 #define N_A_MSG "Kernel real-time clock disabled" | |
| 357 #endif // def CYGVAR_KERNEL_COUNTERS_CLOCK | |
| 358 | |
| 359 #ifdef N_A_MSG | |
| 360 externC void | |
| 361 cyg_start( void ) | |
| 362 { | |
| 363 CYG_TEST_INIT(); | |
| 2 | 364 CYG_TEST_NA( N_A_MSG ); |
| 0 | 365 } |
| 366 #endif // N_A_MSG | |
| 367 | |
| 368 // ------------------------------------------------------------------------- | |
| 369 /* EOF kcache1.c */ |
