/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * (C) Copyright 2015
 * Heiko Schocher, DENX Software Engineering, hs@denx.de.
 *
 * Based on:
 * Copyright (C) 2012 Freescale Semiconductor, Inc.
 *
 * Configuration settings for the Freescale i.MX6DL aristainetos2 board.
 */
#ifndef __ARISTAINETOS2_CONFIG_H
#define __ARISTAINETOS2_CONFIG_H

#define CONFIG_HOSTNAME		"aristainetos2"

#if (CONFIG_SYS_BOARD_VERSION == 5)
#define CONFIG_MXC_UART_BASE	UART2_BASE
#define CONSOLE_DEV	"ttymxc1"
#elif (CONFIG_SYS_BOARD_VERSION == 6)
#define CONFIG_MXC_UART_BASE	UART1_BASE
#define CONSOLE_DEV	"ttymxc0"
#endif

/* Framebuffer */
#define CONFIG_SYS_LDB_CLOCK	28341000

#include "mx6_common.h"


/* MMC Configs */
#define CONFIG_SYS_FSL_ESDHC_ADDR      USDHC1_BASE_ADDR

#define CONFIG_FEC_MXC_PHYADDR		0

#define CONFIG_SYS_SPI_ST_ENABLE_WP_PIN

#ifdef CONFIG_IMX_HAB
#define HAB_EXTRA_SETTINGS \
	"hab_check_addr=" \
		"if hab_auth_img ${check_addr} ${filesize} ; then " \
			"true;" \
		"else " \
			"echo \"HAB checks ${hab_check_filetype} " \
			"failed!\"; " \
			"false; " \
		"fi;\0" \
	"hab_check_file_fit=" \
		"if env exists enable_hab_check && test " \
			"${enable_hab_check} -eq 1 ; then " \
			"setenv hab_check_filetype \"FIT file on SD card " \
			"or eMMC\";" \
			"env set check_addr ${fit_addr_r};" \
			"run hab_check_addr;" \
		"else " \
			"true; "\
		"fi;\0" \
	"hab_check_file_bootscript=" \
		"if env exists enable_hab_check && test " \
			"${enable_hab_check} -eq 1 ; then " \
			"setenv hab_check_filetype \"Bootscript file\";" \
			"env set check_addr ${loadaddr};" \
			"run hab_check_addr;" \
		"else " \
			"true; "\
		"fi;\0" \
	"hab_check_flash_fit=" \
		"if env exists enable_hab_check && test " \
			"${enable_hab_check} -eq 1 ; then " \
			"setenv hab_check_filetype \"FIT files on flash\";" \
			"env set check_addr ${fit_addr_r};" \
			"run hab_check_addr;" \
		"else " \
			"true; "\
		"fi;\0" \
	"enable_hab_check=1\0"
#else
#define HAB_EXTRA_SETTINGS \
	"hab_check_addr=echo HAB check addr always returns " \
		"true;true\0" \
	"hab_check_file_fit=echo HAB check FIT file always returns " \
		"true;true\0" \
	"hab_check_flash_fit=echo HAB check flash FIT always returns " \
		"true;true\0" \
	"hab_check_file_bootscript=echo HAB check bootscript always " \
		"returns true;true\0" \
	"enable_hab_check=0\0"
#endif

#if (CONFIG_SYS_BOARD_VERSION == 5)
#define EXTRA_ENV_BOARD_SETTINGS \
	"dead=while true; do; " \
		"led led_red on; sleep 1;" \
		"led led_red off; sleep 1;" \
	"done\0"
#elif (CONFIG_SYS_BOARD_VERSION == 6)
#define EXTRA_ENV_BOARD_SETTINGS \
	"dead=while true; do; " \
		"led led_red on; led led_red2 on; sleep 1;" \
		"led led_red off; led led_red2 off;; sleep 1;" \
	"done\0"
#endif

