OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [hal/] [powerpc/] [ec555/] [current/] [src/] [ec555.S] - Blame information for rev 786

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 786 skrzyp
##=============================================================================
2
##
3
##      ec555.S
4
##
5
##      ec555 board hardware setup
6
##
7
##=============================================================================
8
## ####ECOSGPLCOPYRIGHTBEGIN####
9
## -------------------------------------------
10
## This file is part of eCos, the Embedded Configurable Operating System.
11
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
12
##
13
## eCos is free software; you can redistribute it and/or modify it under
14
## the terms of the GNU General Public License as published by the Free
15
## Software Foundation; either version 2 or (at your option) any later
16
## version.
17
##
18
## eCos is distributed in the hope that it will be useful, but WITHOUT
19
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20
## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
21
## for more details.
22
##
23
## You should have received a copy of the GNU General Public License
24
## along with eCos; if not, write to the Free Software Foundation, Inc.,
25
## 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
26
##
27
## As a special exception, if other files instantiate templates or use
28
## macros or inline functions from this file, or you compile this file
29
## and link it with other works to produce a work based on this file,
30
## this file does not by itself cause the resulting work to be covered by
31
## the GNU General Public License. However the source code for this file
32
## must still be made available in accordance with section (3) of the GNU
33
## General Public License v2.
34
##
35
## This exception does not invalidate any other reasons why a work based
36
## on this file might be covered by the GNU General Public License.
37
## -------------------------------------------
38
## ####ECOSGPLCOPYRIGHTEND####
39
##=============================================================================
40
#######DESCRIPTIONBEGIN####
41
##
42
## Author(s):   Bob Koninckx
43
## Contributors:Bob Koninckx
44
## Date:        2002-01-01
45
## Purpose:     ec555 board hardware setup
46
## Description: This file contains any code needed to initialize the
47
##              hardware on a ec555 mpc555 board.
48
##
49
######DESCRIPTIONEND####
50
##
51
##=============================================================================
52
 
53
#include 
54
 
55
#include 
56
#include 
57
 
58
#include 
59
#ifdef CYGPKG_DEVS_ETH_POWERPC_EC555
60
#include 
61
#endif
62
 
63
## FIXME
64
## The following probably belongs in the variant hal rather than the board specifics ...
65
#ifdef CYGPKG_DEVICES_WATCHDOG_MPC5xx
66
#include 
67
#define CYG_SYPCR 0x0000ff8e | (CYGNUM_DEVICES_WATCHDOG_POWERPC_MPC5XX_RELOAD << 16) | CYGDAT_DEVICES_WATCHDOG_POWERPC_MPC5XX_PRESCALE
68
#else
69
#define CYG_SYPCR 0x0000ff88
70
#endif
71
 
72
#define ADDRESS_MASK_1MB         0xfff00000
73
#define ADDRESS_MASK_2MB         0xffe00000
74
#define ADDRESS_MASK_4MB         0xffc00000
75
#define ADDRESS_MASK_8MB         0xff800000
76
#define ADDRESS_MASK_16MB        0xff000000
77
 
78
#define EC555_RAM_BASE_ADDRESS   0x01000000
79
#define EC555_FLASH_BASE_ADDRESS 0x02000000
80
#define EC555_CS2_BASE_ADDRESS   0x04000000
81
#define EC555_CS3_BASE_ADDRESS   0x08000000
82
 
83
#if defined(CYGHWR_HAL_EC555_BOARD_VARIANT_F02_S01)
84
#define EC555_RAM_ADDRESS_MASK   ADDRESS_MASK_1MB
85
#define EC555_FLASH_ADDRESS_MASK ADDRESS_MASK_2MB
86
#elif defined(CYGHWR_HAL_EC555_BOARD_VARIANT_F04_S02)
87
#define EC555_RAM_ADDRESS_MASK   ADDRESS_MASK_2MB
88
#define EC555_FLASH_ADDRESS_MASK ADDRESS_MASK_4MB
89
#elif defined(CYGHWR_HAL_EC555_BOARD_VARIANT_F08_S04)
90
#define EC555_RAM_ADDRESS_MASK   ADDRESS_MASK_4MB
91
#define EC555_FLASH_ADDRESS_MASK ADDRESS_MASK_8MB
92
#elif defined(CYGHWR_HAL_EC555_BOARD_VARIANT_F08_S08)
93
#define EC555_RAM_ADDRESS_MASK   ADDRESS_MASK_8MB
94
#define EC555_FLASH_ADDRESS_MASK ADDRESS_MASK_16MB
95
#else
96
#error "EC555 Board variant unspecified"
97
#endif
98
 
