/*
 * Copyright (C) 2016 Stefan Roese <sr@denx.de>
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */

/*
 * Common options, macros and default environment for all
 * theadorable x86 based boards
 */

#ifndef __THEADORABLE_X86_COMMON_H
#define __THEADORABLE_X86_COMMON_H

#define CONFIG_SYS_MONITOR_LEN		(1 << 20)

#define CONFIG_PREBOOT

#define CONFIG_STD_DEVICES_SETTINGS     "stdin=serial\0" \
					"stdout=serial\0" \
					"stderr=serial\0"

#define CONFIG_USB_HOST_ETHER
#define CONFIG_USB_ETHER_ASIX
#define CONFIG_USB_ETHER_SMSC95XX
#define CONFIG_USB_ETHER_MCS7830
#define CONFIG_USB_ETHER_RTL8152

#define VIDEO_IO_OFFSET				0
#define CONFIG_X86EMU_RAW_IO
#define CONFIG_CMD_BMP
#define CONFIG_BMP_16BPP

/* Environment settings */
#define CONFIG_SYS_REDUNDAND_ENVIRONMENT
#undef CONFIG_ENV_SIZE
#define CONFIG_ENV_SIZE			0x2000
#define CONFIG_ENV_SECT_SIZE		0x1000
#define CONFIG_ENV_OFFSET		0x006ec000
#define CONFIG_ENV_OFFSET_REDUND	\
	(CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)

#undef CONFIG_BOOTARGS
#undef CONFIG_BOOTCOMMAND
#undef CONFIG_EXTRA_ENV_SETTINGS

