|  | 
 | 	      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 |