# DONT FORGET TO CHANGE THE "version" VAR BELOW IF YOU MAKE CHANGES TO THIS FILE

# (C) Copyright 2001
# Murray Jensen, CSIRO-MIT, <Murray.Jensen@csiro.au>
#
# See file CREDITS for list of people who contributed to this
# project.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA

#
# global_env
#
# file used by Hymod boards to initialise the u-boot non-volatile
# environment when u-boot is first run (it determines this by the
# absence of the environment variable "global_env_loaded")
#
# format of this file is:
#
#	1. blank lines and lines beginning with '#' are ignored
#	2. all other lines must have the form <name>=<value>
#	3. if a percent appears anywhere, it is replaced like so:
#
#		%s	serial number of the main board (10 digit zero filled)
#		%S	serial number of the main board (plain number)
#		%%	a percentage character
#		... otherwise the %x is discarded
#
# if first character in <name> is a dash ('-'), then an existing env var
# will not be overwritten (the dash is removed). i.e. it is only set if
# it does not exist
#
# if last character in <name> is a plus ('+'), then <value> will be appended
# to any existing env var (the plus is ignored). Duplicates of <value> are
# removed.
#
# similarly, if the last character in <name> is a minus ('-'), then any
# occurences of <value> in the current value of <name> will removed (the
# minus is ignored).
#
# leading and trailing whitespace is removed in both <name> and <value>
# (after processing any initial or final plus/minus in <name>).
#

# MISCELLANEOUS PARAMETERS

# version must always come first
version=3

# set the ip address based on the main board serial number
ipaddr=192.168.1.%S
serverip=192.168.1.254

# stop auto execute after tftp (not a very good name really)
autostart=no

# setting this to "yes" forces the global_env file to be loaded and processed
# if the current version is different to the version in the file
always_check_env=no

# BOOTING COMMANDS AND PARAMETERS

# command to run when "auto-booting"
bootcmd=bootm 40080000 40200000

# how long the "countdown" to automatically running "bootcmd" is
bootdelay=2

# how long before it "times out" console input and attempts to run "bootcmd"
bootretry=5

# arguments passed to the boot program (i.e. linux kernel) via register 6
# the linux kernel (v2.4) uses the following registers:
#	r3 - address of board information structure
#	r4 - address of initial ramdisk image (0 means no initrd)
#	r5 - size of initial ramdisk image
#	r6 - address of command line string
-bootargs=root=/dev/ram rw

# these four are for hymod linux intergrated into our Sun network
bootargs+=serialno=%S
bootargs+=nisclient nisdomain=mlb.dmt.csiro.au nissrvadr=138.194.112.4
bootargs+=nfsclient
bootargs+=automount

# start a web server by default
bootargs+=webserver

# give negotiation time to finish
bootargs+=netsleep=5

# then our ciscos don't pass packets for 25-30 secs after that, so
# pinging the server until it responds prevents network connections
# from failing...
bootargs+=netping

# these are old bootargs - we don't need them anymore
bootargs-=preload=unix,i2c-cpm,i2c-dev
bootargs-=ramdisk_size=32768
bootargs-=ramdisk_size=24576

# FLASH MANIPULATION COMMANDS

#
# 16M flash, 64 x 256K sectors, mapped at address 0x40000000
#
# Sector(s)	Address		Size	Description
#
#  0 -  0	0x40000000	256K	boot code
#  1 -  1	0x40040000	256K	non volatile environment
#  2 -  4	0x40080000	768K	linux kernel image
#  5 -  7	0x40140000	768K	alternate linux kernel image
#  8 - 47	0x40200000	 10M	linux initial ramdisk image
# 48 - 63	0x40c00000	  4M	ramdisk image for applications
#

fetchboot=tftp 100000 /hymod/u-boot.bin
eraseboot=protect off 1:0 ; erase 1:0 ; protect on 1:0
copyboot=protect off 1:0 ; cp.b 100000 40000000 40000 ; protect on 1:0
cmpboot=cmp.b 100000 40000000 40000
newboot=run fetchboot eraseboot copyboot cmpboot

fetchlinux=tftp 100000 /hymod/linux.bin
eraselinux=erase 1:2-4
copylinux=cp.b 100000 40080000 $(filesize)
cmplinux=cmp.b 100000 40080000 $(filesize)
newlinux=run fetchlinux eraselinux copylinux cmplinux

fetchaltlinux=tftp 100000 /hymod/altlinux.bin
erasealtlinux=erase 1:5-7
copyaltlinux=cp.b 100000 40140000 $(filesize)
cmpaltlinux=cmp.b 100000 40140000 $(filesize)
newaltlinux=run fetchaltlinux erasealtlinux copyaltlinux cmpaltlinux

fetchird=tftp 100000 /hymod/initrd.bin
eraseird=erase 1:8-47
copyird=cp.b 100000 40200000 $(filesize)
cmpird=cmp.b 100000 40200000 $(filesize)
newinitrd=run fetchird eraseird copyird cmpird

fetchard=tftp 100000 /hymod/apprd.bin
eraseard=erase 1:48-63
copyard=cp.b 100000 40c00000 $(filesize)
cmpard=cmp.b 100000 40c00000 $(filesize)
newapprd=run fetchard eraseard copyard cmpard
