
			   U-Boot for Nios-32

		    Last Update: February 1, 2004
====================================================================

This file contains information regarding U-Boot and the Altera
Nios CPU. For information regarding U-Boot and the Nios Development
Kits see:

  * Cyclone Edition (DK-1C20), see doc/README.dk1c20
  * Stratix Edition (DK-1S10), see doc/README.dk1s10 (TODO)
  * Stratix Edition (DK-1S40), see doc/README.dk1s40 (TODO)
  * Stratix Edition (DK-20K200), see doc/README.dk20k200 (TODO)

For informations regarding Nios Development Kit hardware overview
and the NIOS CPU standard configuration of all known boards made by
Altera see:

  * Development Kit (DK) hardware overview, see doc/README.nios_DK
  * NIOS CPU standard_32 at DK-1C20, see doc/README.dk1c20_std32
  * NIOS CPU standard_32 at DK-1S10, see doc/README.dk1s10_std32
  * NIOS CPU standard_32 at DK-1S40, see doc/README.dk1s40_std32
  * NIOS CPU standard_32 at DK-20K200, see doc/README.dk20k200_std32

For those interested in contributing ... see HELP WANTED below.


1. OVERVIEW
------------

U-Boot has been successfully tested on the Nios Cyclone development
board using both the 'safe' and 'standard 32' configurations with
Nios CPU revision 3.1 (CPU_ID = 0x3018). U-Boot can be used with
or without the GERMS monitor. The initial version of U-Boot for the
Cyclone development kit is about 60 Kbyte and will fit in a single
sector of on-board FLASH. Only the Nios 32-bit CPU is supported.

1.1 GERMS Monitor
------------------
If GERMS is just not enough, then U-Boot is a great antibiotic.
You will be very pleased with its high degree of configurability
and its rich feature set.

A few of the most obvious limitations of GERMS are overcome by
using U-Boot (See 'Brain Damage'). Most notably, you can use
minicom or Hyperterminal (duh).

1.2 Altera Source Code
-----------------------
The Nios port does NOT include ANY sources that Altera has the
copyright. This was a conscious decision ... not an accident.
The Altera license is not clear in terms of distributing Altera
sources (when altera silicon is not involved). This isn't really
a problem as little, if any, of the Altera source contains
features that are not already available in U-Boot.

1.3 Debugging via OCI
---------------------
The Nios port supports debugging with gdb and/or nios-console
via the JTAG port. Stubs for debugging with gdb via the serial
port are not currently implemented.


2. CONFIGURATION OPTIONS/SETTINGS
----------------------------------

2.1 Nios-specific Options/Settings
-----------------------------------
All configuration options/settings that are specific to Nios begin
with "CONFIG_NIOS_", "CONFIG_SYS_NIOS_", or "CONFIG_SYS_NIOS_CPU_".

The configuration follows a two-stage process. In the first stage
the NIOS CPU core will defined like defined in Alteras SOPC Builder.
At this point we use the "CONFIG_SYS_NIOS_CPU_" defines exclusively. For
more informations about all the definitions you have to setup see
into current board configurations and doc/README.nios_CFG_NIOS_CPU.

In second stage we bring the NIOS CPU configuration in relation to
U-Boot configuration options/settings. The following is a list of
currently defined Nios-specific options/parameters used inside of
U-Boot. If any options are related to Standard-32 Nios SDK
excalibur.h definitions, the related definition follows the
description).

CONFIG_NIOS -- defined for all Nios-32 boards.

CONFIG_SYS_NIOS_CONSOLE -- the base address of the console UART or the JTAG
	stdio port. To enable a console via JTAG, define
	CONFIG_CONSOLE_JTAG and set CGF_NIOS_CONSOLE to the base address
	of the JTAG stdio port (normally OCI base + 0x00fa). Then
	run nios-console with the -w option.
	(standard-32: nasys_uart_0 resp. na_uart1_base).

CONFIG_SYS_NIOS_FIXEDBAUD -- defined if the console UART PTF fixed_baud
	parameter is set to '1'.

CONFIG_SYS_NIOS_MULT_HW -- use full hardware multiply (not yet implemented).

CONFIG_SYS_NIOS_MULT_MSTEP -- use hardware assisted multiply using the
	MSTEP instruction (not yet implemented).

CONFIG_SYS_NIOS_TMRBASE -- the base address of the timer used to support
	xxx_timer routines (e.g. set_timer(), get_timer(), etc.).
	(standard-32: nasys_timer_1 resp. na_lo_priority_timer2_base).

CONFIG_SYS_NIOS_TMRIRQ -- the interrupt request (vector number) assigned to
	the timer. (standard-32: nasys_timer_1_irq resp.
	na_low_priority_timer2_irq).

