annotate packages/kernel/current/tests/kcache2.c @ 64:c38311975d4f ecos-sw-2000-01-28

Merge from eCos master repository on 2000-01-28-04:28:11-GMT
author jlarmour
date Fri, 28 Jan 2000 04:59:39 +0000
parents 306eee292492
children bf00f99aec69
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####
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
diff changeset
9 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
diff changeset
10 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
diff changeset
11 // The contents of this file are subject to the Red Hat eCos Public License
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
diff changeset
12 // Version 1.0 (the "License"); you may not use this file except in
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
diff changeset
14 // http://sourceware.cygnus.com/ecos
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
diff changeset
15 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
diff changeset
16 // Software distributed under the License is distributed on an
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
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: 24
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: 24
diff changeset
19 // the License.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
diff changeset
20 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
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: 24
diff changeset
22 // released September 30, 1998.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
diff changeset
23 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
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: 24
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: 24
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: 24
diff changeset
27 // All Rights Reserved.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
diff changeset
28 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 24
diff changeset
29 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
30 //####COPYRIGHTEND####
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 //#####DESCRIPTIONBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
33 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
34 // Author(s): jskov, based on kcache1.c by dsm
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
35 // Contributors: jskov
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
36 // Date: 1998-12-10
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
37 // Description: Tests some of the more exotic cache macros.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
38 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
39 */
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/hal/hal_arch.h> // CYGNUM_HAL_STACK_SIZE_TYPICAL
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/kernel/kapi.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 #include <cyg/infra/testcase.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48 #ifdef CYGFUN_KERNEL_API_C
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
50 #include <cyg/infra/diag.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
51 #include <cyg/hal/hal_cache.h>
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 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
54
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
55 #define NTHREADS 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
56 #define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
57
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
58 // 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
59 // 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
60 // which doesn't exist :-).
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62 #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
63 #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
64 #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
65
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_handle_t thread[NTHREADS];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
68
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
69 static cyg_thread thread_obj[NTHREADS];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
70 static char stack[NTHREADS][STACKSIZE];
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 #define MAXSIZE 1<<18
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 volatile char m[MAXSIZE];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
75
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
76 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77 // Test of data cache zero.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78 // o Timing comparison with instructions doing the same amount of work.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79 // 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
80 #ifdef HAL_DCACHE_ZERO
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81 static void test_dzero(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
82 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83 register cyg_uint32 k, i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 cyg_tick_count_t count0, count1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85 cyg_ucount32 t;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86 volatile cyg_uint32* aligned_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
87 volatile cyg_uint32* p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
88 register CYG_INTERRUPT_STATE oldints;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
89 cyg_ucount32 test_dzero_loops = TEST_DZERO_LOOPS;
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 CYG_TEST_INFO("Data cache zero");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
92
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
93 if (cyg_test_is_simulator)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94 test_dzero_loops=10;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
95
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
96 aligned_p = (volatile cyg_uint32*)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
97 (((unsigned long) &m[HAL_DCACHE_LINE_SIZE*2])
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98 & ~(HAL_DCACHE_LINE_SIZE-1));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
99
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100 // Time with conventional instructions.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101 HAL_DISABLE_INTERRUPTS(oldints);
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_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
104 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
107 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
108 count0 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
109 for (k = 0; k < test_dzero_loops; k++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
110 p = aligned_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
111 for (i = 0; i < HAL_DCACHE_SETS; i++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
112 #if (16 == HAL_DCACHE_LINE_SIZE)
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 *p++ = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
116 *p++ = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
117 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
118 #error "Not defined for this cache line size."
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
119 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
120 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
122 HAL_DISABLE_INTERRUPTS(oldints);
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_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
125 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
126 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
127 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
128 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
129 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
130 count1 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
131 t = count1 - count0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
132 diag_printf("time with instructions: %d\n", t);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
133
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
134 // Initialize the area with non-zero so we can check whether
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
135 // the macro cleared the area properly.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
136 p = aligned_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
137 for (i = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
138 i < HAL_DCACHE_SETS*HAL_DCACHE_LINE_SIZE/sizeof(cyg_uint32);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
139 i++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140 *p++ = 0xdeadbeef;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143 // Time with DCACHE_ZERO.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144 HAL_DISABLE_INTERRUPTS(oldints);
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_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
147 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
150 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
151 count0 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
152 for (k = 0; k < test_dzero_loops; k++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153 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
154
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
155 HAL_DISABLE_INTERRUPTS(oldints);
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_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
158 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
159 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
160 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
161 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
162 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
163 count1 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
164 t = count1 - count0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
165 diag_printf("time with HAL_DCACHE_ZERO: %d\n", t);
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 // Verify that the area was actually cleared.
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 cyg_uint32 d;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
170
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
171 d = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
172 p = aligned_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
173 for (i = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
174 i < HAL_DCACHE_SETS*HAL_DCACHE_LINE_SIZE/sizeof(cyg_uint32);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175 i++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
176 d |= *p++;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
177 }
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 CYG_TEST_CHECK(0 == d, "region not properly cleared");
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
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 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
184
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
185 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
186 // Test of data cache write hint.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
187 // Just check that the macro compiles.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
188 #ifdef HAL_DCACHE_WRITE_HINT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
189 static void test_dwrite_hint(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
190 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191 register cyg_uint32 k;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192 register CYG_INTERRUPT_STATE oldints;
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 CYG_TEST_INFO("Data cache write hint");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
195
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
196 HAL_DISABLE_INTERRUPTS(oldints);
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_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
199 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
200 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
201 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
203
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
204 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
205 for (k = 0; k < 20; k++);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
206 m[HAL_DCACHE_LINE_SIZE*2] = 42;
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 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
209
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
210 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
211 // Test of data cache read hint.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
212 // Just check that the macro compiles.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213 #ifdef HAL_DCACHE_READ_HINT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214 static void test_dread_hint(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 register char c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 register cyg_uint32 k;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218 register CYG_INTERRUPT_STATE oldints;
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 CYG_TEST_INFO("Data cache read hint");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 HAL_DISABLE_INTERRUPTS(oldints);
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_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
230 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
231 for (k = 0; k < 20; k++);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232 c = m[HAL_DCACHE_LINE_SIZE*2];
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 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 // Test of data cache line store.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 // Just check that the macro compiles.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239 #ifdef HAL_DCACHE_STORE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240 static void test_dstore(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
242 volatile cyg_uint8* aligned_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243 cyg_int32 i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
244 register CYG_INTERRUPT_STATE oldints;
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 CYG_TEST_INFO("Data cache store region");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248 for (i = 0; i < HAL_DCACHE_LINE_SIZE*16; i++)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
249 m[i] = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251 HAL_DISABLE_INTERRUPTS(oldints);
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_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
254 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
259 aligned_p = (volatile cyg_uint8*)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
260 (((unsigned long) &m[HAL_DCACHE_LINE_SIZE*2])
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
261 & ~(HAL_DCACHE_LINE_SIZE-1));
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 aligned_p[0] = 42;
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 HAL_DCACHE_STORE(aligned_p, HAL_DCACHE_LINE_SIZE);
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 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
268
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
270 // Test of data cache line flush.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
271 // o Requires write-back cache.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
272 // o Check that flushed data is written to memory.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
273 // o Simple range check of macro.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
274 #ifdef HAL_DCACHE_FLUSH
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
275 static void test_dflush(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
276 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
277 volatile cyg_uint8* aligned_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
278 cyg_int32 i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
279 register CYG_INTERRUPT_STATE oldints;
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 CYG_TEST_INFO("Data cache flush region");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
282
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
283 for (i = 0; i < HAL_DCACHE_LINE_SIZE*16; i++)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
284 m[i] = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
285
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
286 HAL_DISABLE_INTERRUPTS(oldints);
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_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
289 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
290 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
291 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
292 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
293
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
294 aligned_p = (volatile cyg_uint8*)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
295 (((unsigned long) &m[HAL_DCACHE_LINE_SIZE*2])
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
296 & ~(HAL_DCACHE_LINE_SIZE-1));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
297
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
298 aligned_p[0] = 42;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
299 aligned_p[HAL_DCACHE_LINE_SIZE] = 43;
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_FLUSH(aligned_p, HAL_DCACHE_LINE_SIZE);
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 HAL_DCACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
304
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
305 CYG_TEST_CHECK(42 == aligned_p[0],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
306 "memory didn't contain flushed data");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
307 CYG_TEST_CHECK(0 == aligned_p[HAL_DCACHE_LINE_SIZE],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
308 "flushed beyond region");
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 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
311
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 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
314
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
315 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
316 // Test of data cache line invalidate.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
317 // o Requires write-back cache.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
318 // 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
319 // in the cache.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
320 // o Simple range check of macro.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
321 #ifdef HAL_DCACHE_INVALIDATE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
322 static void test_dinvalidate(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
323 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
324 volatile cyg_uint8* aligned_p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
325 cyg_int32 i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
326 register CYG_INTERRUPT_STATE oldints;
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 CYG_TEST_INFO("Data cache invalidate region");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
329
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
330 for (i = 0; i < HAL_DCACHE_LINE_SIZE*16; i++)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
331 m[i] = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
332
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
333 HAL_DISABLE_INTERRUPTS(oldints);
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_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
336 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
337 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
338 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
339 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
340
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
341 aligned_p = (volatile cyg_uint8*)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
342 (((unsigned long) &m[HAL_DCACHE_LINE_SIZE*2])
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
343 & ~(HAL_DCACHE_LINE_SIZE-1));
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
344
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
345 aligned_p[0] = 43;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
346 aligned_p[HAL_DCACHE_LINE_SIZE-1] = 43;
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 aligned_p[HAL_DCACHE_LINE_SIZE] = 42;
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 HAL_DCACHE_INVALIDATE(aligned_p, HAL_DCACHE_LINE_SIZE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
351
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
352 CYG_TEST_CHECK(0 == aligned_p[0] &&
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
353 0 == aligned_p[HAL_DCACHE_LINE_SIZE-1],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
354 "cache/memory contained invalidated data");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
355 CYG_TEST_CHECK(42 == aligned_p[HAL_DCACHE_LINE_SIZE],
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
356 "invalidated beyond range");
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 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
359
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
360 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
361 // Test of instruction cache locking.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
362 // o Time difference between repeatedly executing a bunch of instructions
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
363 // with and without locking.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
364 #ifdef HAL_ICACHE_LOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
365 static void iloop(unsigned long* start, unsigned long* end)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
366 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
367 register char c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
368 register CYG_INTERRUPT_STATE oldints;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
369
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
370 label_start:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
371 // Invalidating shouldn't affect locked lines.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
372 HAL_DISABLE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
373 HAL_ICACHE_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
374 HAL_ICACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
375 HAL_ICACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
376 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
377
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
378 c = m[HAL_DCACHE_LINE_SIZE*0];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
379 c = m[HAL_DCACHE_LINE_SIZE*1];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
380 c = m[HAL_DCACHE_LINE_SIZE*2];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
381 c = m[HAL_DCACHE_LINE_SIZE*3];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
382 c = m[HAL_DCACHE_LINE_SIZE*4];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
383 c = m[HAL_DCACHE_LINE_SIZE*5];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
384 c = m[HAL_DCACHE_LINE_SIZE*6];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
385 c = m[HAL_DCACHE_LINE_SIZE*7];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
386 c = m[HAL_DCACHE_LINE_SIZE*8];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
387 c = m[HAL_DCACHE_LINE_SIZE*9];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
388 c = m[HAL_DCACHE_LINE_SIZE*10];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
389 c = m[HAL_DCACHE_LINE_SIZE*11];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
390 c = m[HAL_DCACHE_LINE_SIZE*12];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
391 c = m[HAL_DCACHE_LINE_SIZE*13];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
392 c = m[HAL_DCACHE_LINE_SIZE*14];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
393 c = m[HAL_DCACHE_LINE_SIZE*15];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
394 c = m[HAL_DCACHE_LINE_SIZE*16];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
395 c = m[HAL_DCACHE_LINE_SIZE*17];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
396 c = m[HAL_DCACHE_LINE_SIZE*18];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
397 c = m[HAL_DCACHE_LINE_SIZE*19];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
398 c = m[HAL_DCACHE_LINE_SIZE*20];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
399 c = m[HAL_DCACHE_LINE_SIZE*21];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
400 c = m[HAL_DCACHE_LINE_SIZE*22];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
401 c = m[HAL_DCACHE_LINE_SIZE*23];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
402 c = m[HAL_DCACHE_LINE_SIZE*24];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
403 c = m[HAL_DCACHE_LINE_SIZE*25];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
404 c = m[HAL_DCACHE_LINE_SIZE*26];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
405 c = m[HAL_DCACHE_LINE_SIZE*27];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
406 c = m[HAL_DCACHE_LINE_SIZE*28];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
407 c = m[HAL_DCACHE_LINE_SIZE*29];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
408 c = m[HAL_DCACHE_LINE_SIZE*30];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
409 c = m[HAL_DCACHE_LINE_SIZE*31];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
410 c = m[HAL_DCACHE_LINE_SIZE*32];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
411 c = m[HAL_DCACHE_LINE_SIZE*33];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
412 c = m[HAL_DCACHE_LINE_SIZE*34];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
413 c = m[HAL_DCACHE_LINE_SIZE*35];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
414 c = m[HAL_DCACHE_LINE_SIZE*36];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
415 c = m[HAL_DCACHE_LINE_SIZE*37];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
416 c = m[HAL_DCACHE_LINE_SIZE*38];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
417 c = m[HAL_DCACHE_LINE_SIZE*39];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
418 c = m[HAL_DCACHE_LINE_SIZE*40];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
419 c = m[HAL_DCACHE_LINE_SIZE*41];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
420 c = m[HAL_DCACHE_LINE_SIZE*42];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
421 c = m[HAL_DCACHE_LINE_SIZE*43];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
422 c = m[HAL_DCACHE_LINE_SIZE*44];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
423 c = m[HAL_DCACHE_LINE_SIZE*45];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
424 c = m[HAL_DCACHE_LINE_SIZE*46];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
425 c = m[HAL_DCACHE_LINE_SIZE*47];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
426 c = m[HAL_DCACHE_LINE_SIZE*48];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
427 c = m[HAL_DCACHE_LINE_SIZE*49];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
428 c = m[HAL_DCACHE_LINE_SIZE*50];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
429 c = m[HAL_DCACHE_LINE_SIZE*51];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
430 c = m[HAL_DCACHE_LINE_SIZE*52];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
431 c = m[HAL_DCACHE_LINE_SIZE*53];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
432 c = m[HAL_DCACHE_LINE_SIZE*54];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
433 c = m[HAL_DCACHE_LINE_SIZE*55];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
434 c = m[HAL_DCACHE_LINE_SIZE*56];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
435 c = m[HAL_DCACHE_LINE_SIZE*57];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
436 c = m[HAL_DCACHE_LINE_SIZE*58];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
437 c = m[HAL_DCACHE_LINE_SIZE*59];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
438 c = m[HAL_DCACHE_LINE_SIZE*60];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
439 c = m[HAL_DCACHE_LINE_SIZE*61];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
440 c = m[HAL_DCACHE_LINE_SIZE*62];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
441 c = m[HAL_DCACHE_LINE_SIZE*63];
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 label_end:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
444
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
445 *start = (unsigned long) &&label_start;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
446 *end = (unsigned long) &&label_end;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
447 }
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 static void time_ilock(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
450 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
451 register cyg_ucount32 k;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
452 cyg_tick_count_t count0, count1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
453 cyg_ucount32 t;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
454 unsigned long start, end;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
455 register cyg_ucount32 time_ilock_loops = TIME_ILOCK_LOOPS;
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 CYG_TEST_INFO("Instruction cache lock");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
458
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
459 if (cyg_test_is_simulator)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
460 time_ilock_loops = 10;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
461
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
462 count0 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
463 for (k = 0; k < time_ilock_loops; k++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
464 iloop(&start, &end);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
465 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
466 count1 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
467 t = count1 - count0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
468 diag_printf("time without lock: %d\n", t);
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 HAL_ICACHE_LOCK(start, end-start);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
471
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
472 count0 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
473 for (k = 0; k < time_ilock_loops; k++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
474 iloop(&start, &end);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
475 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
476 count1 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
477 t = count1 - count0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
478 diag_printf("time with lock: %d\n", t);
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 HAL_ICACHE_UNLOCK(start, end-start);
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 #endif // ifdef HAL_ICACHE_LOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
483
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
484 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
485 // Test of data cache locking.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
486 // o Time difference between repeatedly accessing a memory region
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
487 // with and without locking.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
488 #ifdef HAL_DCACHE_LOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
489 static void dloop(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
490 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
491 register cyg_uint32 j;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
492 register char c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
493 register CYG_INTERRUPT_STATE oldints;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
494
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
495 HAL_DISABLE_INTERRUPTS(oldints);
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_DISABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
498 HAL_DCACHE_SYNC();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
499 HAL_DCACHE_INVALIDATE_ALL();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
500 HAL_DCACHE_ENABLE();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
501 HAL_RESTORE_INTERRUPTS(oldints);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
502 for (j = 0; j < HAL_DCACHE_SETS; j++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
503 c = m[HAL_DCACHE_LINE_SIZE*j];
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 }
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 static void time_dlock(void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
508 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
509 register cyg_ucount32 k;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
510 cyg_tick_count_t count0, count1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
511 cyg_ucount32 t;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
512 register cyg_ucount32 time_dlock_loops = TIME_DLOCK_LOOPS;
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 CYG_TEST_INFO("Data cache lock");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
515
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
516 if (cyg_test_is_simulator)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
517 time_dlock_loops = 10;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
518
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
519 count0 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
520 for (k = 0; k < time_dlock_loops; k++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
521 dloop();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
522 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
523 count1 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
524 t = count1 - count0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
525 diag_printf("time without lock: %d\n", t);
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 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
528
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
529 count0 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
530 for (k = 0; k < time_dlock_loops; k++) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
531 dloop();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
532 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
533 count1 = cyg_current_time();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
534 t = count1 - count0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
535 diag_printf("time with lock: %d\n", t);
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 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
538 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
539 #endif // ifdef HAL_DCACHE_LOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
540
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 static void entry0( cyg_addrword_t data )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
543 {
24
306eee292492 Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents: 2
diff changeset
544 #ifdef HAL_DCACHE_QUERY_WRITE_MODE
306eee292492 Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents: 2
diff changeset
545 int wmode;
306eee292492 Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents: 2
diff changeset
546 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
547 #ifdef HAL_DCACHE_LOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
548 time_dlock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
549 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
550 #ifdef HAL_ICACHE_LOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
551 time_ilock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
552 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
553 #ifdef HAL_DCACHE_STORE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
554 test_dstore();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
555 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
556 #ifdef HAL_DCACHE_READ_HINT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
557 test_dread_hint();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
558 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
559 #ifdef HAL_DCACHE_WRITE_HINT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
560 test_dwrite_hint();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
561 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
562 #ifdef HAL_DCACHE_ZERO
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
563 test_dzero();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
564 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
565
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
566 // The below tests only work on a copy-back cache.
24
306eee292492 Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents: 2
diff changeset
567 #ifdef HAL_DCACHE_QUERY_WRITE_MODE
306eee292492 Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents: 2
diff changeset
568 HAL_DCACHE_QUERY_WRITE_MODE( wmode );
306eee292492 Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents: 2
diff changeset
569
306eee292492 Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents: 2
diff changeset
570 if ( HAL_DCACHE_WRITEBACK_MODE == wmode ) {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
571 #ifdef HAL_DCACHE_FLUSH
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
572 test_dflush();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
573 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
574 #ifdef HAL_DCACHE_INVALIDATE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
575 test_dinvalidate();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
576 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
577 }
24
306eee292492 Merge from eCos master repository on 1999-07-16-05:47:06-BST
jlarmour
parents: 2
diff changeset
578 #endif // def HAL_DCACHE_QUERY_WRITE_MODE
2
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_TEST_PASS_FINISH("End of test");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
581 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
582
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
585 void kcache2_main( void )
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 CYG_TEST_INIT();
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 cyg_thread_create(4, entry0 , (cyg_addrword_t)0, "kcache2",
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
590 (void *)stack[0], STACKSIZE, &thread[0], &thread_obj[0]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
591 cyg_thread_resume(thread[0]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
592
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
593 cyg_scheduler_start();
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
598 externC void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
599 cyg_start( void )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
600 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
601 kcache2_main();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
602 }
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 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
605
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
606 #else // def CYGFUN_KERNEL_API_C
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
607 #define N_A_MSG "Kernel C API layer disabled"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
608 #endif // def CYGFUN_KERNEL_API_C
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
609 #else // def CYGVAR_KERNEL_COUNTERS_CLOCK
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
610 #define N_A_MSG "Kernel real-time clock disabled"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
611 #endif // def CYGVAR_KERNEL_COUNTERS_CLOCK
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 #ifdef N_A_MSG
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
614 externC void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
615 cyg_start( void )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
616 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
617 CYG_TEST_INIT();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
618 CYG_TEST_NA( N_A_MSG );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
619 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
620 #endif // N_A_MSG
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
621
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
622 // -------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
623 /* EOF kcache2.c */