diff --git a/README b/README
index d441442..bfccadf 100644
--- a/README
+++ b/README
@@ -2042,1253 +2042,1238 @@
 	TQM850L_config		TQM855L_config		TQM860L_config
 	WALNUT405_config	ZPC1900_config
 
-	Note: for some board special configuration names may exist; check  if
-	      additional  information is available from the board vendor; for
-	      instance, the TQM8xxL systems run normally at 50 MHz and use  a
-	      SCC  for	10baseT	 ethernet; there are also systems with 80 MHz
-	      CPU clock, and an optional Fast Ethernet	module	is  available
-	      for  CPU's  with FEC. You can select such additional "features"
-	      when chosing the configuration, i. e.
+Note: for some board special configuration names may exist; check if
+      additional information is available from the board vendor; for
+      instance, the TQM823L systems are available without (standard)
+      or with LCD support. You can select such additional "features"
+      when chosing the configuration, i. e.
 
-	      make TQM860L_config
-		- will configure for a plain TQM860L, i. e. 50MHz, no FEC
+      make TQM823L_config
+	- will configure for a plain TQM823L, i. e. no LCD support
 
-	      make TQM860L_FEC_config
-		- will configure for a TQM860L at 50MHz with FEC for ethernet
+      make TQM823L_LCD_config
+	- will configure for a TQM823L with U-Boot console on LCD
 
-	      make TQM860L_80MHz_config
-		- will configure for a TQM860L at 80 MHz, with normal 10baseT
-		  interface
+      etc.
 
-	      make TQM860L_FEC_80MHz_config
-		- will configure for a TQM860L at 80 MHz with FEC for ethernet
 
-	      make TQM823L_LCD_config
-		- will configure for a TQM823L with U-Boot console on LCD
+Finally, type "make all", and you should get some working U-Boot
+images ready for download to / installation on your system:
 
-	      make TQM823L_LCD_80MHz_config
-		- will configure for a TQM823L at 80 MHz with U-Boot console on LCD
+- "u-boot.bin" is a raw binary image
+- "u-boot" is an image in ELF binary format
+- "u-boot.srec" is in Motorola S-Record format
 
-	      etc.
 
+Please be aware that the Makefiles assume you are using GNU make, so
+for instance on NetBSD you might need to use "gmake" instead of
+native "make".
 
-	Finally, type "make all", and you should get some working U-Boot
-	images ready for download to / installation on your system:
 
-	- "u-boot.bin" is a raw binary image
-	- "u-boot" is an image in ELF binary format
-	- "u-boot.srec" is in Motorola S-Record format
+If the system board that you have is not listed, then you will need
+to port U-Boot to your hardware platform. To do this, follow these
+steps:
 
+1.  Add a new configuration option for your board to the toplevel
+    "Makefile" and to the "MAKEALL" script, using the existing
+    entries as examples. Note that here and at many other places
+    boards and other names are listed in alphabetical sort order. Please
+    keep this order.
+2.  Create a new directory to hold your board specific code. Add any
+    files you need. In your board directory, you will need at least
+    the "Makefile", a "<board>.c", "flash.c" and "u-boot.lds".
+3.  Create a new configuration file "include/configs/<board>.h" for
+    your board
+3.  If you're porting U-Boot to a new CPU, then also create a new
+    directory to hold your CPU specific code. Add any files you need.
+4.  Run "make <board>_config" with your new name.
+5.  Type "make", and you should get a working "u-boot.srec" file
+    to be installed on your target system.
+6.  Debug and solve any problems that might arise.
+    [Of course, this last step is much harder than it sounds.]
 
-	Please be aware that the Makefiles assume you are using GNU make, so
-	for instance on NetBSD you might need to use "gmake" instead of
-	native "make".
 
+Testing of U-Boot Modifications, Ports to New Hardware, etc.:
+==============================================================
 
-	If the system board that you have is not listed, then you will need
-	to port U-Boot to your hardware platform. To do this, follow these
-	steps:
+If you have modified U-Boot sources (for instance added a new	board
+or  support  for  new  devices,	 a new CPU, etc.) you are expected to
+provide feedback to the other developers. The feedback normally takes
+the form of a "patch", i. e. a context diff against a certain (latest
+official or latest in CVS) version of U-Boot sources.
 
-	1.  Add a new configuration option for your board to the toplevel
-	    "Makefile" and to the "MAKEALL" script, using the existing
-	    entries as examples. Note that here and at many other places
-	    boards and other names are listed in alphabetical sort order. Please
-	    keep this order.
-	2.  Create a new directory to hold your board specific code. Add any
-	    files you need. In your board directory, you will need at least
-	    the "Makefile", a "<board>.c", "flash.c" and "u-boot.lds".
-	3.  Create a new configuration file "include/configs/<board>.h" for
-	    your board
-	3.  If you're porting U-Boot to a new CPU, then also create a new
-	    directory to hold your CPU specific code. Add any files you need.
-	4.  Run "make <board>_config" with your new name.
-	5.  Type "make", and you should get a working "u-boot.srec" file
-	    to be installed on your target system.
-	6.  Debug and solve any problems that might arise.
-	    [Of course, this last step is much harder than it sounds.]
+But before you submit such a patch, please verify that	your  modifi-
+cation	did not break existing code. At least make sure that *ALL* of
+the supported boards compile WITHOUT ANY compiler warnings. To do so,
+just run the "MAKEALL" script, which will configure and build U-Boot
+for ALL supported system. Be warned, this will take a while. You  can
+select	which  (cross)	compiler  to use by passing a `CROSS_COMPILE'
+environment variable to the script, i. e. to use the cross tools from
+MontaVista's Hard Hat Linux you can type
 
+	CROSS_COMPILE=ppc_8xx- MAKEALL
 
-	Testing of U-Boot Modifications, Ports to New Hardware, etc.:
-	==============================================================
+or to build on a native PowerPC system you can type
 
-	If you have modified U-Boot sources (for instance added a new	board
-	or  support  for  new  devices,	 a new CPU, etc.) you are expected to
-	provide feedback to the other developers. The feedback normally takes
-	the form of a "patch", i. e. a context diff against a certain (latest
-	official or latest in CVS) version of U-Boot sources.
+	CROSS_COMPILE=' ' MAKEALL
 
-	But before you submit such a patch, please verify that	your  modifi-
-	cation	did not break existing code. At least make sure that *ALL* of
-	the supported boards compile WITHOUT ANY compiler warnings. To do so,
-	just run the "MAKEALL" script, which will configure and build U-Boot
-	for ALL supported system. Be warned, this will take a while. You  can
-	select	which  (cross)	compiler  to use by passing a `CROSS_COMPILE'
-	environment variable to the script, i. e. to use the cross tools from
-	MontaVista's Hard Hat Linux you can type
+See also "U-Boot Porting Guide" below.
 
-		CROSS_COMPILE=ppc_8xx- MAKEALL
 
-	or to build on a native PowerPC system you can type
+Monitor Commands - Overview:
+============================
 
-		CROSS_COMPILE=' ' MAKEALL
+go	- start application at address 'addr'
+run	- run commands in an environment variable
+bootm	- boot application image from memory
+bootp	- boot image via network using BootP/TFTP protocol
+tftpboot- boot image via network using TFTP protocol
+	       and env variables "ipaddr" and "serverip"
+	       (and eventually "gatewayip")
+rarpboot- boot image via network using RARP/TFTP protocol
+diskboot- boot from IDE devicebootd   - boot default, i.e., run 'bootcmd'
+loads	- load S-Record file over serial line
+loadb	- load binary file over serial line (kermit mode)
+md	- memory display
+mm	- memory modify (auto-incrementing)
+nm	- memory modify (constant address)
+mw	- memory write (fill)
+cp	- memory copy
+cmp	- memory compare
+crc32	- checksum calculation
+imd	- i2c memory display
+imm	- i2c memory modify (auto-incrementing)
+inm	- i2c memory modify (constant address)
+imw	- i2c memory write (fill)
+icrc32	- i2c checksum calculation
+iprobe	- probe to discover valid I2C chip addresses
+iloop	- infinite loop on address range
+isdram	- print SDRAM configuration information
+sspi	- SPI utility commands
+base	- print or set address offset
+printenv- print environment variables
+setenv	- set environment variables
+saveenv - save environment variables to persistent storage
+protect - enable or disable FLASH write protection
+erase	- erase FLASH memory
+flinfo	- print FLASH memory information
+bdinfo	- print Board Info structure
+iminfo	- print header information for application image
+coninfo - print console devices and informations
+ide	- IDE sub-system
+loop	- infinite loop on address range
+mtest	- simple RAM test
+icache	- enable or disable instruction cache
+dcache	- enable or disable data cache
+reset	- Perform RESET of the CPU
+echo	- echo args to console
+version - print monitor version
+help	- print online help
+?	- alias for 'help'
 
-	See also "U-Boot Porting Guide" below.
 
+Monitor Commands - Detailed Description:
+========================================
 
-	Monitor Commands - Overview:
-	============================
+TODO.
 
-	go	- start application at address 'addr'
-	run	- run commands in an environment variable
-	bootm	- boot application image from memory
-	bootp	- boot image via network using BootP/TFTP protocol
-	tftpboot- boot image via network using TFTP protocol
-		       and env variables "ipaddr" and "serverip"
-		       (and eventually "gatewayip")
-	rarpboot- boot image via network using RARP/TFTP protocol
-	diskboot- boot from IDE devicebootd   - boot default, i.e., run 'bootcmd'
-	loads	- load S-Record file over serial line
-	loadb	- load binary file over serial line (kermit mode)
-	md	- memory display
-	mm	- memory modify (auto-incrementing)
-	nm	- memory modify (constant address)
-	mw	- memory write (fill)
-	cp	- memory copy
-	cmp	- memory compare
-	crc32	- checksum calculation
-	imd	- i2c memory display
-	imm	- i2c memory modify (auto-incrementing)
-	inm	- i2c memory modify (constant address)
-	imw	- i2c memory write (fill)
-	icrc32	- i2c checksum calculation
-	iprobe	- probe to discover valid I2C chip addresses
-	iloop	- infinite loop on address range
-	isdram	- print SDRAM configuration information
-	sspi	- SPI utility commands
-	base	- print or set address offset
-	printenv- print environment variables
-	setenv	- set environment variables
-	saveenv - save environment variables to persistent storage
-	protect - enable or disable FLASH write protection
-	erase	- erase FLASH memory
-	flinfo	- print FLASH memory information
-	bdinfo	- print Board Info structure
-	iminfo	- print header information for application image
-	coninfo - print console devices and informations
-	ide	- IDE sub-system
-	loop	- infinite loop on address range
-	mtest	- simple RAM test
-	icache	- enable or disable instruction cache
-	dcache	- enable or disable data cache
-	reset	- Perform RESET of the CPU
-	echo	- echo args to console
-	version - print monitor version
-	help	- print online help
-	?	- alias for 'help'
+For now: just type "help <command>".
 
 
-	Monitor Commands - Detailed Description:
-	========================================
+Environment Variables:
+======================
 
-	TODO.
+U-Boot supports user configuration using Environment Variables which
+can be made persistent by saving to Flash memory.
 