CONFIG_SYS_NIOS_TMRMS -- the period of the timer in milliseconds.

CONFIG_SYS_NIOS_TMRCNT -- the preloadable counter value for the timer if it has
	no fixed period.

CONFIG_SYS_NIOS_ASMIBASE -- the base address of the ASMI peripheral.
	(standard-32: na_asmi_base).

CONFIG_SYS_NIOS_SPIBASE -- the base address of the SPI master (!) peripheral.
	(nasys_spi_0)

CONFIG_SYS_NIOS_SPIBITS -- the amount of configured SPI data bits in PTF.
	This value can be 8 or 16 only! (PTF: databits)


2.2 Differences in U-Boot Options/Settings
-------------------------------------------
Some 'standard' U-Boot options/settings are treated differently in
the Nios port. These are described below.

CONFIG_SYS_GBL_DATA_OFFSET -- in the Nios port, this is the offset of the
	global data structure in the Nios memory space. More simply,
	the address of global data.


3. ASSEMBLY CODING
-------------------

In browsing the assembly source files, you may notice the absence
of the 'magic macros' (e.g. MOVIA, MOVIP, ADDIP etc.). This is
deliberate. The documentation for the magic macros is scant and
it is hard to find ... it does not appear in the Nios programmer's
manual, nor does it appear in the assembler manual. Regardless,
the macros actually do very little to improve readability anyway.

With this in mind, all assembler modules use only instructions that
appear in the Nios programmer's manual OR are directly supported
by the nios-elf toolchain. For example, the 'dec %rB' instruction
is an alias for 'subi %rB,1' that is supported by the assembler
but does not appear in the programmer's manual.


4. BOOT PROCESS
---------------

4.1 Boot process over GERMS
---------------------------
When the NIOS CPU catch a reset signal it will begin to be running
code from CONFIG_SYS_NIOS_CPU_RST_VECT. Normally at this place it will
find the GERMS monitor. That's the case for the generic NIOS CPU
configuration "standard_32". When the GERMS monitor starts running,
it performs important system initializations and then looks for
executable code in flash, using the following steps:

    1. Examining the two bytes at CONFIG_SYS_NIOS_CPU_FLASH_BASE + 0x04000C.
    2. Examining the button 0 on the PIO CONFIG_SYS_NIOS_CPU_BUTTON_PIO.
    3. If the button is not pressed and the two bytes contain 'N'
       and 'i', the monitor executes a CALL to location
       CONFIG_SYS_NIOS_CPU_FLASH_BASE + 0x040000.
    4. If the code is not executed in step 3 or the code returns,
       then prints an 8-digit version number to STDOUT and waits for
       user commands from STDIN.

In normal case, for "standard_32", STDIN and STDOUT are the first
serial port.

4.2 Return to GERMS command line
--------------------------------
During the boot process, the GERMS monitor checks for the existence
of application software in flash memory. If found, the processor
immediately executes the code. To return program execution to the
GERMS monitor (that is, avoid running code stored in flash memory):

    1. Hold down CONFIG_SYS_NIOS_CPU_BUTTON_PIO, button number 0.
    2. Press then release the CPU reset button.
    3. Release CONFIG_SYS_NIOS_CPU_BUTTON_PIO, button number 0.


5. DEBUGGING WITH GDB
---------------------

Debug sessions using gdb are currently supported only via JTAG. The
stubs for debugging via a serial port are not implemented. To enable
the gdb JTAG stubs, simply reference _brkpt_hw_int and _brkpt_sw_int
at vector table offsets 3 and 4, respectively. For an example, see
board/altera/dk1c20/vectors.S.

5.1 Vector Table Initialization and ROM Stubs
---------------------------------------------
If CONFIG_ROM_STUBS is defined, the debug breakpoint and single step
entries in the vector table are restored to their initial values
immediately _after_ initializing the vector table. Defining this macro
is useful when ROM-based stubs are implemented.

NOTE: The default GERMS monitor does NOT implement gdb stubs, nor does
it initialize the vector table. Therefore, when debugging U-Boot, you
should NOT set a software breakpoint prior to vector table initialization.

