/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright (C) 2019 DENX Software Engineering
 * Lukasz Majewski, DENX Software Engineering, lukma@denx.de
 *
 * Copyright (C) 2018 DENX Software Engineering
 * Måns Rullgård, DENX Software Engineering, mans@mansr.com
 *
 * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
 * on behalf of DENX Software Engineering GmbH
 */
#ifndef __CONFIGS_XEA_H__
#define __CONFIGS_XEA_H__

#include <linux/sizes.h>

#define CONFIG_TIMESTAMP		/* Print image info with timestamp */

/* SPL */
#define CONFIG_SPL_STACK		0x20000

#define CONFIG_SYS_SPL_ARGS_ADDR	0x44000000

#define CONFIG_SYS_SPI_KERNEL_OFFS	SZ_1M
#define CONFIG_SYS_SPI_ARGS_OFFS	SZ_512K
#define CONFIG_SYS_SPI_ARGS_SIZE	SZ_32K

#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR	(SZ_512K / 0x200)
#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS	(SZ_32K / 0x200)
#define CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR	(SZ_1M / 0x200)

#ifndef CONFIG_SPL_BUILD
#define CONFIG_SPI_FLASH_MTD
#endif

/* Memory configuration */
#define PHYS_SDRAM_1			0x40000000	/* Base address */
#define PHYS_SDRAM_1_SIZE		0x10000000	/* Max 256 MB RAM */
#define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM_1

/* Environment */
#define CONFIG_ENV_OVERWRITE

/* Booting Linux */
#define CONFIG_BOOTFILE		"uImage"
#define CONFIG_BOOTCOMMAND	"run ${bootpri} ; run ${bootsec}"
#define CONFIG_LOADADDR		0x42000000
#define CONFIG_SYS_LOAD_ADDR	CONFIG_LOADADDR

/* Extra Environment */
#define CONFIG_PREBOOT		"run prebootcmd"
#define CONFIG_HOSTNAME		"xea"

