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