-	For now: just type "help <command>".
+Environment Variables are set using "setenv", printed using
+"printenv", and saved to Flash using "saveenv". Using "setenv"
+without a value can be used to delete a variable from the
+environment. As long as you don't save the environment you are
+working with an in-memory copy. In case the Flash area containing the
+environment is erased by accident, a default environment is provided.
 
+Some configuration options can be set using Environment Variables:
 
-	Environment Variables:
-	======================
+  baudrate	- see CONFIG_BAUDRATE
 
-	U-Boot supports user configuration using Environment Variables which
-	can be made persistent by saving to Flash memory.
+  bootdelay	- see CONFIG_BOOTDELAY
 
-	Environment Variables are set using "setenv", printed using
-	"printenv", and saved to Flash using "saveenv". Using "setenv"
-	without a value can be used to delete a variable from the
-	environment. As long as you don't save the environment you are
-	working with an in-memory copy. In case the Flash area containing the
-	environment is erased by accident, a default environment is provided.
+  bootcmd	- see CONFIG_BOOTCOMMAND
 
-	Some configuration options can be set using Environment Variables:
+  bootargs	- Boot arguments when booting an RTOS image
 
-	  baudrate	- see CONFIG_BAUDRATE
+  bootfile	- Name of the image to load with TFTP
 
-	  bootdelay	- see CONFIG_BOOTDELAY
+  autoload	- if set to "no" (any string beginning with 'n'),
+		  "bootp" will just load perform a lookup of the
+		  configuration from the BOOTP server, but not try to
+		  load any image using TFTP
 
-	  bootcmd	- see CONFIG_BOOTCOMMAND
+  autostart	- if set to "yes", an image loaded using the "bootp",
+		  "rarpboot", "tftpboot" or "diskboot" commands will
+		  be automatically started (by internally calling
+		  "bootm")
 
-	  bootargs	- Boot arguments when booting an RTOS image
+		  If set to "no", a standalone image passed to the
+		  "bootm" command will be copied to the load address
+		  (and eventually uncompressed), but NOT be started.
+		  This can be used to load and uncompress arbitrary
+		  data.
 
-	  bootfile	- Name of the image to load with TFTP
+  initrd_high	- restrict positioning of initrd images:
+		  If this variable is not set, initrd images will be
+		  copied to the highest possible address in RAM; this
+		  is usually what you want since it allows for
+		  maximum initrd size. If for some reason you want to
+		  make sure that the initrd image is loaded below the
+		  CFG_BOOTMAPSZ limit, you can set this environment
+		  variable to a value of "no" or "off" or "0".
+		  Alternatively, you can set it to a maximum upper
+		  address to use (U-Boot will still check that it
+		  does not overwrite the U-Boot stack and data).
 
-	  autoload	- if set to "no" (any string beginning with 'n'),
-			  "bootp" will just load perform a lookup of the
-			  configuration from the BOOTP server, but not try to
-			  load any image using TFTP
+		  For instance, when you have a system with 16 MB
+		  RAM, and want to reserve 4 MB from use by Linux,
+		  you can do this by adding "mem=12M" to the value of
+		  the "bootargs" variable. However, now you must make
+		  sure that the initrd image is placed in the first
+		  12 MB as well - this can be done with
 
-	  autostart	- if set to "yes", an image loaded using the "bootp",
-			  "rarpboot", "tftpboot" or "diskboot" commands will
-			  be automatically started (by internally calling
-			  "bootm")
+		  setenv initrd_high 00c00000
 
-			  If set to "no", a standalone image passed to the
-			  "bootm" command will be copied to the load address
-			  (and eventually uncompressed), but NOT be started.
-			  This can be used to load and uncompress arbitrary
-			  data.
+		  If you set initrd_high to 0xFFFFFFFF, this is an
+		  indication to U-Boot that all addresses are legal
+		  for the Linux kernel, including addresses in flash
+		  memory. In this case U-Boot will NOT COPY the
+		  ramdisk at all. This may be useful to reduce the
+		  boot time on your system, but requires that this
+		  feature is supported by your Linux kernel.
 
-	  initrd_high	- restrict positioning of initrd images:
-			  If this variable is not set, initrd images will be
-			  copied to the highest possible address in RAM; this
-			  is usually what you want since it allows for
-			  maximum initrd size. If for some reason you want to
-			  make sure that the initrd image is loaded below the
-			  CFG_BOOTMAPSZ limit, you can set this environment
-			  variable to a value of "no" or "off" or "0".
-			  Alternatively, you can set it to a maximum upper
-			  address to use (U-Boot will still check that it
-			  does not overwrite the U-Boot stack and data).
+  ipaddr	- IP address; needed for tftpboot command
 
-			  For instance, when you have a system with 16 MB
-			  RAM, and want to reserve 4 MB from use by Linux,
-			  you can do this by adding "mem=12M" to the value of
-			  the "bootargs" variable. However, now you must make
-			  sure that the initrd image is placed in the first
-			  12 MB as well - this can be done with
+  loadaddr	- Default load address for commands like "bootp",
+		  "rarpboot", "tftpboot", "loadb" or "diskboot"
 
-			  setenv initrd_high 00c00000
+  loads_echo	- see CONFIG_LOADS_ECHO
 
-			  If you set initrd_high to 0xFFFFFFFF, this is an
-			  indication to U-Boot that all addresses are legal
-			  for the Linux kernel, including addresses in flash
-			  memory. In this case U-Boot will NOT COPY the
-			  ramdisk at all. This may be useful to reduce the
-			  boot time on your system, but requires that this
-			  feature is supported by your Linux kernel.
+  serverip	- TFTP server IP address; needed for tftpboot command
 
-	  ipaddr	- IP address; needed for tftpboot command
+  bootretry	- see CONFIG_BOOT_RETRY_TIME
 
-	  loadaddr	- Default load address for commands like "bootp",
-			  "rarpboot", "tftpboot", "loadb" or "diskboot"
+  bootdelaykey	- see CONFIG_AUTOBOOT_DELAY_STR
 
-	  loads_echo	- see CONFIG_LOADS_ECHO
+  bootstopkey	- see CONFIG_AUTOBOOT_STOP_STR
 
-	  serverip	- TFTP server IP address; needed for tftpboot command
+  ethprime	- When CONFIG_NET_MULTI is enabled controls which
+		  interface is used first.
 
-	  bootretry	- see CONFIG_BOOT_RETRY_TIME
+  ethact	- When CONFIG_NET_MULTI is enabled controls which
+		  interface is currently active. For example you
+		  can do the following
 
-	  bootdelaykey	- see CONFIG_AUTOBOOT_DELAY_STR
+		  => setenv ethact FEC ETHERNET
+		  => ping 192.168.0.1 # traffic sent on FEC ETHERNET
+		  => setenv ethact SCC ETHERNET
+		  => ping 10.0.0.1 # traffic sent on SCC ETHERNET
 
-	  bootstopkey	- see CONFIG_AUTOBOOT_STOP_STR
+   netretry	- When set to "no" each network operation will
+		  either succeed or fail without retrying.
+		  When set to "once" the network operation will
+		  fail when all the available network interfaces
+		  are tried once without success.
+		  Useful on scripts which control the retry operation
+		  themselves.
 
-	  ethprime	- When CONFIG_NET_MULTI is enabled controls which
-			  interface is used first.
+   vlan		- When set to a value < 4095 the traffic over
+		  ethernet is encapsulated/received over 802.1q
+		  VLAN tagged frames.
 
-	  ethact	- When CONFIG_NET_MULTI is enabled controls which
-			  interface is currently active. For example you
-			  can do the following
+The following environment variables may be used and automatically
+updated by the network boot commands ("bootp" and "rarpboot"),
+depending the information provided by your boot server:
 
-			  => setenv ethact FEC ETHERNET
-			  => ping 192.168.0.1 # traffic sent on FEC ETHERNET
-			  => setenv ethact SCC ETHERNET
-			  => ping 10.0.0.1 # traffic sent on SCC ETHERNET
+  bootfile	- see above
+  dnsip		- IP address of your Domain Name Server
+  dnsip2	- IP address of your secondary Domain Name Server
+  gatewayip	- IP address of the Gateway (Router) to use
+  hostname	- Target hostname
+  ipaddr	- see above
+  netmask	- Subnet Mask
+  rootpath	- Pathname of the root filesystem on the NFS server
+  serverip	- see above
 
-	   netretry	- When set to "no" each network operation will
-			  either succeed or fail without retrying.
-			  When set to "once" the network operation will
-			  fail when all the available network interfaces
-			  are tried once without success.
-			  Useful on scripts which control the retry operation
-			  themselves.
 
-	   vlan		- When set to a value < 4095 the traffic over
-			  ethernet is encapsulated/received over 802.1q
-			  VLAN tagged frames.
+There are two special Environment Variables:
 
-	The following environment variables may be used and automatically
-	updated by the network boot commands ("bootp" and "rarpboot"),
-	depending the information provided by your boot server:
+  serial#	- contains hardware identification information such
+		  as type string and/or serial number
+  ethaddr	- Ethernet address
 
-	  bootfile	- see above
-	  dnsip		- IP address of your Domain Name Server
-	  dnsip2	- IP address of your secondary Domain Name Server
-	  gatewayip	- IP address of the Gateway (Router) to use
-	  hostname	- Target hostname
-	  ipaddr	- see above
-	  netmask	- Subnet Mask
-	  rootpath	- Pathname of the root filesystem on the NFS server
-	  serverip	- see above
+These variables can be set only once (usually during manufacturing of
+the board). U-Boot refuses to delete or overwrite these variables
+once they have been set once.
 
 
-	There are two special Environment Variables:
+Further special Environment Variables:
 
-	  serial#	- contains hardware identification information such
-			  as type string and/or serial number
-	  ethaddr	- Ethernet address
+  ver		- Contains the U-Boot version string as printed
+		  with the "version" command. This variable is
+		  readonly (see CONFIG_VERSION_VARIABLE).
 
-	These variables can be set only once (usually during manufacturing of
-	the board). U-Boot refuses to delete or overwrite these variables
-	once they have been set once.
 
