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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [rtems/] [c/] [src/] [lib/] [libbsp/] [powerpc/] [eth_comm/] [start/] [start.S] - Blame information for rev 173

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 30 unneback
/*  dlentry.s
2
 *
3
 *  $Id: start.S,v 1.2 2001-09-27 12:00:36 chris Exp $
4
 *
5
 *  This file contains the entry veneer for RTEMS programs
6
 *  downloaded to the eth-comm board.
7
 *
8
 * This file was written by Jay Monkman (jmonkman@fracsa.com)
9
 * It was based on the dlentry.s file for the Papyrus BSP,
10
 * written by:
11
 *
12
 *  Author:     Andrew Bray 
13
 *
14
 *  COPYRIGHT (c) 1995 by i-cubed ltd.
15
 *
16
 *  To anyone who acknowledges that this file is provided "AS IS"
17
 *  without any express or implied warranty:
18
 *      permission to use, copy, modify, and distribute this file
19
 *      for any purpose is hereby granted without fee, provided that
20
 *      the above copyright notice and this notice appears in all
21
 *      copies, and that the name of i-cubed limited not be used in
22
 *      advertising or publicity pertaining to distribution of the
23
 *      software without specific, written prior permission.
24
 *      i-cubed limited makes no representations about the suitability
25
 *      of this software for any purpose.
26
 *
27
 */
28
 
29
#include "asm.h"
30
 
31
/*
32
 *  The initial stack is set to run BELOW the code base address.
33
 *  (between the vectors and text sections)
34
 *
35
 *  All the entry veneer has to do is to clear the BSS.
36
 */
37
 
38
/*
39
 *  GDB likes to have debugging information for the entry veneer.
40
 *  Here is some DWARF information.
41
 */
42
/*
43
 * There was some debugging info here, but I removed it because I
44
 * couldn't get it to work. It isn't really necessary as far as I
45
 * can tell. It should still be in the papyrus BSP. -Jay
46
 */
47
 
48
 
49
 
50
/*
51
 * On entry to download_entry, R3 will hold a pointer to a Board Info
52
 *  Block (boardinfo_t). This should be copied as soon as possible
53
 *  to the global M860_binfo. (The block should be copied, _NOT_
54
 *  the pointer)
55
 */
56
 
57
        .section ".entry"  /* This might have to be the first thing in the
58
                            * text section. At one time, it had to be
59
                            * first, but I don't believe it is true
60
                            * andy more. */
61
        PUBLIC_VAR (start)
62
SYM(start):
63
        bl      .startup
64
base_addr:
65
 
66
/*
67
 * Parameters from linker
68
 */
69
toc_pointer:
70
        .long   s.got
71
bss_length:
72
        .long   bss.size
73
bss_addr:
74
        .long   bss.start
75
 
76
PUBLIC_VAR (text_addr)
77
text_addr:
78
        .long   text.start
79
 
80
PUBLIC_VAR (text_length)
81
text_length:
82
        .long   text.size
83
 
84
 
85
/*
86
 * Initialization code
87
 */
88
.startup:
89
        /* Get start address */
90
        mflr    r1
91
 
92
        /* clear the bss section */
93
        bl      bssclr
94
 
95
/*
96
 * Copy the Board Info Block
97
 */
98
        .extern SYM(M860_binfo)
99
        lis     r6, SYM(M860_binfo)@ha
100
        addi    r6, r6, SYM(M860_binfo)@l
101
 
102
        lhz     r4, 0(r3)                /* Load the size of the block */
103
        rlwinm. r4, r4, 30, 0x3fffffff   /* get number of words */
104
 
105
        mtctr   r4
106
 
107
cpy_b:  lwz     r5, 0(r3)                /* In with the old ...  */
108
        stw     r5, 0(r6)                /* ... Out with the new */
109
        addi    r6, r6, 0x4              /* Go to the next word */
110
        addi    r3, r3, 0x4
111
        bdnz    cpy_b                    /* decrement counter and loop */
112
 
113
/*
114
 * C_setup.
115
 */
116
 
117
        /* set toc */
118
        lwz r2, toc_pointer-base_addr(r1)
119
 
120
        /* Set up stack pointer = beginning of text section - 56 */
121
        addi    r1, r1, -56-4
122
 
123
        lis     r9, 0xff00
124
        addi    r10, 0, -16384
125
        sth     r10, 0x950(r9)
126
 
127
        lis     r9, 0x0000
128
        addi    r9, r9, 0x0007
129
        mtspr   0x9e, r9
130
 
131
        /* clear argc and argv */
132
        xor     r3, r3, r3
133
        xor     r4, r4, r4
134
 
135
        .extern SYM (boot_card)
136
        bl      SYM (boot_card)                  /* call the first C routine */
137
loopstop:
138
        b       loopstop
139
 
140
/*
141
 * bssclr - zero out bss
142
 */
143
bssclr:
144
        lwz     r4, bss_addr-base_addr(r1)      /* Start of bss */
145
        lwz     r5, bss_length-base_addr(r1)    /* Length of bss */
146
 
147
        rlwinm. r5,r5,30,0x3FFFFFFF             /* form length/4 */
148
        beqlr                                   /* no bss */
149
        mtctr   r5                              /* set ctr reg */
150
        xor     r6,r6,r6                        /* r6 = 0 */
151
clear_bss:
152
        stswi   r6,r4,0x4                       /* store r6 */
153
        addi    r4,r4,0x4                       /* update r2 */
154
 
155
        bdnz    clear_bss                       /* dec counter and loop */
156
        blr                                     /* return */

powered by: WebSVN 2.1.0

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