Mercurial > ecos-v2_0-branch
annotate packages/kernel/current/tests/kcache1.c @ 78:59d97b6ba612 ecos-sw-2000-03-28
Merge from eCos master repository on 2000-03-28-19:50:47-BST
| author | jlarmour |
|---|---|
| date | Tue, 28 Mar 2000 20:13:29 +0000 |
| parents | 435cced73e2f |
| children | 489eb5632bc3 |
| 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 | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
76
diff
changeset
|
46 #ifdef HAL_DCACHE_SIZE |
| 0 | 47 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK |
| 48 #ifdef CYGFUN_KERNEL_API_C | |
| 49 | |
| 50 #include <cyg/infra/diag.h> | |
| 51 #include <cyg/hal/hal_cache.h> | |
| 2 | 52 #include <cyg/hal/hal_intr.h> |
| 0 | 53 |
| 54 // ------------------------------------------------------------------------- | |
| 55 // If the HAL does not supply this, we supply our own version | |
| 56 | |
|
44
41bd4f3a90de
Merge from eCos master repository on 1999-10-08-07:47:04-BST
jlarmour
parents:
34
diff
changeset
|
57 #ifndef HAL_DCACHE_PURGE_ALL |
|
41bd4f3a90de
Merge from eCos master repository on 1999-10-08-07:47:04-BST
jlarmour
parents:
34
diff
changeset
|
58 # ifdef HAL_DCACHE_SYNC |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
59 |
|
44
41bd4f3a90de
Merge from eCos master repository on 1999-10-08-07:47:04-BST
jlarmour
parents:
34
diff
changeset
|
60 #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
|
61 |
|
44
41bd4f3a90de
Merge from eCos master repository on 1999-10-08-07:47:04-BST
jlarmour
parents:
34
diff
changeset
|
62 # else |
| 0 | 63 |
| 64 static cyg_uint8 dca[HAL_DCACHE_SIZE + HAL_DCACHE_LINE_SIZE*2]; | |
| 65 | |
| 66 #define HAL_DCACHE_PURGE_ALL() \ | |
| 67 CYG_MACRO_START \ | |
| 68 volatile cyg_uint8 *addr = &dca[HAL_DCACHE_LINE_SIZE]; \ | |
| 69 volatile cyg_uint8 tmp = 0; \ | |
| 70 int i; \ | |
| 71 for( i = 0; i < HAL_DCACHE_SIZE; i += HAL_DCACHE_LINE_SIZE ) \ | |
| 72 { \ | |
| 73 tmp = addr[i]; \ | |
| 74 } \ | |
| 75 CYG_MACRO_END | |
| 76 | |
|
44
41bd4f3a90de
Merge from eCos master repository on 1999-10-08-07:47:04-BST
jlarmour
parents:
34
diff
changeset
|
77 # endif |
| 0 | 78 #endif |
| 79 | |
| 80 // ------------------------------------------------------------------------- | |
| 81 | |
| 82 #define NTHREADS 1 | |
| 2 | 83 #define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL |
| 0 | 84 |
| 85 static cyg_handle_t thread[NTHREADS]; | |
| 86 | |
| 87 static cyg_thread thread_obj[NTHREADS]; | |
| 88 static char stack[NTHREADS][STACKSIZE]; | |
| 89 | |
| 2 | 90 #ifndef MAX_STRIDE |
| 91 #define MAX_STRIDE 64 | |
| 92 #endif | |
| 93 | |
|
46
797268ecc331
Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents:
44
diff
changeset
|
94 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
|
95 |
| 0 | 96 // ------------------------------------------------------------------------- |
| 97 | |
| 98 static void time0(register cyg_uint32 stride) | |
| 99 { | |
| 100 register cyg_uint32 j,k; | |
| 101 cyg_tick_count_t count0, count1; | |
| 102 cyg_ucount32 t; | |
| 103 register char c; | |
| 104 | |
| 105 count0 = cyg_current_time(); | |
| 106 | |
| 2 | 107 k = 0; |
| 108 if ( cyg_test_is_simulator ) | |
| 109 k = 3960; | |
| 110 | |
| 111 for(; k<4000;k++) { | |
| 0 | 112 for(j=0; j<(HAL_DCACHE_SIZE/HAL_DCACHE_LINE_SIZE); j++) { |
| 113 c=m[stride*j]; | |
| 114 } | |
| 115 } | |
| 116 | |
| 117 count1 = cyg_current_time(); | |
| 118 t = count1 - count0; | |
| 119 diag_printf("stride=%d, time=%d\n", stride, t); | |
| 120 } | |
| 121 | |
| 122 // ------------------------------------------------------------------------- | |
| 123 | |
| 124 void time1(void) | |
| 125 { | |
| 126 cyg_uint32 i; | |
| 127 | |
| 2 | 128 for(i=1; i<=MAX_STRIDE; i+=i) { |
| 0 | 129 time0(i); |
| 130 } | |
| 131 } | |
| 132 | |
| 133 // ------------------------------------------------------------------------- | |
|
24
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
134 // 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
|
135 #ifdef HAL_ICACHE_INVALIDATE_ALL |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
136 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
|
137 { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
138 register cyg_uint32 j,k; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
139 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
|
140 cyg_ucount32 t; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
141 register char c; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
142 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
143 count0 = cyg_current_time(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
144 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
145 k = 0; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
146 if ( cyg_test_is_simulator ) |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
147 k = 3960; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
148 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
149 for(; k<4000;k++) { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
150 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
|
151 HAL_ICACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
152 c=m[stride*j]; |
|
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 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
156 count1 = cyg_current_time(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
157 t = count1 - count0; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
158 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
|
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 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
163 void time1II(void) |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
164 { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
165 cyg_uint32 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 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
|
168 time0II(i); |
|
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 } |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
171 #endif |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
172 // ------------------------------------------------------------------------- |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
173 // 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
|
174 #ifdef HAL_DCACHE_INVALIDATE_ALL |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
175 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
|
176 { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
177 register cyg_uint32 j,k; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
178 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
|
179 cyg_ucount32 t; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
180 register char c; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
181 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
182 count0 = cyg_current_time(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
183 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
184 HAL_DCACHE_SYNC(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
185 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
186 k = 0; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
187 if ( cyg_test_is_simulator ) |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
188 k = 3960; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
189 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
190 for(; k<4000;k++) { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
191 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
|
192 HAL_DCACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
193 c=m[stride*j]; |
|
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 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
197 count1 = cyg_current_time(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
198 t = count1 - count0; |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
199 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
|
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 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
204 void time1DI(void) |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
205 { |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
206 cyg_uint32 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 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
|
209 time0DI(i); |
|
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 } |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
212 #endif |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
213 // ------------------------------------------------------------------------- |
| 0 | 214 // This test could be improved by counting number of passes possible |
| 215 // in a given number of ticks. | |
| 216 | |
| 217 static void entry0( cyg_addrword_t data ) | |
| 218 { | |
| 2 | 219 register CYG_INTERRUPT_STATE oldints; |
| 220 | |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
221 #ifdef HAL_CACHE_UNIFIED |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
222 |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
223 HAL_DISABLE_INTERRUPTS(oldints); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
224 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
|
225 HAL_UCACHE_INVALIDATE_ALL(); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
226 HAL_UCACHE_DISABLE(); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
227 HAL_RESTORE_INTERRUPTS(oldints); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
228 CYG_TEST_INFO("Cache off"); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
229 time1(); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
230 |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
231 HAL_DISABLE_INTERRUPTS(oldints); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
232 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
|
233 HAL_UCACHE_INVALIDATE_ALL(); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
234 HAL_UCACHE_ENABLE(); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
235 HAL_RESTORE_INTERRUPTS(oldints); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
236 CYG_TEST_INFO("Cache on"); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
237 time1(); |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
238 |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
239 #else // HAL_CACHE_UNIFIED |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
240 |
| 2 | 241 HAL_DISABLE_INTERRUPTS(oldints); |
| 0 | 242 HAL_DCACHE_PURGE_ALL(); |
| 243 HAL_ICACHE_INVALIDATE_ALL(); | |
| 244 HAL_DCACHE_INVALIDATE_ALL(); | |
| 245 HAL_ICACHE_DISABLE(); | |
| 246 HAL_DCACHE_DISABLE(); | |
| 2 | 247 HAL_RESTORE_INTERRUPTS(oldints); |
| 0 | 248 CYG_TEST_INFO("Dcache off Icache off"); |
| 249 time1(); | |
| 250 | |
| 2 | 251 HAL_DISABLE_INTERRUPTS(oldints); |
| 0 | 252 HAL_DCACHE_PURGE_ALL(); |
| 253 HAL_ICACHE_INVALIDATE_ALL(); | |
| 254 HAL_DCACHE_INVALIDATE_ALL(); | |
| 255 HAL_ICACHE_DISABLE(); | |
| 256 HAL_DCACHE_ENABLE(); | |
| 2 | 257 HAL_RESTORE_INTERRUPTS(oldints); |
| 0 | 258 CYG_TEST_INFO("Dcache on Icache off"); |
| 259 time1(); | |
| 260 | |
| 2 | 261 HAL_DISABLE_INTERRUPTS(oldints); |
| 0 | 262 HAL_DCACHE_PURGE_ALL(); |
| 263 HAL_ICACHE_INVALIDATE_ALL(); | |
| 264 HAL_DCACHE_INVALIDATE_ALL(); | |
| 265 HAL_ICACHE_ENABLE(); | |
| 266 HAL_DCACHE_DISABLE(); | |
| 2 | 267 HAL_RESTORE_INTERRUPTS(oldints); |
| 0 | 268 CYG_TEST_INFO("Dcache off Icache on"); |
| 269 time1(); | |
| 270 | |
| 2 | 271 HAL_DISABLE_INTERRUPTS(oldints); |
| 0 | 272 HAL_DCACHE_PURGE_ALL(); |
| 273 HAL_ICACHE_INVALIDATE_ALL(); | |
| 274 HAL_DCACHE_INVALIDATE_ALL(); | |
| 275 HAL_ICACHE_ENABLE(); | |
| 276 HAL_DCACHE_ENABLE(); | |
| 2 | 277 HAL_RESTORE_INTERRUPTS(oldints); |
| 0 | 278 CYG_TEST_INFO("Dcache on Icache on"); |
| 279 time1(); | |
| 280 | |
| 281 | |
| 2 | 282 HAL_DISABLE_INTERRUPTS(oldints); |
| 0 | 283 HAL_DCACHE_PURGE_ALL(); |
| 284 HAL_ICACHE_INVALIDATE_ALL(); | |
| 285 HAL_DCACHE_INVALIDATE_ALL(); | |
| 286 HAL_ICACHE_DISABLE(); | |
| 287 HAL_DCACHE_DISABLE(); | |
| 2 | 288 HAL_RESTORE_INTERRUPTS(oldints); |
|
24
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
289 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
|
290 time1(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
291 |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
292 #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
|
293 HAL_DISABLE_INTERRUPTS(oldints); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
294 HAL_DCACHE_PURGE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
295 HAL_ICACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
296 HAL_DCACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
297 HAL_ICACHE_ENABLE(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
298 HAL_DCACHE_ENABLE(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
299 HAL_RESTORE_INTERRUPTS(oldints); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
300 CYG_TEST_INFO("Dcache on Icache on (again)"); |
| 0 | 301 time1(); |
| 302 | |
|
34
29bc183297e1
Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
24
diff
changeset
|
303 #if defined(CYGPKG_HAL_MIPS) |
|
29bc183297e1
Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
24
diff
changeset
|
304 // 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
|
305 // 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
|
306 // 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
|
307 // 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
|
308 // 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
|
309 // under a simulator. |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
310 // If the target actually is a simulator, skip the below - it's very |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
311 // slow on the simulator, even with reduced loop counts. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
312 if (cyg_test_is_simulator) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
313 CYG_TEST_PASS_FINISH("End of test"); |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
314 |
|
34
29bc183297e1
Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
24
diff
changeset
|
315 cyg_test_is_simulator = 1; |
|
29bc183297e1
Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
24
diff
changeset
|
316 #endif |
|
29bc183297e1
Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
24
diff
changeset
|
317 |
|
24
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
318 #ifdef HAL_ICACHE_INVALIDATE_ALL |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
319 HAL_DISABLE_INTERRUPTS(oldints); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
320 HAL_DCACHE_PURGE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
321 HAL_ICACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
322 HAL_DCACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
323 HAL_ICACHE_ENABLE(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
324 HAL_DCACHE_ENABLE(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
325 HAL_RESTORE_INTERRUPTS(oldints); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
326 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
|
327 time1II(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
328 #endif |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
329 #ifdef 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_DISABLE_INTERRUPTS(oldints); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
331 HAL_DCACHE_PURGE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
332 HAL_ICACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
333 HAL_DCACHE_INVALIDATE_ALL(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
334 HAL_ICACHE_ENABLE(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
335 HAL_DCACHE_ENABLE(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
336 HAL_RESTORE_INTERRUPTS(oldints); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
337 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
|
338 time1DI(); |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
339 #endif |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
340 #endif // either INVALIDATE_ALL macro |
|
306eee292492
Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents:
10
diff
changeset
|
341 |
|
10
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
342 #endif // HAL_CACHE_UNIFIED |
|
d3fbcdfa1b2f
Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents:
2
diff
changeset
|
343 |
| 0 | 344 CYG_TEST_PASS_FINISH("End of test"); |
| 345 } | |
| 346 | |
| 347 // ------------------------------------------------------------------------- | |
| 348 | |
| 349 void kcache2_main( void ) | |
| 350 { | |
| 351 CYG_TEST_INIT(); | |
| 352 | |
| 353 cyg_thread_create(4, entry0 , (cyg_addrword_t)0, "kcache1", | |
| 2 | 354 (void *)stack[0], STACKSIZE, &thread[0], &thread_obj[0]); |
| 0 | 355 cyg_thread_resume(thread[0]); |
| 356 | |
| 357 cyg_scheduler_start(); | |
| 358 } | |
| 359 | |
| 360 // ------------------------------------------------------------------------- | |
| 361 | |
| 362 externC void | |
| 363 cyg_start( void ) | |
| 364 { | |
| 365 kcache2_main(); | |
| 366 } | |
| 367 | |
| 368 // ------------------------------------------------------------------------- | |
| 369 | |
| 370 #else // def CYGFUN_KERNEL_API_C | |
| 371 #define N_A_MSG "Kernel C API layer disabled" | |
| 372 #endif // def CYGFUN_KERNEL_API_C | |
| 373 #else // def CYGVAR_KERNEL_COUNTERS_CLOCK | |
| 374 #define N_A_MSG "Kernel real-time clock disabled" | |
| 375 #endif // def CYGVAR_KERNEL_COUNTERS_CLOCK | |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
76
diff
changeset
|
376 #else // def HAL_DCACHE_SIZE |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
76
diff
changeset
|
377 #define N_A_MSG "No caches defined" |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
76
diff
changeset
|
378 #endif // def HAL_DCACHE_SIZE |
| 0 | 379 |
| 380 #ifdef N_A_MSG | |
| 381 externC void | |
| 382 cyg_start( void ) | |
| 383 { | |
| 384 CYG_TEST_INIT(); | |
| 2 | 385 CYG_TEST_NA( N_A_MSG ); |
| 0 | 386 } |
| 387 #endif // N_A_MSG | |
| 388 | |
| 389 // ------------------------------------------------------------------------- | |
| 390 /* EOF kcache1.c */ |