+Please note that changes to some configuration parameters may take
+only effect after the next boot (yes, that's just like Windoze :-).
 
-	Further special Environment Variables:
 
-	  ver		- Contains the U-Boot version string as printed
-			  with the "version" command. This variable is
-			  readonly (see CONFIG_VERSION_VARIABLE).
+Command Line Parsing:
+=====================
 
+There are two different command line parsers available with U-Boot:
+the old "simple" one, and the much more powerful "hush" shell:
 
-	Please note that changes to some configuration parameters may take
-	only effect after the next boot (yes, that's just like Windoze :-).
+Old, simple command line parser:
+--------------------------------
 
+- supports environment variables (through setenv / saveenv commands)
+- several commands on one line, separated by ';'
+- variable substitution using "... $(name) ..." syntax
+- special characters ('$', ';') can be escaped by prefixing with '\',
+  for example:
+	setenv bootcmd bootm \$(address)
+- You can also escape text by enclosing in single apostrophes, for example:
+	setenv addip 'setenv bootargs $bootargs ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname::off'
 
-	Command Line Parsing:
-	=====================
+Hush shell:
+-----------
 
-	There are two different command line parsers available with U-Boot:
-	the old "simple" one, and the much more powerful "hush" shell:
+- similar to Bourne shell, with control structures like
+  if...then...else...fi, for...do...done; while...do...done,
+  until...do...done, ...
+- supports environment ("global") variables (through setenv / saveenv
+  commands) and local shell variables (through standard shell syntax
+  "name=value"); only environment variables can be used with "run"
+  command
 
-	Old, simple command line parser:
-	--------------------------------
+General rules:
+--------------
 
-	- supports environment variables (through setenv / saveenv commands)
-	- several commands on one line, separated by ';'
-	- variable substitution using "... $(name) ..." syntax
-	- special characters ('$', ';') can be escaped by prefixing with '\',
-	  for example:
-		setenv bootcmd bootm \$(address)
-	- You can also escape text by enclosing in single apostrophes, for example:
-		setenv addip 'setenv bootargs $bootargs ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname::off'
+(1) If a command line (or an environment variable executed by a "run"
+    command) contains several commands separated by semicolon, and
+    one of these commands fails, then the remaining commands will be
+    executed anyway.
 
-	Hush shell:
-	-----------
+(2) If you execute several variables with one call to run (i. e.
+    calling run with a list af variables as arguments), any failing
+    command will cause "run" to terminate, i. e. the remaining
+    variables are not executed.
 
-	- similar to Bourne shell, with control structures like
-	  if...then...else...fi, for...do...done; while...do...done,
-	  until...do...done, ...
-	- supports environment ("global") variables (through setenv / saveenv
-	  commands) and local shell variables (through standard shell syntax
-	  "name=value"); only environment variables can be used with "run"
-	  command
+Note for Redundant Ethernet Interfaces:
+=======================================
 
-	General rules:
-	--------------
+Some boards come with redundant ethernet interfaces; U-Boot supports
+such configurations and is capable of automatic selection of a
+"working" interface when needed. MAC assignment works as follows:
 
-	(1) If a command line (or an environment variable executed by a "run"
-	    command) contains several commands separated by semicolon, and
-	    one of these commands fails, then the remaining commands will be
-	    executed anyway.
+Network interfaces are numbered eth0, eth1, eth2, ... Corresponding
+MAC addresses can be stored in the environment as "ethaddr" (=>eth0),
+"eth1addr" (=>eth1), "eth2addr", ...
 
-	(2) If you execute several variables with one call to run (i. e.
-	    calling run with a list af variables as arguments), any failing
-	    command will cause "run" to terminate, i. e. the remaining
-	    variables are not executed.
+If the network interface stores some valid MAC address (for instance
+in SROM), this is used as default address if there is NO correspon-
+ding setting in the environment; if the corresponding environment
+variable is set, this overrides the settings in the card; that means:
 
-	Note for Redundant Ethernet Interfaces:
-	=======================================
+o If the SROM has a valid MAC address, and there is no address in the
+  environment, the SROM's address is used.
 
-	Some boards come with redundant ethernet interfaces; U-Boot supports
-	such configurations and is capable of automatic selection of a
-	"working" interface when needed. MAC assignment works as follows:
+o If there is no valid address in the SROM, and a definition in the
+  environment exists, then the value from the environment variable is
+  used.
 
-	Network interfaces are numbered eth0, eth1, eth2, ... Corresponding
-	MAC addresses can be stored in the environment as "ethaddr" (=>eth0),
-	"eth1addr" (=>eth1), "eth2addr", ...
+o If both the SROM and the environment contain a MAC address, and
+  both addresses are the same, this MAC address is used.
 
-	If the network interface stores some valid MAC address (for instance
-	in SROM), this is used as default address if there is NO correspon-
-	ding setting in the environment; if the corresponding environment
-	variable is set, this overrides the settings in the card; that means:
+o If both the SROM and the environment contain a MAC address, and the
+  addresses differ, the value from the environment is used and a
+  warning is printed.
 
-	o If the SROM has a valid MAC address, and there is no address in the
-	  environment, the SROM's address is used.
+o If neither SROM nor the environment contain a MAC address, an error
+  is raised.
 
-	o If there is no valid address in the SROM, and a definition in the
-	  environment exists, then the value from the environment variable is
-	  used.
 
-	o If both the SROM and the environment contain a MAC address, and
-	  both addresses are the same, this MAC address is used.
+Image Formats:
+==============
 
-	o If both the SROM and the environment contain a MAC address, and the
-	  addresses differ, the value from the environment is used and a
-	  warning is printed.
+The "boot" commands of this monitor operate on "image" files which
+can be basicly anything, preceeded by a special header; see the
+definitions in include/image.h for details; basicly, the header
+defines the following image properties:
 
-	o If neither SROM nor the environment contain a MAC address, an error
-	  is raised.
+* Target Operating System (Provisions for OpenBSD, NetBSD, FreeBSD,
+  4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks,
+  LynxOS, pSOS, QNX, RTEMS, ARTOS;
+  Currently supported: Linux, NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS).
+* Target CPU Architecture (Provisions for Alpha, ARM, Intel x86,
+  IA64, MIPS, NIOS, PowerPC, IBM S390, SuperH, Sparc, Sparc 64 Bit;
+  Currently supported: ARM, Intel x86, MIPS, NIOS, PowerPC).
+* Compression Type (uncompressed, gzip, bzip2)
+* Load Address
+* Entry Point
+* Image Name
+* Image Timestamp
 
+The header is marked by a special Magic Number, and both the header
+and the data portions of the image are secured against corruption by
+CRC32 checksums.
 
-	Image Formats:
-	==============
 
-	The "boot" commands of this monitor operate on "image" files which
-	can be basicly anything, preceeded by a special header; see the
-	definitions in include/image.h for details; basicly, the header
-	defines the following image properties:
+Linux Support:
+==============
 
-	* Target Operating System (Provisions for OpenBSD, NetBSD, FreeBSD,
-	  4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks,
-	  LynxOS, pSOS, QNX, RTEMS, ARTOS;
-	  Currently supported: Linux, NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS).
-	* Target CPU Architecture (Provisions for Alpha, ARM, Intel x86,
-	  IA64, MIPS, NIOS, PowerPC, IBM S390, SuperH, Sparc, Sparc 64 Bit;
-	  Currently supported: ARM, Intel x86, MIPS, NIOS, PowerPC).
-	* Compression Type (uncompressed, gzip, bzip2)
-	* Load Address
-	* Entry Point
-	* Image Name
-	* Image Timestamp
+Although U-Boot should support any OS or standalone application
+easily, the main focus has always been on Linux during the design of
+U-Boot.
 
-	The header is marked by a special Magic Number, and both the header
-	and the data portions of the image are secured against corruption by
-	CRC32 checksums.
+U-Boot includes many features that so far have been part of some
+special "boot loader" code within the Linux kernel. Also, any
+"initrd" images to be used are no longer part of one big Linux image;
+instead, kernel and "initrd" are separate images. This implementation
+serves several purposes:
 
+- the same features can be used for other OS or standalone
+  applications (for instance: using compressed images to reduce the
+  Flash memory footprint)
 
-	Linux Support:
-	==============
+- it becomes much easier to port new Linux kernel versions because
+  lots of low-level, hardware dependent stuff are done by U-Boot
 
-	Although U-Boot should support any OS or standalone application
-	easily, the main focus has always been on Linux during the design of
-	U-Boot.
+- the same Linux kernel image can now be used with different "initrd"
+  images; of course this also means that different kernel images can
+  be run with the same "initrd". This makes testing easier (you don't
+  have to build a new "zImage.initrd" Linux image when you just
+  change a file in your "initrd"). Also, a field-upgrade of the
+  software is easier now.
 
-	U-Boot includes many features that so far have been part of some
-	special "boot loader" code within the Linux kernel. Also, any
-	"initrd" images to be used are no longer part of one big Linux image;
-	instead, kernel and "initrd" are separate images. This implementation
-	serves several purposes:
 
-	- the same features can be used for other OS or standalone
-	  applications (for instance: using compressed images to reduce the
-	  Flash memory footprint)
+Linux HOWTO:
+============
 
-	- it becomes much easier to port new Linux kernel versions because
-	  lots of low-level, hardware dependent stuff are done by U-Boot
+Porting Linux to U-Boot based systems:
+---------------------------------------
 
-	- the same Linux kernel image can now be used with different "initrd"
-	  images; of course this also means that different kernel images can
-	  be run with the same "initrd". This makes testing easier (you don't
-	  have to build a new "zImage.initrd" Linux image when you just
-	  change a file in your "initrd"). Also, a field-upgrade of the
-	  software is easier now.
+U-Boot cannot save you from doing all the necessary modifications to
+configure the Linux device drivers for use with your target hardware
+(no, we don't intend to provide a full virtual machine interface to
+Linux :-).
 
+But now you can ignore ALL boot loader code (in arch/ppc/mbxboot).
 
-	Linux HOWTO:
-	============
+Just make sure your machine specific header file (for instance
+include/asm-ppc/tqm8xx.h) includes the same definition of the Board
+Information structure as we define in include/u-boot.h, and make
+sure that your definition of IMAP_ADDR uses the same value as your
+U-Boot configuration in CFG_IMMR.
 
-	Porting Linux to U-Boot based systems:
-	---------------------------------------
 
-	U-Boot cannot save you from doing all the necessary modifications to
-	configure the Linux device drivers for use with your target hardware
-	(no, we don't intend to provide a full virtual machine interface to
-	Linux :-).
+Configuring the Linux kernel:
+-----------------------------
 
-	But now you can ignore ALL boot loader code (in arch/ppc/mbxboot).
+No specific requirements for U-Boot. Make sure you have some root
+device (initial ramdisk, NFS) for your target system.
 
-	Just make sure your machine specific header file (for instance
-	include/asm-ppc/tqm8xx.h) includes the same definition of the Board
-	Information structure as we define in include/u-boot.h, and make
-	sure that your definition of IMAP_ADDR uses the same value as your
-	U-Boot configuration in CFG_IMMR.
 
+Building a Linux Image:
+-----------------------
 
-	Configuring the Linux kernel:
-	-----------------------------
+With U-Boot, "normal" build targets like "zImage" or "bzImage" are
+not used. If you use recent kernel source, a new build target
+"uImage" will exist which automatically builds an image usable by
+U-Boot. Most older kernels also have support for a "pImage" target,
+which was introduced for our predecessor project PPCBoot and uses a
+100% compatible format.
 
-	No specific requirements for U-Boot. Make sure you have some root
-	device (initial ramdisk, NFS) for your target system.
+Example:
 
+	make TQM850L_config
+	make oldconfig
+	make dep
+	make uImage
 
-	Building a Linux Image:
-	-----------------------
+The "uImage" build target uses a special tool (in 'tools/mkimage') to
+encapsulate a compressed Linux kernel image with header	 information,
+CRC32 checksum etc. for use with U-Boot. This is what we are doing:
 
-	With U-Boot, "normal" build targets like "zImage" or "bzImage" are
-	not used. If you use recent kernel source, a new build target
-	"uImage" will exist which automatically builds an image usable by
-	U-Boot. Most older kernels also have support for a "pImage" target,
-	which was introduced for our predecessor project PPCBoot and uses a
-	100% compatible format.
+* build a standard "vmlinux" kernel image (in ELF binary format):
 
-	Example:
+* convert the kernel into a raw binary image:
 
-		make TQM850L_config
-		make oldconfig
-		make dep
-		make uImage
+	${CROSS_COMPILE}-objcopy -O binary \
+				 -R .note -R .comment \
+				 -S vmlinux linux.bin
 
-	The "uImage" build target uses a special tool (in 'tools/mkimage') to
-	encapsulate a compressed Linux kernel image with header	 information,
-	CRC32 checksum etc. for use with U-Boot. This is what we are doing:
+* compress the binary image:
 
-	* build a standard "vmlinux" kernel image (in ELF binary format):
+	gzip -9 linux.bin
 
-	* convert the kernel into a raw binary image:
+* package compressed binary image for U-Boot:
 
-		${CROSS_COMPILE}-objcopy -O binary \
-					 -R .note -R .comment \
-					 -S vmlinux linux.bin
+	mkimage -A ppc -O linux -T kernel -C gzip \
+		-a 0 -e 0 -n "Linux Kernel Image" \
+		-d linux.bin.gz uImage
 
-	* compress the binary image:
 
-		gzip -9 linux.bin
+The "mkimage" tool can also be used to create ramdisk images for use
+with U-Boot, either separated from the Linux kernel image, or
+combined into one file. "mkimage" encapsulates the images with a 64
+byte header containing information about target architecture,
+operating system, image type, compression method, entry points, time
+stamp, CRC32 checksums, etc.
 
-	* package compressed binary image for U-Boot:
+"mkimage" can be called in two ways: to verify existing images and
+print the header information, or to build new images.
 
-		mkimage -A ppc -O linux -T kernel -C gzip \
-			-a 0 -e 0 -n "Linux Kernel Image" \
-			-d linux.bin.gz uImage
+In the first form (with "-l" option) mkimage lists the information
+contained in the header of an existing U-Boot image; this includes
+checksum verification:
 
+	tools/mkimage -l image
+	  -l ==> list image header information
 
-	The "mkimage" tool can also be used to create ramdisk images for use
-	with U-Boot, either separated from the Linux kernel image, or
-	combined into one file. "mkimage" encapsulates the images with a 64
-	byte header containing information about target architecture,
-	operating system, image type, compression method, entry points, time
-	stamp, CRC32 checksums, etc.
+The second form (with "-d" option) is used to build a U-Boot image
+from a "data file" which is used as image payload:
 
-	"mkimage" can be called in two ways: to verify existing images and
-	print the header information, or to build new images.
+	tools/mkimage -A arch -O os -T type -C comp -a addr -e ep \
+		      -n name -d data_file image
+	  -A ==> set architecture to 'arch'
+	  -O ==> set operating system to 'os'
+	  -T ==> set image type to 'type'
+	  -C ==> set compression type 'comp'
+	  -a ==> set load address to 'addr' (hex)
+	  -e ==> set entry point to 'ep' (hex)
+	  -n ==> set image name to 'name'
+	  -d ==> use image data from 'datafile'
 
-	In the first form (with "-l" option) mkimage lists the information
-	contained in the header of an existing U-Boot image; this includes
-	checksum verification:
+Right now, all Linux kernels use the same load address	(0x00000000),
+but the entry point address depends on the kernel version:
 
-		tools/mkimage -l image
-		  -l ==> list image header information
+- 2.2.x kernels have the entry point at 0x0000000C,
+- 2.3.x and later kernels have the entry point at 0x00000000.
 
-	The second form (with "-d" option) is used to build a U-Boot image
-	from a "data file" which is used as image payload:
+So a typical call to build a U-Boot image would read:
 
-		tools/mkimage -A arch -O os -T type -C comp -a addr -e ep \
-			      -n name -d data_file image
-		  -A ==> set architecture to 'arch'
-		  -O ==> set operating system to 'os'
-		  -T ==> set image type to 'type'
-		  -C ==> set compression type 'comp'
-		  -a ==> set load address to 'addr' (hex)
-		  -e ==> set entry point to 'ep' (hex)
-		  -n ==> set image name to 'name'
-		  -d ==> use image data from 'datafile'
+	-> tools/mkimage -n '2.4.4 kernel for TQM850L' \
+	> -A ppc -O linux -T kernel -C gzip -a 0 -e 0 \
+	> -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/ppc/coffboot/vmlinux.gz \
+	> examples/uImage.TQM850L
+	Image Name:   2.4.4 kernel for TQM850L
+	Created:      Wed Jul 19 02:34:59 2000
+	Image Type:   PowerPC Linux Kernel Image (gzip compressed)
+	Data Size:    335725 Bytes = 327.86 kB = 0.32 MB
+	Load Address: 0x00000000
+	Entry Point:  0x00000000
 
-	Right now, all Linux kernels use the same load address	(0x00000000),
-	but the entry point address depends on the kernel version:
+To verify the contents of the image (or check for corruption):
 
-	- 2.2.x kernels have the entry point at 0x0000000C,
-	- 2.3.x and later kernels have the entry point at 0x00000000.
+	-> tools/mkimage -l examples/uImage.TQM850L
+	Image Name:   2.4.4 kernel for TQM850L
+	Created:      Wed Jul 19 02:34:59 2000
+	Image Type:   PowerPC Linux Kernel Image (gzip compressed)
+	Data Size:    335725 Bytes = 327.86 kB = 0.32 MB
+	Load Address: 0x00000000
+	Entry Point:  0x00000000
 
-	So a typical call to build a U-Boot image would read:
+NOTE: for embedded systems where boot time is critical you can trade
+speed for memory and install an UNCOMPRESSED image instead: this
+needs more space in Flash, but boots much faster since it does not
+need to be uncompressed:
 
-		-> tools/mkimage -n '2.4.4 kernel for TQM850L' \
-		> -A ppc -O linux -T kernel -C gzip -a 0 -e 0 \
-		> -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/ppc/coffboot/vmlinux.gz \
-		> examples/uImage.TQM850L
-		Image Name:   2.4.4 kernel for TQM850L
-		Created:      Wed Jul 19 02:34:59 2000
-		Image Type:   PowerPC Linux Kernel Image (gzip compressed)
-		Data Size:    335725 Bytes = 327.86 kB = 0.32 MB
-		Load Address: 0x00000000
-		Entry Point:  0x00000000
+	-> gunzip /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/ppc/coffboot/vmlinux.gz
+	-> tools/mkimage -n '2.4.4 kernel for TQM850L' \
+	> -A ppc -O linux -T kernel -C none -a 0 -e 0 \
+	> -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/ppc/coffboot/vmlinux \
+	> examples/uImage.TQM850L-uncompressed
+	Image Name:   2.4.4 kernel for TQM850L
+	Created:      Wed Jul 19 02:34:59 2000
+	Image Type:   PowerPC Linux Kernel Image (uncompressed)
+	Data Size:    792160 Bytes = 773.59 kB = 0.76 MB
+	Load Address: 0x00000000
+	Entry Point:  0x00000000
 
-	To verify the contents of the image (or check for corruption):
 
-		-> tools/mkimage -l examples/uImage.TQM850L
-		Image Name:   2.4.4 kernel for TQM850L
-		Created:      Wed Jul 19 02:34:59 2000
-		Image Type:   PowerPC Linux Kernel Image (gzip compressed)
-		Data Size:    335725 Bytes = 327.86 kB = 0.32 MB
-		Load Address: 0x00000000
-		Entry Point:  0x00000000
+Similar you can build U-Boot images from a 'ramdisk.image.gz' file
+when your kernel is intended to use an initial ramdisk:
 
-	NOTE: for embedded systems where boot time is critical you can trade
-	speed for memory and install an UNCOMPRESSED image instead: this
-	needs more space in Flash, but boots much faster since it does not
-	need to be uncompressed:
+	-> tools/mkimage -n 'Simple Ramdisk Image' \
+	> -A ppc -O linux -T ramdisk -C gzip \
+	> -d /LinuxPPC/images/SIMPLE-ramdisk.image.gz examples/simple-initrd
+	Image Name:   Simple Ramdisk Image
+	Created:      Wed Jan 12 14:01:50 2000
+	Image Type:   PowerPC Linux RAMDisk Image (gzip compressed)
+	Data Size:    566530 Bytes = 553.25 kB = 0.54 MB
+	Load Address: 0x00000000
+	Entry Point:  0x00000000
 
-		-> gunzip /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/ppc/coffboot/vmlinux.gz
-		-> tools/mkimage -n '2.4.4 kernel for TQM850L' \
-		> -A ppc -O linux -T kernel -C none -a 0 -e 0 \
-		> -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/ppc/coffboot/vmlinux \
-		> examples/uImage.TQM850L-uncompressed
-		Image Name:   2.4.4 kernel for TQM850L
-		Created:      Wed Jul 19 02:34:59 2000
-		Image Type:   PowerPC Linux Kernel Image (uncompressed)
-		Data Size:    792160 Bytes = 773.59 kB = 0.76 MB
-		Load Address: 0x00000000
-		Entry Point:  0x00000000
 
+Installing a Linux Image:
+-------------------------
 
-	Similar you can build U-Boot images from a 'ramdisk.image.gz' file
-	when your kernel is intended to use an initial ramdisk:
+To downloading a U-Boot image over the serial (console) interface,
+you must convert the image to S-Record format:
 
-		-> tools/mkimage -n 'Simple Ramdisk Image' \
-		> -A ppc -O linux -T ramdisk -C gzip \
-		> -d /LinuxPPC/images/SIMPLE-ramdisk.image.gz examples/simple-initrd
-		Image Name:   Simple Ramdisk Image
-		Created:      Wed Jan 12 14:01:50 2000
-		Image Type:   PowerPC Linux RAMDisk Image (gzip compressed)
-		Data Size:    566530 Bytes = 553.25 kB = 0.54 MB
-		Load Address: 0x00000000
-		Entry Point:  0x00000000
+	objcopy -I binary -O srec examples/image examples/image.srec
 
+The 'objcopy' does not understand the information in the U-Boot
+image header, so the resulting S-Record file will be relative to
+address 0x00000000. To load it to a given address, you need to
+specify the target address as 'offset' parameter with the 'loads'
+command.
 
-	Installing a Linux Image:
-	-------------------------
+Example: install the image to address 0x40100000 (which on the
+TQM8xxL is in the first Flash bank):
 
-	To downloading a U-Boot image over the serial (console) interface,
-	you must convert the image to S-Record format:
+	=> erase 40100000 401FFFFF
 
-		objcopy -I binary -O srec examples/image examples/image.srec
+	.......... done
+	Erased 8 sectors
 
-	The 'objcopy' does not understand the information in the U-Boot
-	image header, so the resulting S-Record file will be relative to
-	address 0x00000000. To load it to a given address, you need to
-	specify the target address as 'offset' parameter with the 'loads'
-	command.
+	=> loads 40100000
+	## Ready for S-Record download ...
+	~>examples/image.srec
+	1 2 3 4 5 6 7 8 9 10 11 12 13 ...
+	...
+	15989 15990 15991 15992
+	[file transfer complete]
+	[connected]
+	## Start Addr = 0x00000000
 
-	Example: install the image to address 0x40100000 (which on the
-	TQM8xxL is in the first Flash bank):
 
-		=> erase 40100000 401FFFFF
+You can check the success of the download using the 'iminfo' command;
+this includes a checksum verification so you  can  be  sure  no	 data
+corruption happened:
 
-		.......... done
-		Erased 8 sectors
+	=> imi 40100000
 
-		=> loads 40100000
-		## Ready for S-Record download ...
-		~>examples/image.srec
-		1 2 3 4 5 6 7 8 9 10 11 12 13 ...
-		...
-		15989 15990 15991 15992
-		[file transfer complete]
-		[connected]
-		## Start Addr = 0x00000000
+	## Checking Image at 40100000 ...
+	   Image Name:	 2.2.13 for initrd on TQM850L
+	   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
+	   Data Size:	 335725 Bytes = 327 kB = 0 MB
+	   Load Address: 00000000
+	   Entry Point:	 0000000c
+	   Verifying Checksum ... OK
 
 
-	You can check the success of the download using the 'iminfo' command;
-	this includes a checksum verification so you  can  be  sure  no	 data
-	corruption happened:
+Boot Linux:
+-----------
 
-		=> imi 40100000
+The "bootm" command is used to boot an application that is stored in
+memory (RAM or Flash). In case of a Linux kernel image, the contents
+of the "bootargs" environment variable is passed to the kernel as
+parameters. You can check and modify this variable using the
+"printenv" and "setenv" commands:
 
-		## Checking Image at 40100000 ...
-		   Image Name:	 2.2.13 for initrd on TQM850L
-		   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
-		   Data Size:	 335725 Bytes = 327 kB = 0 MB
-		   Load Address: 00000000
-		   Entry Point:	 0000000c
-		   Verifying Checksum ... OK
 
+	=> printenv bootargs
+	bootargs=root=/dev/ram
 
-	Boot Linux:
-	-----------
+	=> setenv bootargs root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
 
-	The "bootm" command is used to boot an application that is stored in
-	memory (RAM or Flash). In case of a Linux kernel image, the contents
-	of the "bootargs" environment variable is passed to the kernel as
-	parameters. You can check and modify this variable using the
-	"printenv" and "setenv" commands:
+	=> printenv bootargs
+	bootargs=root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
 
+	=> bootm 40020000
+	## Booting Linux kernel at 40020000 ...
+	   Image Name:	 2.2.13 for NFS on TQM850L
+	   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
+	   Data Size:	 381681 Bytes = 372 kB = 0 MB
+	   Load Address: 00000000
+	   Entry Point:	 0000000c
+	   Verifying Checksum ... OK
+	   Uncompressing Kernel Image ... OK
+	Linux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:35:17 MEST 2000
+	Boot arguments: root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
+	time_init: decrementer frequency = 187500000/60
+	Calibrating delay loop... 49.77 BogoMIPS
+	Memory: 15208k available (700k kernel code, 444k data, 32k init) [c0000000,c1000000]
+	...
 
-		=> printenv bootargs
-		bootargs=root=/dev/ram
+If you want to boot a Linux kernel with initial ram disk, you pass
+the memory addresses of both the kernel and the initrd image (PPBCOOT
+format!) to the "bootm" command:
 
-		=> setenv bootargs root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
+	=> imi 40100000 40200000
 
-		=> printenv bootargs
-		bootargs=root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
+	## Checking Image at 40100000 ...
+	   Image Name:	 2.2.13 for initrd on TQM850L
+	   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
+	   Data Size:	 335725 Bytes = 327 kB = 0 MB
+	   Load Address: 00000000
+	   Entry Point:	 0000000c
+	   Verifying Checksum ... OK
 
-		=> bootm 40020000
-		## Booting Linux kernel at 40020000 ...
-		   Image Name:	 2.2.13 for NFS on TQM850L
-		   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
-		   Data Size:	 381681 Bytes = 372 kB = 0 MB
-		   Load Address: 00000000
-		   Entry Point:	 0000000c
-		   Verifying Checksum ... OK
-		   Uncompressing Kernel Image ... OK
-		Linux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:35:17 MEST 2000
-		Boot arguments: root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2
-		time_init: decrementer frequency = 187500000/60
-		Calibrating delay loop... 49.77 BogoMIPS
-		Memory: 15208k available (700k kernel code, 444k data, 32k init) [c0000000,c1000000]
-		...
+	## Checking Image at 40200000 ...
+	   Image Name:	 Simple Ramdisk Image
+	   Image Type:	 PowerPC Linux RAMDisk Image (gzip compressed)
+	   Data Size:	 566530 Bytes = 553 kB = 0 MB
+	   Load Address: 00000000
+	   Entry Point:	 00000000
+	   Verifying Checksum ... OK
 
-	If you want to boot a Linux kernel with initial ram disk, you pass
-	the memory addresses of both the kernel and the initrd image (PPBCOOT
-	format!) to the "bootm" command:
+	=> bootm 40100000 40200000
+	## Booting Linux kernel at 40100000 ...
+	   Image Name:	 2.2.13 for initrd on TQM850L
+	   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
+	   Data Size:	 335725 Bytes = 327 kB = 0 MB
+	   Load Address: 00000000
+	   Entry Point:	 0000000c
+	   Verifying Checksum ... OK
+	   Uncompressing Kernel Image ... OK
+	## Loading RAMDisk Image at 40200000 ...
+	   Image Name:	 Simple Ramdisk Image
+	   Image Type:	 PowerPC Linux RAMDisk Image (gzip compressed)
+	   Data Size:	 566530 Bytes = 553 kB = 0 MB
+	   Load Address: 00000000
+	   Entry Point:	 00000000
+	   Verifying Checksum ... OK
+	   Loading Ramdisk ... OK
+	Linux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:32:08 MEST 2000
+	Boot arguments: root=/dev/ram
+	time_init: decrementer frequency = 187500000/60
+	Calibrating delay loop... 49.77 BogoMIPS
+	...
+	RAMDISK: Compressed image found at block 0
+	VFS: Mounted root (ext2 filesystem).
 
-		=> imi 40100000 40200000
+	bash#
 
-		## Checking Image at 40100000 ...
-		   Image Name:	 2.2.13 for initrd on TQM850L
-		   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
-		   Data Size:	 335725 Bytes = 327 kB = 0 MB
-		   Load Address: 00000000
-		   Entry Point:	 0000000c
-		   Verifying Checksum ... OK
+More About U-Boot Image Types:
+------------------------------
 
-		## Checking Image at 40200000 ...
-		   Image Name:	 Simple Ramdisk Image
-		   Image Type:	 PowerPC Linux RAMDisk Image (gzip compressed)
-		   Data Size:	 566530 Bytes = 553 kB = 0 MB
-		   Load Address: 00000000
-		   Entry Point:	 00000000
-		   Verifying Checksum ... OK
+U-Boot supports the following image types:
 
-		=> bootm 40100000 40200000
-		## Booting Linux kernel at 40100000 ...
-		   Image Name:	 2.2.13 for initrd on TQM850L
-		   Image Type:	 PowerPC Linux Kernel Image (gzip compressed)
-		   Data Size:	 335725 Bytes = 327 kB = 0 MB
-		   Load Address: 00000000
-		   Entry Point:	 0000000c
-		   Verifying Checksum ... OK
-		   Uncompressing Kernel Image ... OK
-		## Loading RAMDisk Image at 40200000 ...
-		   Image Name:	 Simple Ramdisk Image
-		   Image Type:	 PowerPC Linux RAMDisk Image (gzip compressed)
-		   Data Size:	 566530 Bytes = 553 kB = 0 MB
-		   Load Address: 00000000
-		   Entry Point:	 00000000
-		   Verifying Checksum ... OK
-		   Loading Ramdisk ... OK
-		Linux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:32:08 MEST 2000
-		Boot arguments: root=/dev/ram
-		time_init: decrementer frequency = 187500000/60
-		Calibrating delay loop... 49.77 BogoMIPS
-		...
-		RAMDISK: Compressed image found at block 0
-		VFS: Mounted root (ext2 filesystem).
+   "Standalone Programs" are directly runnable in the environment
+	provided by U-Boot; it is expected that (if they behave
+	well) you can continue to work in U-Boot after return from
+	the Standalone Program.
+   "OS Kernel Images" are usually images of some Embedded OS which
+	will take over control completely. Usually these programs
+	will install their own set of exception handlers, device
+	drivers, set up the MMU, etc. - this means, that you cannot
+	expect to re-enter U-Boot except by resetting the CPU.
+   "RAMDisk Images" are more or less just data blocks, and their
+	parameters (address, size) are passed to an OS kernel that is
+	being started.
+   "Multi-File Images" contain several images, typically an OS
+	(Linux) kernel image and one or more data images like
+	RAMDisks. This construct is useful for instance when you want
+	to boot over the network using BOOTP etc., where the boot
+	server provides just a single image file, but you want to get
+	for instance an OS kernel and a RAMDisk image.
 
-		bash#
+	"Multi-File Images" start with a list of image sizes, each
+	image size (in bytes) specified by an "uint32_t" in network
+	byte order. This list is terminated by an "(uint32_t)0".
+	Immediately after the terminating 0 follow the images, one by
+	one, all aligned on "uint32_t" boundaries (size rounded up to
+	a multiple of 4 bytes).
 
-	More About U-Boot Image Types:
-	------------------------------
+   "Firmware Images" are binary images containing firmware (like
+	U-Boot or FPGA images) which usually will be programmed to
+	flash memory.
 
-	U-Boot supports the following image types:
+   "Script files" are command sequences that will be executed by
+	U-Boot's command interpreter; this feature is especially
+	useful when you configure U-Boot to use a real shell (hush)
+	as command interpreter.
 
-	   "Standalone Programs" are directly runnable in the environment
-		provided by U-Boot; it is expected that (if they behave
-		well) you can continue to work in U-Boot after return from
-		the Standalone Program.
-	   "OS Kernel Images" are usually images of some Embedded OS which
-		will take over control completely. Usually these programs
-		will install their own set of exception handlers, device
-		drivers, set up the MMU, etc. - this means, that you cannot
-		expect to re-enter U-Boot except by resetting the CPU.
-	   "RAMDisk Images" are more or less just data blocks, and their
-		parameters (address, size) are passed to an OS kernel that is
-		being started.
-	   "Multi-File Images" contain several images, typically an OS
-		(Linux) kernel image and one or more data images like
-		RAMDisks. This construct is useful for instance when you want
-		to boot over the network using BOOTP etc., where the boot
-		server provides just a single image file, but you want to get
-		for instance an OS kernel and a RAMDisk image.
 
-		"Multi-File Images" start with a list of image sizes, each
-		image size (in bytes) specified by an "uint32_t" in network
-		byte order. This list is terminated by an "(uint32_t)0".
-		Immediately after the terminating 0 follow the images, one by
-		one, all aligned on "uint32_t" boundaries (size rounded up to
-		a multiple of 4 bytes).
+Standalone HOWTO:
+=================
 
-	   "Firmware Images" are binary images containing firmware (like
-		U-Boot or FPGA images) which usually will be programmed to
-		flash memory.
+One of the features of U-Boot is that you can dynamically load and
+run "standalone" applications, which can use some resources of
+U-Boot like console I/O functions or interrupt services.
 
-	   "Script files" are command sequences that will be executed by
-		U-Boot's command interpreter; this feature is especially
-		useful when you configure U-Boot to use a real shell (hush)
-		as command interpreter.
+Two simple examples are included with the sources:
 
+"Hello World" Demo:
+-------------------
 
-	Standalone HOWTO:
-	=================
+'examples/hello_world.c' contains a small "Hello World" Demo
+application; it is automatically compiled when you build U-Boot.
+It's configured to run at address 0x00040004, so you can play with it
+like that:
 
-	One of the features of U-Boot is that you can dynamically load and
-	run "standalone" applications, which can use some resources of
-	U-Boot like console I/O functions or interrupt services.
+	=> loads
+	## Ready for S-Record download ...
+	~>examples/hello_world.srec
+	1 2 3 4 5 6 7 8 9 10 11 ...
+	[file transfer complete]
+	[connected]
+	## Start Addr = 0x00040004
 
-	Two simple examples are included with the sources:
+	=> go 40004 Hello World! This is a test.
+	## Starting application at 0x00040004 ...
+	Hello World
+	argc = 7
+	argv[0] = "40004"
+	argv[1] = "Hello"
+	argv[2] = "World!"
+	argv[3] = "This"
+	argv[4] = "is"
+	argv[5] = "a"
+	argv[6] = "test."
+	argv[7] = "<NULL>"
+	Hit any key to exit ...
 
-	"Hello World" Demo:
-	-------------------
+	## Application terminated, rc = 0x0
 
-	'examples/hello_world.c' contains a small "Hello World" Demo
-	application; it is automatically compiled when you build U-Boot.
-	It's configured to run at address 0x00040004, so you can play with it
-	like that:
+Another example, which demonstrates how to register a CPM interrupt
+handler with the U-Boot code, can be found in 'examples/timer.c'.
+Here, a CPM timer is set up to generate an interrupt every second.
+The interrupt service routine is trivial, just printing a '.'
+character, but this is just a demo program. The application can be
+controlled by the following keys:
 
-		=> loads
-		## Ready for S-Record download ...
-		~>examples/hello_world.srec
-		1 2 3 4 5 6 7 8 9 10 11 ...
-		[file transfer complete]
-		[connected]
-		## Start Addr = 0x00040004
+	? - print current values og the CPM Timer registers
+	b - enable interrupts and start timer
+	e - stop timer and disable interrupts
+	q - quit application
 
-		=> go 40004 Hello World! This is a test.
-		## Starting application at 0x00040004 ...
-		Hello World
-		argc = 7
-		argv[0] = "40004"
-		argv[1] = "Hello"
-		argv[2] = "World!"
-		argv[3] = "This"
-		argv[4] = "is"
-		argv[5] = "a"
-		argv[6] = "test."
-		argv[7] = "<NULL>"
-		Hit any key to exit ...
+	=> loads
+	## Ready for S-Record download ...
+	~>examples/timer.srec
+	1 2 3 4 5 6 7 8 9 10 11 ...
+	[file transfer complete]
+	[connected]
+	## Start Addr = 0x00040004
 
-		## Application terminated, rc = 0x0
+	=> go 40004
+	## Starting application at 0x00040004 ...
+	TIMERS=0xfff00980
+	Using timer 1
+	  tgcr @ 0xfff00980, tmr @ 0xfff00990, trr @ 0xfff00994, tcr @ 0xfff00998, tcn @ 0xfff0099c, ter @ 0xfff009b0
 
-	Another example, which demonstrates how to register a CPM interrupt
-	handler with the U-Boot code, can be found in 'examples/timer.c'.
-	Here, a CPM timer is set up to generate an interrupt every second.
-	The interrupt service routine is trivial, just printing a '.'
-	character, but this is just a demo program. The application can be
-	controlled by the following keys:
+Hit 'b':
+	[q, b, e, ?] Set interval 1000000 us
+	Enabling timer
+Hit '?':
+	[q, b, e, ?] ........
+	tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0xef6, ter=0x0
+Hit '?':
+	[q, b, e, ?] .
+	tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x2ad4, ter=0x0
+Hit '?':
+	[q, b, e, ?] .
+	tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x1efc, ter=0x0
+Hit '?':
+	[q, b, e, ?] .
+	tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x169d, ter=0x0
+Hit 'e':
+	[q, b, e, ?] ...Stopping timer
+Hit 'q':
+	[q, b, e, ?] ## Application terminated, rc = 0x0
 
-		? - print current values og the CPM Timer registers
-		b - enable interrupts and start timer
-		e - stop timer and disable interrupts
-		q - quit application
 
-		=> loads
-		## Ready for S-Record download ...
-		~>examples/timer.srec
-		1 2 3 4 5 6 7 8 9 10 11 ...
-		[file transfer complete]
-		[connected]
-		## Start Addr = 0x00040004
+Minicom warning:
+================
 
-		=> go 40004
-		## Starting application at 0x00040004 ...
-		TIMERS=0xfff00980
-		Using timer 1
-		  tgcr @ 0xfff00980, tmr @ 0xfff00990, trr @ 0xfff00994, tcr @ 0xfff00998, tcn @ 0xfff0099c, ter @ 0xfff009b0
+Over time, many people have reported problems when trying to use the
+"minicom" terminal emulation program for serial download. I (wd)
+consider minicom to be broken, and recommend not to use it. Under
+Unix, I recommend to use C-Kermit for general purpose use (and
+especially for kermit binary protocol download ("loadb" command), and
+use "cu" for S-Record download ("loads" command).
 
-	Hit 'b':
-		[q, b, e, ?] Set interval 1000000 us
-		Enabling timer
-	Hit '?':
-		[q, b, e, ?] ........
-		tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0xef6, ter=0x0
-	Hit '?':
-		[q, b, e, ?] .
-		tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x2ad4, ter=0x0
-	Hit '?':
-		[q, b, e, ?] .
-		tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x1efc, ter=0x0
-	Hit '?':
-		[q, b, e, ?] .
-		tgcr=0x1, tmr=0xff1c, trr=0x3d09, tcr=0x0, tcn=0x169d, ter=0x0
-	Hit 'e':
-		[q, b, e, ?] ...Stopping timer
-	Hit 'q':
-		[q, b, e, ?] ## Application terminated, rc = 0x0
+Nevertheless, if you absolutely want to use it try adding this
+configuration to your "File transfer protocols" section:
 
+	   Name	   Program			Name U/D FullScr IO-Red. Multi
+	X  kermit  /usr/bin/kermit -i -l %l -s	 Y    U	   Y	   N	  N
+	Y  kermit  /usr/bin/kermit -i -l %l -r	 N    D	   Y	   N	  N
 
-	Minicom warning:
-	================
 
-	Over time, many people have reported problems when trying to use the
-	"minicom" terminal emulation program for serial download. I (wd)
-	consider minicom to be broken, and recommend not to use it. Under
-	Unix, I recommend to use C-Kermit for general purpose use (and
-	especially for kermit binary protocol download ("loadb" command), and
-	use "cu" for S-Record download ("loads" command).
+NetBSD Notes:
+=============
 
-	Nevertheless, if you absolutely want to use it try adding this
-	configuration to your "File transfer protocols" section:
+Starting at version 0.9.2, U-Boot supports NetBSD both as host
+(build U-Boot) and target system (boots NetBSD/mpc8xx).
 
-		   Name	   Program			Name U/D FullScr IO-Red. Multi
-		X  kermit  /usr/bin/kermit -i -l %l -s	 Y    U	   Y	   N	  N
-		Y  kermit  /usr/bin/kermit -i -l %l -r	 N    D	   Y	   N	  N
+Building requires a cross environment; it is known to work on
+NetBSD/i386 with the cross-powerpc-netbsd-1.3 package (you will also
+need gmake since the Makefiles are not compatible with BSD make).
+Note that the cross-powerpc package does not install include files;
+attempting to build U-Boot will fail because <machine/ansi.h> is
+missing.  This file has to be installed and patched manually:
 
+	# cd /usr/pkg/cross/powerpc-netbsd/include
+	# mkdir powerpc
+	# ln -s powerpc machine
+	# cp /usr/src/sys/arch/powerpc/include/ansi.h powerpc/ansi.h
+	# ${EDIT} powerpc/ansi.h	## must remove __va_list, _BSD_VA_LIST
 
-	NetBSD Notes:
-	=============
+Native builds *don't* work due to incompatibilities between native
+and U-Boot include files.
 
-	Starting at version 0.9.2, U-Boot supports NetBSD both as host
-	(build U-Boot) and target system (boots NetBSD/mpc8xx).
+Booting assumes that (the first part of) the image booted is a
+stage-2 loader which in turn loads and then invokes the kernel
+proper. Loader sources will eventually appear in the NetBSD source
+tree (probably in sys/arc/mpc8xx/stand/u-boot_stage2/); in the
+meantime, send mail to bruno@exet-ag.de and/or wd@denx.de for
+details.
 
-	Building requires a cross environment; it is known to work on
-	NetBSD/i386 with the cross-powerpc-netbsd-1.3 package (you will also
-	need gmake since the Makefiles are not compatible with BSD make).
-	Note that the cross-powerpc package does not install include files;
-	attempting to build U-Boot will fail because <machine/ansi.h> is
-	missing.  This file has to be installed and patched manually:
 
-		# cd /usr/pkg/cross/powerpc-netbsd/include
-		# mkdir powerpc
-		# ln -s powerpc machine
-		# cp /usr/src/sys/arch/powerpc/include/ansi.h powerpc/ansi.h
-		# ${EDIT} powerpc/ansi.h	## must remove __va_list, _BSD_VA_LIST
+Implementation Internals:
+=========================
 
-	Native builds *don't* work due to incompatibilities between native
-	and U-Boot include files.
+The following is not intended to be a complete description of every
+implementation detail. However, it should help to understand the
+inner workings of U-Boot and make it easier to port it to custom
+hardware.
 
-	Booting assumes that (the first part of) the image booted is a
-	stage-2 loader which in turn loads and then invokes the kernel
-	proper. Loader sources will eventually appear in the NetBSD source
-	tree (probably in sys/arc/mpc8xx/stand/u-boot_stage2/); in the
-	meantime, send mail to bruno@exet-ag.de and/or wd@denx.de for
-	details.
 
+Initial Stack, Global Data:
+---------------------------
 
-	Implementation Internals:
-	=========================
+The implementation of U-Boot is complicated by the fact that U-Boot
+starts running out of ROM (flash memory), usually without access to
+system RAM (because the memory controller is not initialized yet).
+This means that we don't have writable Data or BSS segments, and BSS
+is not initialized as zero. To be able to get a C environment working
+at all, we have to allocate at least a minimal stack. Implementation
+options for this are defined and restricted by the CPU used: Some CPU
+models provide on-chip memory (like the IMMR area on MPC8xx and
+MPC826x processors), on others (parts of) the data cache can be
+locked as (mis-) used as memory, etc.
 
-	The following is not intended to be a complete description of every
-	implementation detail. However, it should help to understand the
-	inner workings of U-Boot and make it easier to port it to custom
-	hardware.
+	Chris Hallinan posted a good summary of	 these	issues	to  the
+	u-boot-users mailing list:
 
+	Subject: RE: [U-Boot-Users] RE: More On Memory Bank x (nothingness)?
+	From: "Chris Hallinan" <clh@net1plus.com>
+	Date: Mon, 10 Feb 2003 16:43:46 -0500 (22:43 MET)
+	...
 
-	Initial Stack, Global Data:
-	---------------------------
+	Correct me if I'm wrong, folks, but the way I understand it
+	is this: Using DCACHE as initial RAM for Stack, etc, does not
+	require any physical RAM backing up the cache. The cleverness
+	is that the cache is being used as a temporary supply of
+	necessary storage before the SDRAM controller is setup. It's
+	beyond the scope of this list to expain the details, but you
+	can see how this works by studying the cache architecture and
+	operation in the architecture and processor-specific manuals.
 
-	The implementation of U-Boot is complicated by the fact that U-Boot
-	starts running out of ROM (flash memory), usually without access to
-	system RAM (because the memory controller is not initialized yet).
-	This means that we don't have writable Data or BSS segments, and BSS
-	is not initialized as zero. To be able to get a C environment working
-	at all, we have to allocate at least a minimal stack. Implementation
-	options for this are defined and restricted by the CPU used: Some CPU
-	models provide on-chip memory (like the IMMR area on MPC8xx and
-	MPC826x processors), on others (parts of) the data cache can be
-	locked as (mis-) used as memory, etc.
+	OCM is On Chip Memory, which I believe the 405GP has 4K. It
+	is another option for the system designer to use as an
+	initial stack/ram area prior to SDRAM being available. Either
+	option should work for you. Using CS 4 should be fine if your
+	board designers haven't used it for something that would
+	cause you grief during the initial boot! It is frequently not
+	used.
 
-		Chris Hallinan posted a good summary of	 these	issues	to  the
-		u-boot-users mailing list:
+	CFG_INIT_RAM_ADDR should be somewhere that won't interfere
+	with your processor/board/system design. The default value
+	you will find in any recent u-boot distribution in
+	Walnut405.h should work for you. I'd set it to a value larger
+	than your SDRAM module. If you have a 64MB SDRAM module, set
+	it above 400_0000. Just make sure your board has no resources
+	that are supposed to respond to that address! That code in
+	start.S has been around a while and should work as is when
+	you get the config right.
 
-		Subject: RE: [U-Boot-Users] RE: More On Memory Bank x (nothingness)?
-		From: "Chris Hallinan" <clh@net1plus.com>
-		Date: Mon, 10 Feb 2003 16:43:46 -0500 (22:43 MET)
-		...
+	-Chris Hallinan
+	DS4.COM, Inc.
 
-		Correct me if I'm wrong, folks, but the way I understand it
-		is this: Using DCACHE as initial RAM for Stack, etc, does not
-		require any physical RAM backing up the cache. The cleverness
-		is that the cache is being used as a temporary supply of
-		necessary storage before the SDRAM controller is setup. It's
-		beyond the scope of this list to expain the details, but you
-		can see how this works by studying the cache architecture and
-		operation in the architecture and processor-specific manuals.
+It is essential to remember this, since it has some impact on the C
+code for the initialization procedures:
 
-		OCM is On Chip Memory, which I believe the 405GP has 4K. It
-		is another option for the system designer to use as an
-		initial stack/ram area prior to SDRAM being available. Either
-		option should work for you. Using CS 4 should be fine if your
-		board designers haven't used it for something that would
-		cause you grief during the initial boot! It is frequently not
-		used.
+* Initialized global data (data segment) is read-only. Do not attempt
+  to write it.
 
-		CFG_INIT_RAM_ADDR should be somewhere that won't interfere
-		with your processor/board/system design. The default value
-		you will find in any recent u-boot distribution in
-		Walnut405.h should work for you. I'd set it to a value larger
-		than your SDRAM module. If you have a 64MB SDRAM module, set
-		it above 400_0000. Just make sure your board has no resources
-		that are supposed to respond to that address! That code in
-		start.S has been around a while and should work as is when
-		you get the config right.
+* Do not use any unitialized global data (or implicitely initialized
+  as zero data - BSS segment) at all - this is undefined, initiali-
+  zation is performed later (when relocating to RAM).
 
-		-Chris Hallinan
-		DS4.COM, Inc.
+* Stack space is very limited. Avoid big data buffers or things like
+  that.
 
-	It is essential to remember this, since it has some impact on the C
-	code for the initialization procedures:
+Having only the stack as writable memory limits means we cannot use
+normal global data to share information beween the code. But it
+turned out that the implementation of U-Boot can be greatly
+simplified by making a global data structure (gd_t) available to all
+functions. We could pass a pointer to this data as argument to _all_
+functions, but this would bloat the code. Instead we use a feature of
+the GCC compiler (Global Register Variables) to share the data: we
+place a pointer (gd) to the global data into a register which we
+reserve for this purpose.
 
-	* Initialized global data (data segment) is read-only. Do not attempt
-	  to write it.
+When choosing a register for such a purpose we are restricted by the
+relevant  (E)ABI  specifications for the current architecture, and by
+GCC's implementation.
 
-	* Do not use any unitialized global data (or implicitely initialized
-	  as zero data - BSS segment) at all - this is undefined, initiali-
-	  zation is performed later (when relocating to RAM).
+For PowerPC, the following registers have specific use:
+	R1:	stack pointer
+	R2:	TOC pointer
+	R3-R4:	parameter passing and return values
+	R5-R10: parameter passing
+	R13:	small data area pointer
+	R30:	GOT pointer
+	R31:	frame pointer
 
-	* Stack space is very limited. Avoid big data buffers or things like
-	  that.
+	(U-Boot also uses R14 as internal GOT pointer.)
 
-	Having only the stack as writable memory limits means we cannot use
-	normal global data to share information beween the code. But it
-	turned out that the implementation of U-Boot can be greatly
-	simplified by making a global data structure (gd_t) available to all
-	functions. We could pass a pointer to this data as argument to _all_
-	functions, but this would bloat the code. Instead we use a feature of
-	the GCC compiler (Global Register Variables) to share the data: we
-	place a pointer (gd) to the global data into a register which we
-	reserve for this purpose.
+    ==> U-Boot will use R29 to hold a pointer to the global data
 
-	When choosing a register for such a purpose we are restricted by the
-	relevant  (E)ABI  specifications for the current architecture, and by
-	GCC's implementation.
+    Note: on PPC, we could use a static initializer (since the
+    address of the global data structure is known at compile time),
+    but it turned out that reserving a register results in somewhat
+    smaller code - although the code savings are not that big (on
+    average for all boards 752 bytes for the whole U-Boot image,
+    624 text + 127 data).
 
-	For PowerPC, the following registers have specific use:
-		R1:	stack pointer
-		R2:	TOC pointer
-		R3-R4:	parameter passing and return values
-		R5-R10: parameter passing
-		R13:	small data area pointer
-		R30:	GOT pointer
-		R31:	frame pointer
+On ARM, the following registers are used:
 
-		(U-Boot also uses R14 as internal GOT pointer.)
+	R0:	function argument word/integer result
+	R1-R3:	function argument word
+	R9:	GOT pointer
+	R10:	stack limit (used only if stack checking if enabled)
+	R11:	argument (frame) pointer
+	R12:	temporary workspace
+	R13:	stack pointer
+	R14:	link register
+	R15:	program counter
 
-	    ==> U-Boot will use R29 to hold a pointer to the global data
+    ==> U-Boot will use R8 to hold a pointer to the global data
 
-	    Note: on PPC, we could use a static initializer (since the
-	    address of the global data structure is known at compile time),
-	    but it turned out that reserving a register results in somewhat
-	    smaller code - although the code savings are not that big (on
-	    average for all boards 752 bytes for the whole U-Boot image,
-	    624 text + 127 data).
 
-	On ARM, the following registers are used:
+Memory Management:
+------------------
 
-		R0:	function argument word/integer result
-		R1-R3:	function argument word
-		R9:	GOT pointer
-		R10:	stack limit (used only if stack checking if enabled)
-		R11:	argument (frame) pointer
-		R12:	temporary workspace
-		R13:	stack pointer
-		R14:	link register
-		R15:	program counter
+U-Boot runs in system state and uses physical addresses, i.e. the
+MMU is not used either for address mapping nor for memory protection.
 
-	    ==> U-Boot will use R8 to hold a pointer to the global data
+The available memory is mapped to fixed addresses using the memory
+controller. In this process, a contiguous block is formed for each
+memory type (Flash, SDRAM, SRAM), even when it consists of several
+physical memory banks.
 
+U-Boot is installed in the first 128 kB of the first Flash bank (on
+TQM8xxL modules this is the range 0x40000000 ... 0x4001FFFF). After
+booting and sizing and initializing DRAM, the code relocates itself
+to the upper end of DRAM. Immediately below the U-Boot code some
+memory is reserved for use by malloc() [see CFG_MALLOC_LEN
+configuration setting]. Below that, a structure with global Board
+Info data is placed, followed by the stack (growing downward).
 
-	Memory Management:
-	------------------
+Additionally, some exception handler code is copied to the low 8 kB
+of DRAM (0x00000000 ... 0x00001FFF).
 
-	U-Boot runs in system state and uses physical addresses, i.e. the
-	MMU is not used either for address mapping nor for memory protection.
+So a typical memory configuration with 16 MB of DRAM could look like
+this:
 
-	The available memory is mapped to fixed addresses using the memory
-	controller. In this process, a contiguous block is formed for each
-	memory type (Flash, SDRAM, SRAM), even when it consists of several
-	physical memory banks.
+	0x0000 0000	Exception Vector code
+	      :
+	0x0000 1FFF
+	0x0000 2000	Free for Application Use
+	      :
+	      :
 
-	U-Boot is installed in the first 128 kB of the first Flash bank (on
-	TQM8xxL modules this is the range 0x40000000 ... 0x4001FFFF). After
-	booting and sizing and initializing DRAM, the code relocates itself
-	to the upper end of DRAM. Immediately below the U-Boot code some
-	memory is reserved for use by malloc() [see CFG_MALLOC_LEN
-	configuration setting]. Below that, a structure with global Board
-	Info data is placed, followed by the stack (growing downward).
+	      :
+	      :
+	0x00FB FF20	Monitor Stack (Growing downward)
+	0x00FB FFAC	Board Info Data and permanent copy of global data
+	0x00FC 0000	Malloc Arena
+	      :
+	0x00FD FFFF
+	0x00FE 0000	RAM Copy of Monitor Code
+	...		eventually: LCD or video framebuffer
+	...		eventually: pRAM (Protected RAM - unchanged by reset)
+	0x00FF FFFF	[End of RAM]
 
-	Additionally, some exception handler code is copied to the low 8 kB
-	of DRAM (0x00000000 ... 0x00001FFF).
 
-	So a typical memory configuration with 16 MB of DRAM could look like
-	this:
+System Initialization:
+----------------------
 
-		0x0000 0000	Exception Vector code
-		      :
-		0x0000 1FFF
-		0x0000 2000	Free for Application Use
-		      :
-		      :
+In the reset configuration, U-Boot starts at the reset entry point
+(on most PowerPC systens at address 0x00000100). Because of the reset
+configuration for CS0# this is a mirror of the onboard Flash memory.
+To be able to re-map memory U-Boot then jumps to its link address.
+To be able to implement the initialization code in C, a (small!)
+initial stack is set up in the internal Dual Ported RAM (in case CPUs
+which provide such a feature like MPC8xx or MPC8260), or in a locked
+part of the data cache. After that, U-Boot initializes the CPU core,
+the caches and the SIU.
 
-		      :
-		      :
-		0x00FB FF20	Monitor Stack (Growing downward)
-		0x00FB FFAC	Board Info Data and permanent copy of global data
-		0x00FC 0000	Malloc Arena
-		      :
-		0x00FD FFFF
-		0x00FE 0000	RAM Copy of Monitor Code
-		...		eventually: LCD or video framebuffer
-		...		eventually: pRAM (Protected RAM - unchanged by reset)
-		0x00FF FFFF	[End of RAM]
+Next, all (potentially) available memory banks are mapped using a
+preliminary mapping. For example, we put them on 512 MB boundaries
+(multiples of 0x20000000: SDRAM on 0x00000000 and 0x20000000, Flash
+on 0x40000000 and 0x60000000, SRAM on 0x80000000). Then UPM A is
+programmed for SDRAM access. Using the temporary configuration, a
+simple memory test is run that determines the size of the SDRAM
+banks.
 
+When there is more than one SDRAM bank, and the banks are of
+different size, the largest is mapped first. For equal size, the first
+bank (CS2#) is mapped first. The first mapping is always for address
+0x00000000, with any additional banks following immediately to create
+contiguous memory starting from 0.
 
-	System Initialization:
-	----------------------
+Then, the monitor installs itself at the upper end of the SDRAM area
+and allocates memory for use by malloc() and for the global Board
+Info data; also, the exception vector code is copied to the low RAM
+pages, and the final stack is set up.
 
-	In the reset configuration, U-Boot starts at the reset entry point
-	(on most PowerPC systens at address 0x00000100). Because of the reset
-	configuration for CS0# this is a mirror of the onboard Flash memory.
-	To be able to re-map memory U-Boot then jumps to its link address.
-	To be able to implement the initialization code in C, a (small!)
-	initial stack is set up in the internal Dual Ported RAM (in case CPUs
-	which provide such a feature like MPC8xx or MPC8260), or in a locked
-	part of the data cache. After that, U-Boot initializes the CPU core,
-	the caches and the SIU.
+Only after this relocation will you have a "normal" C environment;
+until that you are restricted in several ways, mostly because you are
+running from ROM, and because the code will have to be relocated to a
+new address in RAM.
 
-	Next, all (potentially) available memory banks are mapped using a
-	preliminary mapping. For example, we put them on 512 MB boundaries
-	(multiples of 0x20000000: SDRAM on 0x00000000 and 0x20000000, Flash
-	on 0x40000000 and 0x60000000, SRAM on 0x80000000). Then UPM A is
-	programmed for SDRAM access. Using the temporary configuration, a
-	simple memory test is run that determines the size of the SDRAM
-	banks.
 
-	When there is more than one SDRAM bank, and the banks are of
-	different size, the largest is mapped first. For equal size, the first
-	bank (CS2#) is mapped first. The first mapping is always for address
-	0x00000000, with any additional banks following immediately to create
-	contiguous memory starting from 0.
+U-Boot Porting Guide:
+----------------------
 
-	Then, the monitor installs itself at the upper end of the SDRAM area
-	and allocates memory for use by malloc() and for the global Board
-	Info data; also, the exception vector code is copied to the low RAM
-	pages, and the final stack is set up.
+[Based on messages by Jerry Van Baren in the U-Boot-Users mailing
+list, October 2002]
 
-	Only after this relocation will you have a "normal" C environment;
-	until that you are restricted in several ways, mostly because you are
-	running from ROM, and because the code will have to be relocated to a
-	new address in RAM.
 
+int main (int argc, char *argv[])
+{
+	sighandler_t no_more_time;
 
-	U-Boot Porting Guide:
-	----------------------
+	signal (SIGALRM, no_more_time);
+	alarm (PROJECT_DEADLINE - toSec (3 * WEEK));
 
-	[Based on messages by Jerry Van Baren in the U-Boot-Users mailing
-	list, October 2002]
-
-
-	int main (int argc, char *argv[])
-	{
-		sighandler_t no_more_time;
-
-		signal (SIGALRM, no_more_time);
-		alarm (PROJECT_DEADLINE - toSec (3 * WEEK));
-
-		if (available_money > available_manpower) {
-			pay consultant to port U-Boot;
-			return 0;
-		}
-
-		Download latest U-Boot source;
+	if (available_money > available_manpower) {
+		pay consultant to port U-Boot;
+		return 0;
+	}
 
-		Subscribe to u-boot-users mailing list;
+	Download latest U-Boot source;
 
-		if (clueless) {
-			email ("Hi, I am new to U-Boot, how do I get started?");
-		}
+	Subscribe to u-boot-users mailing list;
 
-		while (learning) {
-			Read the README file in the top level directory;
-			Read http://www.denx.de/twiki/bin/view/DULG/Manual ;
-			Read the source, Luke;
-		}
+	if (clueless) {
+		email ("Hi, I am new to U-Boot, how do I get started?");
+	}
 
-		if (available_money > toLocalCurrency ($2500)) {
-			Buy a BDI2000;
-		} else {
-			Add a lot of aggravation and time;
-		}
+	while (learning) {
+		Read the README file in the top level directory;
+		Read http://www.denx.de/twiki/bin/view/DULG/Manual ;
+		Read the source, Luke;
+	}
 
-		Create your own board support subdirectory;
+	if (available_money > toLocalCurrency ($2500)) {
+		Buy a BDI2000;
+	} else {
+		Add a lot of aggravation and time;
+	}
 
-		Create your own board config file;
+	Create your own board support subdirectory;
 
-		while (!running) {
-			do {
-				Add / modify source code;
-			} until (compiles);
-			Debug;
-			if (clueless)
-				email ("Hi, I am having problems...");
-		}
-		Send patch file to Wolfgang;
+	Create your own board config file;
 
-		return 0;
+	while (!running) {
+		do {
+			Add / modify source code;
+		} until (compiles);
+		Debug;
+		if (clueless)
+			email ("Hi, I am having problems...");
 	}
+	Send patch file to Wolfgang;
 
-	void no_more_time (int sig)
-	{
-	      hire_a_guru();
-	}
+	return 0;
+}
 
+void no_more_time (int sig)
+{
+      hire_a_guru();
+}
 
-	Coding Standards:
-	-----------------
 
-	All contributions to U-Boot should conform to the Linux kernel
-	coding style; see the file "Documentation/CodingStyle" in your Linux
-	kernel source directory.
+Coding Standards:
+-----------------
 
-	Please note that U-Boot is implemented in C (and to some small parts
-	in Assembler); no C++ is used, so please do not use C++ style
-	comments (//) in your code.
+All contributions to U-Boot should conform to the Linux kernel
+coding style; see the file "Documentation/CodingStyle" in your Linux
+kernel source directory.
 
-	Please also stick to the following formatting rules:
-	- remove any trailing white space
-	- use TAB characters for indentation, not spaces
-	- make sure NOT to use DOS '\r\n' line feeds
-	- do not add more than 2 empty lines to source files
-	- do not add trailing empty lines to source files
+Please note that U-Boot is implemented in C (and to some small parts
+in Assembler); no C++ is used, so please do not use C++ style
+comments (//) in your code.
 
-	Submissions which do not conform to the standards may be returned
-	with a request to reformat the changes.
+Please also stick to the following formatting rules:
+- remove any trailing white space
+- use TAB characters for indentation, not spaces
+- make sure NOT to use DOS '\r\n' line feeds
+- do not add more than 2 empty lines to source files
+- do not add trailing empty lines to source files
 
+Submissions which do not conform to the standards may be returned
+with a request to reformat the changes.
 
-	Submitting Patches:
-	-------------------
 
-	Since the number of patches for U-Boot is growing, we need to
-	establish some rules. Submissions which do not conform to these rules
-	may be rejected, even when they contain important and valuable stuff.
+Submitting Patches:
+-------------------
 
+Since the number of patches for U-Boot is growing, we need to
+establish some rules. Submissions which do not conform to these rules
+may be rejected, even when they contain important and valuable stuff.
 
-	When you send a patch, please include the following information with
-	it:
 
-	* For bug fixes: a description of the bug and how your patch fixes
-	  this bug. Please try to include a way of demonstrating that the
-	  patch actually fixes something.
+When you send a patch, please include the following information with
+it:
 
-	* For new features: a description of the feature and your
-	  implementation.
+* For bug fixes: a description of the bug and how your patch fixes
+  this bug. Please try to include a way of demonstrating that the
+  patch actually fixes something.
 
-	* A CHANGELOG entry as plaintext (separate from the patch)
+* For new features: a description of the feature and your
+  implementation.
 
-	* For major contributions, your entry to the CREDITS file
+* A CHANGELOG entry as plaintext (separate from the patch)
 
-	* When you add support for a new board, don't forget to add this
-	  board to the MAKEALL script, too.
+* For major contributions, your entry to the CREDITS file
 
-	* If your patch adds new configuration options, don't forget to
-	  document these in the README file.
+* When you add support for a new board, don't forget to add this
+  board to the MAKEALL script, too.
 
-	* The patch itself. If you are accessing the CVS repository use "cvs
-	  update; cvs diff -puRN"; else, use "diff -purN OLD NEW". If your
-	  version of diff does not support these options, then get the latest
-	  version of GNU diff.
+* If your patch adds new configuration options, don't forget to
+  document these in the README file.
 
-	  The current directory when running this command shall be the top
-	  level directory of the U-Boot source tree, or it's parent directory
-	  (i. e. please make sure that your patch includes sufficient
-	  directory information for the affected files).
+* The patch itself. If you are accessing the CVS repository use "cvs
+  update; cvs diff -puRN"; else, use "diff -purN OLD NEW". If your
+  version of diff does not support these options, then get the latest
+  version of GNU diff.
 
-	  We accept patches as plain text, MIME attachments or as uuencoded
-	  gzipped text.
+  The current directory when running this command shall be the top
+  level directory of the U-Boot source tree, or it's parent directory
+  (i. e. please make sure that your patch includes sufficient
+  directory information for the affected files).
 
-	* If one logical set of modifications affects or creates several
-	  files, all these changes shall be submitted in a SINGLE patch file.
+  We accept patches as plain text, MIME attachments or as uuencoded
+  gzipped text.
 
-	* Changesets that contain different, unrelated modifications shall be
-	  submitted as SEPARATE patches, one patch per changeset.
+* If one logical set of modifications affects or creates several
+  files, all these changes shall be submitted in a SINGLE patch file.
 
+* Changesets that contain different, unrelated modifications shall be
+  submitted as SEPARATE patches, one patch per changeset.
 
-	Notes:
 
-	* Before sending the patch, run the MAKEALL script on your patched
-	  source tree and make sure that no errors or warnings are reported
-	  for any of the boards.
+Notes:
 
-	* Keep your modifications to the necessary minimum: A patch
-	  containing several unrelated changes or arbitrary reformats will be
-	  returned with a request to re-formatting / split it.
+* Before sending the patch, run the MAKEALL script on your patched
+  source tree and make sure that no errors or warnings are reported
+  for any of the boards.
+
+* Keep your modifications to the necessary minimum: A patch
+  containing several unrelated changes or arbitrary reformats will be
+  returned with a request to re-formatting / split it.
 
-	* If you modify existing code, make sure that your new code does not
-	  add to the memory footprint of the code ;-) Small is beautiful!
-	  When adding new features, these should compile conditionally only
-	  (using #ifdef), and the resulting code with the new feature
-	  disabled must not need more memory than the old code without your
-	  modification.
+* If you modify existing code, make sure that your new code does not
+  add to the memory footprint of the code ;-) Small is beautiful!
+  When adding new features, these should compile conditionally only
+  (using #ifdef), and the resulting code with the new feature
+  disabled must not need more memory than the old code without your
+  modification.