#define CONFIG_EXTRA_ENV_SETTINGS					\
	"bootmode=update\0"						\
	"bootpri=mmc_mmc\0"						\
	"bootsec=sf_swu\0"						\
	"consdev=ttyAMA0\0"						\
	"baudrate=115200\0"						\
	"dtbaddr=0x44000000\0"						\
	"dtbfile=imx28-xea.dtb\0"					\
	"rootdev=/dev/mmcblk0p2\0"					\
	"netdev=eth0\0"							\
	"rdaddr=0x43000000\0"						\
	"swufile=swupdate.img\0"					\
	"sf_kernel_offset=0x100000\0"					\
	"sf_kernel_size=0x400000\0"					\
	"sf_swu_offset=0x500000\0"					\
	"sf_swu_size=0x800000\0"					\
	"rootpath=/opt/eldk-5.5/armv5te/rootfs-qte-sdk\0"		\
	"do_update_mmc="						\
		"if mmc rescan ; then "					\
		"mmc dev 0 ${update_mmc_part} ; "			\
		"if dhcp ${hostname}/${update_filename} ; then "	\
		"setexpr fw_sz ${filesize} / 0x200 ; "	/* SD block size */ \
		"setexpr fw_sz ${fw_sz} + 1 ; "				\
		"mmc write ${loadaddr} ${update_offset} ${fw_sz} ; "	\
		"fi ; "							\
		"fi\0"							\
	"do_update_sf="							\
		"if sf probe ; then "					\
		"if dhcp ${hostname}/${update_filename} ; then "	\
		"sf erase ${update_offset} +${filesize} ; "		\
		"sf write ${loadaddr} ${update_offset} ${filesize} ; "	\
		"fi ; "							\
		"fi\0"							\
	"update_spl_filename=u-boot.sb\0"				\
	"update_spl="							\
		"setenv update_filename ${update_spl_filename} ; "	\
		"setenv update_offset 0 ; "				\
		"run do_update_sf\0"					\
	"update_uboot_filename=u-boot.img\0"				\
	"update_uboot="							\
		"setenv update_filename ${update_uboot_filename} ; "	\
		"setenv update_offset 0x10000 ; "			\
		"run do_update_sf ; "					\
		"setenv update_mmc_part 1 ; "				\
		"setenv update_offset 0 ; "				\
		"run do_update_mmc\0"					\
	"update_kernel_filename=uImage\0"				\
	"update_kernel="						\
		"setenv update_mmc_part 1 ; "				\
		"setenv update_filename ${update_kernel_filename} ; "	\
		"setenv update_offset 0x800 ; "				\
		"run do_update_mmc ; "					\
		"setenv update_filename ${dtbfile} ; "			\
		"setenv update_offset 0x400 ; "				\
		"run do_update_mmc\0"					\
	"update_sfkernel="						\
		"setenv update_filename fitImage ; "			\
		"setenv update_offset ${sf_kernel_offset} ; "		\
		"run do_update_sf\0"					\
	"update_swu="							\
		"setenv update_filename ${swufile} ; "			\
		"setenv update_offset ${sf_swu_offset} ; "		\
		"run do_update_sf\0"					\
	"addcons="							\
		"setenv bootargs ${bootargs} "				\
		"console=${consdev},${baudrate}\0"			\
	"addip="							\
		"setenv bootargs ${bootargs} "				\
		"ip=${ipaddr}:${serverip}:${gatewayip}:"		\
			"${netmask}:${hostname}:${netdev}:off\0"	\
	"addmisc="							\
		"setenv bootargs ${bootargs} ${miscargs}\0"		\
	"addargs=run addcons addmisc\0"					\
	"mmcload="							\
		"mmc rescan ; "						\
		"mmc dev 0 1 ; "					\
		"mmc read ${loadaddr} 0x800 0x2000 ; "			\
		"mmc read ${dtbaddr} 0x400 0x80\0"			\
	"netload="							\
		"dhcp ${loadaddr} ${hostname}/${bootfile} ; "		\
		"tftp ${dtbaddr} ${hostname}/${dtbfile}\0"		\
	"sfload="							\
		"sf probe ; "						\
		"sf read ${loadaddr} ${sf_kernel_offset} ${sf_kernel_size}\0" \
	"usbload="							\
		"usb start ; "						\
		"load usb 0:1 ${loadaddr} ${bootfile}\0"		\
	"miscargs=panic=1\0"						\
	"mmcargs=setenv bootargs root=${rootdev} rw rootwait\0"		\
	"nfsargs="							\
		"setenv bootargs root=/dev/nfs rw "			\
			"nfsroot=${serverip}:${rootpath},v3,tcp\0"	\
	"mmc_mmc="							\
		"if run mmcload mmcargs addargs ; then "		\
		"bootm ${loadaddr} - ${dtbaddr} ; "			\
		"fi\0"							\
	"mmc_nfs="							\
		"if run mmcload nfsargs addip addargs ; then "		\
		"bootm ${loadaddr} - ${dtbaddr} ; "			\
		"fi\0"							\
	"sf_mmc="							\
		"if run sfload mmcargs addargs ; then "			\
		"bootm ${loadaddr} - ${dtbaddr} ; "			\
		"fi\0"							\
	"sf_swu="							\
		"if run sfload ; then "					\
		"sf read ${rdaddr} ${sf_swu_offset} ${sf_swu_size} ; "	\
		"setenv bootargs root=/dev/ram0 rw ; "			\
		"run addargs ; "					\
		"bootm ${loadaddr} ${rdaddr} ; "		\
		"fi\0"							\
	"net_mmc="							\
		"if run netload mmcargs addargs ; then "		\
		"bootm ${loadaddr} - ${dtbaddr} ; "			\
		"fi\0"							\
	"net_nfs="							\
		"if run netload nfsargs addip addargs ; then "		\
		"bootm ${loadaddr} - ${dtbaddr} ; "			\
		"fi\0"							\
	"prebootcmd="							\
		"if test \"${envsaved}\" != y ; then ; "		\
		"setenv envsaved y ; "					\
		"saveenv ; "						\
		"fi ; "							\
		"if test \"${bootmode}\" = normal ; then "		\
		"setenv bootdelay 0 ; "					\
		"setenv bootpri mmc_mmc ; "				\
		"elif test \"${bootmode}\" = devel ; then "		\
		"setenv bootdelay 3 ; "					\
		"setenv bootpri net_mmc ; "				\
		"else "							\
		"if test \"${bootmode}\" != update ; then "		\
		"echo Warning: unknown bootmode \"${bootmode}\" ; "	\
		"fi ; "							\
		"setenv bootdelay 1 ; "					\
		"setenv bootpri sf_swu ; "				\
		"fi\0"

/* The rest of the configuration is shared */
#include <configs/mxs.h>

#endif /* __CONFIGS_XEA_H__ */
