Mercurial > flash_v2
annotate packages/hal/arm/arm9/var/current/include/hal_cache.h @ 210:d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
| author | jlarmour |
|---|---|
| date | Thu, 23 May 2002 22:59:51 +0000 |
| parents | e0c0827131d1 |
| children | 7799e045560b |
| rev | line source |
|---|---|
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
1 #ifndef CYGONCE_HAL_CACHE_H |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
2 #define CYGONCE_HAL_CACHE_H |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
3 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
4 //============================================================================= |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
5 // |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
6 // hal_cache.h |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
7 // |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
8 // HAL cache control API |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
9 // |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
10 //============================================================================= |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
11 //####ECOSGPLCOPYRIGHTBEGIN#### |
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
12 // ------------------------------------------- |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
13 // This file is part of eCos, the Embedded Configurable Operating System. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
14 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
15 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
16 // eCos is free software; you can redistribute it and/or modify it under |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
17 // the terms of the GNU General Public License as published by the Free |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
18 // Software Foundation; either version 2 or (at your option) any later version. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
19 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
20 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
21 // WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
22 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
23 // for more details. |
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
24 // |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
25 // You should have received a copy of the GNU General Public License along |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
26 // with eCos; if not, write to the Free Software Foundation, Inc., |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
27 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
28 // |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
29 // As a special exception, if other files instantiate templates or use macros |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
30 // or inline functions from this file, or you compile this file and link it |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
31 // with other works to produce a work based on this file, this file does not |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
32 // by itself cause the resulting work to be covered by the GNU General Public |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
33 // License. However the source code for this file must still be made available |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
34 // in accordance with section (3) of the GNU General Public License. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
35 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
36 // This exception does not invalidate any other reasons why a work based on |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
37 // this file might be covered by the GNU General Public License. |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
38 // |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
39 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
40 // at http://sources.redhat.com/ecos/ecos-license/ |
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
41 // ------------------------------------------- |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
42 //####ECOSGPLCOPYRIGHTEND#### |
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
43 //============================================================================= |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
44 //#####DESCRIPTIONBEGIN#### |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
45 // |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
46 // Author(s): gthomas |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
47 // Contributors:hmt, jskov |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
48 // Travis C. Furrer <furrer@mit.edu> |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
49 // Date: 2000-05-08 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
50 // Purpose: Cache control API |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
51 // Description: The macros defined here provide the HAL APIs for handling |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
52 // cache control operations. |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
53 // Usage: |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
54 // #include <cyg/hal/hal_cache.h> |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
55 // ... |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
56 // |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
57 // |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
58 //####DESCRIPTIONEND#### |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
59 // |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
60 //============================================================================= |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
61 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
62 #include <cyg/infra/cyg_type.h> |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
63 #include <cyg/hal/hal_mmu.h> |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
64 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
65 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
66 //----------------------------------------------------------------------------- |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
67 // Cache dimensions |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
68 |
|
178
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
69 #if defined(CYGPKG_HAL_ARM_ARM9_ARM920T) |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
70 # define HAL_ICACHE_SIZE 0x4000 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
71 # define HAL_ICACHE_LINE_SIZE 32 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
72 # define HAL_ICACHE_WAYS 64 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
73 # define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS)) |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
74 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
75 # define HAL_DCACHE_SIZE 0x4000 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
76 # define HAL_DCACHE_LINE_SIZE 32 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
77 # define HAL_DCACHE_WAYS 64 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
78 # define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS)) |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
79 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
80 # define HAL_WRITE_BUFFER 64 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
81 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
82 # define CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
83 # define CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX_STEP 0x20 |
|
195
67850532eebb
Merge from eCos master repository on 2001-11-02-06:43:03-GMT
jlarmour
parents:
178
diff
changeset
|
84 # define CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX_LIMIT 0x100 |
|
178
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
85 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
86 #elif defined(CYGPKG_HAL_ARM_ARM9_ARM922T) |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
87 # define HAL_ICACHE_SIZE 0x2000 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
88 # define HAL_ICACHE_LINE_SIZE 32 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
89 # define HAL_ICACHE_WAYS 64 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
90 # define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS)) |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
91 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
92 # define HAL_DCACHE_SIZE 0x2000 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
93 # define HAL_DCACHE_LINE_SIZE 32 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
94 # define HAL_DCACHE_WAYS 64 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
95 # define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS)) |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
96 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
97 # define HAL_WRITE_BUFFER 64 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
98 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
99 # define CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
100 # define CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX_STEP 0x20 |
|
195
67850532eebb
Merge from eCos master repository on 2001-11-02-06:43:03-GMT
jlarmour
parents:
178
diff
changeset
|
101 # define CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX_LIMIT 0x80 |
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
102 |
|
178
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
103 #elif defined(CYGPKG_HAL_ARM_ARM9_ARM925T) |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
104 # define HAL_ICACHE_SIZE 0x4000 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
105 # define HAL_ICACHE_LINE_SIZE 32 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
106 # define HAL_ICACHE_WAYS 2 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
107 # define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS)) |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
108 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
109 # define HAL_DCACHE_SIZE 0x2000 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
110 # define HAL_DCACHE_LINE_SIZE 32 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
111 # define HAL_DCACHE_WAYS 2 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
112 # define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS)) |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
113 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
114 # define HAL_WRITE_BUFFER 64 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
115 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
116 # define CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE // has instruction to clean D-cache |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
117 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
118 #elif defined(CYGPKG_HAL_ARM_ARM9_ARM940T) |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
119 # define HAL_ICACHE_SIZE 0x1000 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
120 # define HAL_ICACHE_LINE_SIZE 16 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
121 # define HAL_ICACHE_WAYS 4 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
122 # define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS)) |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
123 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
124 # define HAL_DCACHE_SIZE 0x1000 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
125 # define HAL_DCACHE_LINE_SIZE 16 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
126 # define HAL_DCACHE_WAYS 4 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
127 # define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS)) |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
128 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
129 # define HAL_WRITE_BUFFER 32 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
130 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
131 # define CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
132 # define CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX_STEP 0x10 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
133 # define CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX_LIMIT 0x40 |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
134 |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
135 #elif defined(CYGPKG_HAL_ARM_ARM9_ARM966E) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
136 # define HAL_ICACHE_SIZE 0 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
137 # define HAL_ICACHE_LINE_SIZE 0 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
138 # define HAL_ICACHE_WAYS 0 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
139 # define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS)) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
140 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
141 # define HAL_DCACHE_SIZE 0 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
142 # define HAL_DCACHE_LINE_SIZE 0 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
143 # define HAL_DCACHE_WAYS 0 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
144 # define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS)) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
145 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
146 # define HAL_WRITE_BUFFER 32 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
147 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
148 # define CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
149 # define CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX_STEP 0 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
150 # define CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX_LIMIT 0 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
151 |
|
178
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
152 #else |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
153 # error "No cache details defined" |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
154 #endif |
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
155 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
156 // FIXME: much of the code below should make better use of |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
157 // the definitions from hal_mmu.h |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
158 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
159 //----------------------------------------------------------------------------- |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
160 // Global control of Instruction cache |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
161 |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
162 #if HAL_ICACHE_SIZE != 0 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
163 |
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
164 // FIXME: disable/enable instruction streaming? |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
165 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
166 // Enable the instruction cache |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
167 #define HAL_ICACHE_ENABLE() \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
168 CYG_MACRO_START \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
169 asm volatile ( \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
170 "mrc p15,0,r1,c1,c0,0;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
171 "orr r1,r1,#0x1000;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
172 "orr r1,r1,#0x0003;" /* enable ICache (also ensures */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
173 /* that MMU and alignment faults */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
174 /* are enabled) */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
175 "mcr p15,0,r1,c1,c0,0" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
176 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
177 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
178 : "r1" /* Clobber list */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
179 ); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
180 CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
181 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
182 // Disable the instruction cache (and invalidate it, required semanitcs) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
183 #define HAL_ICACHE_DISABLE() \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
184 CYG_MACRO_START \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
185 asm volatile ( \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
186 "mrc p15,0,r1,c1,c0,0;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
187 "bic r1,r1,#0x1000;" /* disable ICache (but not MMU, etc) */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
188 "mcr p15,0,r1,c1,c0,0;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
189 "mov r1,#0;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
190 "mcr p15,0,r1,c7,c5,0;" /* flush ICache */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
191 "nop;" /* next few instructions may be via cache */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
192 "nop;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
193 "nop;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
194 "nop;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
195 "nop;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
196 "nop" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
197 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
198 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
199 : "r1" /* Clobber list */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
200 ); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
201 CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
202 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
203 // Query the state of the instruction cache |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
204 #define HAL_ICACHE_IS_ENABLED(_state_) \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
205 CYG_MACRO_START \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
206 register cyg_uint32 reg; \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
207 asm volatile ("mrc p15,0,%0,c1,c0,0" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
208 : "=r"(reg) \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
209 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
210 ); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
211 (_state_) = (0 != (0x1000 & reg)); /* Bit 12 is ICache enable */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
212 CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
213 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
214 // Invalidate the entire cache |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
215 #define HAL_ICACHE_INVALIDATE_ALL() \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
216 CYG_MACRO_START \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
217 /* this macro can discard dirty cache lines (N/A for ICache) */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
218 asm volatile ( \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
219 "mov r1,#0;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
220 "mcr p15,0,r1,c7,c5,0;" /* flush ICache */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
221 "mcr p15,0,r1,c8,c5,0;" /* flush ITLB only */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
222 "nop;" /* next few instructions may be via cache */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
223 "nop;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
224 "nop;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
225 "nop;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
226 "nop;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
227 "nop;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
228 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
229 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
230 : "r1" /* Clobber list */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
231 ); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
232 CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
233 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
234 // Synchronize the contents of the cache with memory. |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
235 // (which includes flushing out pending writes) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
236 #define HAL_ICACHE_SYNC() \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
237 CYG_MACRO_START \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
238 HAL_DCACHE_SYNC(); /* ensure data gets to RAM */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
239 HAL_ICACHE_INVALIDATE_ALL(); /* forget all we know */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
240 CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
241 |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
242 #else |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
243 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
244 #define HAL_ICACHE_ENABLE() |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
245 #define HAL_ICACHE_DISABLE() |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
246 #define HAL_ICACHE_IS_ENABLED(_state_) ((_state_) = 0) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
247 #define HAL_ICACHE_INVALIDATE_ALL() |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
248 #define HAL_ICACHE_SYNC() |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
249 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
250 #endif |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
251 |
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
252 // Set the instruction cache refill burst size |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
253 //#define HAL_ICACHE_BURST_SIZE(_size_) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
254 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
255 // Load the contents of the given address range into the instruction cache |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
256 // and then lock the cache so that it stays there. |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
257 //#define HAL_ICACHE_LOCK(_base_, _size_) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
258 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
259 // Undo a previous lock operation |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
260 //#define HAL_ICACHE_UNLOCK(_base_, _size_) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
261 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
262 // Unlock entire cache |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
263 //#define HAL_ICACHE_UNLOCK_ALL() |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
264 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
265 //----------------------------------------------------------------------------- |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
266 // Instruction cache line control |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
267 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
268 // Invalidate cache lines in the given range without writing to memory. |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
269 //#define HAL_ICACHE_INVALIDATE( _base_ , _size_ ) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
270 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
271 //----------------------------------------------------------------------------- |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
272 // Global control of data cache |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
273 |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
274 #if HAL_DCACHE_SIZE != 0 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
275 |
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
276 // Enable the data cache |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
277 #define HAL_DCACHE_ENABLE() \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
278 CYG_MACRO_START \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
279 asm volatile ( \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
280 "mrc p15,0,r1,c1,c0,0;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
281 "orr r1,r1,#0x000F;" /* enable DCache (also ensures */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
282 /* the MMU, alignment faults, and */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
283 /* write buffer are enabled) */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
284 "mcr p15,0,r1,c1,c0,0" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
285 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
286 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
287 : "r1" /* Clobber list */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
288 ); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
289 CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
290 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
291 // Disable the data cache (and invalidate it, required semanitcs) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
292 #define HAL_DCACHE_DISABLE() \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
293 CYG_MACRO_START \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
294 asm volatile ( \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
295 "mrc p15,0,r1,c1,c0,0;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
296 "bic r1,r1,#0x000C;" /* disable DCache AND write buffer */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
297 /* but not MMU and alignment faults */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
298 "mcr p15,0,r1,c1,c0,0;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
299 "mov r1,#0;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
300 "mcr p15,0,r1,c7,c6,0" /* clear data cache */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
301 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
302 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
303 : "r1" /* Clobber list */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
304 ); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
305 CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
306 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
307 // Query the state of the data cache |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
308 #define HAL_DCACHE_IS_ENABLED(_state_) \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
309 CYG_MACRO_START \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
310 register int reg; \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
311 asm volatile ("mrc p15,0,%0,c1,c0,0;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
312 : "=r"(reg) \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
313 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
314 ); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
315 (_state_) = (0 != (4 & reg)); /* Bit 2 is DCache enable */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
316 CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
317 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
318 // Flush the entire dcache (and then both TLBs, just in case) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
319 #define HAL_DCACHE_INVALIDATE_ALL() \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
320 CYG_MACRO_START /* this macro can discard dirty cache lines. */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
321 asm volatile ( \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
322 "mov r0,#0;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
323 "mcr p15,0,r0,c7,c6,0;" /* flush d-cache */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
324 "mcr p15,0,r0,c8,c7,0;" /* flush i+d-TLBs */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
325 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
326 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
327 : "r0","memory" /* clobber list */); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
328 CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
329 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
330 // Synchronize the contents of the cache with memory. |
|
178
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
331 #ifdef CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE |
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
332 #define HAL_DCACHE_SYNC() \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
333 CYG_MACRO_START \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
334 asm volatile ( \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
335 "mov r0, #0;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
336 "mcr p15,0,r0,c7,c10,0;" /* clean DCache */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
337 "1: mrc p15,0,r0,c15,c4,0;" /* wait for dirty flag to clear */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
338 "ands r0,r0,#0x80000000;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
339 "bne 1b;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
340 "mov r0,#0;" \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
341 "mcr p15,0,r0,c7,c6,0;" /* flush DCache */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
342 "mcr p15,0,r0,c7,c10,4;" /* and drain the write buffer */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
343 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
344 : \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
345 : "r0" /* Clobber list */ \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
346 ); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
347 CYG_MACRO_END |
|
178
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
348 #elif defined(CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX) |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
349 #define HAL_DCACHE_SYNC() \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
350 CYG_MACRO_START \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
351 cyg_uint32 _tmp1, _tmp2; \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
352 asm volatile ( \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
353 "mov %0, #0;" \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
354 "1: " \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
355 "mov %1, #0;" \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
356 "2: " \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
357 "orr r0,%0,%1;" \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
358 "mcr p15,0,r0,c7,c14,2;" /* clean index in DCache */ \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
359 "add %1,%1,%2;" \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
360 "cmp %1,%3;" \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
361 "bne 2b;" \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
362 "add %0,%0,#0x04000000;" /* get to next index */ \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
363 "cmp %0,#0;" \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
364 "bne 1b;" \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
365 "mcr p15,0,r0,c7,c10,4;" /* drain the write buffer */ \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
366 : "=r" (_tmp1), "=r" (_tmp2) \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
367 : "I" (CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX_STEP), \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
368 "I" (CYGHWR_HAL_ARM_ARM9_CLEAN_DCACHE_INDEX_LIMIT) \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
369 : "r0" /* Clobber list */ \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
370 ); \ |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
371 CYG_MACRO_END |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
372 #else |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
373 # error "Don't know how to sync Dcache" |
|
aa8364213009
Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents:
169
diff
changeset
|
374 #endif |
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
375 |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
376 #else |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
377 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
378 #define HAL_DCACHE_ENABLE() |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
379 #define HAL_DCACHE_DISABLE() |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
380 #define HAL_DCACHE_IS_ENABLED(_state_) ((_state_) = 0) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
381 #define HAL_DCACHE_INVALIDATE_ALL() |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
382 #define HAL_DCACHE_SYNC() |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
383 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
384 #endif |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
385 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
386 |
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
387 // Set the data cache refill burst size |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
388 //#define HAL_DCACHE_BURST_SIZE(_size_) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
389 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
390 // Set the data cache write mode |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
391 //#define HAL_DCACHE_WRITE_MODE( _mode_ ) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
392 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
393 #define HAL_DCACHE_WRITETHRU_MODE 0 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
394 #define HAL_DCACHE_WRITEBACK_MODE 1 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
395 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
396 // Get the current writeback mode - or only writeback mode if fixed |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
397 #define HAL_DCACHE_QUERY_WRITE_MODE( _mode_ ) CYG_MACRO_START \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
398 _mode_ = HAL_DCACHE_WRITEBACK_MODE; \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
399 CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
400 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
401 // Load the contents of the given address range into the data cache |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
402 // and then lock the cache so that it stays there. |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
403 //#define HAL_DCACHE_LOCK(_base_, _size_) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
404 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
405 // Undo a previous lock operation |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
406 //#define HAL_DCACHE_UNLOCK(_base_, _size_) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
407 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
408 // Unlock entire cache |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
409 //#define HAL_DCACHE_UNLOCK_ALL() |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
410 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
411 //----------------------------------------------------------------------------- |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
412 // Data cache line control |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
413 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
414 // Allocate cache lines for the given address range without reading its |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
415 // contents from memory. |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
416 //#define HAL_DCACHE_ALLOCATE( _base_ , _size_ ) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
417 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
418 // Write dirty cache lines to memory and invalidate the cache entries |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
419 // for the given address range. |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
420 // ---- this seems not to work despite the documentation --- |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
421 //#define HAL_DCACHE_FLUSH( _base_ , _size_ ) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
422 //CYG_MACRO_START |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
423 // HAL_DCACHE_STORE( _base_ , _size_ ); |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
424 // HAL_DCACHE_INVALIDATE( _base_ , _size_ ); |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
425 //CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
426 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
427 // Invalidate cache lines in the given range without writing to memory. |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
428 // ---- this seems not to work despite the documentation --- |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
429 //#define HAL_DCACHE_INVALIDATE( _base_ , _size_ ) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
430 //CYG_MACRO_START |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
431 // register int addr, enda; |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
432 // for ( addr = (~(HAL_DCACHE_LINE_SIZE - 1)) & (int)(_base_), |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
433 // enda = (int)(_base_) + (_size_); |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
434 // addr < enda ; |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
435 // addr += HAL_DCACHE_LINE_SIZE ) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
436 // { |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
437 // asm volatile ( |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
438 // "mcr p15,0,%0,c7,c6,1;" /* flush entry away */ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
439 // : |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
440 // : "r"(addr) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
441 // : "memory" |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
442 // ); |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
443 // } |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
444 //CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
445 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
446 // Write dirty cache lines to memory for the given address range. |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
447 // ---- this seems not to work despite the documentation --- |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
448 //#define HAL_DCACHE_STORE( _base_ , _size_ ) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
449 //CYG_MACRO_START |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
450 // register int addr, enda; |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
451 // for ( addr = (~(HAL_DCACHE_LINE_SIZE - 1)) & (int)(_base_), |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
452 // enda = (int)(_base_) + (_size_); |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
453 // addr < enda ; |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
454 // addr += HAL_DCACHE_LINE_SIZE ) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
455 // { |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
456 // asm volatile ("mcr p15,0,%0,c7,c10,1;" /* push entry to RAM */ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
457 // : |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
458 // : "r"(addr) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
459 // : "memory" |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
460 // ); |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
461 // } |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
462 //CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
463 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
464 // Preread the given range into the cache with the intention of reading |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
465 // from it later. |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
466 //#define HAL_DCACHE_READ_HINT( _base_ , _size_ ) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
467 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
468 // Preread the given range into the cache with the intention of writing |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
469 // to it later. |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
470 //#define HAL_DCACHE_WRITE_HINT( _base_ , _size_ ) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
471 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
472 // Allocate and zero the cache lines associated with the given range. |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
473 //#define HAL_DCACHE_ZERO( _base_ , _size_ ) |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
474 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
475 //----------------------------------------------------------------------------- |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
476 // Cache controls for safely disabling/reenabling caches around execution |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
477 // of relocated code. |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
478 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
479 #define HAL_FLASH_CACHES_OFF(_d_, _i_) \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
480 CYG_MACRO_START \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
481 HAL_ICACHE_IS_ENABLED(_i_); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
482 HAL_DCACHE_IS_ENABLED(_d_); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
483 HAL_ICACHE_INVALIDATE_ALL(); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
484 HAL_ICACHE_DISABLE(); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
485 HAL_DCACHE_SYNC(); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
486 HAL_DCACHE_INVALIDATE_ALL(); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
487 HAL_DCACHE_DISABLE(); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
488 CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
489 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
490 #define HAL_FLASH_CACHES_ON(_d_, _i_) \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
491 CYG_MACRO_START \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
492 if (_d_) HAL_DCACHE_ENABLE(); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
493 if (_i_) HAL_ICACHE_ENABLE(); \ |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
494 CYG_MACRO_END |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
495 |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
496 //----------------------------------------------------------------------------- |
|
196
9b55e9c69693
Merge from eCos master repository on 2001-11-23-15:32:03-GMT
jlarmour
parents:
195
diff
changeset
|
497 // Virtual<->Physical translations |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
498 #ifndef HAL_VIRT_TO_PHYS_ADDRESS |
|
196
9b55e9c69693
Merge from eCos master repository on 2001-11-23-15:32:03-GMT
jlarmour
parents:
195
diff
changeset
|
499 extern cyg_uint32 hal_virt_to_phys_address(cyg_uint32 phys); |
|
9b55e9c69693
Merge from eCos master repository on 2001-11-23-15:32:03-GMT
jlarmour
parents:
195
diff
changeset
|
500 #define HAL_VIRT_TO_PHYS_ADDRESS(_va, _pa) \ |
|
9b55e9c69693
Merge from eCos master repository on 2001-11-23-15:32:03-GMT
jlarmour
parents:
195
diff
changeset
|
501 _pa = hal_virt_to_phys_address(_va) |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
196
diff
changeset
|
502 #endif |
|
196
9b55e9c69693
Merge from eCos master repository on 2001-11-23-15:32:03-GMT
jlarmour
parents:
195
diff
changeset
|
503 //----------------------------------------------------------------------------- |
|
169
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
504 #endif // ifndef CYGONCE_HAL_CACHE_H |
|
11b54a94cf58
Merge from eCos master repository on 2001-07-06-06:43:02-BST
jlarmour
parents:
diff
changeset
|
505 // End of hal_cache.h |
