/*
 * A target board needs to set these variables for the commands below to work:
 *
 * - adi_stage2_offset, the location of stage2-boot.ldr on the SPI flash
 * - adi_image_offset, location of the fitImage on the SPI flash
 * - adi_rfs_offset, location of the RFS on the SPI flash
 * - loadaddr, where you want to load things
 * - jffs2file, name of the jffs2 file for update, ex adsp-sc5xx-tiny-adsp-sc573.jffs2
 */

#ifdef CONFIG_SC59X_64
#define EARLY_PRINTK earlycon=adi_uart,0x31003000
#else
#define EARLY_PRINTK earlyprintk=serial,uart0,CONFIG_BAUDRATE
#endif

/* Config options */
imagefile=fitImage
ethaddr=02:80:ad:20:31:e8
eth1addr=02:80:ad:20:31:e9
uart_console=CONFIG_UART_CONSOLE
#ifdef CONFIG_SC59X_64
fdt_high=0xffffffffffffffff
initrd_high=0xffffffffffffffff
#else
fdt_high=0xffffffff
initrd_high=0xffffffff
#endif

/* Helper routines */
init_ethernet=mii info;
	dhcp;
	setenv serverip ${tftpserverip}

/* Args for each boot mode */
adi_bootargs=EARLY_PRINTK console=ttySC0,CONFIG_BAUDRATE vmalloc=512M
ramargs=setenv bootargs ${adi_bootargs}

addip=setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}:eth0:off

/* Boot modes are selectable and should be defined in the board env before including */
#if defined(USE_NFS)
// rootpath is set by CONFIG_ROOTPATH
nfsargs=setenv bootargs root=/dev/nfs rw nfsroot=${serverip}${rootpath},tcp,nfsvers=3 ${adi_bootargs}
nfsboot=run init_ethernet;
	tftp ${loadaddr} ${tftp_dir_prefix}${imagefile};
	run nfsargs;
	run addip;
	bootm ${loadaddr}
#endif

#if defined(USE_MMC)
mmcargs=setenv bootargs root=/dev/mmcblk0p1 rw rootfstype=ext4 rootwait ${adi_bootargs}
mmcboot=mmc rescan;
	ext4load mmc 0:1 ${loadaddr} /boot/${imagefile};
	run mmcargs;
	bootm ${loadaddr}
#endif

#if defined(USE_SPI) || defined(USE_OSPI)
spiargs=setenv bootargs root=/dev/mtdblock4 rw rootfstype=jffs2 ${adi_bootargs}
spiboot=run spiargs;
	sf probe ${sfdev};
	sf read ${loadaddr} ${adi_image_offset} ${imagesize};
	bootm ${loadaddr}
#endif

#if defined(USE_OSPI)
ospiboot=run spiboot
#endif

#if defined(USE_RAM)
ramboot=run init_ethernet;
	tftp ${loadaddr} ${tfpt_dir_prefix}${imagefile};
	run ramargs;
	bootm ${loadaddr}
#endif

/* Update commands */
stage1file=stage1-boot.ldr
stage2file=stage2-boot.ldr

#if defined(USE_SPI) || defined(USE_OSPI)
update_spi_uboot_stage1=tftp ${loadaddr} ${tftp_dir_prefix}${stage1file};
	sf probe ${sfdev};
	sf update ${loadaddr} 0x0 ${filesize}
update_spi_uboot_stage2=tftp ${loadaddr} ${tftp_dir_prefix}${stage2file};
	sf probe ${sfdev};
	sf update ${loadaddr} ${adi_stage2_offset} ${filesize}
update_spi_uboot=run update_spi_uboot_stage1;
	run update_spi_uboot_stage2;
update_spi_fit=tftp ${loadaddr} ${tftp_dir_prefix}${imagefile};
	sf probe ${sfdev};
	sf update ${loadaddr} ${adi_image_offset} ${filesize};
	setenv imagesize ${filesize}
update_spi_rfs=tftp ${loadaddr} ${tftp_dir_prefix}${jffs2file};
	sf probe ${sfdev};
	sf update ${loadaddr} ${adi_rfs_offset} ${filesize}

start_update_spi=run init_ethernet;
	run update_spi_uboot;
	run update_spi_fit;
	run update_spi_rfs;
start_update_spi_uboot_only=run init_ethernet;
	run update_spi_uboot;
#endif

#if defined(USE_SPI)
update_spi=setenv sfdev CONFIG_SC_BOOT_SPI_BUS:CONFIG_SC_BOOT_SPI_SSEL;
	setenv bootcmd run spiboot;
	setenv argscmd spiargs;
	run start_update_spi;
	saveenv
#endif

#if defined(USE_OSPI)
update_ospi=setenv sfdev CONFIG_SC_BOOT_OSPI_BUS:CONFIG_SC_BOOT_OSPI_SSEL;
	setenv bootcmd run ospiboot;
	setenv argscmd spiargs;
	run start_update_spi;
	saveenv
#endif
