
			   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.


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_TMRCNT -- the preloadable counter value for the timer if it has
	no fixed period.

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

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

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

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>