#define CONFIG_EXTRA_ENV_SETTINGS \
	"disable_giga=yes\0" \
	"usb_pgood_delay=2000\0" \
	"nor_bootdelay=-2\0" \
	"script=u-boot.scr\0" \
	"loadaddr=0x12000000\0" \
	"fit_addr_r=0x14000000\0" \
	"uboot_sz=d0000\0" \
	"panel=lb07wv8\0" \
	"splashpos=m,m\0" \
	"console=" CONSOLE_DEV "\0" \
	"emmcroot=/dev/mmcblk1p1 rootwait rw\0" \
	"mtdids=nor0=spi0.0\0" \
	"mtdparts=mtdparts=spi0.0:832k(u-boot),64k(env),64k(env-red)," \
		"-(ubi-nor)\0" \
	"mk_fitfile_path=setenv fit_file /${sysnum}/system.itb\0" \
	"mk_rescue_fitfile_path=setenv rescue_fit_file /${rescue_sysnum}/system.itb\0" \
	"mk_uboot_path=setenv uboot /${sysnum}/u-boot.imx\0" \
	"mk_pubkey_path=setenv pubkey /${sysnum}/PCR.pem\0" \
	"mk_rescue_pubkey_path=setenv pubkey /${rescue_sysnum}/PCR.pem\0" \
	"addmisc=setenv bootargs ${bootargs} net.ifnames=0 consoleblank=0 " \
		"bootmode=${bootmode} rng_core.default_quality=1000 " \
		"mmcpart=${mmcpart} emmcpart=${emmcpart} sysnum=${sysnum}\0" \
	"addmtd=setenv bootargs ${bootargs} ${mtdparts}\0" \
	"boot_board_type=bootm ${fit_addr_r}#${board_type}\0" \
	"get_env=mw ${loadaddr} 0 0x20000;" \
		"mmc rescan;" \
		"ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} env.txt;" \
		"env import -t ${loadaddr}\0" \
	"default_env=gpio set wp_spi_nor.gpio-hog;" \
		"sf probe;" \
		"sf protect unlock 0 0x1000000;" \
		"mw ${loadaddr} 0 0x20000;" \
		"env export -t ${loadaddr} serial# ethaddr " \
		"board_type panel;" \
		"env default -a;" \
		"env import -t ${loadaddr}\0" \
	"loadbootscript=" \
		"ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} " \
		"${script};\0" \
	"loadbootscriptUSB=" \
		"ext4load usb 0 ${loadaddr} ${script};\0" \
	"loadbootscriptUSBf=" \
		"fatload usb 0 ${loadaddr} ${script};\0" \
	"bootscriptUSB=echo Running bootscript from usb-stick ...; " \
		"source \0" \
	"bootscript=echo Running bootscript from mmc ...; " \
		"source \0" \
	"mmcpart=1\0" \
	"mmcdev=0\0" \
	"emmcpart=1\0" \
	"emmcdev=1\0" \
	"sysnum=1\0" \
	"rescue_sysnum=0\0" \
	"rreason=18\0" \
	"mainboot=echo Booting from eMMC ...; " \
		"run mainargs addmtd addmisc;" \
		"run boot_board_type;" \
		"bootm ${fit_addr_r}\0" \
	"mainargs=setenv bootargs console=${console},${baudrate} " \
		"root=${emmcroot} rootfstype=ext4\0 " \
	"main_load_fit=run mk_fitfile_path; " \
		"ext4load mmc ${emmcdev}:${emmcpart} ${fit_addr_r} " \
		"${fit_file}; " \
		"imi ${fit_addr_r}\0 " \
	"rescue_load_fit=run mk_rescue_fitfile_path; " \
		"ext4load mmc ${emmcdev}:${emmcpart} ${fit_addr_r} " \
		"${rescue_fit_file}; " \
		"imi ${fit_addr_r}\0" \
	"main_load_pubkey=run mk_pubkey_path; " \
		"setenv hab_check_filetype \"PCR.pem\";" \
		"env set check_addr ${loadaddr};" \
		"ext4load mmc ${emmcdev}:${emmcpart} ${loadaddr} " \
		"${pubkey}\0" \
	"rescue_load_pubkey=run mk_rescue_pubkey_path; " \
		"setenv hab_check_filetype \"PCR.pem\";" \
		"env set check_addr ${loadaddr};" \
		"ext4load mmc ${emmcdev}:${emmcpart} ${loadaddr} " \
		"${pubkey}\0" \
	"mainRargs=setenv bootargs console=${console},${baudrate} " \
		"rescue_sysnum=${rescue_sysnum} root=${emmcroot} rootfstype=ext4\0" \
	"mmcroot=/dev/mmcblk0p1 rootwait rw\0" \
	"mmcargs=setenv bootargs console=${console},${baudrate} " \
		"root=${mmcroot}\0" \
	"mmcRargs=setenv bootargs console=${console},${baudrate} " \
		"rescue_sysnum=${rescue_sysnum} root=${mmcroot}\0" \
	"mmcboot=echo Booting from mmc ...; " \
		"run mmcargs addmtd addmisc;" \
		"run boot_board_type;" \
		"bootm ${fit_addr_r}\0" \
	"mmc_load_fit=run mk_fitfile_path; " \
		"ext4load mmc ${mmcdev}:${mmcpart} ${fit_addr_r} " \
		"${fit_file}\0" \
		"imi ${fit_addr_r}\0" \
	"mmc_rescue_load_fit=run mk_rescue_fitfile_path; " \
		"ext4load mmc ${mmcdev}:${mmcpart} " \
		"${fit_addr_r} ${rescue_fit_file}\0" \
		"imi ${fit_addr_r}\0" \
	"mmc_load_uboot=run mk_uboot_path; " \
		"ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} " \
		"${uboot}\0" \
	"mmc_upd_uboot=mw.b ${loadaddr} 0xff ${uboot_sz};" \
		"setexpr cmp_buf ${loadaddr} + ${uboot_sz};" \
		"setexpr uboot_maxsize ${uboot_sz} - 400;" \
		"mw.b ${cmp_buf} 0x00 ${uboot_sz};" \
		"run mmc_load_uboot;sf probe;sf erase 0 ${uboot_sz};" \
		"sf write ${loadaddr} 400 ${filesize};" \
		"sf read ${cmp_buf} 400 ${uboot_sz};" \
		"cmp.b ${loadaddr} ${cmp_buf} ${uboot_maxsize}\0" \
	"mmc_load_pubkey=run mk_pubkey_path; " \
		"setenv hab_check_filetype \"PCR.pem\";" \
		"env set check_addr ${loadaddr};" \
		"ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} " \
		"${pubkey}\0" \
	"mmc_rescue_load_pubkey=run mk_rescue_pubkey_path; " \
		"setenv hab_check_filetype \"PCR.pem\";" \
		"env set check_addr ${loadaddr};" \
		"ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} " \
		"${pubkey}\0" \
	"rescueboot=echo Booting rescue system ...; " \
		"run addmtd addmisc;" \
		"if test -n ${rescue_reason}; then run rescue_reason;fi;" \
		"run boot_board_type;" \
		"if bootm ${fit_addr_r}; then ; " \
		"else " \
			"run dead; " \
		"fi; \0" \
	"r_reason_syserr=setenv rescue_reason setenv bootargs " \
		"\\\\${bootargs} " \
		"rescueReason=$rreason\0 " \
	"usb_load_fit=run mk_fitfile_path; " \
		"ext4load usb 0 ${fit_addr_r} ${fit_file}\0" \
	"usb_load_fitf=run mk_fitfile_path; " \
		"fatload usb 0 ${fit_addr_r} ${fit_file}\0" \
	"usb_load_rescuefit=run mk_rescue_fitfile_path; " \
		"ext4load usb 0 ${fit_addr_r} " \
		"${rescue_fit_file}\0" \
	"usb_load_rescuefitf=run mk_rescue_fitfile_path; " \
		"fatload usb 0 ${fit_addr_r} " \
		"${rescue_fit_file}\0" \
	"usb_load_pubkey=run mk_pubkey_path; " \
		"setenv hab_check_filetype \"PCR.pem\";" \
		"env set check_addr ${loadaddr};" \
		"ext4load usb 0 ${loadaddr} ${pubkey}\0" \
	"usb_rescue_load_pubkey=run mk_rescue_pubkey_path; " \
		"setenv hab_check_filetype \"PCR.pem\";" \
		"env set check_addr ${loadaddr};" \
		"ext4load usb 0 ${loadaddr} ${pubkey}\0" \
	"usb_load_pubkeyf=run mk_pubkey_path; " \
		"setenv hab_check_filetype \"PCR.pem\";" \
		"env set check_addr ${loadaddr};" \
		"fatload usb 0 ${loadaddr} ${pubkey}\0" \
	"usb_rescue_load_pubkeyf=run mk_rescue_pubkey_path; " \
		"setenv hab_check_filetype \"PCR.pem\";" \
		"env set check_addr ${loadaddr};" \
		"fatload usb 0 ${loadaddr} ${pubkey}\0" \
	"usbroot=/dev/sda1 rootwait rw\0" \
	"usbboot=echo Booting from usb-stick ...; " \
		"run usbargs addmtd addmisc;" \
		"run boot_board_type;" \
		"bootm ${fit_addr_r}\0" \
	"usbargs=setenv bootargs console=${console},${baudrate} " \
		"root=${usbroot}\0" \
	"usbRargs=setenv bootargs console=${console},${baudrate} " \
		"rescue_sysnum=${rescue_sysnum} root=${usbroot} rw\0 " \
	"mmc_rescue_boot=" \
		"run r_reason_syserr;" \
		"if run mmc_rescue_load_pubkey hab_check_addr " \
		"mmc_rescue_load_fit hab_check_file_fit; then " \
			"run mmcRargs; run rescueboot; " \
		"else " \
			"echo RESCUE SYSTEM FROM SD-CARD BOOT FAILURE;" \
			"run dead; " \
		"fi;\0" \
	"main_rescue_boot=" \
		"if run main_load_pubkey hab_check_addr " \
		"main_load_fit hab_check_flash_fit; then " \
			"if run mainboot; then ; " \
			"else " \
				"run r_reason_syserr;" \
				"if run rescue_load_pubkey hab_check_addr " \
				"rescue_load_fit hab_check_file_fit; then " \
					"run mainRargs; run rescueboot; " \
				"else " \
					"echo RESCUE SYSTEM BOOT FAILURE;" \
					"run dead; " \
				"fi; " \
			"fi; " \
		"else " \
			"run r_reason_syserr;" \
			"if run rescue_load_pubkey hab_check_addr " \
			"rescue_load_fit hab_check_file_fit; then " \
				"run mainRargs; run rescueboot; " \
			"else " \
				"echo RESCUE SYSTEM BOOT FAILURE;" \
				"run dead; " \
			"fi; " \
		"fi;\0" \
	"usb_mmc_rescue_boot=" \
		"usb start;" \
		"if usb storage; then " \
			"if run loadbootscriptUSB " \
				"hab_check_file_bootscript;" \
				"then run bootscriptUSB; " \
			"fi; " \
			"if run loadbootscriptUSBf " \
				"hab_check_file_bootscript;" \
				"then run bootscriptUSB; " \
			"fi; " \
			"if run usb_load_pubkey hab_check_addr " \
			"usb_load_fit hab_check_file_fit; then " \
				"run usbboot; " \
			"fi; " \
			"if run usb_load_pubkeyf hab_check_addr " \
			"usb_load_fitf hab_check_file_fit; then " \
				"run usbboot; " \
			"fi; "\
			"if run usb_rescue_load_pubkey hab_check_addr " \
			"usb_load_rescuefit hab_check_file_fit; then " \
				"run r_reason_syserr usbRargs; run rescueboot;" \
			"fi; " \
			"if run usb_rescue_load_pubkeyf hab_check_addr " \
			"usb_load_rescuefitf hab_check_file_fit; then " \
				"run r_reason_syserr usbRargs; run rescueboot;" \
			"fi; " \
			"run mmc_rescue_boot;" \
		"fi; "\
		"run mmc_rescue_boot;\0" \
	"rescue_xload_boot=" \
		"run r_reason_syserr;" \
		"if test ${bootmode} -ne 0 ; then " \
			"mmc dev ${mmcdev};" \
			"if mmc rescan; then " \
				"if run mmc_rescue_load_pubkey " \
				"hab_check_addr " \
				"mmc_rescue_load_fit " \
				"hab_check_file_fit; then " \
					"run mmcRargs; run rescueboot; " \
				"else " \
					"usb start;" \
					"if usb storage; then " \
						"if run usb_rescue_load_pubkey " \
						"hab_check_addr " \
						"usb_load_rescuefit " \
						"hab_check_file_fit; then " \
							"run usbRargs; run rescueboot;" \
						"fi; " \
						"if run usb_rescue_load_pubkeyf " \
						"hab_check_addr " \
						"usb_load_rescuefitf " \
						"hab_check_file_fit; then " \
							"run usbRargs; run rescueboot;" \
						"fi; " \
					"fi;" \
				"fi;" \
				"echo RESCUE SYSTEM ON SD OR " \
					"USB BOOT FAILURE;" \
				"run dead; " \
			"else " \
				"usb start;" \
				"if usb storage; then " \
					"if run usb_rescue_load_pubkey " \
					"hab_check_addr " \
					"usb_load_rescuefit " \
					"hab_check_file_fit; then " \
						"run usbRargs; run rescueboot;" \
					"fi; " \
					"if run usb_rescue_load_pubkeyf " \
					"hab_check_addr " \
					"usb_load_rescuefitf " \
					"hab_check_file_fit; then " \
						"run usbRargs; run rescueboot;" \
					"fi; " \
				"fi;" \
				"echo RESCUE SYSTEM ON USB BOOT FAILURE;" \
				"run dead; " \
			"fi; " \
		"else "\
			"if run rescue_load_pubkey hab_check_addr " \
			"rescue_load_fit hab_check_file_fit; then " \
				"run mainRargs; run rescueboot; " \
			"else " \
				"echo RESCUE SYSTEM ON BOARD BOOT FAILURE;" \
				"run dead; " \
			"fi; " \
		"fi;\0" \
	"ari_boot=if test ${bootmode} -ne 0 ; then " \
		"mmc dev ${mmcdev};" \
		"if mmc rescan; then " \
			"if run loadbootscript hab_check_file_bootscript;" \
				"then run bootscript; " \
			"fi; " \
			"if run mmc_load_pubkey hab_check_addr " \
			"mmc_load_fit hab_check_file_fit; then " \
				"if run mmcboot; then ; " \
				"else " \
					"run mmc_rescue_boot;" \
				"fi; " \
			"else " \
				"run usb_mmc_rescue_boot;" \
			"fi; " \
		"else " \
			"run usb_mmc_rescue_boot;" \
		"fi; " \
	"else "\
		"run main_rescue_boot;" \
	"fi; \0"\
	HAB_EXTRA_SETTINGS \
	EXTRA_ENV_BOARD_SETTINGS

