]> git.karo-electronics.de Git - karo-tx-redboot.git/blob - packages/hal/arm/sa11x0/nano/v2_0/misc/readme.txt
Initial revision
[karo-tx-redboot.git] / packages / hal / arm / sa11x0 / nano / v2_0 / misc / readme.txt
1
2 Installation of RedBoot on a Target Board using RedBoot's Flash Commands
3 ------------------------------------------------------------------------
4
5 These are generic instructions applicable to RedBoot for many platforms.
6 Details of what you type have been changed to refer specifically to the
7 nanoEngine hardware, but you should also read the further instructions for
8 Bright Star Engineering's nanoEngine and SA1110 boards - known as target
9 "nano" in eCos configuration terms - which follow.
10
11 Here's how to install RedBoot, using the redboot images you should find in
12         loaders/PLATFORM/
13 in your installation directory (sizes and dates are just examples):
14         431497 Aug  9 15:28 redboot-ram.elf
15         184802 Aug  9 15:28 redboot-ram.srec
16         433104 Aug  9 15:29 redboot-rom.elf      (not used in this recipe)
17         194732 Aug  9 15:29 redboot-rom.srec
18
19 Copy the two '.srec' files to /tftpboot or where-ever they have to be for
20 your TFTP server.
21
22 Briefly, we use whatever boot flash image you have in place already (CygMon
23 or an eCos stub ROM) along with GDB, to execute a RAM based version of
24 RedBoot.  That is used, in its command-line mode, to fetch a ROM-based boot
25 image of RedBoot and write it into the flash memory.  "Fetching" the image
26 means TFTP from a server; the image must be in S-Record format.  We then
27 reset the target, thus running the newly-installed boot image of RedBoot.
28 That in turn is used, in its command-line mode, to fetch a RAM-based boot
29 image of RedBoot and write it into a different area of the flash memory, in
30 order to make it easier to do the first part (running a RAM-based RedBoot
31 in order to update the boot block) again in future.
32
33 NB: the instructions below refer to a system with 8Mb of flash, at address
34 0x50000000 in memory.  That address is common to SA11x0 CPUs.
35
36 Other boards might have a different start address, such as 0x41000000 and
37 different flash blocksizes.  RedBoot's startup banner will tell you the
38 details, if all is functioning correctly.  If the address is different, you
39 must use different addresses for saving the images into the Flash Image
40 System (fis).  The command "fis list" will tell you the addresses to use
41 for the "RedBoot" and "RedBoot[backup]" images, immediately after the "fis
42 init" command.
43
44
45 Alternatively you can make a plain binary from the redboot-rom.elf and
46 "blow" that into the boot flash using the means of your choice, as with
47 previous systems.
48
49
50 1. Load a RedBoot, built for RAM startup, into RAM using existing GDB
51    stubs.  Note: do not run it yet!
52
53    % arm-elf-gdb -nw loaders/nano/redboot-ram.elf 
54
55    GNU gdb 4.18-ecos-99r1-991015
56    Copyright 1998 Free Software Foundation, Inc.
57    GDB is free software, covered by the GNU General Public License, and you are
58    welcome to change it and/or distribute copies of it under certain conditions.
59    Type "show copying" to see the conditions.  This version of GDB is supported
60    for customers of Cygnus Solutions.  Type "show warranty" for details.
61    This GDB was configured as "--host=i686-pc-linux-gnu
62    --target=arm-elf"...(no debugging symbols found)...
63    (gdb) set remotebaud 38400
64    (gdb) tar rem /dev/ttyS0
65    Remote debugging using /dev/ttyS0
66    0x41000838 in ?? ()
67    (gdb) load
68    Loading section .rom_vectors, size 0x44 lma 0x20000
69    Loading section .text, size 0xf06c lma 0x20044
70    Loading section .rodata, size 0x19a8 lma 0x2f0b0
71    Loading section .data, size 0x474 lma 0x30a58
72    Start address 0x20044 , load size 69324
73    Transfer rate: 25208 bits/sec.
74    (gdb) detach
75    Ending remote debugging.
76    (gdb) q
77
78 2. Execute RedBoot from RAM, and initialize the flash filing system.
79        Notes: the key here is the "-o" option which keeps minicom from
80        sending junk.
81        The magic phrase "$c#63" is important: you must type it in exactly
82        thus.  It is the packet which a "continue" command in GDB would send
83        to the target.  If you get no response, try "+$c#63" instead.
84        The IP and server info comes from BOOTP, which is how this RedBoot
85        will start up if the flash does not contain good config info.
86
87    % minicom -o ttyS0
88
89    $c#63
90    RedBoot(tm) debug environment - built 07:45:57, Aug  7 2000
91    Copyright (C) 2000, Red Hat, Inc.
92
93    RAM: 0x00000000-0x01000000
94    FLASH: 0x50000000 - 0x50400000, 32 blocks of 0x00020000 bytes ea.
95    IP: 192.168.1.25, Default server: 192.168.1.101
96    RedBoot> fi init
97    About to initialize [format] FLASH image system - are you sure (y/n)? y
98    *** Initialize FLASH Image System
99        Warning: device contents not erased, some blocks may not be usable
100    ... Erase from 0x503c0000-0x50400000: .
101    ... Program from 0x00fb0000-0x00fb0400 at 0x503c0000: .
102
103
104 3. Program RedBoot image into FLASH:
105        This expects the file redboot-post.srec (see below) to exist in the
106        TFTP server space on the server that answered the BOOTP request.
107        It loads into the free flash memory following the boot firmware, at
108        address 0x50040000.
109
110    RedBoot> lo -v /tftpboot/redboot-post.srec -b 0x00100000
111    Address offset = bf100000
112    Entry point: 0x50040044, address range: 0x50040000-0x50051384
113    RedBoot> fi cr RedBoot[post] -f 0x50040000 -b 0x00100000 -l 0x20000
114    An image named 'RedBoot[post]' exists - are you sure (y/n)? y
115    ... Erase from 0x50040000-0x50060000: .
116    ... Program from 0x00100000-0x00120000 at 0x50040000: .
117    ... Erase from 0x503c0000-0x50400000: .
118    ... Program from 0x00fb0000-0x00ff0000 at 0x503c0000: .
119    RedBoot> 
120
121 ****reset the board here, leaving your terminal program connected****
122
123    RedBoot(tm) debug environment - built 07:47:35, Aug  7 2000
124    Copyright (C) 2000, Red Hat, Inc.
125    
126    RAM: 0x00000000-0x01000000
127    FLASH: 0x50000000 - 0x50400000, 32 blocks of 0x00020000 bytes ea.
128    IP: 192.168.1.25, Default server: 192.168.1.101
129    RedBoot> 
130
131
132 4. Install RAM based RedBoot for backup/update:
133        Similar considerations apply: redboot-ram.srec must be an S-record
134        version of RedBoot built for RAM startup.
135
136    RedBoot> lo -v /tftpboot/redboot-ram.srec
137    Entry point: 0x00020044, address range: 0x00020000-0x00030ecc
138    RedBoot> fi cr RedBoot[backup] -f 0x50060000 -b 0x20000 -r 0x20000 -l 0x20000
139    An image named 'RedBoot[backup]' exists - are you sure (y/n)? y
140    ... Erase from 0x50060000-0x50080000: .
141    ... Program from 0x00020000-0x00040000 at 0x50060000: .
142    ... Erase from 0x503c0000-0x50400000: .
143    ... Program from 0x00fb0000-0x00ff0000 at 0x503c0000: .
144    RedBoot> 
145
146         You have now updated your board completely.  Phew!
147
148
149
150 5. To update RedBoot with a new version of RedBoot, it is necessary to run
151    a RAM-based version of RedBoot which itself re-writes the ROM-based one,
152    because you can't re-write the code that is executing at the time.
153
154    RedBoot> fi lo RedBoot[backup]
155    RedBoot> g
156    +
157    RedBoot(tm) debug environment - built 07:45:57, Aug  7 2000
158    Copyright (C) 2000, Red Hat, Inc.
159    
160    RAM: 0x00000000-0x01000000
161    FLASH: 0x50000000 - 0x50400000, 32 blocks of 0x00020000 bytes ea.
162    IP: 192.168.1.25, Default server: 192.168.1.101
163    RedBoot> 
164    
165      .. continue with step 3, using whatever your new boot image is called
166         in the TFTP-place, in .srec format.
167
168
169 You probably also want to set up then environment with your own IP
170 addresses and so on.  Recall that this IP address is the one you use for
171 GDB to talk to the board, not the IP address which the eCos application
172 will take on (by BOOTP/DHCP or whatever means according to configury as
173 usual).
174
175    RedBoot> fconfig
176    Network debug at boot time: false 
177    Use BOOTP for network configuration: false 
178    Local IP address: 192.168.1.25 
179    Default server IP address: 192.168.1.101 
180    GDB connection port: 1000 
181    Run script at boot: false 
182    RedBoot> 
183
184
185 RedBoot for the nanoEngine/commEngine "nano" Target
186 ---------------------------------------------------
187
188 Unlike other targets, the nanoEngine comes equipped with boot firmware
189 which you cannot modify.  See chapter 5 "nanoEngine Firmware" of the
190 nanoEngine Hardware Reference Manual (we refer to "July 17, 2000 Rev 0.6")
191 from Bright Star Engineering.
192
193 Because of this, eCos and so Redboot supports only these two startup types:
194 RAM and POST, rather than the more usual ROM, RAM and optionally POST.
195
196 Briefly, the POST-startup RedBoot image lives in flash following the BSE
197 firmware.  The BSE firmware is configured, using its standard "bootcmd"
198 parameter, to jump into the RedBoot image at startup.
199
200 You can perform the initial load of the POST-startup RedBoot image into
201 flash using the BSE firmware's "load" command.  This will load, using TFTP,
202 a binary file and program it into flash in one neat operation.  Because no
203 memory management is used in the BSE firmware, flash is mapped from address
204 zero upwards, so the address for the RedBoot POST image is 0x40000.  You
205 must use the binary version of RedBoot for this, "redboot-post.bin"
206
207 This assumes you have set up the other BSE firmware config parameters such
208 that it can communicate over your network, to your TFTP server.
209
210         >
211         >load /tftpboot/redboot-post.bin 40000   
212         loading ... erasing blk at 00040000
213         erasing blk at 00050000
214         94168 bytes loaded cksum 00008579
215          done
216         >
217         > set bootcmd "go 40000"
218         > get
219         myip = 10.16.19.198
220         netmask = 255.255.255.0
221         eth = 0
222         gateway = 10.16.19.66
223         serverip = 10.16.19.66
224         bootcmd = go 40000
225         >
226
227 NB: the BSE firmware runs its serial IO at 9600 Baud; RedBoot runs instead
228 at 38400 Baud.  You must select the right baud rate in your terminal
229 program to be able to set up the BSE firmware.
230
231 After a reset, the BSE firmware will print
232         Boot: BSE 2000 Sep 12 2000 14:00:30
233         autoboot: "go 40000" [hit ESC to abort]
234 and then RedBoot starts, switching to 38400 Baud.
235
236 Once you have installed a bootable RedBoot in the system in this manner, we
237 advice re-installing using the generic method described first in this note
238 in order that the Flash Image System contains an appropriate description of
239 the flash entries.
240
241
242 Rebuilding RedBoot from Source
243 ------------------------------
244
245 To rebuild RedBoot from source, first locate the configuration export files
246 for your platform in the eCos source repository.  The RAM and POST startup
247 configuration exports can usually be found in a directory named "misc" in
248 the platform HAL in the eCos source repository, named either:
249    2164 Nov 29 14:59 misc/redboot_RAM.cfg
250    2221 Nov 29 14:59 misc/redboot_POST.cfg
251 or
252    1432 Feb  1 13:27 misc/redboot_RAM.ecm
253    1487 Feb  1 14:38 misc/redboot_POST.ecm
254 Having located these files, copy them say to /tmp, say, for less typing.
255
256 To make redboot for RAM startup:
257   mkdir redboot.RAM
258   cd redboot.RAM
259   ecosconfig new nano redboot
260   ecosconfig import /tmp/redboot_RAM.ecm
261   ecosconfig tree
262   make
263
264 To build the POST version, in a different build/config directory, just use
265 the config export redboot_POST.ecm (or .cfg) instead.
266
267 The resulting files will be, in each of the POST and RAM startup build
268 places:
269    70456     ..../install/bin/redboot.bin
270   433104     ..../install/bin/redboot.elf
271    91407     ..../install/bin/redboot.img
272   194732     ..../install/bin/redboot.srec
273
274 The .elf and .srec files have the obvious relationship to those supplied in
275 the "loaders/nano" directory in the install.
276
277
278 Cohabiting with POST in Flash
279 -----------------------------
280
281 The configuration export named redboot_POST.ecm configures redboot to build
282 for execution at address 0x50040000 (or during bootup, 0x00040000).  This
283 is to allow power-on self-test (POST) code or immutable firmware to live in
284 the lower addresses of the flash and to run before RedBoot gets control.
285 The assumption is that RedBoot will be entered at its base address in
286 physical memory, ie. 0x00040000.  Alternatively, for testing, you can call
287 it in an already running system by "go 0x50040040" at another RedBoot
288 prompt, or a branch to that address; the address is where the reset vector
289 points, and is reported by RedBoot's tftp load command and listed by the
290 fis list command, amongst other places.
291
292 Using the POST configuration enables a normal config option which causes
293 linking and initialization against memory layout files called "...post..."
294 rather than "...rom..." or "...ram..." in the include/pkgconf directory,
295 specifically:
296    665 Feb  9 17:57 include/pkgconf/mlt_arm_sa11x0_nano_post.h
297    839 Feb  9 17:57 include/pkgconf/mlt_arm_sa11x0_nano_post.ldi
298    585 Feb  9 17:57 include/pkgconf/mlt_arm_sa11x0_nano_post.mlt
299 It is these you should edit if you wish to move that execution address from
300 0x50040000 in the POST configuration.  Startup type naturally remains ROM
301 in this configuration.
302
303 Because the nanoEngine contains immutable boot firmware at the start of
304 flash, RedBoot for this target is configured to reserve that area in the
305 Flash Image System, and to create by default an entry for the POST startup
306 RedBoot.
307
308   RedBoot> fis list
309   Name              FLASH addr  Mem addr    Length      Entry point
310   (reserved)        0x50000000  0x50000000  0x00040000  0x00000000
311   RedBoot[post]     0x50040000  0x00100000  0x00020000  0x50040040
312   RedBoot[backup]   0x50060000  0x00020000  0x00020000  0x00020040
313   RedBoot config    0x503E0000  0x503E0000  0x00010000  0x00000000
314   FIS directory     0x503F0000  0x503F0000  0x00010000  0x00000000
315   RedBoot> 
316
317 The entry "(reserved)" ensures that the FIS cannot attempt to overwrite the
318 BSE firmware, thus ensuring that the board remains bootable and recoverable
319 even after installing a broken RedBoot image.
320
321
322 Special Redboot Commands
323 ------------------------
324
325 The nanoEngine/commEngine has one or two Intel i82559 Ethernet controllers
326 installed, but these have no associated serial EEPROM in which to record
327 their Ethernet Station Address (ESA, or MAC address).  The BSE firmware
328 records an ESA for the device it uses, but this information is not
329 available to RedBoot; we cannot share it.
330
331 To keep the ESAs for the two ethernet interfaces, two new items of RedBoot
332 configuration data are introduced.  You can list them with the RedBoot
333 command "fconfig -l" thus:
334
335   RedBoot> fconfig -l
336   Run script at boot: false 
337   Use BOOTP for network configuration: false 
338   Local IP address: 10.16.19.91 
339   Default server IP address: 10.16.19.66
340   Network hardware address [MAC] for eth0: 0x00:0xB5:0xE0:0xB5:0xE0:0x99
341   Network hardware address [MAC] for eth1: 0x00:0xB5:0xE0:0xB5:0xE0:0x9A
342   GDB connection port: 9000 
343   Network debug at boot time: false 
344   RedBoot> 
345
346 You should set them before running RedBoot or eCos applications with the
347 board connected to a network.  The fconfig command can be used as for any
348 configuration data item; the entire ESA is entered in one line.
349
350
351 Memory Maps
352 -----------
353
354 The first level page table is located at physical address
355 0xc0004000.  No second level tables are used.
356
357 NOTE
358 The virtual memory maps in this section use a C and B column to
359 indicate whether or not the region is cached (C) or buffered (B).
360
361 Physical Address Range     Description
362 -----------------------    ----------------------------------
363 0x00000000 - 0x003fffff    4Mb FLASH (nCS0)
364 0x18000000 - 0x18ffffff    Internal PCI bus - 2 x i82559 ethernet
365 0x40000000 - 0x4fffffff    External IO or PCI bus
366 0x80000000 - 0xbfffffff    SA-1110 Internal Registers
367 0xc0000000 - 0xc7ffffff    DRAM Bank 0 - 32Mb SDRAM
368 0xc8000000 - 0xcfffffff    DRAM Bank 1 - empty
369 0xe0000000 - 0xe7ffffff    Cache Clean
370
371 Virtual Address Range    C B  Description
372 -----------------------  - -  ----------------------------------
373 0x00000000 - 0x001fffff  Y Y  DRAM - 8Mb to 32Mb
374 0x18000000 - 0x180fffff  N N  Internal PCI bus - 2 x i82559 ethernet
375 0x40000000 - 0x4fffffff  N N  External IO or PCI bus
376 0x50000000 - 0x51ffffff  Y Y  Up to 32Mb FLASH (nCS0)
377 0x80000000 - 0xbfffffff  N N  SA-1110 Internal Registers
378 0xc0000000 - 0xc0ffffff  N Y  DRAM Bank 0: 8 or 16Mb
379 0xc8000000 - 0xc8ffffff  N Y  DRAM Bank 1: 8 or 16Mb or absent
380 0xe0000000 - 0xe7ffffff  Y Y  Cache Clean
381
382 The FLASH based RedBoot POST-startup image occupies virtual addresses
383 0x50040000 - 0x5005ffff.
384
385 The ethernet devices use a "PCI window" to communicate with the CPU.  This
386 is 1Mb of SDRAM which is shared with the ethernet devices that are on the
387 PCI bus.  It is neither cached nor buffered, to ensure that CPU and PCI
388 accesses see correct data in the correct order.  By default it is
389 configured to be megabyte number 30, at addresses 0x01e00000-0x01efffff.
390 This can be modified - and indeed must be, if less than 32Mb of SDRAM is
391 installed - via the memory layout tool, or by moving the section
392 "__pci_window" referred to by symbols CYGMEM_SECTION_pci_window* in the
393 linker script.
394
395 Though the nanoEngine ships with 32Mb of SDRAM all attached to DRAM bank 0,
396 the code can cope with any of these combinations also; "2 x " in this
397 context means one device in each DRAM Bank.
398
399   1 x 8Mb = 8Mb     2 x 8Mb = 16Mb
400   1 x 16Mb = 16Mb   2 x 16Mb = 32Mb
401
402 All are programmed the same in the memory controller.
403
404 Startup code detects which is fitted and programs the memory map
405 accordingly.  If the device(s) is 8Mb, then there are gaps in the
406 physical memory map, because a high order address bit is not
407 connected.  The gaps are the higher 2Mb out of every 4Mb.
408
409 The SA11x0 OS timer is used as a polled timer to provide timeout
410 support within RedBoot.
411
412
413 Nano Platform Port
414 ------------------
415
416 The nano is in the set of SA11X0-based platforms.  It uses the
417 arm architectural HAL, the sa11x0 variant HAL, plus the nano
418 platform hal.  These are components
419         CYGPKG_HAL_ARM                  hal/arm/arch/
420         CYGPKG_HAL_ARM_SA11X0           hal/arm/sa11x0/var
421         CYGPKG_HAL_ARM_SA11X0_NANO      hal/arm/sa11x0/nano
422 respectively.
423
424 The target name is "nano" which includes all these, plus the
425 ethernet driver packages, flash driver, and so on.
426
427
428 Ethernet Driver
429 ---------------
430
431 The ethernet driver is in two parts:
432
433 A generic ether driver for Intel i8255x series devices, specifically the
434 i82559, is devs/eth/intel/i82559.  Its package name is
435 CYGPKG_DEVS_ETH_INTEL_I82559.
436
437 The platform-specific ether driver is devs/eth/arm/nano.  Its package is
438 CYGPKG_DEVS_ETH_ARM_NANO.  This tells the generic driver the address in IO
439 memory of the chip, for example, and other configuration details.
440
441 This driver picks up the ESA from RedBoot's configuration data - unless
442 configured to use a static ESA in the usual manner.
443