Mercurial > ecos
annotate packages/hal/arm/sa11x0/brutus/current/src/brutus_misc.c @ 108:ff3f181b64bd ecos-sw-2000-07-04
Merge from eCos master repository on 2000-07-04-20:42:44-BST
| author | jlarmour |
|---|---|
| date | Tue, 04 Jul 2000 20:17:21 +0000 |
| parents | |
| children | 6b5f480c6929 |
| rev | line source |
|---|---|
|
108
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
1 //========================================================================== |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
2 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
3 // brutus_misc.c |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
4 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
5 // HAL misc board support code for StrongARM SA1110/Brutus |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
6 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
7 //========================================================================== |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
8 //####COPYRIGHTBEGIN#### |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
9 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
10 // ------------------------------------------- |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
11 // The contents of this file are subject to the Red Hat eCos Public License |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
12 // Version 1.1 (the "License"); you may not use this file except in |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
13 // compliance with the License. You may obtain a copy of the License at |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
14 // http://www.redhat.com/ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
15 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
16 // Software distributed under the License is distributed on an "AS IS" |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
18 // License for the specific language governing rights and limitations under |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
19 // the License. |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
20 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
21 // The Original Code is eCos - Embedded Configurable Operating System, |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
22 // released September 30, 1998. |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
23 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
24 // The Initial Developer of the Original Code is Red Hat. |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
25 // Portions created by Red Hat are |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
26 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc. |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
27 // All Rights Reserved. |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
28 // ------------------------------------------- |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
29 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
30 //####COPYRIGHTEND#### |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
31 //========================================================================== |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
32 //#####DESCRIPTIONBEGIN#### |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
33 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
34 // Author(s): gthomas |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
35 // Contributors: hmt |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
36 // Travis C. Furrer <furrer@mit.edu> |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
37 // Date: 2000-05-21 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
38 // Purpose: HAL board support |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
39 // Description: Implementations of HAL board interfaces |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
40 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
41 //####DESCRIPTIONEND#### |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
42 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
43 //========================================================================*/ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
44 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
45 #include <pkgconf/hal.h> |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
46 #include <pkgconf/system.h> |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
47 #include CYGBLD_HAL_PLATFORM_H |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
48 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
49 #include <cyg/infra/cyg_type.h> // base types |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
50 #include <cyg/infra/cyg_trac.h> // tracing macros |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
51 #include <cyg/infra/cyg_ass.h> // assertion macros |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
52 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
53 #include <cyg/hal/hal_io.h> // IO macros |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
54 #include <cyg/hal/hal_arch.h> // Register state info |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
55 #include <cyg/hal/hal_diag.h> |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
56 #include <cyg/hal/hal_intr.h> // Interrupt names |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
57 #include <cyg/hal/hal_cache.h> |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
58 #include <cyg/hal/hal_sa11x0.h> // Hardware definitions |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
59 #include <cyg/hal/brutus.h> // Platform specifics |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
60 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
61 #include <cyg/infra/diag.h> // diag_printf |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
62 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
63 // ------------------------------------------------------------------------- |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
64 // MMU initialization: |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
65 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
66 // These structures are laid down in memory to define the translation |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
67 // table. |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
68 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
69 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
70 /* |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
71 * SA-1100 Translation Table Base Bit Masks */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
72 #define ARM_TRANSLATION_TABLE_MASK 0xFFFFC000 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
73 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
74 /* |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
75 * SA-1100 Domain Access Control Bit Masks |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
76 */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
77 #define ARM_ACCESS_TYPE_NO_ACCESS(domain_num) (0x0 << (domain_num)*2) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
78 #define ARM_ACCESS_TYPE_CLIENT(domain_num) (0x1 << (domain_num)*2) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
79 #define ARM_ACCESS_TYPE_MANAGER(domain_num) (0x3 << (domain_num)*2) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
80 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
81 struct ARM_MMU_FIRST_LEVEL_FAULT { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
82 int id : 2; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
83 int sbz : 30; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
84 }; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
85 #define ARM_MMU_FIRST_LEVEL_FAULT_ID 0x0 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
86 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
87 struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
88 int id : 2; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
89 int imp : 2; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
90 int domain : 4; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
91 int sbz : 1; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
92 int base_address : 23; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
93 }; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
94 #define ARM_MMU_FIRST_LEVEL_PAGE_TABLE_ID 0x1 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
95 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
96 struct ARM_MMU_FIRST_LEVEL_SECTION { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
97 int id : 2; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
98 int b : 1; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
99 int c : 1; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
100 int imp : 1; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
101 int domain : 4; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
102 int sbz0 : 1; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
103 int ap : 2; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
104 int sbz1 : 8; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
105 int base_address : 12; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
106 }; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
107 #define ARM_MMU_FIRST_LEVEL_SECTION_ID 0x2 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
108 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
109 struct ARM_MMU_FIRST_LEVEL_RESERVED { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
110 int id : 2; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
111 int sbz : 30; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
112 }; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
113 #define ARM_MMU_FIRST_LEVEL_RESERVED_ID 0x3 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
114 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
115 #define ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, table_index) \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
116 (unsigned long *)((unsigned long)(ttb_base) + ((table_index) << 2)) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
117 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
118 #define ARM_FIRST_LEVEL_PAGE_TABLE_SIZE 0x4000 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
119 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
120 #define ARM_MMU_SECTION(ttb_base, actual_base, virtual_base, \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
121 cacheable, bufferable, perm) \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
122 CYG_MACRO_START \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
123 register union ARM_MMU_FIRST_LEVEL_DESCRIPTOR desc; \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
124 \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
125 desc.word = 0; \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
126 desc.section.id = ARM_MMU_FIRST_LEVEL_SECTION_ID; \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
127 desc.section.domain = 0; \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
128 desc.section.c = (cacheable); \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
129 desc.section.b = (bufferable); \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
130 desc.section.ap = (perm); \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
131 desc.section.base_address = (actual_base); \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
132 *ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, (virtual_base)) \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
133 = desc.word; \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
134 CYG_MACRO_END |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
135 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
136 #define X_ARM_MMU_SECTION(abase,vbase,size,cache,buff,access) \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
137 { int i; int j = abase; int k = vbase; \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
138 for (i = size; i > 0 ; i--,j++,k++) \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
139 { \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
140 ARM_MMU_SECTION(ttb_base, j, k, cache, buff, access); \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
141 } \ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
142 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
143 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
144 union ARM_MMU_FIRST_LEVEL_DESCRIPTOR { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
145 unsigned long word; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
146 struct ARM_MMU_FIRST_LEVEL_FAULT fault; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
147 struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE page_table; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
148 struct ARM_MMU_FIRST_LEVEL_SECTION section; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
149 struct ARM_MMU_FIRST_LEVEL_RESERVED reserved; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
150 }; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
151 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
152 #define ARM_UNCACHEABLE 0 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
153 #define ARM_CACHEABLE 1 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
154 #define ARM_UNBUFFERABLE 0 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
155 #define ARM_BUFFERABLE 1 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
156 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
157 #define ARM_ACCESS_PERM_NONE_NONE 0 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
158 #define ARM_ACCESS_PERM_RO_NONE 0 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
159 #define ARM_ACCESS_PERM_RO_RO 0 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
160 #define ARM_ACCESS_PERM_RW_NONE 1 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
161 #define ARM_ACCESS_PERM_RW_RO 2 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
162 #define ARM_ACCESS_PERM_RW_RW 3 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
163 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
164 void |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
165 hal_mmu_init(void) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
166 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
167 unsigned long ttb_base = SA11X0_RAM_BANK0_BASE + 0x4000; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
168 unsigned long i; |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
169 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
170 /* |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
171 * Set the TTB register |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
172 */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
173 asm volatile ("mcr p15,0,%0,c2,c0,0" : : "r"(ttb_base) /*:*/); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
174 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
175 /* |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
176 * Set the Domain Access Control Register |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
177 */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
178 i = ARM_ACCESS_TYPE_MANAGER(0) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
179 ARM_ACCESS_TYPE_NO_ACCESS(1) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
180 ARM_ACCESS_TYPE_NO_ACCESS(2) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
181 ARM_ACCESS_TYPE_NO_ACCESS(3) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
182 ARM_ACCESS_TYPE_NO_ACCESS(4) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
183 ARM_ACCESS_TYPE_NO_ACCESS(5) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
184 ARM_ACCESS_TYPE_NO_ACCESS(6) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
185 ARM_ACCESS_TYPE_NO_ACCESS(7) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
186 ARM_ACCESS_TYPE_NO_ACCESS(8) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
187 ARM_ACCESS_TYPE_NO_ACCESS(9) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
188 ARM_ACCESS_TYPE_NO_ACCESS(10) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
189 ARM_ACCESS_TYPE_NO_ACCESS(11) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
190 ARM_ACCESS_TYPE_NO_ACCESS(12) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
191 ARM_ACCESS_TYPE_NO_ACCESS(13) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
192 ARM_ACCESS_TYPE_NO_ACCESS(14) | |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
193 ARM_ACCESS_TYPE_NO_ACCESS(15); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
194 asm volatile ("mcr p15,0,%0,c3,c0,0" : : "r"(i) /*:*/); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
195 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
196 /* |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
197 * First clear all TT entries - ie Set them to Faulting |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
198 */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
199 memset((void *)ttb_base, 0, ARM_FIRST_LEVEL_PAGE_TABLE_SIZE); |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
200 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
201 /* Actual Virtual Size Attributes Function */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
202 /* Base Base MB cached? buffered? access permissions */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
203 /* xxx00000 xxx00000 */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
204 X_ARM_MMU_SECTION(0x000, 0x400, 1, ARM_CACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* Boot flash ROMspace */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
205 X_ARM_MMU_SECTION(0x080, 0x080, 4, ARM_CACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* Application flash ROM */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
206 X_ARM_MMU_SECTION(0x100, 0x100, 1, ARM_CACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* Static RAM - 512K */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
207 X_ARM_MMU_SECTION(0x180, 0x180, 1, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* Static select 3 */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
208 X_ARM_MMU_SECTION(0x200, 0x200, 256, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* PCMCIA Socket 0 */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
209 X_ARM_MMU_SECTION(0x300, 0x300, 256, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* PCMCIA Sockets 1 */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
210 X_ARM_MMU_SECTION(0x800, 0x800, 0x400, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* StrongARM(R) Registers */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
211 X_ARM_MMU_SECTION(0xC00, 0x000, 4, ARM_CACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* DRAM Bank 0 */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
212 X_ARM_MMU_SECTION(0xC80, 0x004, 4, ARM_CACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* DRAM Bank 1 */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
213 X_ARM_MMU_SECTION(0xD00, 0x008, 4, ARM_CACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* DRAM Bank 2 */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
214 X_ARM_MMU_SECTION(0xD80, 0x00C, 4, ARM_CACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* DRAM Bank 3 */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
215 X_ARM_MMU_SECTION(0xC00, 0xC00, 256, ARM_UNCACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* DRAM Banks - raw access */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
216 X_ARM_MMU_SECTION(0xE00, 0xE00, 128, ARM_CACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* Zeros (Cache Clean) Bank */ |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
217 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
218 } |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
219 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
220 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
221 // Platform specific initialization |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
222 // |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
223 |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
224 void |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
225 plf_hardware_init(void) |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
226 { |
|
ff3f181b64bd
Merge from eCos master repository on 2000-07-04-20:42:44-BST
jlarmour
parents:
diff
changeset
|
227 } |