/* Physical Memory Map */
#define PHYS_SDRAM			MMDC0_ARB_BASE_ADDR

#define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM
#define CONFIG_SYS_INIT_RAM_ADDR	IRAM_BASE_ADDR
#define CONFIG_SYS_INIT_RAM_SIZE	IRAM_SIZE

#define CONFIG_SYS_INIT_SP_OFFSET \
	(CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
#define CONFIG_SYS_INIT_SP_ADDR \
	(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)

#define CONFIG_SYS_FSL_USDHC_NUM	2

/* DMA stuff, needed for GPMI/MXS NAND support */

/* USB Configs */
#define CONFIG_EHCI_HCD_INIT_AFTER_RESET	/* For OTG port */
#define CONFIG_MXC_USB_PORTSC	(PORT_PTS_UTMI | PORT_PTS_PTW)
#define CONFIG_MXC_USB_FLAGS	0

/* UBI support */

/* Framebuffer */
/* check this console not needed, after test remove it */
#define CONFIG_IMX_VIDEO_SKIP

#define CONFIG_IMX6_PWM_PER_CLK	66000000

#define CONFIG_ENV_FLAGS_LIST_STATIC "ethaddr:mw,serial#:sw,board_type:sw," \
		"sysnum:dw,panel:sw,ipaddr:iw,serverip:iw"

#endif                         /* __ARISTAINETOS2_CONFIG_H */
