annotate packages/kernel/current/tests/kcache2.c @ 4:1d7f19c9e4d1 ecos-sw-1999-05-11

Merge from eCos master repository on 1999-05-11-21:11:10-BST
author jlarmour
date Tue, 11 May 1999 14:07:25 +0000
parents 443894e2e912
children 306eee292492
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
1 /*=================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
2 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
3 // kcache2.c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
4 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
5 // Cache feature/timing tests
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
6 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
7 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
8 //####COPYRIGHTBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
9 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
10 // -------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
11 // The contents of this file are subject to the Cygnus eCos Public License
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
12 // Version 1.0 (the "License"); you may not use this file except in
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
14 // http://sourceware.cygnus.com/ecos
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
15 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
16 // Software distributed under the License is distributed on an "AS IS"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
18 // License for the specific language governing rights and limitations under
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
19 // the License.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
20 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
21 // The Original Code is eCos - Embedded Cygnus Operating System, released
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
22 // September 30, 1998.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
23 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
24 // The Initial Developer of the Original Code is Cygnus. Portions created
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
25 // by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
26 // -------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
27 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
28 //####COPYRIGHTEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
29 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
30 //#####DESCRIPTIONBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
31 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
32 // Author(s): jskov, based on kcache1.c by dsm
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
33 // Contributors: jskov
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
34 // Date: 1998-12-10
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
35 // Description: Tests some of the more exotic cache macros.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
36 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
37 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
38
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
39 #include <cyg/hal/hal_arch.h> // CYGNUM_HAL_STACK_SIZE_TYPICAL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
40
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
41 #include <cyg/kernel/kapi.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
42
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
43 #include <cyg/infra/testcase.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
44
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
45 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46 #ifdef CYGFUN_KERNEL_API_C
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48 #include <cyg/infra/diag.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49 #include <cyg/hal/hal_cache.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
50
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
51 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
52
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
53 #define NTHREADS 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
54 #define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
55
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
56 // The following are defaults for loop variables. Note they will be overriden
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
57 // on simulator targets, where detected - there is no point testing a cache
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
58 // which doesn't exist :-).
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60 #define TEST_DZERO_LOOPS 5000 // default number of loops for test_dzero()
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61 #define TIME_ILOCK_LOOPS 10000 // default number of loops for time_ilock()
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62 #define TIME_DLOCK_LOOPS 10000 // default number of loops for time_dlock()
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
63
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
64
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
65 static cyg_handle_t thread[NTHREADS];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
66
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
67 static cyg_thread thread_obj[NTHREADS];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
68 static char stack[NTHREADS][STACKSIZE];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
69
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
70 #define MAXSIZE 1<<18
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
71
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
72 volatile char m[MAXSIZE];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
73
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
74 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
75 // Test of data cache zero.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
76 // o Timing comparison with instructions doing the same amount of work.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77 // o Check that area cleared with the DCACHE_ZERO macro contains zeros.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78 #ifdef HAL_DCACHE_ZERO
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79 static void test_dzero(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
80 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81 register cyg_uint32 k, i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
82 cyg_tick_count_t count0, count1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83 cyg_ucount32 t;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 volatile cyg_uint32* aligned_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85 volatile cyg_uint32* p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86 register CYG_INTERRUPT_STATE oldints;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
87 cyg_ucount32 test_dzero_loops = TEST_DZERO_LOOPS;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
88
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
89 CYG_TEST_INFO("Data cache zero");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
90
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
91 if (cyg_test_is_simulator)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
92 test_dzero_loops=10;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
93
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94 aligned_p = (volatile cyg_uint32*)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
95 (((unsigned long) &m[HAL_DCACHE_LINE_SIZE*2])
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
96 & ~(HAL_DCACHE_LINE_SIZE-1));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
97
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98 // Time with conventional instructions.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
99 HAL_DISABLE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101 HAL_DCACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
102 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
103 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
104 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106 count0 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
107 for (k = 0; k < test_dzero_loops; k++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
108 p = aligned_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
109 for (i = 0; i < HAL_DCACHE_SETS; i++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
110 #if (16 == HAL_DCACHE_LINE_SIZE)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
111 *p++ = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
112 *p++ = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
113 *p++ = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
114 *p++ = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
115 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
116 #error "Not defined for this cache line size."
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
117 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
118 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
119
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
120 HAL_DISABLE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
122 HAL_DCACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
123 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
124 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
125 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
126 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
127 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
128 count1 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
129 t = count1 - count0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
130 diag_printf("time with instructions: %d\n", t);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
131
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
132 // Initialize the area with non-zero so we can check whether
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
133 // the macro cleared the area properly.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
134 p = aligned_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
135 for (i = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
136 i < HAL_DCACHE_SETS*HAL_DCACHE_LINE_SIZE/sizeof(cyg_uint32);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
137 i++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
138 *p++ = 0xdeadbeef;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
139 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141 // Time with DCACHE_ZERO.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142 HAL_DISABLE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144 HAL_DCACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
145 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
146 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
147 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149 count0 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
150 for (k = 0; k < test_dzero_loops; k++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
151 HAL_DCACHE_ZERO(aligned_p, HAL_DCACHE_SETS*HAL_DCACHE_LINE_SIZE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
152
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153 HAL_DISABLE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
154 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
155 HAL_DCACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
156 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
157 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
158 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
159 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
160 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
161 count1 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
162 t = count1 - count0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
163 diag_printf("time with HAL_DCACHE_ZERO: %d\n", t);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
164
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
165 // Verify that the area was actually cleared.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
166 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
167 cyg_uint32 d;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
168
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
169 d = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
170 p = aligned_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
171 for (i = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
172 i < HAL_DCACHE_SETS*HAL_DCACHE_LINE_SIZE/sizeof(cyg_uint32);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
173 i++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
174 d |= *p++;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
176
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
177 CYG_TEST_CHECK(0 == d, "region not properly cleared");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
178 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
179
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
180 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
181 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
182
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
183 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
184 // Test of data cache write hint.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
185 // Just check that the macro compiles.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
186 #ifdef HAL_DCACHE_WRITE_HINT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
187 static void test_dwrite_hint(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
188 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
189 register cyg_uint32 k;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
190 register CYG_INTERRUPT_STATE oldints;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192 CYG_TEST_INFO("Data cache write hint");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
193
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
194 HAL_DISABLE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
195 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
196 HAL_DCACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
198 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
199 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
200 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
201
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202 HAL_DCACHE_WRITE_HINT(&m[HAL_DCACHE_LINE_SIZE*2], 2*HAL_DCACHE_LINE_SIZE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
203 for (k = 0; k < 20; k++);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
204 m[HAL_DCACHE_LINE_SIZE*2] = 42;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
205 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
206 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
207
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
208 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
209 // Test of data cache read hint.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
210 // Just check that the macro compiles.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
211 #ifdef HAL_DCACHE_READ_HINT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
212 static void test_dread_hint(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214 register char c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215 register cyg_uint32 k;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 register CYG_INTERRUPT_STATE oldints;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218 CYG_TEST_INFO("Data cache read hint");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
219
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
220 HAL_DISABLE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 HAL_DCACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
224 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 HAL_DCACHE_READ_HINT(&m[HAL_DCACHE_LINE_SIZE*2], 2*HAL_DCACHE_LINE_SIZE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229 for (k = 0; k < 20; k++);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
230 c = m[HAL_DCACHE_LINE_SIZE*2];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
231 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
233
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 // Test of data cache line store.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 // Just check that the macro compiles.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 #ifdef HAL_DCACHE_STORE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 static void test_dstore(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240 volatile cyg_uint8* aligned_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241 cyg_int32 i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
242 register CYG_INTERRUPT_STATE oldints;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
244 CYG_TEST_INFO("Data cache store region");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
245
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246 for (i = 0; i < HAL_DCACHE_LINE_SIZE*16; i++)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247 m[i] = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
249 HAL_DISABLE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251 HAL_DCACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
252 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
253 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
254 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 aligned_p = (volatile cyg_uint8*)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258 (((unsigned long) &m[HAL_DCACHE_LINE_SIZE*2])
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
259 & ~(HAL_DCACHE_LINE_SIZE-1));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
260
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
261 aligned_p[0] = 42;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
262
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
263 HAL_DCACHE_STORE(aligned_p, HAL_DCACHE_LINE_SIZE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
264 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
265 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
266
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
267 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
268 // Test of data cache line flush.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269 // o Requires write-back cache.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
270 // o Check that flushed data is written to memory.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
271 // o Simple range check of macro.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
272 #ifdef HAL_DCACHE_FLUSH
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
273 static void test_dflush(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
274 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
275 volatile cyg_uint8* aligned_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
276 cyg_int32 i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
277 register CYG_INTERRUPT_STATE oldints;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
278
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
279 CYG_TEST_INFO("Data cache flush region");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
280
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
281 for (i = 0; i < HAL_DCACHE_LINE_SIZE*16; i++)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
282 m[i] = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
283
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
284 HAL_DISABLE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
285 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
286 HAL_DCACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
287 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
288 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
289 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
290 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
291
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
292 aligned_p = (volatile cyg_uint8*)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
293 (((unsigned long) &m[HAL_DCACHE_LINE_SIZE*2])
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
294 & ~(HAL_DCACHE_LINE_SIZE-1));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
295
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
296 aligned_p[0] = 42;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
297 aligned_p[HAL_DCACHE_LINE_SIZE] = 43;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
298
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
299 HAL_DCACHE_FLUSH(aligned_p, HAL_DCACHE_LINE_SIZE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
300
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
301 HAL_DCACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
302
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
303 CYG_TEST_CHECK(42 == aligned_p[0],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
304 "memory didn't contain flushed data");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
305 CYG_TEST_CHECK(0 == aligned_p[HAL_DCACHE_LINE_SIZE],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
306 "flushed beyond region");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
307
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
308 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
309
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
310 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
311 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
312
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
313 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
314 // Test of data cache line invalidate.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
315 // o Requires write-back cache.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
316 // o Check that invalidated data is not written to memory and is invalidated
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
317 // in the cache.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
318 // o Simple range check of macro.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
319 #ifdef HAL_DCACHE_INVALIDATE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
320 static void test_dinvalidate(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
321 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
322 volatile cyg_uint8* aligned_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
323 cyg_int32 i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
324 register CYG_INTERRUPT_STATE oldints;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
325
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
326 CYG_TEST_INFO("Data cache invalidate region");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
327
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
328 for (i = 0; i < HAL_DCACHE_LINE_SIZE*16; i++)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
329 m[i] = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
330
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
331 HAL_DISABLE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
332 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
333 HAL_DCACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
334 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
335 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
336 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
337 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
338
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
339 aligned_p = (volatile cyg_uint8*)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
340 (((unsigned long) &m[HAL_DCACHE_LINE_SIZE*2])
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
341 & ~(HAL_DCACHE_LINE_SIZE-1));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
342
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
343 aligned_p[0] = 43;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
344 aligned_p[HAL_DCACHE_LINE_SIZE-1] = 43;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
345
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
346 aligned_p[HAL_DCACHE_LINE_SIZE] = 42;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
347
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
348 HAL_DCACHE_INVALIDATE(aligned_p, HAL_DCACHE_LINE_SIZE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
349
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
350 CYG_TEST_CHECK(0 == aligned_p[0] &&
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
351 0 == aligned_p[HAL_DCACHE_LINE_SIZE-1],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
352 "cache/memory contained invalidated data");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
353 CYG_TEST_CHECK(42 == aligned_p[HAL_DCACHE_LINE_SIZE],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
354 "invalidated beyond range");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
355 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
356 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
357
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
358 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
359 // Test of instruction cache locking.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
360 // o Time difference between repeatedly executing a bunch of instructions
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
361 // with and without locking.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
362 #ifdef HAL_ICACHE_LOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
363 static void iloop(unsigned long* start, unsigned long* end)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
364 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
365 register char c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
366 register CYG_INTERRUPT_STATE oldints;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
367
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
368 label_start:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
369 // Invalidating shouldn't affect locked lines.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
370 HAL_DISABLE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
371 HAL_ICACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
372 HAL_ICACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
373 HAL_ICACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
374 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
375
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
376 c = m[HAL_DCACHE_LINE_SIZE*0];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
377 c = m[HAL_DCACHE_LINE_SIZE*1];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
378 c = m[HAL_DCACHE_LINE_SIZE*2];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
379 c = m[HAL_DCACHE_LINE_SIZE*3];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
380 c = m[HAL_DCACHE_LINE_SIZE*4];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
381 c = m[HAL_DCACHE_LINE_SIZE*5];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
382 c = m[HAL_DCACHE_LINE_SIZE*6];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
383 c = m[HAL_DCACHE_LINE_SIZE*7];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
384 c = m[HAL_DCACHE_LINE_SIZE*8];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
385 c = m[HAL_DCACHE_LINE_SIZE*9];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
386 c = m[HAL_DCACHE_LINE_SIZE*10];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
387 c = m[HAL_DCACHE_LINE_SIZE*11];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
388 c = m[HAL_DCACHE_LINE_SIZE*12];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
389 c = m[HAL_DCACHE_LINE_SIZE*13];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
390 c = m[HAL_DCACHE_LINE_SIZE*14];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
391 c = m[HAL_DCACHE_LINE_SIZE*15];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
392 c = m[HAL_DCACHE_LINE_SIZE*16];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
393 c = m[HAL_DCACHE_LINE_SIZE*17];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
394 c = m[HAL_DCACHE_LINE_SIZE*18];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
395 c = m[HAL_DCACHE_LINE_SIZE*19];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
396 c = m[HAL_DCACHE_LINE_SIZE*20];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
397 c = m[HAL_DCACHE_LINE_SIZE*21];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
398 c = m[HAL_DCACHE_LINE_SIZE*22];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
399 c = m[HAL_DCACHE_LINE_SIZE*23];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
400 c = m[HAL_DCACHE_LINE_SIZE*24];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
401 c = m[HAL_DCACHE_LINE_SIZE*25];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
402 c = m[HAL_DCACHE_LINE_SIZE*26];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
403 c = m[HAL_DCACHE_LINE_SIZE*27];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
404 c = m[HAL_DCACHE_LINE_SIZE*28];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
405 c = m[HAL_DCACHE_LINE_SIZE*29];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
406 c = m[HAL_DCACHE_LINE_SIZE*30];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
407 c = m[HAL_DCACHE_LINE_SIZE*31];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
408 c = m[HAL_DCACHE_LINE_SIZE*32];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
409 c = m[HAL_DCACHE_LINE_SIZE*33];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
410 c = m[HAL_DCACHE_LINE_SIZE*34];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
411 c = m[HAL_DCACHE_LINE_SIZE*35];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
412 c = m[HAL_DCACHE_LINE_SIZE*36];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
413 c = m[HAL_DCACHE_LINE_SIZE*37];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
414 c = m[HAL_DCACHE_LINE_SIZE*38];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
415 c = m[HAL_DCACHE_LINE_SIZE*39];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
416 c = m[HAL_DCACHE_LINE_SIZE*40];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
417 c = m[HAL_DCACHE_LINE_SIZE*41];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
418 c = m[HAL_DCACHE_LINE_SIZE*42];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
419 c = m[HAL_DCACHE_LINE_SIZE*43];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
420 c = m[HAL_DCACHE_LINE_SIZE*44];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
421 c = m[HAL_DCACHE_LINE_SIZE*45];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
422 c = m[HAL_DCACHE_LINE_SIZE*46];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
423 c = m[HAL_DCACHE_LINE_SIZE*47];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
424 c = m[HAL_DCACHE_LINE_SIZE*48];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
425 c = m[HAL_DCACHE_LINE_SIZE*49];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
426 c = m[HAL_DCACHE_LINE_SIZE*50];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
427 c = m[HAL_DCACHE_LINE_SIZE*51];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
428 c = m[HAL_DCACHE_LINE_SIZE*52];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
429 c = m[HAL_DCACHE_LINE_SIZE*53];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
430 c = m[HAL_DCACHE_LINE_SIZE*54];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
431 c = m[HAL_DCACHE_LINE_SIZE*55];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
432 c = m[HAL_DCACHE_LINE_SIZE*56];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
433 c = m[HAL_DCACHE_LINE_SIZE*57];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
434 c = m[HAL_DCACHE_LINE_SIZE*58];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
435 c = m[HAL_DCACHE_LINE_SIZE*59];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
436 c = m[HAL_DCACHE_LINE_SIZE*60];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
437 c = m[HAL_DCACHE_LINE_SIZE*61];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
438 c = m[HAL_DCACHE_LINE_SIZE*62];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
439 c = m[HAL_DCACHE_LINE_SIZE*63];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
440
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
441 label_end:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
442
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
443 *start = (unsigned long) &&label_start;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
444 *end = (unsigned long) &&label_end;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
445 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
446
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
447 static void time_ilock(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
448 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
449 register cyg_ucount32 k;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
450 cyg_tick_count_t count0, count1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
451 cyg_ucount32 t;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
452 unsigned long start, end;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
453 register cyg_ucount32 time_ilock_loops = TIME_ILOCK_LOOPS;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
454
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
455 CYG_TEST_INFO("Instruction cache lock");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
456
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
457 if (cyg_test_is_simulator)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
458 time_ilock_loops = 10;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
459
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
460 count0 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
461 for (k = 0; k < time_ilock_loops; k++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
462 iloop(&start, &end);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
463 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
464 count1 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
465 t = count1 - count0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
466 diag_printf("time without lock: %d\n", t);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
467
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
468 HAL_ICACHE_LOCK(start, end-start);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
469
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
470 count0 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
471 for (k = 0; k < time_ilock_loops; k++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
472 iloop(&start, &end);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
473 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
474 count1 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
475 t = count1 - count0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
476 diag_printf("time with lock: %d\n", t);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
477
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
478 HAL_ICACHE_UNLOCK(start, end-start);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
479 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
480 #endif // ifdef HAL_ICACHE_LOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
481
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
482 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
483 // Test of data cache locking.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
484 // o Time difference between repeatedly accessing a memory region
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
485 // with and without locking.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
486 #ifdef HAL_DCACHE_LOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
487 static void dloop(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
488 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
489 register cyg_uint32 j;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
490 register char c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
491 register CYG_INTERRUPT_STATE oldints;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
492
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
493 HAL_DISABLE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
494 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
495 HAL_DCACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
496 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
497 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
498 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
499 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
500 for (j = 0; j < HAL_DCACHE_SETS; j++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
501 c = m[HAL_DCACHE_LINE_SIZE*j];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
502 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
503 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
504
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
505 static void time_dlock(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
506 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
507 register cyg_ucount32 k;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
508 cyg_tick_count_t count0, count1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
509 cyg_ucount32 t;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
510 register cyg_ucount32 time_dlock_loops = TIME_DLOCK_LOOPS;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
511
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
512 CYG_TEST_INFO("Data cache lock");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
513
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
514 if (cyg_test_is_simulator)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
515 time_dlock_loops = 10;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
516
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
517 count0 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
518 for (k = 0; k < time_dlock_loops; k++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
519 dloop();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
520 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
521 count1 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
522 t = count1 - count0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
523 diag_printf("time without lock: %d\n", t);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
524
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
525 HAL_DCACHE_LOCK(&m[0], HAL_DCACHE_SETS*HAL_DCACHE_LINE_SIZE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
526
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
527 count0 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
528 for (k = 0; k < time_dlock_loops; k++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
529 dloop();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
530 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
531 count1 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
532 t = count1 - count0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
533 diag_printf("time with lock: %d\n", t);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
534
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
535 HAL_DCACHE_UNLOCK(&m[0], HAL_DCACHE_SETS*HAL_DCACHE_LINE_SIZE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
536 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
537 #endif // ifdef HAL_DCACHE_LOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
538
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
539 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
540 static void entry0( cyg_addrword_t data )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
541 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
542 #ifdef HAL_DCACHE_LOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
543 time_dlock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
544 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
545 #ifdef HAL_ICACHE_LOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
546 time_ilock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
547 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
548 #ifdef HAL_DCACHE_STORE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
549 test_dstore();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
550 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
551 #ifdef HAL_DCACHE_READ_HINT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
552 test_dread_hint();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
553 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
554 #ifdef HAL_DCACHE_WRITE_HINT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
555 test_dwrite_hint();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
556 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
557 #ifdef HAL_DCACHE_ZERO
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
558 test_dzero();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
559 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
560
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
561 // The below tests only work on a copy-back cache.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
562 if (0) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
563 #ifdef HAL_DCACHE_FLUSH
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
564 test_dflush();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
565 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
566 #ifdef HAL_DCACHE_INVALIDATE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
567 test_dinvalidate();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
568 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
569 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
570
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
571 CYG_TEST_PASS_FINISH("End of test");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
572 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
573
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
574 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
575
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
576 void kcache2_main( void )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
577 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
578 CYG_TEST_INIT();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
579
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
580 cyg_thread_create(4, entry0 , (cyg_addrword_t)0, "kcache2",
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
581 (void *)stack[0], STACKSIZE, &thread[0], &thread_obj[0]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
582 cyg_thread_resume(thread[0]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
583
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
584 cyg_scheduler_start();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
585 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
586
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
587 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
588
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
589 externC void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
590 cyg_start( void )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
591 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
592 kcache2_main();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
593 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
594
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
595 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
596
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
597 #else // def CYGFUN_KERNEL_API_C
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
598 #define N_A_MSG "Kernel C API layer disabled"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
599 #endif // def CYGFUN_KERNEL_API_C
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
600 #else // def CYGVAR_KERNEL_COUNTERS_CLOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
601 #define N_A_MSG "Kernel real-time clock disabled"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
602 #endif // def CYGVAR_KERNEL_COUNTERS_CLOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
603
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
604 #ifdef N_A_MSG
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
605 externC void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
606 cyg_start( void )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
607 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
608 CYG_TEST_INIT();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
609 CYG_TEST_NA( N_A_MSG );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
610 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
611 #endif // N_A_MSG
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
612
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
613 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
614 /* EOF kcache2.c */