annotate packages/hal/sparclite/sleb/current/include/halboot.si @ 46:797268ecc331 ecos-sw-1999-10-19

Merge from eCos master repository on 1999-10-19-18:55:31-BST
author jlarmour
date Tue, 19 Oct 1999 19:19:52 +0000
parents 443894e2e912
children c38311975d4f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
1 #ifndef CYGONCE_HAL_HALBOOT_SI /* -*-asm-*- */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
2 #define CYGONCE_HAL_HALBOOT_SI
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
3 // ====================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
4 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
5 // <platform>/halboot.si
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
6 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
7 // HAL bootup platform-oriented code (assembler)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
8 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
9 // ====================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
10 //####COPYRIGHTBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
11 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
12 // -------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
13 // The contents of this file are subject to the Cygnus eCos Public License
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
14 // Version 1.0 (the "License"); you may not use this file except in
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
15 // compliance with the License. You may obtain a copy of the License at
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
16 // http://sourceware.cygnus.com/ecos
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
17 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
18 // Software distributed under the License is distributed on an "AS IS"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
19 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
20 // License for the specific language governing rights and limitations under
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
21 // the License.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
22 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
23 // The Original Code is eCos - Embedded Cygnus Operating System, released
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
24 // September 30, 1998.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
25 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
26 // The Initial Developer of the Original Code is Cygnus. Portions created
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
27 // by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
28 // -------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
29 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
30 //####COPYRIGHTEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
31 // ====================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
32 //#####DESCRIPTIONBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
33 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
34 // Author(s): hmt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
35 // Contributors: hmt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
36 // Date: 1999-02-01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
37 // Purpose: Bootup code, platform oriented.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
38 // Description:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
39 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
40 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
41 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
42 // ====================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
43
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
44 // External Platform Initial Setup
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
45 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46 // This should set up RAM and caches, and calm down any external
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47 // interrupt sources.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49 // It is just plain included in vectors.S
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
50 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
51 // RAM has not yet been touched at all; in fact all you have is a
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
52 // register window selected.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
53
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
54
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
55 #ifdef CYG_HAL_STARTUP_RAM
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
56 ! Hit the entry point instructions in situ
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
57 #ifndef CYGIMP_HAL_SPARCLITE_COPY_VECTORS_TO_RAM
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
58 ! *unless* we are going to copy into a different RAM area anyway:
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59 ! copy the real instructions into the vector:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60 rd %tbr, %g1
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
61 andn %g1, 0xfff, %g1 ! clear non-address bits
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62 set real_vector_instructions, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
63 ld [ %l0 ], %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
64 st %l1, [ %g1 ] ! into the vector
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
65 ld [ %l0 + 4 ], %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
66 st %l1, [ %g1 + 4 ] ! into the vector
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
67 ! then invalidate the instruction cache:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
68 set 3, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
69 set 0x00001000, %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
70 set 0x80001000, %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
71 sta %l0, [ %l1 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
72 sta %l0, [ %l2 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
73 ! and the data cache
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
74 sta %l0, [ %l1 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
75 sta %l0, [ %l2 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
76 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79 nop ! should be enough
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
80 #endif // !CYGIMP_HAL_SPARCLITE_COPY_VECTORS_TO_RAM
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81 #endif // CYG_HAL_STARTUP_RAM
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
82
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 #include <cyg/hal/hal_cpu.h> // a copy of CygMon~s cpu.h
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
87 /* Address of clock switch */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
88 #define CLKSW_ADDR 0x01000003
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
89
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
90 /* Address of SW1 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
91 #define SW1_ADDR 0x02000003
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
92
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
93 /* Address of LED bank */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94 #define LED_ADDR 0x02000003
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
95
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
96 #define SRAM_BASE 0x30000000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
97 #define SRAM_END 0x30080000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
99
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100 #define DRAM_BASE 0x04000000 /* base of system DRAM */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101 #define CS3_BASE 0x00000000 /* base of internal resource regs */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
102 #define CS3_ASI 7 /* ASI of internal resource regs */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
103
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
104 // DRAM_BASE2 is defined so that we run the same RAM-sizing code in both
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105 // RAM and ROM startup versions; but the RAM startup one starts RAM sizing
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106 // at 0x043ff000 ie. 4k down from the top of the 4M available.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
107
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
108 #ifdef CYG_HAL_STARTUP_RAM
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
109 #define DRAM_BASE2 DRAM_BASE + 0x00400000 - 0x1000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
110 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
111 #define DRAM_BASE2 DRAM_BASE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
112 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
113
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
114 .macro led val
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
115 sethi %hi(LED_ADDR),%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
116 set \val,%l6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
117 not %l6, %l6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
118 stb %l6,[%l7 + %lo(LED_ADDR)]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
119 .endm
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
120
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
122 * First, setup chip selects.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
123 *
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
124 * NB: The AMR_VAL macro actually inverts the mask bits. For me, it is
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
125 * more natural to write a 1 bit where I want the address compared.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
126 * The sparc registers use 0 bits, instead.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
127 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
128
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
129 /* -CS0 ADDR_MASK:0xfc000000 ASI_MASK:0xfc */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
130 set AMR_VAL(0xfc,0xfc000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
131 mov AMR0,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
132 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
133
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
134 /* -CS1 BASE:0x10000000 ASI:4 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
135 set ARSR_VAL(4,0x10000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
136 mov ARSR1,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
137 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
138 /* -CS1 ADDR MASK:0xf0000000 ASI MASK:0x7 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
139 set AMR_VAL(7,0xf0000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140 mov AMR1,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143 /* -CS2 BASE:0x20000000 ASI:4 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144 set ARSR_VAL(4,0x20000000), %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
145 mov ARSR2,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
146 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
147 /* -CS2 ADDR MASK:0xf0000000 ASI MASK:0x7 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148 set AMR_VAL(7,0xf0000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149 mov AMR2,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
150 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
151
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
152 /* -CS3 BASE:CS3_BASE ASI:CS3_ASI */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153 set ARSR_VAL(CS3_ASI,CS3_BASE),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
154 mov ARSR3,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
155 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
156 /* -CS3 ADDR MASK:0xffff0000 ASI MASK:0x7 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
157 set AMR_VAL(7,0xffff0000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
158 mov AMR3,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
159 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
160
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
161 /* -CS4 BASE: DRAM_BASE ASI:0xb */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
162 set ARSR_VAL(0xb,DRAM_BASE),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
163 mov ARSR4,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
164 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
165 /* -CS4 ADDR MASK:0xfc000000 ASI MASK:0xfc */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
166 set AMR_VAL(0xfc,0xfc000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
167 mov AMR4,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
168 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
169
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
170 /* -CS5 BASE:0x30000000 ASI:0xb */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
171 set ARSR_VAL(0xb,0x30000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
172 mov ARSR5,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
173 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
174 /* -CS5 ADDR MASK:0xfff80000 ASI MASK:0xfc */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175 set AMR_VAL(0xfc,0xfff80000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
176 mov AMR5,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
177 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
178
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
179
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
180 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
181 * Setup wait states. Each wait state register sets the wait states for
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
182 * a pair of chip selects. The lower bits hold the wait state info for
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
183 * the lower numbered chip select.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
184 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
185
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
186 /* -CS0: 5 wait states, -CS1: 7 wait states */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
187 // set WSSR_VAL(7,7,WSSR_WAITEN,5,5,WSSR_WAITEN),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
188 // set WSSR_VAL(4,4,WSSR_WAITEN,5,5,WSSR_WAITEN),%l0 // FOUR -> CS1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
189 set WSSR_VAL(10,10,WSSR_WAITEN,5,5,WSSR_WAITEN),%l0 // TEN -> CS1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
190 mov WSSR0,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
193 /* -CS2: wait states disabled, -CS3: wait states disabled */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
194 set WSSR_VAL(0,0,0,0,0,0),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
195 mov WSSR1,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
196 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
198 /* -CS4: wait states disabled, -CS5: 0 wait states */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
199 set WSSR_VAL(0,0,WSSR_WAITEN|WSSR_OVERRIDE,0,0,0),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
200 mov WSSR2,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
201 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
203 led 0x10
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
204
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
205 /* clear cache/BIU control register */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
206 mov CBIR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
207 sta %g0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
208
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
209 /* Read clock switch to determine the value of the refresh timer */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
210 sethi %hi(CLKSW_ADDR),%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
211 ldub [%l1 + %lo(CLKSW_ADDR)],%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
212 btst 0x80,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213 bne,a 1f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214 mov 10,%l0 /* force to 10MHz if CLKSW-8 is ON */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 umul %l0,15,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 mov DRLD,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
219 mov REFTMR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
220 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 /* read SW1 to get DRAM page size */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223 sethi %hi(SW1_ADDR),%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
224 ldub [%l1 + %lo(SW1_ADDR)],%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225 btst 0x10,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226 be,a 1f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227 mov 0x0e,%l0 /* 1K page if branch taken (SW1-5 is OFF) */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 mov 0x06,%l0 /* 2K page (SW1-5 is OFF) */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
230 mov SPGMR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
231 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
233 led 0x20
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 #ifdef CYG_HAL_STARTUP_ROM
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 /* Turn on all system services */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 mov SSCR_TIMER|SSCR_WAIT|SSCR_CS|SSCR_SAMEPG,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 mov SSCR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
242 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
244
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
245 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247 led 0x30
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
249 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250 * Initialize caches.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
252 sethi %hi(0x1000),%l0 /* bank 1 invalidate */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
253 sethi %hi(0x80000000),%l1 /* bank 2 invalidate */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
254 mov 3,%l2 /* clear lock, lru, and valid bits */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255 sta %l2,[%l0] 0xc /* do it - icache bank 1 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256 sta %l2,[%l0] 0xe /* do it - dcache bank 1 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 sta %l2,[%l0 + %l1] 0xc /* do it - icache bank 2 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258 sta %l2,[%l0 + %l1] 0xe /* do it - dcache bank 2 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
259
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
260 /* now, enable caches and buffers */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
261 mov CBIR_ICEN|CBIR_DCEN|CBIR_PBEN|CBIR_WBEN,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
262 mov CBIR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
263 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
264 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
265 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
266 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
267 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
268
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269 /* enable data and insn bursts */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
270 mov BCR_IBE|BCR_DBE,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
271 mov BCR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
272 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
273 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
274 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
275 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
276 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
277
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
278 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
279 * DRAM setup/test.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
280 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
281 led 0x40
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
282
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
283 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
284 * Test SW1-7 to determine normal or EDO mode.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
285 * SW1-7 ON = EDO
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
286 * SW1-7 OFF = Normal.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
287 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
288 sethi %hi(SW1_ADDR),%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
289 ldub [%l1 + %lo(SW1_ADDR)],%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
290 mov DBANKR_SA04,%l0 /* DRAM starts at 0x04000000 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
291 btst 0x40,%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
292 bne 1f /* branch if SW1-7 is OFF */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
293 mov SSCR_DRAM,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
294 /* EDO DRAM, enable burst in SSCR and EDO in DBANKR */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
295 or %l1,SSCR_BURST,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
296 or %l0,DBANKR_EDO,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
297 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
298 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
299 * Now, test SW1 to get DRAM page and bank size.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
300 * SW1-5 ON = 2k page, 16MB bank. (up to 64MB total)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
301 * SW1-5 OFF = 1k page, 4MB bank. (up to 16MB total)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
302 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
303 btst 0x10,%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
304 bne,a 1f /* branch if OFF */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
305 or %l0,DBANKR_4M|DBANKR_CA10,%l0 /* 1K page */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
306 or %l0,DBANKR_16M|DBANKR_CA11,%l0 /* 2K page */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
307 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
308 mov CS3_BASE+DBANKR,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
309 sta %l0,[%l2] CS3_ASI
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
310
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
311 mov DTIMR_RPS2|DTIMR_CBR3|DTIMR_CAS2|DTIMR_RP2,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
312 mov CS3_BASE+DTIMR,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
313 sta %l0,[%l2] CS3_ASI
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
314
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
315 mov SSCR,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
316 lda [%l2] 1, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
317 or %l0,%l1,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
318 sta %l0,[%l2] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
319
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
320 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
321 * Test SW1 to get potential DRAM limit.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
322 * SW1-5 ON = 2k page, up to 64MB total
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
323 * SW1-5 OFF = 1k page, up to 16MB total
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
324 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
325 btst 0x10,%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
326 bne,a 1f /* branch if OFF */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
327 sethi %hi(DRAM_BASE + 16*1024*1024),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
328 sethi %hi(DRAM_BASE + 64*1024*1024),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
329 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
330
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
331 /* subtract 4 to get last valid DRAM address */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
332 add %l0,-4,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
333
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
334 /* Assume maximim memory and fill with pattern */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
335 set DRAM_BASE2,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
336 set 0xaaaaaaaa,%l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
337 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
338 st %l3,[%l2]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
339 cmp %l2,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
340 blt 1b
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
341 add %l2,4,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
342
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
343 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
344 * Go back, read data and compare with written data.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
345 * Fill in with zero as we go along.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
346 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
347 set DRAM_BASE2,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
348 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
349 ld [%l2],%l4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
350 cmp %l4,%l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
351 bne 2f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
352 st %g0,[%l2]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
353 cmp %l2,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
354 blt,a 1b
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
355 add %l2,4,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
356 2:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
357 led 0x50
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
358
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
359 sub %l2,64,%i6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
360 sethi %hi(DRAM_BASE),%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
361 sub %l2,%l1,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
362 st %l0,[%i6]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
363
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
364 // NOTE that here, the frame pointer is set up to the top of RAM minus a
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
365 // little bit with the size of RAM at %fp (%i6)
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
366 #ifdef CYGIMP_HAL_SPARCLITE_COPY_VECTORS_TO_RAM
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
367
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
368 led 0x58
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
369
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
370 ! copy the trampoline code into the base of RAM (__ram_vectors_start)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
371 ! including the two ~rogue~ instructions...
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
372
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
373 .extern __ram_vectors_start
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
374 ! Using the true address here for the copy makes a badly-aligned
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
375 ! __ram_vectors less likely to hide as an obscure failure:
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
376 set __ram_vectors_start, %l0 ! get the start of RAM
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
377 set rom_vectors, %l1 ! get the start of the trampoline
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
378 set rom_vectors_end, %l2 ! ...and its end.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
379 33:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
380 ldd [ %l1 ], %l4 ! also uses %l5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
381 std %l4, [ %l0 ]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
382 inc 8, %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
383 inc 8, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
384 cmp %l1, %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
385 bl 33b
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
386 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
387
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
388 led 0x59
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
389
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
390 sethi %hi(__ram_vectors_start), %g1 ! get the start of RAM
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
391 andn %g1, 0xfff, %g1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
392 set real_vector_instructions, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
393 ld [ %l0 ], %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
394 st %l1, [ %g1 ] ! into the vector
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
395 ld [ %l0 + 4 ], %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
396 st %l1, [ %g1 + 4 ] ! into the vector
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
397
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
398 led 0x5a
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
399
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
400 ! then invalidate the instruction cache:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
401 set 3, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
402 set 0x00001000, %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
403 set 0x80001000, %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
404 sta %l0, [ %l1 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
405 sta %l0, [ %l2 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
406
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
407 led 0x5b
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
408
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
409 ! and the data cache
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
410 sta %l0, [ %l1 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
411 sta %l0, [ %l2 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
412 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
413 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
414 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
415 nop ! should be enough
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
416
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
417 led 0x5c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
418
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
419 ! and (re)set the tbr, finally.
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
420 sethi %hi(__ram_vectors_start), %g1
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
421 andn %g1, 0xfff, %g1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
422 wr %g1, %tbr ! Traps are at RAM start
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
423 nop ! (__ram_vectors_start)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
424 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
425 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
426
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
427 led 0x5d
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
428
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
429 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
430
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
431 led 0x5f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
432
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
433 #endif // CYGIMP_HAL_SPARCLITE_COPY_VECTORS_TO_RAM (was CYG_HAL_STARTUP_ROM)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
434
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
435 ! turn on caches - copied from the book
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
436 #define set_size 64
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
437 #define ini_tag 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
438 #define adr1 0x00000000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
439 #define adr2 0x80000000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
440 #define step 16
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
441 #define CTL_BITS 0x35
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
442
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
443 set set_size, %l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
444 set adr1, %o1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
445 set adr2, %o2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
446 set ini_tag, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
447 10:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
448 sta %l0, [ %o1 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
449 sta %l0, [ %o1 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
450 sta %l0, [ %o2 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
451 sta %l0, [ %o2 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
452 add %o1, step, %o1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
453 subcc %l7, 1, %l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
454 bne 10b
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
455 add %o2, step, %o2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
456
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
457 set 0, %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
458 set CTL_BITS, %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
459 sta %l2, [ %l1 ] 0x01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
460 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
461 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
462 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
463 nop ! delay to let caches stabilize
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
464
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
465 led 0x60
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
466
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
467 // Now set up the 86940
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
468
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
469 #define TRGM0 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
470 #define TRGM1 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
471 #define REQSNS 8
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
472 #define REQCLR 12
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
473 #define IMASK 16
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
474 #define IRLAT 20
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
475 #define IMODE 24
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
476
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
477 sethi %hi( 0x10000000 ), %l1 ! base address of the 86940 companion
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
478
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
479 set 0xfffe0000, %l4 ! mask all intrs
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
480 add %l1, IMASK, %l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
481 sta %l4, [ %l3 ] 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
482
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
483 set 0x11400000, %l6 ! Channels 14,12,11 into Active Low
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
484 add %l1, TRGM0, %l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
485 sta %l6, [ %l3 ] 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
486
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
487 set 0x05100000, %l6 ! Channels 5,4,2 into Active Low
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
488 add %l1, TRGM1, %l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
489 sta %l6, [ %l3 ] 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
490
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
491 add %l1, REQCLR, %l3 ! clear all pending intrs
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
492 sta %l4, [ %l3 ] 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
493
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
494 set 0x00100000, %l6 ! clear the latch
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
495 add %l1, IRLAT, %l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
496 sta %l6, [ %l3 ] 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
497
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
498 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
499 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
500 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
501
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
502 led 0x70
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
503
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
504 #endif /* CYGONCE_HAL_HALBOOT_SI */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
505 /* EOF halboot.si */