summaryrefslogtreecommitdiff
path: root/doc/README.adnpesc1
blob: ded53210bd2211383a2d172990edff4f196175bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
	      SSV ADNP/ESC1 Embedded Softcore Computing
		 Nios Softcore, Altera Cyclone FPGA

		    Last Update: February 27, 2004
====================================================================

This file contains information regarding U-Boot and the SSV Embedded
Nios Softcore Computing platform ADNP/ESC1. For general Nios
information see doc/README.nios.

Most stuff of this file was borrowed and based on README.dk1s10,
the Altera DK-1S10 related information file.

For those interested in contributing ... see HELP WANTED section
in doc/README.nios.

Contents:

	1. Files
	2. Memory Organization
	3. CPU Variations
	4. Examples
	5. Programming U-Boot into FLASH with GERMS
	6. Autoboot
	7. U-Boot environment convention and update philosophy

====================================================================

1. Files
=========
	board/ssv/adnpesc1/*
	include/configs/ADNPESC1.h
	include/configs/ADNPESC1_base_32.h


2. Memory Organization
=======================

For the most part, you can put things pretty much anywhere.
This is pretty flexible for Nios. So here we make some arbitrary
choices & assume that the monitor is placed at the end of a memory
resource. So you must make sure TEXT_BASE is chosen appropriately.
This is very important if you plan to move your memory to another
place as configured at this time!

	-The heap is placed below the monitor (U-Boot code).
	-Global data is placed below the heap.
	-The stack is placed below global data (&grows down).

(see doc/README.adnpesc1_base32 too)


3. CPU Variations
=================

There are more than one NIOS CPU variation for the ADNP/ESC1 possible.
U-Boot supports the following CPU configurations:

	- SSV Basis 32 (make ADNPESC1_base_32_config)
	- SSV Basis 32 at DNP evaluation base board 2
	  (make ADNPESC1_DNPEVA2_base_32_config)


4. Examples
============

The hello_world example works fine. To try out you have to change
the default load address from 0x0100_0000 to 0x0204_0000 in
examples/Makefile (the real SDRAM for default board configuration).


5. Programming U-Boot into FLASH with GERMS
============================================

The current version of the ADNP/ESC1 port with the default
configuration settings occupies about 97 KBytes of flash.
A minimal configuration occupies less than 70 KByte
(network, SPI, POST and board command support disabled). You
can save more memory by deactivating the Hu-Shell support and
long command help (CFG_HUSH_PARSER, CFG_LONGHELP).

To program U-Boot into the ADNP/ESC1 flash using GERMS do the
following:

1. Download U-Boot to its target run space in SDRAM:

   a. Close jumper RCM_EN# and push the reset button.

   b. From the command line, download U-Boot using the
      nios-run:

	$ nios-run -r u-boot.srec

      NOTE: In some cases this want fail. I don't know why,
	    but try again.

This takes about 1 minute (GERMS is not very speedy here).
After u-boot is downloaded it will be executed. You should
see the following:

    U-Boot 1.0.2 (Jan 30 2004 - 12:59:15)

    CPU: Nios-32 Rev. 3.3 (0x3038)
    Reg file size: 512 LO_LIMIT/HI_LIMIT: 1/30
    Board: SSV DilNetPC ADNP/ESC1
    Conf.: SSV Base 32 (nios_32)
    In:    serial
    Out:   serial
    Err:   serial
    ADNPESC1 >


2. Quit nios-run and start your terminal application (e.g. start
   Hyperterminal or minicom).

3. Download the u-boot code to RAM. When using Hyperterminal, do the
   following:

   a. From the u-boot command prompt start a binary download to SDRAM:

      at the SSV Basis 32 to SDRAM:

	==> loadb 2000100

   b. Download u-boot.bin using kermit.

4. From the U-Boot command prompt, erase flash:

   at the SSV Basis 32 from 0x1000000 to 0x103ffff:

	==> protect off 1:0-3
	==> erase 1:0-3

5. Copy the binary image from SDRAM to flash:

   at the SSV Basis 32 from SDRAM:

	==> cp.b 2000100 1000000 $filesize

U-Boot will now automatically start when the board is powered on or
reset using the SSV Basis 32 configuration without closed RCM jumper.
To start U-Boot with closed RCM Jumper, enter the following GERMS
command:

    + g 1000000


6. Autoboot
===========

U-Boot will try to boot a valid Nios application from Flash. For this
it will use the deposited Hu-Shell script in environment variable
'bootcmd' which is looking for a valid Nios application identifier
string in Flash and go on at even its entry address. For more
information see the next chapter.


7. U-Boot environment convention and update philosophy
======================================================

U-Boot for the SSV ADNP/ESC1 target knows about many environment
variables used to control the startup process, update process for
raw Nios applications, and optionally file system image updates.
In default configuration there are two Hu-Shell scripts to update
the Nios application and/or the file system image:

1. Update Nios application (ex. the uCLinux kernel):

	run 'appl_update'

2. Update optional file system image (ex. RomFS image used by uCLinux):

	run 'fs_update'

The Nios application can be any programm code generated in relation
to the Nios application identifier -- the string "Nios" at offset
address 0x0c. To use the scripts like described above in a secure way
you have to check-up the next environment variables:

1. update_allowed

	- Update switch -- must be set to '1' (one) to allow any update
	- default is '0' (zero)

	  NOTE:	You should avoid to save this variable with non zero
	  	value to Flash. Otherwise it would be allow any
		update process at any time!

2. appl_entry_addr

	- Nios application area start address (usually in Flash)
	- this is the startup address for autoboot
	- each Nios application code we want to update will be copied
	  to this address
	- default is CFG_ADNPESC1_NIOS_APPL_ENTRY

3. appl_end_addr

	- Nios application area end address (usually in Flash)
	- will be used to unprotect/erase the Flash area while updating
	- default is CFG_ADNPESC1_NIOS_APPL_END

4. appl_ident_addr

	- address of the Nios application identification string
	- this is the address checked-up by autoboot
	- default is CFG_ADNPESC1_NIOS_APPL_IDENT

5. appl_ident_str

	- the Nios application identification string itself
	- default is CFG_ADNPESC1_NIOS_IDENTIFIER

6. appl_name

	- name of file we have to download/update
	- default is ADNPESC1/base32/linux.bin

7. fs_base_addr

	- optionally file system area start address (usually in Flash)
	- each file system we want to update will be copied to this address
	- default is CFG_ADNPESC1_FILESYSTEM_BASE

8. fs_end_addr

	- optionally file system area end address (usually in Flash)
	- will be used to unprotect/erase the Flash area while updating
	- default is CFG_ADNPESC1_FILESYSTEM_END

9. fs_name

	- name of file we have to download/update
	- default is ADNPESC1/base32/romfs.img