
			   U-Boot for Nios-32

		    Last Update: January 2, 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.


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

2.1 Nios-specific Options/Settings
-----------------------------------
All configuration options/settings that are specific to Nios begin
with "CONFIG_NIOS_", "CFG_NIOS_", or "CFG_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 "CFG_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.

CFG_NIOS_CONSOLE -- the base address of the console UART.
	(standard-32: nasys_uart_0 resp. na_uart1_base).

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

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

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

CFG_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).

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

CFG_NIOS_TMRMS -- the period of the timer in milliseconds.

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

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.

CFG_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 CFG_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 CFG_NIOS_CPU_FLASH_BASE + 0x04000C.
    2. Examining the button 0 on the PIO CFG_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
       CFG_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 CFG_NIOS_CPU_BUTTON_PIO, button number 0.
    2. Press then release the CPU reset button.
    3. Release CFG_NIOS_CPU_BUTTON_PIO, button number 0.


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

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

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

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

5.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:
environment.o: environment.c ../tools/envcrc
	$(CC) $(AFLAGS) -Wa,--no-warn \
		-DENV_CRC=$(shell ../tools/envcrc) \
		-c -o $@ environment.c

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

BTW, thats a 'zero' ... not the letter 'O'.


6. 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. CFG_NIOS_MULT_HW and CFG_NIOS_MULT_MSTEP).


Regards,

--Scott
<smcnutt@psyent.com>

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