99
#define EC555_CS2_ADDRESS_MASK   0xffff8000
100
#define EC555_CS3_ADDRESS_MASK   0xffff8000
101
 
102
#------------------------------------------------------------------------------
103
 
104
        .globl  hal_hardware_init
105
hal_hardware_init:
106
#if defined(CYGPKG_HAL_POWERPC_EC555) && defined(CYGPKG_HAL_POWERPC_MPC5xx)
107
        lwi     r3, CYGARC_REG_IMM_BASE             # Base address of control registers
108
 
109
#if defined(CYG_HAL_STARTUP_ROM)
110
        // Burst enable
111
        lwi     r0, 0x00002000
112
        mtspr   560, r0
113
 
114
        // FIXME
115
        // The following probably belongs in the variant hal rather than the board specifics ...
116
        // Disable / enable the Watchdog
117
        lwi     r4, CYG_SYPCR
118
        stw     r4, (CYGARC_REG_IMM_SYPCR-CYGARC_REG_IMM_BASE)(r3)
119
        lwi     r4, 0x00000000
120
        stw     r4, (CYGARC_REG_IMM_SIUMCR-CYGARC_REG_IMM_BASE)(r3)
121
 
122
        // Unlock locked registers
123
        lwi     r4, 0x55ccaa33
124
        stw     r4, (CYGARC_REG_IMM_TBSCRK-CYGARC_REG_IMM_BASE)(r3)
125
        stw     r4, (CYGARC_REG_IMM_TBREF0K-CYGARC_REG_IMM_BASE)(r3)
126
        stw     r4, (CYGARC_REG_IMM_TBREF1K-CYGARC_REG_IMM_BASE)(r3)
127
        stw     r4, (CYGARC_REG_IMM_TBK-CYGARC_REG_IMM_BASE)(r3)
128
        stw     r4, (CYGARC_REG_IMM_RTCSCK-CYGARC_REG_IMM_BASE)(r3)
129
        stw     r4, (CYGARC_REG_IMM_RTCK-CYGARC_REG_IMM_BASE)(r3)
130
        stw     r4, (CYGARC_REG_IMM_RTSECK-CYGARC_REG_IMM_BASE)(r3)
131
        stw     r4, (CYGARC_REG_IMM_RTCALK-CYGARC_REG_IMM_BASE)(r3)
132
        stw     r4, (CYGARC_REG_IMM_PISCRK-CYGARC_REG_IMM_BASE)(r3)
133
        stw     r4, (CYGARC_REG_IMM_PITCK-CYGARC_REG_IMM_BASE)(r3)
134
        stw     r4, (CYGARC_REG_IMM_SCCRK-CYGARC_REG_IMM_BASE)(r3)
135
        stw     r4, (CYGARC_REG_IMM_PLPRCRK-CYGARC_REG_IMM_BASE)(r3)
136
        stw     r4, (CYGARC_REG_IMM_RSRK-CYGARC_REG_IMM_BASE)(r3)
137
 
138
        // Either Redboot or BDM will have already done it otherwise
139
        // Boost the clock to 40MHz
140
        lwi     r4, 0x03000000
141
        stw     r4, (CYGARC_REG_IMM_SCCR-CYGARC_REG_IMM_BASE)(r3)
142
        lwi     r4, 0x009150c0
143
        stw     r4, (CYGARC_REG_IMM_PLPRCR-CYGARC_REG_IMM_BASE)(r3)
144
        lwi     r4, 0x0080
145
        sth     r4, (CYGARC_REG_IMM_COLIR-CYGARC_REG_IMM_BASE)(r3)