5.2 Starting a Debug Session
----------------------------
If you're not familiar with gdb, you follow these step-by-step instructions.
These instructions are NOT the only way to start a debug session, but they
cover most of the individual functions to get you started.

	1.  Start the JTAG gdb server. Open a Nios shell window and start
	the server. When the server is started you must provide the base
	address of the OCI core. For example, when using the Cyclone
	development kit (DK1C20):

		$ nios-gdb-server --ocibase=0x00920800 --tcpport=2342

	2.  Start gdb. Open a Nios shell window, change to the top-level
	U-Boot directory and start gdb, specifying the u-boot elf file:

		$ nios-elf-gdb u-boot

	3.  Update target settings. From the file menu, select
	"Target Settings ..." and select the following, then click 'Ok':

		Target:	Remote/TCP
		Port :	2342   (same as in step 1)
		Display download dialog: checked
		All other check boxes: unchecked

	4.  Connect to the target. Select menu: 'Run->Connect to target'.
	You should see a dialog box indicating the you successfully connected
	to the target.

	5.  Download U-Boot. Select menu: 'Run->Download'.

	6.  Open a gdb console window and set the source directory paths.
	Select menu: 'View->Console'. In the console window, enter the
	following commands, then close the console window:

		(gdb) directory common
		(gdb) directory cpu/nios
		(gdb) directory lib_nios
		(gdb) directory board/altera/dk1c20

	Note that the last command is for the DK1C20 board only. If you
	are using another board, specify that board's directory.

	7.  Open the file board.c (using the file menu in the lower
	left hand corner). Scroll to the board_init() routine and set
	a breakpoint.

	8. Run U-Boot. Just click on the run icon, or select menu:
	'Run->Run'. U-Boot should start running, then break at your
	breakpoint.

	9.  Have fun & start learning more about gdb.


5.3 For advanced Users
----------------------
A few notes for those more familiar with gdb.

	-Serial port stubs are not implemented. Sorry, but it's just not
	worth _my_ effort. The JTAG stubs work great and are ridiculously
	simple to implement.

	-If you need to debug the early startup code (prior to the vector
	table initialization), use the nios-console debugger.

	- Connect, download & run -- there are some problems here. Connect
	download and run seperately to avoid trouble.

6. BRAIN DAMAGE
----------------

This section describes some of the unfortunate and avoidable aspects
of working with the Nios CPU ... and some things you can do to
reduce your pain.

6.1 GERMS doesn't work with Hyperterminal
------------------------------------------
GERMS doesn't do CR/LF mapping that is compatible with Hyperterminal
(or minicom) -- geez. Regardless of you opion of Hyperterminal, this
sad design decision is remedied by using U-Boot.

6.2 cygwin Incompatibility
---------------------------
The version of cygwin distributed with the nios GNUPro toolchain is
out-of-date and incompatible with the latest cygwin distributions.
In addition, many of the standard utilities are very dated as well.
If you try to download and build the lastest version of grep for
example, you'll quickly realize that a native gcc is not available
(the next topic) which leads to U-Boot build problems (following
topic).

The solution ... well, you can wait for Altera ... or build as
set of tools for linux.

6.3 No native gcc
------------------
I'm not sure how this one slipped through the cracks ... but it is
a real pain. Basically, if you want to build anything for the native
environment -- forget it! A native (cygwin) gcc is not distributed,
and the old version of cygwin makes locating one challenging.

The solution ... same as above. Just download the gcc source from
Altera and build up a set of cross tools for your favorite linux
distro. Anybody who wants to use an already precompiled NIOS cross
toolchain can it found in the CDK4NIOS project hosted by Source
Forge at http://cdk4nios.sourceforge.net.

6.4 Can't build default U-Boot
-------------------------------
By default, when you build U-Boot you will be building some native
tools along with the target elf, bin, and srec files. Without a
native gcc, this (obviously) causes problems.

For developers using the Altera cygwin tools you can remove the
'tools' directory from SUBDIRS in the top-level Makefile. You will
also have to edit common/Makefile:

Replace:
env_embedded.o: env_embedded.c ../tools/envcrc
	$(CC) $(AFLAGS) -Wa,--no-warn \
		-DENV_CRC=$(shell ../tools/envcrc) \
		-c -o $@ env_embedded.c

With:
env_embedded.o: env_embedded.c
	$(CC) $(AFLAGS) -Wa,--no-warn \
		-DENV_CRC=0 \
		-c -o $@ env_embedded.c

BTW, thats a 'zero' ... not the letter 'O'. And not that the
"../tools/envcrc" dependency is removed.


7. HELP WANTED
---------------

There are plenty of areas where help is needed. Here's are some ideas
for those interested in contributing:

-CompactFlash. Port & test CF/FAT.

-Bedbug. Develop bedbug for Nios ... or at least provide a disassemble
 command.

-Add boot support for ucLinux (niosnommu).

-Implement (don't copy Altera code) the __mulxx routines using the
 MSTEP and MUL instructions (e.g. CONFIG_SYS_NIOS_MULT_HW and CONFIG_SYS_NIOS_MULT_MSTEP).


Regards,

--Scott
<smcnutt@psyent.com>

--Stephan
<linz@li-pro.net>
