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