#define CONFIG_EXTRA_ENV_SETTINGS				\
	"tftpdir=" DEF_ENV_TFTPDIR "\0"				\
	"eth_init=" DEF_ENV_ETH_INIT "\0"			\
	"ubuntu_part=" __stringify(DEF_ENV_UBUNTU_PART) "\0"	\
	"yocto_part=" __stringify(DEF_ENV_YOCTO_PART) "\0"	\
	"ubuntu_tty=" __stringify(DEF_ENV_UBUNTU_TTY) "\0"	\
	"yocto_tty=" __stringify(DEF_ENV_YOCTO_TTY) "\0"	\
	"start_eth=if test -n \"${eth_init}\";"			\
		"then run eth_init;else sleep 0;fi\0"		\
	"kernel-ver=4.8.0-54\0"					\
	"boot=zboot 03000000 0 04000000 ${filesize}\0"		\
	"mtdparts=mtdparts=intel-spi:4k(descriptor),7084k(me)," \
		"8k(env1),8k(env2),64k(mrc),640k(u-boot),"	\
		"64k(vga),-(fsp)\0"				\
	"addtty_ubuntu=setenv bootargs ${bootargs} "		\
		"console=ttyS${ubuntu_tty},${baudrate}\0"	\
	"addtty_yocto=setenv bootargs ${bootargs} "		\
		"console=ttyS${yocto_tty},${baudrate}\0"	\
	"addmtd=setenv bootargs ${bootargs} ${mtdparts}\0"	\
	"addmisc=setenv bootargs ${bootargs} "			\
		"intel-spi.writeable=1 vmalloc=300M "		\
		"pci=realloc=on,hpmemsize=0x12000000\0"		\
	"bootcmd=if env exists recovery_status;"		\
		"then run swupdate;"				\
		"else run yocto_boot;run swupdate;"		\
		"fi\0"						\
	"ubuntu_args=setenv bootargs "				\
		"root=/dev/sda${ubuntu_part} ro\0"		\
	"ubuntu_args_quiet=setenv bootargs "			\
		"root=/dev/sda${ubuntu_part} ro quiet\0"	\
	"ubuntu_load=load scsi 0:${ubuntu_part} 03000000 "	\
		"/boot/vmlinuz-${kernel-ver}-generic;"		\
		"load scsi 0:${ubuntu_part} 04000000 "		\
		"/boot/initrd.img-${kernel-ver}-generic\0"	\
	"ubuntu_boot=run ubuntu_args_quiet addmtd addmisc "	\
		"ubuntu_load boot\0"				\
	"ubuntu_boot_console=run ubuntu_args addtty_ubuntu "	\
		"addmtd addmisc ubuntu_load boot\0"		\
	"net_args=setenv bootargs root=/dev/sda${ubuntu_part} ro\0" \
	"net_boot=run start_eth net_args addtty_yocto addmtd addmisc;" \
		"tftp 03000000 ${tftpdir}/bzImage;"		\
		"load scsi 0:${ubuntu_part} 04000000 "		\
		"/boot/initrd.img-${kernel-ver}-generic;"	\
		"run boot\0"					\
	"yocto_args=setenv bootargs root=/dev/sda${yocto_part} " \
		"ip=dhcp panic=1\0"				\
	"yocto_args_fast=setenv bootargs root=/dev/sda${yocto_part} " \
		"quiet panic=1\0"				\
	"yocto_boot=run yocto_args addmtd addmisc addtty_yocto;" \
		"if run yocto_load;then zboot 03000000;fi\0"	\
	"yocto_boot_fast=run yocto_args_fast addmtd addmisc "	\
		"addtty_yocto yocto_load;zboot 03000000\0"	\
	"yocto_boot_tftp=run yocto_args addmtd addmisc addtty_yocto " \
		"start_eth yocto_load_tftp;zboot 03000000\0"	\
	"yocto_kernel=bzImage\0"				\
	"yocto_load=load scsi 0:${yocto_part} 03000000 "	\
		"/boot/${yocto_kernel}\0"			\
	"yocto_load_tftp=tftp 03000000 dfi/bzImage\0"		\
	"swupdate=if env exists swupdate_factory;"		\
		"then run swupdate_usb;run swupdate_run;"	\
		"else setenv swupdate_part 2;run swupdate_mmc;" \
			"run swupdate_run;setenv swupdate_part 1;" \
			"run swupdate_mmc;run swupdate_usb;"	\
			"run swupdate_run;"			\
		"fi\0"						\
	"swupdate-initrd=/boot/swupdate-image-theadorable.ext4.gz\0" \
	"swupdate-kernel=/boot/bzImage\0"			\
	"swupdate_args=setenv bootargs root=/dev/ram rw ip=dhcp panic=1\0" \
	"swupdate_dev=0\0"					\
	"swupdate_factory=0\0"					\
	"swupdate_interface=usb\0"				\
	"swupdate_kernel=vmlinuz-4.4.0-28-generic\0"		\
	"swupdate_load=load ${swupdate_interface} ${swupdate_dev}:" \
		"${swupdate_part} 03000000 ${swupdate-kernel}"	\
		" && load ${swupdate_interface} ${swupdate_dev}:" \
		"${swupdate_part} 04000000 ${swupdate-initrd}\0" \
	"swupdate_mmc=setenv swupdate_interface mmc;"		\
		"setenv swupdate_dev ${swupdate_mmcdev};"	\
		"setenv swupdate_part 1;"			\
		"mmc dev ${swupdate_dev};mmc rescan\0"		\
	"swupdate_mmcdev=0\0"					\
	"swupdate_part=1\0"					\
	"swupdate_run=run swupdate_args addtty_yocto addmtd addmisc;" \
		"if run swupdate_load;then run boot;"		\
		"else echo SWUpdate cannot be started from "	\
		"${swupdate_interface};"			\
		"fi\0"						\
	"swupdate_usb=setenv swupdate_interface usb;"		\
		"setenv swupdate_dev 0;setenv swupdate_part 1;"	\
		"usb start\0"					\
	"logo_tftp=tftp ${loadaddr} ${tftpdir}/logo.bmp;"	\
		"bmp display ${loadaddr}\0"			\
	"preboot=scsi scan;load scsi 0:${ubuntu_part} ${loadaddr} " \
		"/boot/logo/logo.bmp;bmp display ${loadaddr}\0" \
	"rootpath=/tftpboot/theadorable-x86-conga/work/"	\
		"rootfs-yocto-swupdate-2017-03-29\0"		\
	"addip=setenv bootargs ${bootargs} ip=${ipaddr}:${serverip}:" \
		"${gatewayip}:${netmask}:${hostname}:eth0:off\0" \
	"set_bootargs_nfs=setenv bootargs root=/dev/nfs rw "	\
		"nfsroot=${serverip}:${rootpath},tcp,nfsvers=3\0" \
	"net_nfs=run start_eth set_bootargs_nfs addtty_yocto addip " \
		"addmtd addmisc;tftp 03000000 ${tftpdir}/bzImage;" \
		"zboot 03000000\0"				\
	"load_uboot=tftp ${loadaddr} ${tftpdir}/u-boot.rom\0"	\
	"update_uboot=sf probe;"				\
		"sf update ${loadaddr} 0 800000;saveenv\0"	\
	"upd_uboot=run start_eth load_uboot update_uboot\0"

#endif /* __THEADORABLE_X86_COMMON_H */
