# $Header$
# hush bootscript for PPCBOOT on L1
# note: all #s are in hex, do _NOT_ prefix it with 0x

flash_rfs=ffc00000
flash_krl=fff00000
tftp_addr=100000
tftp2_addr=1000000

if printenv booted
then
	echo already booted before
else
	echo first boot in environment, create and save settings
	setenv booted OK
	saveenv
fi

setenv autoload no
# clear out stale env stuff, so we get fresh from dhcp.
for setting in initrd fromflash kernel rootfs rootpath
do
setenv $setting
done

dhcp

# if host provides us with a different bootscript, us it.
if printenv bootscript
	then
	tftp $tftp_addr $bootcript
	if imi $tftp_addr
	then
		autoscript $tftp_addr
	fi
fi

# default base kernel arguments.
setenv bootargs $xbootargs devfs=mount ip=$ipaddr:$serverip:$gatewayip:$netmask:L1:eth0:off wdt=120

# Have a kernel in flash?
if imi $flash_krl
then
	echo ok kernel to boot from $flash_krl
	setenv kernel $flash_krl
else
	echo no kernel to boot from $flash_krl, need tftp
fi

# Have a rootfs in flash? 
echo test for SQUASHfs at $flash_rfs

if imi $flash_rfs
then
	echo appears to be a good initrd image at base of flash OK
	setenv rootfs $flash_rfs
else
	echo no image at base of flash, need nfsroot or initrd
fi

# I boot from flash if told to and I can.
if printenv fromflash && printenv kernel && printenv rootfs
then
	echo booting entirely from flash
	setenv bootargs root=/dev/ram0 rw $bootargs
	bootm $kernel $rootfs
	echo oh no failed so I try some other stuff
fi

# TFTP down a kernel
if printenv bootfile
then 
	tftp $tftp_addr $bootfile
	setenv kernel $tftp_addr
	echo I will boot the TFTP kernel
else
	if printenv kernel
	then
		echo no bootfile specified, will use one from flash
	else
		setenv bootfile /opt/crayx1/craymcu/l1/flash/linux.image
		echo OH NO! we have no bootfile,nor flash kernel! try default: $bootfile
		tftp $tftp_addr $bootfile
		setenv kernel $tftp_addr
	fi
fi

# the rootfs.
if printenv rootpath
then
	echo rootpath is $rootpath
	if printenv initrd
	then 
		echo initrd is also specified, so use $initrd
		tftp $tftp2_addr $initrd
		setenv bootargs root=/dev/ram0 rw cwsroot=$serverip:$rootpath $bootargs
		bootm $kernel $tftp2_addr
	else
		echo initrd is not specified, so use NFSROOT $rootpat
		setenv bootargs root=/dev/nfs ro nfsroot=$serverip:$rootpath $bootargs
		bootm $kernel
	fi
else
	echo we have no rootpath check for one in flash
	if printenv rootfs
	then
		echo I will use the one in flash
		setenv bootargs root=/dev/mtdblock/0 ro rootfstype=squashfs $bootargs
		bootm $kernel
	else
		setenv rootpath /export/crayl1
		echo OH NO! we have no rootpath,nor flash kernel! try default: $rootpath
		setenv bootargs root=/dev/mtdblock/0 ro rootfstype=squashfs $bootargs
		bootm $kernel
	fi
fi
reset
