annotate packages/hal/sparclite/sleb/current/include/halboot.si @ 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 74dbf4c3f2e1
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 // ====================================================================
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
10 //####ECOSGPLCOPYRIGHTBEGIN####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
11 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
12 // 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: 66
diff changeset
13 // 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: 66
diff changeset
14 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
15 // 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: 66
diff changeset
16 // 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: 66
diff changeset
17 // 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: 66
diff changeset
18 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
19 // 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: 66
diff changeset
20 // 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: 66
diff changeset
21 // 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: 66
diff changeset
22 // for more details.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
23 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
24 // 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: 66
diff changeset
25 // 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: 66
diff changeset
26 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
27 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
28 // 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: 66
diff changeset
29 // 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: 66
diff changeset
30 // 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: 66
diff changeset
31 // 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: 66
diff changeset
32 // 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: 66
diff changeset
33 // 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: 66
diff changeset
34 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
35 // 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: 66
diff changeset
36 // 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: 66
diff changeset
37 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
38 // 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
39 // at http://sources.redhat.com/ecos/ecos-license/
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
40 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
41 //####ECOSGPLCOPYRIGHTEND####
2
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 //#####DESCRIPTIONBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
44 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
45 // Author(s): hmt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46 // Contributors: hmt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47 // Date: 1999-02-01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48 // Purpose: Bootup code, platform oriented.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49 // Description:
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 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
52 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
53 // ====================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
54
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
55 // External Platform Initial Setup
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
56 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
57 // 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
58 // interrupt sources.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60 // It is just plain included in vectors.S
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62 // 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
63 // register window selected.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
64
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
65
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
66 #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
67 ! 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
68 #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
69 ! *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
70 ! copy the real instructions into the vector:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
71 rd %tbr, %g1
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
72 andn %g1, 0xfff, %g1 ! clear non-address bits
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
73 set real_vector_instructions, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
74 ld [ %l0 ], %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
75 st %l1, [ %g1 ] ! into the vector
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
76 ld [ %l0 + 4 ], %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77 st %l1, [ %g1 + 4 ] ! into the vector
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78 ! then invalidate the instruction cache:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79 set 3, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
80 set 0x00001000, %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81 set 0x80001000, %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
82 sta %l0, [ %l1 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83 sta %l0, [ %l2 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 ! and the data cache
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85 sta %l0, [ %l1 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86 sta %l0, [ %l2 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
87 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
88 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
89 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
90 nop ! should be enough
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
91 #endif // !CYGIMP_HAL_SPARCLITE_COPY_VECTORS_TO_RAM
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
92 #endif // CYG_HAL_STARTUP_RAM
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
93
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
95 #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
96
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
97
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98 /* Address of clock switch */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
99 #define CLKSW_ADDR 0x01000003
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101 /* Address of SW1 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
102 #define SW1_ADDR 0x02000003
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 /* Address of LED bank */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105 #define LED_ADDR 0x02000003
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
107 #define SRAM_BASE 0x30000000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
108 #define SRAM_END 0x30080000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
109
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
110
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
111 #define DRAM_BASE 0x04000000 /* base of system DRAM */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
112 #define CS3_BASE 0x00000000 /* base of internal resource regs */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
113 #define CS3_ASI 7 /* ASI of internal resource regs */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
114
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
115 // 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
116 // 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
117 // 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
118
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
119 #ifdef CYG_HAL_STARTUP_RAM
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
120 #define DRAM_BASE2 DRAM_BASE + 0x00400000 - 0x1000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
122 #define DRAM_BASE2 DRAM_BASE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
123 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
124
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
125 .macro led val
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
126 sethi %hi(LED_ADDR),%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
127 set \val,%l6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
128 not %l6, %l6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
129 stb %l6,[%l7 + %lo(LED_ADDR)]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
130 .endm
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
131
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
132 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
133 * First, setup chip selects.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
134 *
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
135 * 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
136 * 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
137 * The sparc registers use 0 bits, instead.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
138 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
139
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140 /* -CS0 ADDR_MASK:0xfc000000 ASI_MASK:0xfc */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141 set AMR_VAL(0xfc,0xfc000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142 mov AMR0,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
145 /* -CS1 BASE:0x10000000 ASI:4 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
146 set ARSR_VAL(4,0x10000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
147 mov ARSR1,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149 /* -CS1 ADDR MASK:0xf0000000 ASI MASK:0x7 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
150 set AMR_VAL(7,0xf0000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
151 mov AMR1,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
152 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
154 /* -CS2 BASE:0x20000000 ASI:4 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
155 set ARSR_VAL(4,0x20000000), %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
156 mov ARSR2,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
157 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
158 /* -CS2 ADDR MASK:0xf0000000 ASI MASK:0x7 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
159 set AMR_VAL(7,0xf0000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
160 mov AMR2,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
161 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
162
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
163 /* -CS3 BASE:CS3_BASE ASI:CS3_ASI */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
164 set ARSR_VAL(CS3_ASI,CS3_BASE),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
165 mov ARSR3,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
166 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
167 /* -CS3 ADDR MASK:0xffff0000 ASI MASK:0x7 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
168 set AMR_VAL(7,0xffff0000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
169 mov AMR3,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
170 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
171
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
172 /* -CS4 BASE: DRAM_BASE ASI:0xb */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
173 set ARSR_VAL(0xb,DRAM_BASE),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
174 mov ARSR4,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
176 /* -CS4 ADDR MASK:0xfc000000 ASI MASK:0xfc */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
177 set AMR_VAL(0xfc,0xfc000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
178 mov AMR4,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
179 sta %l0,[%l1] 1
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 /* -CS5 BASE:0x30000000 ASI:0xb */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
182 set ARSR_VAL(0xb,0x30000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
183 mov ARSR5,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
184 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
185 /* -CS5 ADDR MASK:0xfff80000 ASI MASK:0xfc */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
186 set AMR_VAL(0xfc,0xfff80000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
187 mov AMR5,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
188 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
189
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
190
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192 * 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
193 * 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
194 * the lower numbered chip select.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
195 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
196
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197 /* -CS0: 5 wait states, -CS1: 7 wait states */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
198 // 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
199 // 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
200 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
201 mov WSSR0,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
203
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
204 /* -CS2: wait states disabled, -CS3: wait states disabled */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
205 set WSSR_VAL(0,0,0,0,0,0),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
206 mov WSSR1,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
207 sta %l0,[%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 /* -CS4: wait states disabled, -CS5: 0 wait states */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
210 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
211 mov WSSR2,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
212 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214 led 0x10
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 /* clear cache/BIU control register */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 mov CBIR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218 sta %g0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
219
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
220 /* Read clock switch to determine the value of the refresh timer */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221 sethi %hi(CLKSW_ADDR),%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 ldub [%l1 + %lo(CLKSW_ADDR)],%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223 btst 0x80,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
224 bne,a 1f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225 mov 10,%l0 /* force to 10MHz if CLKSW-8 is ON */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227 umul %l0,15,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 mov DRLD,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
230 mov REFTMR,%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 /* read SW1 to get DRAM page size */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234 sethi %hi(SW1_ADDR),%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 ldub [%l1 + %lo(SW1_ADDR)],%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 btst 0x10,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 be,a 1f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 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
239 mov 0x06,%l0 /* 2K page (SW1-5 is OFF) */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241 mov SPGMR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
242 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
244 led 0x20
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
245
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246 #ifdef CYG_HAL_STARTUP_ROM
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247 /* Turn on all system services */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248 mov SSCR_TIMER|SSCR_WAIT|SSCR_CS|SSCR_SAMEPG,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
249 mov SSCR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
252 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
253 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
254 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258 led 0x30
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 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
261 * Initialize caches.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
262 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
263 sethi %hi(0x1000),%l0 /* bank 1 invalidate */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
264 sethi %hi(0x80000000),%l1 /* bank 2 invalidate */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
265 mov 3,%l2 /* clear lock, lru, and valid bits */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
266 sta %l2,[%l0] 0xc /* do it - icache bank 1 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
267 sta %l2,[%l0] 0xe /* do it - dcache bank 1 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
268 sta %l2,[%l0 + %l1] 0xc /* do it - icache bank 2 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269 sta %l2,[%l0 + %l1] 0xe /* do it - dcache bank 2 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
270
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
271 /* now, enable caches and buffers */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
272 mov CBIR_ICEN|CBIR_DCEN|CBIR_PBEN|CBIR_WBEN,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
273 mov CBIR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
274 sta %l0,[%l1] 1
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 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
278 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
279
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
280 /* enable data and insn bursts */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
281 mov BCR_IBE|BCR_DBE,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
282 mov BCR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
283 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
284 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
285 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
286 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
287 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
288
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
289 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
290 * DRAM setup/test.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
291 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
292 led 0x40
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
293
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
294 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
295 * Test SW1-7 to determine normal or EDO mode.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
296 * SW1-7 ON = EDO
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
297 * SW1-7 OFF = Normal.
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 sethi %hi(SW1_ADDR),%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
300 ldub [%l1 + %lo(SW1_ADDR)],%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
301 mov DBANKR_SA04,%l0 /* DRAM starts at 0x04000000 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
302 btst 0x40,%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
303 bne 1f /* branch if SW1-7 is OFF */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
304 mov SSCR_DRAM,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
305 /* EDO DRAM, enable burst in SSCR and EDO in DBANKR */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
306 or %l1,SSCR_BURST,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
307 or %l0,DBANKR_EDO,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
308 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
309 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
310 * Now, test SW1 to get DRAM page and bank size.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
311 * SW1-5 ON = 2k page, 16MB bank. (up to 64MB total)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
312 * SW1-5 OFF = 1k page, 4MB bank. (up to 16MB total)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
313 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
314 btst 0x10,%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
315 bne,a 1f /* branch if OFF */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
316 or %l0,DBANKR_4M|DBANKR_CA10,%l0 /* 1K page */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
317 or %l0,DBANKR_16M|DBANKR_CA11,%l0 /* 2K page */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
318 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
319 mov CS3_BASE+DBANKR,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
320 sta %l0,[%l2] CS3_ASI
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
321
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
322 mov DTIMR_RPS2|DTIMR_CBR3|DTIMR_CAS2|DTIMR_RP2,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
323 mov CS3_BASE+DTIMR,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
324 sta %l0,[%l2] CS3_ASI
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
325
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
326 mov SSCR,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
327 lda [%l2] 1, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
328 or %l0,%l1,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
329 sta %l0,[%l2] 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 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
332 * Test SW1 to get potential DRAM limit.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
333 * SW1-5 ON = 2k page, up to 64MB total
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
334 * SW1-5 OFF = 1k page, up to 16MB total
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
335 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
336 btst 0x10,%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
337 bne,a 1f /* branch if OFF */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
338 sethi %hi(DRAM_BASE + 16*1024*1024),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
339 sethi %hi(DRAM_BASE + 64*1024*1024),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
340 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
341
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
342 /* subtract 4 to get last valid DRAM address */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
343 add %l0,-4,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
344
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
345 /* Assume maximim memory and fill with pattern */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
346 set DRAM_BASE2,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
347 set 0xaaaaaaaa,%l3
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 st %l3,[%l2]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
350 cmp %l2,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
351 blt 1b
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
352 add %l2,4,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
353
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
354 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
355 * Go back, read data and compare with written data.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
356 * Fill in with zero as we go along.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
357 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
358 set DRAM_BASE2,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
359 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
360 ld [%l2],%l4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
361 cmp %l4,%l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
362 bne 2f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
363 st %g0,[%l2]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
364 cmp %l2,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
365 blt,a 1b
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
366 add %l2,4,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
367 2:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
368 led 0x50
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
369
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
370 sub %l2,64,%i6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
371 sethi %hi(DRAM_BASE),%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
372 sub %l2,%l1,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
373 st %l0,[%i6]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
374
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
375 // 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
376 // 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
377 #ifdef CYGIMP_HAL_SPARCLITE_COPY_VECTORS_TO_RAM
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
378
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
379 led 0x58
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
380
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
381 ! 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
382 ! 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
383
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
384 .extern __ram_vectors_start
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
385 ! 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
386 ! __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
387 set __ram_vectors_start, %l0 ! get the start of RAM
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
388 set rom_vectors, %l1 ! get the start of the trampoline
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
389 set rom_vectors_end, %l2 ! ...and its end.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
390 33:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
391 ldd [ %l1 ], %l4 ! also uses %l5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
392 std %l4, [ %l0 ]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
393 inc 8, %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
394 inc 8, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
395 cmp %l1, %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
396 bl 33b
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
397 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
398
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
399 led 0x59
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
400
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
401 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
402 andn %g1, 0xfff, %g1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
403 set real_vector_instructions, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
404 ld [ %l0 ], %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
405 st %l1, [ %g1 ] ! into the vector
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
406 ld [ %l0 + 4 ], %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
407 st %l1, [ %g1 + 4 ] ! into the vector
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 led 0x5a
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
410
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
411 ! then invalidate the instruction cache:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
412 set 3, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
413 set 0x00001000, %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
414 set 0x80001000, %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
415 sta %l0, [ %l1 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
416 sta %l0, [ %l2 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
417
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
418 led 0x5b
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
419
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
420 ! and the data cache
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
421 sta %l0, [ %l1 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
422 sta %l0, [ %l2 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
423 nop
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 nop ! should be enough
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
427
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
428 led 0x5c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
429
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
430 ! 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
431 sethi %hi(__ram_vectors_start), %g1
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
432 andn %g1, 0xfff, %g1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
433 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
434 nop ! (__ram_vectors_start)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
435 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
436 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
437
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
438 led 0x5d
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
439
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
440 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
441
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
442 led 0x5f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
443
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
444 #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
445
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
446 ! turn on caches - copied from the book
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
447 #define set_size 64
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
448 #define ini_tag 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
449 #define adr1 0x00000000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
450 #define adr2 0x80000000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
451 #define step 16
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
452 #define CTL_BITS 0x35
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
453
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
454 set set_size, %l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
455 set adr1, %o1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
456 set adr2, %o2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
457 set ini_tag, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
458 10:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
459 sta %l0, [ %o1 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
460 sta %l0, [ %o1 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
461 sta %l0, [ %o2 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
462 sta %l0, [ %o2 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
463 add %o1, step, %o1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
464 subcc %l7, 1, %l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
465 bne 10b
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
466 add %o2, step, %o2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
467
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
468 set 0, %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
469 set CTL_BITS, %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
470 sta %l2, [ %l1 ] 0x01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
471 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
472 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
473 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
474 nop ! delay to let caches stabilize
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
475
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
476 led 0x60
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
477
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
478 // Now set up the 86940
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
479
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
480 #define TRGM0 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
481 #define TRGM1 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
482 #define REQSNS 8
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
483 #define REQCLR 12
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
484 #define IMASK 16
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
485 #define IRLAT 20
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
486 #define IMODE 24
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
487
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
488 sethi %hi( 0x10000000 ), %l1 ! base address of the 86940 companion
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
489
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
490 set 0xfffe0000, %l4 ! mask all intrs
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
491 add %l1, IMASK, %l3
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 0x11400000, %l6 ! Channels 14,12,11 into Active Low
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
495 add %l1, TRGM0, %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 set 0x05100000, %l6 ! Channels 5,4,2 into Active Low
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
499 add %l1, TRGM1, %l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
500 sta %l6, [ %l3 ] 4
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 add %l1, REQCLR, %l3 ! clear all pending intrs
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
503 sta %l4, [ %l3 ] 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
504
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
505 set 0x00100000, %l6 ! clear the latch
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
506 add %l1, IRLAT, %l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
507 sta %l6, [ %l3 ] 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
508
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
509 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
510 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
511 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
512
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
513 led 0x70
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
514
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
515 #endif /* CYGONCE_HAL_HALBOOT_SI */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
516 /* EOF halboot.si */