146
 
147
        // Set up the memory map
148
        // Do NOT write protect the flash memory, flash drivers won't work
149
        // if we do
150
 
151
        // flash banks
152
        lwi     r4, (EC555_FLASH_BASE_ADDRESS | 0x00000003)
153
        stw     r4, (CYGARC_REG_IMM_BR0-CYGARC_REG_IMM_BASE)(r3)
154
        lwi     r4, (EC555_FLASH_ADDRESS_MASK | 0x00000530)
155
        stw     r4, (CYGARC_REG_IMM_OR0-CYGARC_REG_IMM_BASE)(r3)
156
 
157
        // ram banks
158
        lwi     r4, (EC555_RAM_BASE_ADDRESS | 0x00000011)
159
        stw     r4, (CYGARC_REG_IMM_BR1-CYGARC_REG_IMM_BASE)(r3)
160
        lwi     r4, (EC555_RAM_ADDRESS_MASK | 0x00000000)
161
        stw     r4, (CYGARC_REG_IMM_OR1-CYGARC_REG_IMM_BASE)(r3)
162
#endif
163
 
164
#ifdef CYGPKG_DEVS_ETH_POWERPC_EC555
165
#if   (CYGNUM_DEVS_ETH_POWERPC_EC555_ETH0_CS == 2)
166
        lwi     r4, (EC555_CS2_BASE_ADDRESS | 0x00000803)
167
        stw     r4, (CYGARC_REG_IMM_BR2-CYGARC_REG_IMM_BASE)(r3)
168
        lwi     r4, 0xffff8ca0
169
        stw     r4, (CYGARC_REG_IMM_OR2-CYGARC_REG_IMM_BASE)(r3)
170
 
171
        lwi     r4, EC555_CS3_BASE_ADDRESS
172
        stw     r4, (CYGARC_REG_IMM_BR3-CYGARC_REG_IMM_BASE)(r3)
173
        lwi     r4, EC555_CS3_ADDRESS_MASK
174
        stw     r4, (CYGARC_REG_IMM_OR3-CYGARC_REG_IMM_BASE)(r3)
175
#elif (CYGNUM_DEVS_ETH_POWERPC_EC555_ETH0_CS == 3)
176
        lwi     r4, EC555_CS2_BASE_ADDRESS
177
        stw     r4, (CYGARC_REG_IMM_BR2-CYGARC_REG_IMM_BASE)(r3)
178
        lwi     r4, EC555_CS2_ADDRESS_MASK
179
        stw     r4, (CYGARC_REG_IMM_OR2-CYGARC_REG_IMM_BASE)(r3)
180
 
181
        lwi     r4, (EC555_CS3_BASE_ADDRESS | 0x00000803)
182
        stw     r4, (CYGARC_REG_IMM_BR3-CYGARC_REG_IMM_BASE)(r3)
183
        lwi     r4, 0xffff8ca0
184
        stw     r4, (CYGARC_REG_IMM_OR3-CYGARC_REG_IMM_BASE)(r3)
185
#else
186
#error "Invalid chip select for ethernet card specified"
187
#endif
188
#else
189
        lwi     r4, EC555_CS2_BASE_ADDRESS
190
        stw     r4, (CYGARC_REG_IMM_BR2-CYGARC_REG_IMM_BASE)(r3)
191
        lwi     r4, EC555_CS2_ADDRESS_MASK
192
        stw     r4, (CYGARC_REG_IMM_OR2-CYGARC_REG_IMM_BASE)(r3)
193
 
194
        lwi     r4, EC555_CS3_BASE_ADDRESS
195
        stw     r4, (CYGARC_REG_IMM_BR3-CYGARC_REG_IMM_BASE)(r3)
196
        lwi     r4, EC555_CS3_ADDRESS_MASK
197
        stw     r4, (CYGARC_REG_IMM_OR3-CYGARC_REG_IMM_BASE)(r3)
198
#endif
199
 
200
#if defined(CYGSEM_HAL_POWERPC_MPC5XX_IFLASH_DUAL_MAP)
201
        lwi     r4, 1
202
#else
203
        lwi     r4, 0
