OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [packages/] [hal/] [arm/] [aeb/] [v2_0/] [include/] [hal_cache.h] - Blame information for rev 27

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 unneback
#ifndef CYGONCE_HAL_CACHE_H
2
#define CYGONCE_HAL_CACHE_H
3
 
4
//=============================================================================
5
//
6
//      hal_cache.h
7
//
8
//      HAL cache control API
9
//
10
//=============================================================================
11
//####ECOSGPLCOPYRIGHTBEGIN####
12
// -------------------------------------------
13
// This file is part of eCos, the Embedded Configurable Operating System.
14
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
15
//
16
// eCos is free software; you can redistribute it and/or modify it under
17
// the terms of the GNU General Public License as published by the Free
18
// Software Foundation; either version 2 or (at your option) any later version.
19
//
20
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
21
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
22
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
23
// for more details.
24
//
25
// You should have received a copy of the GNU General Public License along
26
// with eCos; if not, write to the Free Software Foundation, Inc.,
27
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
28
//
29
// As a special exception, if other files instantiate templates or use macros
30
// or inline functions from this file, or you compile this file and link it
31
// with other works to produce a work based on this file, this file does not
32
// by itself cause the resulting work to be covered by the GNU General Public
33
// License. However the source code for this file must still be made available
34
// in accordance with section (3) of the GNU General Public License.
35
//
36
// This exception does not invalidate any other reasons why a work based on
37
// this file might be covered by the GNU General Public License.
38
//
39
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
40
// at http://sources.redhat.com/ecos/ecos-license/
41
// -------------------------------------------
42
//####ECOSGPLCOPYRIGHTEND####
43
//=============================================================================
44
//#####DESCRIPTIONBEGIN####
45
//
46
// Author(s):   nickg, gthomas
47
// Contributors:        nickg, gthomas
48
// Date:        1998-09-28
49
// Purpose:     Cache control API
50
// Description: The macros defined here provide the HAL APIs for handling
51
//              cache control operations.
52
// Usage:
53
//              #include <cyg/hal/hal_cache.h>
54
//              ...
55
//              
56
//
57
//####DESCRIPTIONEND####
58
//
59
//=============================================================================
60
 
61
#include <cyg/infra/cyg_type.h>
62
#include <cyg/hal/hal_io.h>
63
 
64
//-----------------------------------------------------------------------------
65
// Cache dimensions - one unified cache
66
 
67
#define HAL_CACHE_UNIFIED
68
 
69
#define HAL_UCACHE_SIZE                 0x800    // Size of cache in bytes
70
#define HAL_UCACHE_LINE_SIZE            4        // Size of a cache line
71
#define HAL_UCACHE_WAYS                 4        // Associativity of the cache
72
 
73
#define HAL_UCACHE_SETS (HAL_UCACHE_SIZE/(HAL_UCACHE_LINE_SIZE*HAL_UCACHE_WAYS))
74
 
75
// Cache & SRAM control
76
#define CYG_DEVICE_CCR          0xFFFFA400
77
#define CYG_DEVICE_LSCR         0xFFFFA404
78
#define CYG_DEVICE_CACHE_MEM    0x60000800
79
 
80
#define CCR_E                   0x01      // Cache enabled
81
#define CCR_S                   0x02      // SRAM mode enabled
82
#define CCR_F                   0x04      // Flush mode enabled
83
#define CCR_I                   0x08      // Invalidate mode
84
 
85
#define LCSR_E                  0x01      // Local SRAM enabled
86
#define LCSR_L                  0x02      // Local SRAM mapped to high memory
87
 
88
//-----------------------------------------------------------------------------
89
// Global control of cache
90
 
91
// Enable the cache
92
#define HAL_UCACHE_ENABLE()                                     \
93
{                                                               \
94
    HAL_WRITE_UINT8(CYG_DEVICE_CCR, CCR_E);                     \
95
}
96
 
97
// Disable the cache
98
#define HAL_UCACHE_DISABLE()                                    \
99
{                                                               \
100
    HAL_WRITE_UINT8(CYG_DEVICE_CCR, 0);                         \
101
}
102
 
103
// Invalidate the entire cache
104
#define HAL_UCACHE_INVALIDATE_ALL()             \
105
{                                               \
106
    register cyg_uint8 old_ccr;                 \
107
    HAL_READ_UINT8(CYG_DEVICE_CCR, old_ccr);    \
108
    HAL_WRITE_UINT8(CYG_DEVICE_CCR, CCR_I);     \
109
    HAL_WRITE_UINT8(CYG_DEVICE_CCR, old_ccr);   \
110
}
111
 
