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