]> git.karo-electronics.de Git - karo-tx-redboot.git/blob - packages/hal/sparc/erc32/v2_0/include/halboot.si
Initial revision
[karo-tx-redboot.git] / packages / hal / sparc / erc32 / v2_0 / include / halboot.si
1 #ifndef CYGONCE_HAL_HALBOOT_SI /* -*-asm-*- */
2 #define CYGONCE_HAL_HALBOOT_SI
3 // ====================================================================
4 //
5 //      <platform>/halboot.si
6 //
7 //      HAL bootup platform-oriented code (assembler)
8 //
9 // ====================================================================
10 //####ECOSGPLCOPYRIGHTBEGIN####
11 // -------------------------------------------
12 // This file is part of eCos, the Embedded Configurable Operating System.
13 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
14 //
15 // eCos is free software; you can redistribute it and/or modify it under
16 // the terms of the GNU General Public License as published by the Free
17 // Software Foundation; either version 2 or (at your option) any later version.
18 //
19 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
20 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
22 // for more details.
23 //
24 // You should have received a copy of the GNU General Public License along
25 // with eCos; if not, write to the Free Software Foundation, Inc.,
26 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
27 //
28 // As a special exception, if other files instantiate templates or use macros
29 // or inline functions from this file, or you compile this file and link it
30 // with other works to produce a work based on this file, this file does not
31 // by itself cause the resulting work to be covered by the GNU General Public
32 // License. However the source code for this file must still be made available
33 // in accordance with section (3) of the GNU General Public License.
34 //
35 // This exception does not invalidate any other reasons why a work based on
36 // this file might be covered by the GNU General Public License.
37 //
38 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
39 // at http://sources.redhat.com/ecos/ecos-license/
40 // -------------------------------------------
41 //####ECOSGPLCOPYRIGHTEND####
42 // ====================================================================
43 //#####DESCRIPTIONBEGIN####
44 //
45 // Author(s):           hmt
46 // Contributors:        hmt
47 // Date:                1999-02-01
48 // Purpose:             Bootup code, platform oriented.
49 // Description:
50 //
51 //####DESCRIPTIONEND####
52 //
53 // ====================================================================
54
55 // External Platform Initial Setup
56 //
57 // This should set up RAM and caches, and calm down any external
58 // interrupt sources.
59 //
60 // It is just plain included in vectors.S
61 //
62 // RAM has not yet been touched at all; in fact all you have is a
63 // register window selected.
64
65
66         ! Empty macro for debugging vectors.S
67         .macro led val
68         .endm
69
70
71         set     0x01f80000, %l0         ! MEC register base address
72         ld      [%l0], %l1              ! Check if MEC has been initialised
73         set     0xfe080000, %l2         ! by checking baud rate register
74         andcc   %l2, %l1, %g0           
75         bne     2f                      ! skip
76         nop
77
78         ! Set memory according to simulator config
79
80         st      %g0, [%l0 + 0x64]       ! Disable watchdog for now
81         ld      [%l0], %g1
82         or      %g1, 1, %g1
83         st      %g1, [%l0]              ! Enable power down
84         st      %g0, [%l0 + 0x18]       ! No waitstates
85         ld      [%l0 + 0xF8], %g1       ! load simulator rom size
86         clr     %l2
87         srl     %g1, 17, %g1            ! calculate appropriate MEC rom size
88 1:
89         srl     %g1, 1, %g1
90         tst     %g1
91         bne,a   1b
92         inc     %l2
93         sll     %l2, 8, %l2
94         ld      [%l0 + 0xF4], %g2       ! load simulator ram size
95         srl     %g2, 18, %g1            ! calculate appropriate MEC ram size
96 1:
97         srl     %g1, 1, %g1
98         tst     %g1
99         bne,a   1b
100         inc     %l2
101         sll     %l2, 10, %l2
102         st      %l2, [%l0 + 0x10]       ! program MEC memory config register
103         set     0x2000000, %l2
104         add     %g2, %l2, %fp
105         sub     %fp, 96*4, %sp
106         
107 !       st      %g0, [%sp]              ! probe for FPU
108 !       ld      [%sp], %fsr
109
110         set     13, %l1
111         st      %l1, [%l0 + 0x84]       ! RTC scaler = 13
112
113 2:
114         set     reset_vector, %g1
115         set     0x0d00, %l1
116         st      %l1, [%g1 + 0x7c0]      ! Store TCR mirror
117         st      %l1, [%l0 + 0x98]       ! Start RTC
118         mov     %g3, %o7
119
120
121 4:
122         ! then copy the branch instructions into the vector
123         rd      %tbr, %g1
124         andn    %g1, 0xfff, %g1         ! clear non-address bits
125         sethi   %hi(real_vector_instructions), %l0
126         or      %l0, %lo(real_vector_instructions), %l0
127         ld      [ %l0 ], %l1
128         st      %l1, [ %g1 ]            ! into the vector
129         ld      [ %l0 + 4 ], %l1
130         st      %l1, [ %g1 + 4 ]        ! into the vector
131
132 #endif  /* CYGONCE_HAL_HALBOOT_SI */
133 /* EOF halboot.si */