112
// Synchronize the contents of the cache with memory.
113
#define HAL_UCACHE_SYNC()                                               \
114
{                                                                       \
115
    register volatile cyg_uint32 *cache_SRAM =                          \
116
                     (volatile cyg_uint32*) CYG_DEVICE_CACHE_MEM;       \
117
    register int i;                                                     \
118
    register cyg_uint8 old_ccr;                                         \
119
    HAL_READ_UINT8(CYG_DEVICE_CCR, old_ccr);                            \
120
    HAL_WRITE_UINT8(CYG_DEVICE_CCR, CCR_F);                             \
121
    for (i = 0;  i < HAL_DCACHE_SETS;  i++) {                           \
122
        cyg_uint32 tmp = *cache_SRAM++;                                 \
123
    }                                                                   \
124
    HAL_WRITE_UINT8(CYG_DEVICE_CCR, CCR_I);                             \
125
    HAL_WRITE_UINT8(CYG_DEVICE_CCR, old_ccr);                           \
126
}
127
 
128
// Query the state of the cache
129
#define HAL_UCACHE_IS_ENABLED(_state_)          \
130
{                                               \
131
    cyg_uint8 __ccr;                            \
132
    HAL_READ_UINT8(CYG_DEVICE_CCR, __ccr);      \
133
    (_state_) = (CCR_E == __ccr) ? 1 : 0;       \
134
}
135
 
136
// Purge contents of cache
137
#define HAL_UCACHE_PURGE_ALL()  HAL_UCACHE_INVALIDATE_ALL()
138
 
139
// Set the cache refill burst size
140
//#define HAL_UCACHE_BURST_SIZE(_size_)
141
 
142
// Set the cache write mode
143
//#define HAL_UCACHE_WRITE_MODE( _mode_ )
144
 
145
//#define HAL_UCACHE_WRITETHRU_MODE       0
146
//#define HAL_UCACHE_WRITEBACK_MODE       1
147
 
148
// Load the contents of the given address range into the cache
149
// and then lock the cache so that it stays there.
150
//#define HAL_UCACHE_LOCK(_base_, _size_)
151
 
152
// Undo a previous lock operation
153
//#define HAL_UCACHE_UNLOCK(_base_, _size_)
154
 
155
// Unlock entire cache
156
//#define HAL_UCACHE_UNLOCK_ALL()
157
 
158
//-----------------------------------------------------------------------------
159
// Cache line control
160
 
161
// Allocate cache lines for the given address range without reading its
162
// contents from memory.
163
//#define HAL_UCACHE_ALLOCATE( _base_ , _size_ )
164
 
165
// Write dirty cache lines to memory and invalidate the cache entries
166
// for the given address range.
167
//#define HAL_UCACHE_FLUSH( _base_ , _size_ )
168
 
169
// Invalidate cache lines in the given range without writing to memory.
170
//#define HAL_UCACHE_INVALIDATE( _base_ , _size_ )
171
 
172
// Write dirty cache lines to memory for the given address range.
173
//#define HAL_UCACHE_STORE( _base_ , _size_ )
174
 
175
// Preread the given range into the cache with the intention of reading
176
// from it later.
177
//#define HAL_UCACHE_READ_HINT( _base_ , _size_ )
178
 
179
// Preread the given range into the cache with the intention of writing
180
// to it later.
181
//#define HAL_UCACHE_WRITE_HINT( _base_ , _size_ )
182
 
183
// Allocate and zero the cache lines associated with the given range.
184
//#define HAL_UCACHE_ZERO( _base_ , _size_ )
185
 
186
//-----------------------------------------------------------------------------
187
 
188
//-----------------------------------------------------------------------------
189
// Data and instruction cache macros map onto the both-cache macros
190
 
191
//-----------------------------------------------------------------------------
192
// Global control of data cache
193
 
194
#define HAL_DCACHE_SIZE                 HAL_UCACHE_SIZE
195
#define HAL_DCACHE_LINE_SIZE            HAL_UCACHE_LINE_SIZE
196
#define HAL_DCACHE_WAYS                 HAL_UCACHE_WAYS
197
#define HAL_DCACHE_SETS                 HAL_UCACHE_SETS
198
 
199
// Enable the data cache
200
#define HAL_DCACHE_ENABLE()             HAL_UCACHE_ENABLE()
201
 
202
// Disable the data cache
203
#define HAL_DCACHE_DISABLE()            HAL_UCACHE_DISABLE()
204
 
205
// Invalidate the entire cache
206
#define HAL_DCACHE_INVALIDATE_ALL()     HAL_UCACHE_INVALIDATE_ALL()
207
 
