annotate packages/hal/sparclite/sleb/current/include/halboot.si @ 2729:74dbf4c3f2e1 after-copyright-change-20090129

Update all copyright banners to reflect FSF ownership; fix and improve licence text.
author jlarmour
date Thu, 29 Jan 2009 17:47:46 +0000
parents d2c90368aeef
children
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 // ====================================================================
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
10 // ####ECOSGPLCOPYRIGHTBEGIN####
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
11 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
12 // This file is part of eCos, the Embedded Configurable Operating System.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
13 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
14 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
15 // eCos is free software; you can redistribute it and/or modify it under
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
16 // the terms of the GNU General Public License as published by the Free
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
17 // Software Foundation; either version 2 or (at your option) any later
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
18 // version.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
19 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
20 // eCos is distributed in the hope that it will be useful, but WITHOUT
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
21 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
22 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
23 // for more details.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
24 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
25 // You should have received a copy of the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
26 // along with eCos; if not, write to the Free Software Foundation, Inc.,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
27 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
28 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
29 // As a special exception, if other files instantiate templates or use
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
30 // macros or inline functions from this file, or you compile this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
31 // and link it with other works to produce a work based on this file,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
32 // this file does not by itself cause the resulting work to be covered by
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
33 // the GNU General Public License. However the source code for this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
34 // must still be made available in accordance with section (3) of the GNU
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
35 // General Public License v2.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 66
diff changeset
36 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
37 // This exception does not invalidate any other reasons why a work based
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
38 // on this file might be covered by the GNU General Public License.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
39 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 210
diff changeset
40 // ####ECOSGPLCOPYRIGHTEND####
2
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 //#####DESCRIPTIONBEGIN####
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 // Author(s): hmt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
45 // Contributors: hmt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46 // Date: 1999-02-01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47 // Purpose: Bootup code, platform oriented.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48 // Description:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
50 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
51 //
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 // External Platform Initial Setup
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
55 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
56 // 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
57 // interrupt sources.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
58 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59 // It is just plain included in vectors.S
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61 // 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
62 // register window selected.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
63
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 #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
66 ! 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
67 #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
68 ! *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
69 ! copy the real instructions into the vector:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
70 rd %tbr, %g1
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
71 andn %g1, 0xfff, %g1 ! clear non-address bits
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
72 set real_vector_instructions, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
73 ld [ %l0 ], %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
74 st %l1, [ %g1 ] ! into the vector
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
75 ld [ %l0 + 4 ], %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
76 st %l1, [ %g1 + 4 ] ! into the vector
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77 ! then invalidate the instruction cache:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78 set 3, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79 set 0x00001000, %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
80 set 0x80001000, %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81 sta %l0, [ %l1 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
82 sta %l0, [ %l2 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83 ! and the data cache
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 sta %l0, [ %l1 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85 sta %l0, [ %l2 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86 nop
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 ! should be enough
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
90 #endif // !CYGIMP_HAL_SPARCLITE_COPY_VECTORS_TO_RAM
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
91 #endif // CYG_HAL_STARTUP_RAM
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94 #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
95
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 /* Address of clock switch */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98 #define CLKSW_ADDR 0x01000003
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 /* Address of SW1 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101 #define SW1_ADDR 0x02000003
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
102
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
103 /* Address of LED bank */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
104 #define LED_ADDR 0x02000003
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106 #define SRAM_BASE 0x30000000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
107 #define SRAM_END 0x30080000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
108
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 #define DRAM_BASE 0x04000000 /* base of system DRAM */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
111 #define CS3_BASE 0x00000000 /* base of internal resource regs */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
112 #define CS3_ASI 7 /* ASI of internal resource regs */
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 // 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
115 // 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
116 // 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
117
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
118 #ifdef CYG_HAL_STARTUP_RAM
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
119 #define DRAM_BASE2 DRAM_BASE + 0x00400000 - 0x1000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
120 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121 #define DRAM_BASE2 DRAM_BASE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
122 #endif
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 .macro led val
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
125 sethi %hi(LED_ADDR),%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
126 set \val,%l6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
127 not %l6, %l6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
128 stb %l6,[%l7 + %lo(LED_ADDR)]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
129 .endm
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
130
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 * First, setup chip selects.
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 * 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
135 * 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
136 * The sparc registers use 0 bits, instead.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
137 */
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 /* -CS0 ADDR_MASK:0xfc000000 ASI_MASK:0xfc */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140 set AMR_VAL(0xfc,0xfc000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141 mov AMR0,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144 /* -CS1 BASE:0x10000000 ASI:4 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
145 set ARSR_VAL(4,0x10000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
146 mov ARSR1,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
147 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148 /* -CS1 ADDR MASK:0xf0000000 ASI MASK:0x7 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149 set AMR_VAL(7,0xf0000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
150 mov AMR1,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
151 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
152
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153 /* -CS2 BASE:0x20000000 ASI:4 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
154 set ARSR_VAL(4,0x20000000), %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
155 mov ARSR2,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
156 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
157 /* -CS2 ADDR MASK:0xf0000000 ASI MASK:0x7 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
158 set AMR_VAL(7,0xf0000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
159 mov AMR2,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
160 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
161
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
162 /* -CS3 BASE:CS3_BASE ASI:CS3_ASI */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
163 set ARSR_VAL(CS3_ASI,CS3_BASE),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
164 mov ARSR3,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
165 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
166 /* -CS3 ADDR MASK:0xffff0000 ASI MASK:0x7 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
167 set AMR_VAL(7,0xffff0000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
168 mov AMR3,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
169 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
170
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
171 /* -CS4 BASE: DRAM_BASE ASI:0xb */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
172 set ARSR_VAL(0xb,DRAM_BASE),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
173 mov ARSR4,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
174 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175 /* -CS4 ADDR MASK:0xfc000000 ASI MASK:0xfc */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
176 set AMR_VAL(0xfc,0xfc000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
177 mov AMR4,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
178 sta %l0,[%l1] 1
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 /* -CS5 BASE:0x30000000 ASI:0xb */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
181 set ARSR_VAL(0xb,0x30000000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
182 mov ARSR5,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
183 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
184 /* -CS5 ADDR MASK:0xfff80000 ASI MASK:0xfc */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
185 set AMR_VAL(0xfc,0xfff80000),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
186 mov AMR5,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
187 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
188
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 * 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
192 * 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
193 * the lower numbered chip select.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
194 */
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 /* -CS0: 5 wait states, -CS1: 7 wait states */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197 // 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
198 // 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
199 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
200 mov WSSR0,%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 /* -CS2: wait states disabled, -CS3: wait states disabled */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
204 set WSSR_VAL(0,0,0,0,0,0),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
205 mov WSSR1,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
206 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
207
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
208 /* -CS4: wait states disabled, -CS5: 0 wait states */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
209 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
210 mov WSSR2,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
211 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
212
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213 led 0x10
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215 /* clear cache/BIU control register */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 mov CBIR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 sta %g0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
219 /* Read clock switch to determine the value of the refresh timer */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
220 sethi %hi(CLKSW_ADDR),%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221 ldub [%l1 + %lo(CLKSW_ADDR)],%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 btst 0x80,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223 bne,a 1f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
224 mov 10,%l0 /* force to 10MHz if CLKSW-8 is ON */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226 umul %l0,15,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227 mov DRLD,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229 mov REFTMR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
230 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
231
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232 /* read SW1 to get DRAM page size */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
233 sethi %hi(SW1_ADDR),%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234 ldub [%l1 + %lo(SW1_ADDR)],%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 btst 0x10,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 be,a 1f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 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
238 mov 0x06,%l0 /* 2K page (SW1-5 is OFF) */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240 mov SPGMR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
242
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243 led 0x20
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 #ifdef CYG_HAL_STARTUP_ROM
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246 /* Turn on all system services */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247 mov SSCR_TIMER|SSCR_WAIT|SSCR_CS|SSCR_SAMEPG,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248 mov SSCR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
249 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250 nop
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 led 0x30
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258
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 * Initialize caches.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
261 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
262 sethi %hi(0x1000),%l0 /* bank 1 invalidate */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
263 sethi %hi(0x80000000),%l1 /* bank 2 invalidate */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
264 mov 3,%l2 /* clear lock, lru, and valid bits */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
265 sta %l2,[%l0] 0xc /* do it - icache bank 1 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
266 sta %l2,[%l0] 0xe /* do it - dcache bank 1 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
267 sta %l2,[%l0 + %l1] 0xc /* do it - icache bank 2 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
268 sta %l2,[%l0 + %l1] 0xe /* do it - dcache bank 2 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
270 /* now, enable caches and buffers */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
271 mov CBIR_ICEN|CBIR_DCEN|CBIR_PBEN|CBIR_WBEN,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
272 mov CBIR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
273 sta %l0,[%l1] 1
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 nop
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 /* enable data and insn bursts */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
280 mov BCR_IBE|BCR_DBE,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
281 mov BCR,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
282 sta %l0,[%l1] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
283 nop
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
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 * DRAM setup/test.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
290 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
291 led 0x40
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
292
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 * Test SW1-7 to determine normal or EDO mode.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
295 * SW1-7 ON = EDO
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
296 * SW1-7 OFF = Normal.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
297 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
298 sethi %hi(SW1_ADDR),%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
299 ldub [%l1 + %lo(SW1_ADDR)],%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
300 mov DBANKR_SA04,%l0 /* DRAM starts at 0x04000000 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
301 btst 0x40,%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
302 bne 1f /* branch if SW1-7 is OFF */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
303 mov SSCR_DRAM,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
304 /* EDO DRAM, enable burst in SSCR and EDO in DBANKR */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
305 or %l1,SSCR_BURST,%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
306 or %l0,DBANKR_EDO,%l0
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 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
309 * Now, test SW1 to get DRAM page and bank size.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
310 * SW1-5 ON = 2k page, 16MB bank. (up to 64MB total)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
311 * SW1-5 OFF = 1k page, 4MB bank. (up to 16MB total)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
312 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
313 btst 0x10,%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
314 bne,a 1f /* branch if OFF */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
315 or %l0,DBANKR_4M|DBANKR_CA10,%l0 /* 1K page */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
316 or %l0,DBANKR_16M|DBANKR_CA11,%l0 /* 2K page */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
317 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
318 mov CS3_BASE+DBANKR,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
319 sta %l0,[%l2] CS3_ASI
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 mov DTIMR_RPS2|DTIMR_CBR3|DTIMR_CAS2|DTIMR_RP2,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
322 mov CS3_BASE+DTIMR,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
323 sta %l0,[%l2] CS3_ASI
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 mov SSCR,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
326 lda [%l2] 1, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
327 or %l0,%l1,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
328 sta %l0,[%l2] 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
329
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 * Test SW1 to get potential DRAM limit.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
332 * SW1-5 ON = 2k page, up to 64MB total
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
333 * SW1-5 OFF = 1k page, up to 16MB total
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
334 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
335 btst 0x10,%l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
336 bne,a 1f /* branch if OFF */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
337 sethi %hi(DRAM_BASE + 16*1024*1024),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
338 sethi %hi(DRAM_BASE + 64*1024*1024),%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
339 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
340
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
341 /* subtract 4 to get last valid DRAM address */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
342 add %l0,-4,%l0
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 /* Assume maximim memory and fill with pattern */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
345 set DRAM_BASE2,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
346 set 0xaaaaaaaa,%l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
347 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
348 st %l3,[%l2]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
349 cmp %l2,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
350 blt 1b
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
351 add %l2,4,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
352
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 * Go back, read data and compare with written data.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
355 * Fill in with zero as we go along.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
356 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
357 set DRAM_BASE2,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
358 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
359 ld [%l2],%l4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
360 cmp %l4,%l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
361 bne 2f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
362 st %g0,[%l2]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
363 cmp %l2,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
364 blt,a 1b
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
365 add %l2,4,%l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
366 2:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
367 led 0x50
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
368
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
369 sub %l2,64,%i6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
370 sethi %hi(DRAM_BASE),%l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
371 sub %l2,%l1,%l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
372 st %l0,[%i6]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
373
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
374 // 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
375 // 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
376 #ifdef CYGIMP_HAL_SPARCLITE_COPY_VECTORS_TO_RAM
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
377
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
378 led 0x58
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
379
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
380 ! 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
381 ! 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
382
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
383 .extern __ram_vectors_start
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
384 ! 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
385 ! __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
386 set __ram_vectors_start, %l0 ! get the start of RAM
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
387 set rom_vectors, %l1 ! get the start of the trampoline
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
388 set rom_vectors_end, %l2 ! ...and its end.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
389 33:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
390 ldd [ %l1 ], %l4 ! also uses %l5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
391 std %l4, [ %l0 ]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
392 inc 8, %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
393 inc 8, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
394 cmp %l1, %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
395 bl 33b
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
396 nop
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 0x59
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
399
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
400 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
401 andn %g1, 0xfff, %g1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
402 set real_vector_instructions, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
403 ld [ %l0 ], %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
404 st %l1, [ %g1 ] ! into the vector
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
405 ld [ %l0 + 4 ], %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
406 st %l1, [ %g1 + 4 ] ! into the vector
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
407
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
408 led 0x5a
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
409
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
410 ! then invalidate the instruction cache:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
411 set 3, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
412 set 0x00001000, %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
413 set 0x80001000, %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
414 sta %l0, [ %l1 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
415 sta %l0, [ %l2 ] 0x0c
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 0x5b
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 the data cache
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
420 sta %l0, [ %l1 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
421 sta %l0, [ %l2 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
422 nop
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 ! should be enough
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 0x5c
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 ! 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
430 sethi %hi(__ram_vectors_start), %g1
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
431 andn %g1, 0xfff, %g1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
432 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
433 nop ! (__ram_vectors_start)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
434 nop
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
437 led 0x5d
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
438
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
439 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
440
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
441 led 0x5f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
442
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 2
diff changeset
443 #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
444
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
445 ! turn on caches - copied from the book
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
446 #define set_size 64
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
447 #define ini_tag 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
448 #define adr1 0x00000000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
449 #define adr2 0x80000000
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
450 #define step 16
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
451 #define CTL_BITS 0x35
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
452
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
453 set set_size, %l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
454 set adr1, %o1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
455 set adr2, %o2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
456 set ini_tag, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
457 10:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
458 sta %l0, [ %o1 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
459 sta %l0, [ %o1 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
460 sta %l0, [ %o2 ] 0x0c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
461 sta %l0, [ %o2 ] 0x0e
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
462 add %o1, step, %o1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
463 subcc %l7, 1, %l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
464 bne 10b
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
465 add %o2, step, %o2
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 set 0, %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
468 set CTL_BITS, %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
469 sta %l2, [ %l1 ] 0x01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
470 nop
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 ! delay to let caches stabilize
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
474
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
475 led 0x60
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 // Now set up the 86940
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 #define TRGM0 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
480 #define TRGM1 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
481 #define REQSNS 8
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
482 #define REQCLR 12
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
483 #define IMASK 16
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
484 #define IRLAT 20
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
485 #define IMODE 24
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 sethi %hi( 0x10000000 ), %l1 ! base address of the 86940 companion
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
488
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
489 set 0xfffe0000, %l4 ! mask all intrs
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
490 add %l1, IMASK, %l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
491 sta %l4, [ %l3 ] 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
492
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
493 set 0x11400000, %l6 ! Channels 14,12,11 into Active Low
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
494 add %l1, TRGM0, %l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
495 sta %l6, [ %l3 ] 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
496
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
497 set 0x05100000, %l6 ! Channels 5,4,2 into Active Low
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
498 add %l1, TRGM1, %l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
499 sta %l6, [ %l3 ] 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
500
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
501 add %l1, REQCLR, %l3 ! clear all pending intrs
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
502 sta %l4, [ %l3 ] 4
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 set 0x00100000, %l6 ! clear the latch
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
505 add %l1, IRLAT, %l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
506 sta %l6, [ %l3 ] 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
507
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
508 nop
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
512 led 0x70
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
513
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
514 #endif /* CYGONCE_HAL_HALBOOT_SI */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
515 /* EOF halboot.si */