204
#endif
205
        stw     r4, (CYGARC_REG_IMM_DMBR-CYGARC_REG_IMM_BASE)(r3)
206
        lwi     r4, 0
207
        stw     r4, (CYGARC_REG_IMM_DMOR-CYGARC_REG_IMM_BASE)(r3)
208
 
209
        // Enable the time base, but do _not_ set the freeze flag
210
        lwi     r4, 0xc1
211
        sth     r4, (CYGARC_REG_IMM_TBSCR-CYGARC_REG_IMM_BASE)(r3)
212
 
213
        // RTC is clocked by 4MHz crystal, set the freeze flag
214
        lwi     r4, 0xd2
215
        sth     r4, (CYGARC_REG_IMM_RTCSC-CYGARC_REG_IMM_BASE)(r3)
216
 
217
        // Set the freeze flag for the Periodic interrupt timer
218
        lwi     r4, 0x82
219
        sth     r4, (CYGARC_REG_IMM_PISCR-CYGARC_REG_IMM_BASE)(r3)
220
 
221
        // USIU rest.
222
        lwi     r4, 0x00000000
223
        lwi     r5, (CYGARC_REG_IMM_SGPIODT1-CYGARC_REG_IMM_BASE)
224
        stwx    r4, r3, r5
225
        lwi     r5, (CYGARC_REG_IMM_SGPIODT2-CYGARC_REG_IMM_BASE)
226
        stwx    r4, r3, r5
227
        lwi     r5, (CYGARC_REG_IMM_SGPIOCR-CYGARC_REG_IMM_BASE)
228
        stwx    r4, r3, r5
229
        lwi     r4, 0x00000ac6
230
        lwi     r5, (CYGARC_REG_IMM_EMCR-CYGARC_REG_IMM_BASE)
231
        stwx    r4, r3, r5
232
 
233
        // Dual ported TPU RAM
234
        lwi     r4, 0x0000
235
        lwi     r5, (CYGARC_REG_IMM_DPTMCR-CYGARC_REG_IMM_BASE)
236
        sthx    r4, r3, r5
237
 
238
        lwi     r4, 0xffa0
239
        lwi     r5, (CYGARC_REG_IMM_RAMBAR-CYGARC_REG_IMM_BASE)
240
        sthx    r4, r3, r5
241
 
242
        lwi     r4, 0x00
243
        lwi     r5, (CYGARC_REG_IMM_PORTQS-CYGARC_REG_IMM_BASE)
244
        sthx    r4, r3, r5
245
 
246
        lwi     r4, 0x00
247
        lwi     r5, (CYGARC_REG_IMM_PQSPAR_DDRQST-CYGARC_REG_IMM_BASE)
248
        sthx    r4, r3, r5
249
        lwi     r5, (CYGARC_REG_IMM_MPIOSMDR-CYGARC_REG_IMM_BASE)
250
        sthx    r4, r3, r5
251
        lwi     r5, (CYGARC_REG_IMM_MPIOSMDDR-CYGARC_REG_IMM_BASE)
252
        sthx    r4, r3, r5
253
        lwi     r5, (CYGARC_REG_IMM_SRAMMCR_A-CYGARC_REG_IMM_BASE)
254
        sthx    r4, r3, r5
255
 
256
        // They are assigned OCD functionality on this board
257
        // Change the following to anything else  and BDM will not work anymore
258
        // on the ec555. This is not true for all MPC555 based boards, eg. cme555
259
        // does not have this requirement
260
        lwi     r4, 0x3
261
        lwi     r5, (CYGARC_REG_IMM_MIOS1TPCR-CYGARC_REG_IMM_BASE)
262
        sthx    r4, r3, r5
263
 
264
        // Enable 32 interrupt priorities on the IMB3 unit
265
        lwi     r4, 0x60000000
266
        lwi     r5, (CYGARC_REG_IMM_UMCR-CYGARC_REG_IMM_BASE)
267
        stwx    r4, r3, r5
268
#endif
269
        sync
270
        blr
271
 
272
#------------------------------------------------------------------------------
273
# end of ec555.S

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.