208
// Synchronize the contents of the cache with memory.
209
#define HAL_DCACHE_SYNC()               HAL_UCACHE_SYNC()
210
 
211
// Query the state of the data cache
212
#define HAL_DCACHE_IS_ENABLED(_state_)  HAL_UCACHE_IS_ENABLED(_state_)
213
 
214
// Set the data cache refill burst size
215
//#define HAL_DCACHE_BURST_SIZE(_size_)
216
 
217
// Set the data cache write mode
218
//#define HAL_DCACHE_WRITE_MODE( _mode_ )
219
 
220
//#define HAL_DCACHE_WRITETHRU_MODE       0
221
//#define HAL_DCACHE_WRITEBACK_MODE       1
222
 
223
// Load the contents of the given address range into the data cache
224
// and then lock the cache so that it stays there.
225
//#define HAL_DCACHE_LOCK(_base_, _size_)
226
 
227
// Undo a previous lock operation
228
//#define HAL_DCACHE_UNLOCK(_base_, _size_)
229
 
230
// Unlock entire cache
231
//#define HAL_DCACHE_UNLOCK_ALL()
232
 
233
//-----------------------------------------------------------------------------
234
// Data cache line control
235
 
236
// Allocate cache lines for the given address range without reading its
237
// contents from memory.
238
//#define HAL_DCACHE_ALLOCATE( _base_ , _size_ )
239
 
240
// Write dirty cache lines to memory and invalidate the cache entries
241
// for the given address range.
242
//#define HAL_DCACHE_FLUSH( _base_ , _size_ )
243
 
244
// Invalidate cache lines in the given range without writing to memory.
245
//#define HAL_DCACHE_INVALIDATE( _base_ , _size_ )
246
 
247
// Write dirty cache lines to memory for the given address range.
248
//#define HAL_DCACHE_STORE( _base_ , _size_ )
249
 
250
// Preread the given range into the cache with the intention of reading
251
// from it later.
252
//#define HAL_DCACHE_READ_HINT( _base_ , _size_ )
253
 
254
// Preread the given range into the cache with the intention of writing
255
// to it later.
256
//#define HAL_DCACHE_WRITE_HINT( _base_ , _size_ )
257
 
258
// Allocate and zero the cache lines associated with the given range.
259
//#define HAL_DCACHE_ZERO( _base_ , _size_ )
260
 
261
//-----------------------------------------------------------------------------
262
// Global control of Instruction cache
263
 
264
#define HAL_ICACHE_SIZE                 HAL_UCACHE_SIZE
265
#define HAL_ICACHE_LINE_SIZE            HAL_UCACHE_LINE_SIZE
266
#define HAL_ICACHE_WAYS                 HAL_UCACHE_WAYS
267
#define HAL_ICACHE_SETS                 HAL_UCACHE_SETS
268
 
269
// Enable the instruction cache
270
#define HAL_ICACHE_ENABLE()             HAL_UCACHE_ENABLE()
271
 
272
// Disable the instruction cache
273
#define HAL_ICACHE_DISABLE()            HAL_UCACHE_DISABLE()
274
 
275
// Invalidate the entire cache
276
#define HAL_ICACHE_INVALIDATE_ALL()     HAL_UCACHE_INVALIDATE_ALL()
277
 
278
 
279
// Synchronize the contents of the cache with memory.
280
#define HAL_ICACHE_SYNC()               HAL_UCACHE_SYNC()
281
 
282
// Query the state of the instruction cache
283
#define HAL_ICACHE_IS_ENABLED(_state_)  HAL_UCACHE_IS_ENABLED(_state_)
284
 
285
// Set the instruction cache refill burst size
286
//#define HAL_ICACHE_BURST_SIZE(_size_)
287
 
288
// Load the contents of the given address range into the instruction cache
289
// and then lock the cache so that it stays there.
290
 
291
//#define HAL_ICACHE_LOCK(_base_, _size_)
292
 
293
// Undo a previous lock operation
294
//#define HAL_ICACHE_UNLOCK(_base_, _size_)
295
 
296
// Unlock entire cache
297
//#define HAL_ICACHE_UNLOCK_ALL()
298
 
299
//-----------------------------------------------------------------------------
300
// Instruction cache line control
301
 
302
// Invalidate cache lines in the given range without writing to memory.
303
//#define HAL_ICACHE_INVALIDATE( _base_ , _size_ )
304
 
305
#endif // ifndef CYGONCE_HAL_CACHE_H
306
// End of hal_cache.h

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.