/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright 2020 Broadcom.
 *
 */

#ifndef __BCM_NS3_H
#define __BCM_NS3_H

#include <linux/sizes.h>

#define CONFIG_HOSTNAME			"NS3"

/* Physical Memory Map */
#define V2M_BASE			0x80000000
#define PHYS_SDRAM_1			V2M_BASE

#define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM_1
#define CONFIG_SYS_LOAD_ADDR		(PHYS_SDRAM_1 + 0x80000)

/*
 * Initial SP before reloaction is placed at end of first DRAM bank,
 * which is 0x1_0000_0000.
 * Just before re-loaction, new SP is updated and re-location happens.
 * So pointing the initial SP to end of 2GB DDR is not a problem
 */
#define CONFIG_SYS_INIT_SP_ADDR		(PHYS_SDRAM_1 + 0x80000000)
/* 12MB Malloc size */
#define CONFIG_SYS_MALLOC_LEN		(SZ_8M + SZ_4M)

/* console configuration */
#define CONFIG_SYS_NS16550_CLK		25000000

#define CONFIG_SYS_CBSIZE		SZ_1K
#define CONFIG_SYS_PBSIZE		(CONFIG_SYS_CBSIZE + \
					 sizeof(CONFIG_SYS_PROMPT) + 16)
#define CONFIG_SYS_MAXARGS		64
#define CONFIG_SYS_BARGSIZE		CONFIG_SYS_CBSIZE

/*
 * Increase max uncompressed/gunzip size, keeping size same as EMMC linux
 * partition.
 */
#define CONFIG_SYS_BOOTM_LEN		0x01800000

/* Access eMMC Boot_1 and Boot_2 partitions */
#define CONFIG_SUPPORT_EMMC_BOOT

/* enable 64-bit PCI resources */
#define CONFIG_SYS_PCI_64BIT		1

#define CONSOLE_ARGS "console_args=console=ttyS0,115200n8\0"
#define MAX_CPUS "max_cpus=maxcpus=8\0"
#define OS_LOG_LEVEL "log_level=loglevel=7\0"
#define EXTRA_ARGS "extra_args=earlycon=uart8250,mmio32,0x68A10000 " \
		   "earlyelog=" __stringify(ELOG_AP_UART_LOG_BASE) ",0x10000 " \
		   "crashkernel=512M reboot=w\0"

#define PCIE_ARGS "pcie_args=pci=pcie_bus_safe pcie_ports=native vfio_pci.disable_idle_d3=1\0"

#ifdef CONFIG_BCM_SF2_ETH
#define ETH_ADDR "ethaddr=00:0A:F7:95:65:A4\0"
#define NET_ARGS "bgmac_platform.ethaddr=${ethaddr} " \
	"ip=${ipaddr}::${gatewayip}:${netmask}::${ethif}:off"
#else
#define ETH_ADDR
#define NET_ARGS
#endif

#define RESERVED_MEM "reserved_mem=memmap=0xff000000$0x1000000\0"

#define BASE_ARGS "${console_args} ${extra_args} ${pcie_args}" \
		  " ${max_cpus}  ${log_level} ${reserved_mem}"
#define SETBOOTARGS "setbootargs=setenv bootargs " BASE_ARGS " " NET_ARGS "\0"

#define UPDATEME_FLASH_PARAMS "bcm_compat_level=4\0" \
			      "bcm_need_recovery_rootfs=0\0" \
			      "bcm_bl_flash_pending_rfs_imgs=0\0"

#define KERNEL_LOADADDR_CFG \
	"fit_image_loadaddr=0x90000000\0" \
	"dtb_loadaddr=0x82000000\0"

#define INITRD_ARGS "initrd_args=root=/dev/ram rw\0"
#define INITRD_LOADADDR "initrd_loadaddr=0x92000000\0"
#define INITRD_IMAGE "initrd_image=rootfs-lake-bcm958742t.cpio.gz\0"
#define MMC_DEV "sd_device_number=0\0"
#define EXEC_STATE "exec_state=normal\0"

#define EXT4RD_ARGS "ext4rd_args="\
	"root=/dev/mmcblk${sd_device_number}p${gpt_partition_entry} rw rootwait\0"

#define WDT_CNTRL "wdt_enable=1\0" \
		  "wdt_timeout_sec=0\0"

#define ELOG_SETUP \
	"mbox0_addr=0x66424024\0"\
	"elog_setup="\
	"if logsetup -s ${mbox0_addr}; then "\
	"else "\
		"echo ELOG is not supported by this version of the MCU patch.;"\
		"exit;"\
	"fi;"\
	"if logsetup -c ${mbox0_addr}; then "\
		"echo ELOG is ready;"\
	"else "\
		"echo ELOG is supported, but is not set up.;"\
		"echo Getting setup file from the server ${serverip}...;"\
		"if tftp ${tftp_dir}elog_src.txt; then "\
			"echo Setting up ELOG. Please wait...;"\
			"if logsetup ${loadaddr} ${mbox0_addr} ${filesize}; "\
				"then "\
			"else "\
				"echo [logsetup] ERROR.;"\
			"fi;"\
			"if logsetup -c ${mbox0_addr}; then "\
				"echo ELOG is READY.;"\
			"else "\
				"echo ELOG is NOT SET UP.;"\
			"fi;"\
		"else "\
			"echo ELOG setup file is not available on the server.;"\
		"fi;"\
	"fi \0"

/* eMMC partition for FIT images */
#define FIT_MMC_PARTITION \
	"fit_partitions=" \
	"uuid_disk=${uuid_gpt_disk};" \
	"name=env,size=512K,uuid=${uuid_gpt_env};" \
	"name=Image_rsa.img,size=24MiB,uuid=${uuid_gpt_linux};" \
	"name=Image1_rsa.img,size=24MiB,uuid=${uuid_gpt_linux1};" \
	"name=Image2_rsa.img,size=24MiB,uuid=${uuid_gpt_linux2};" \
	"name=nitro,size=8MiB,uuid=${uuid_gpt_nitro};" \
	"name=recovery,size=940MiB,uuid=${uuid_gpt_recovery};" \
	"name=rootfs,size=-,uuid=${uuid_gpt_prootfs}\0"

#define QSPI_FLASH_NITRO_PARAMS \
	"spi_nitro_img_bin_start=0x400000\0" \
	"spi_nitro_img_bin_mirror_start=0x580000\0" \
	"spi_nitro_bspd_cfg_start=0x700000\0" \
	"spi_nitro_bspd_mirror_cfg_start=0x710000\0" \

#define QSPI_ACCESS_ENABLE \
	"qspi_access_en=" \
	"mw 0x68a403e8 1;" \
	"mw 0x68a403ec 1;" \
	"mw 0x68a403f0 1;" \
	"mw 0x68a403f4 1;" \
	"mw 0x68a403f8 1;" \
	"mw 0x68a403fc 1 \0"

#define FUNC_QSPI_PROBE \
	"func_qspi_probe="\
	"if run qspi_access_en; then "\
	"else "\
		"echo ${errstr} run qspi_access_en ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if sf probe 0; then "\
	"else "\
		"echo echo ${errstr} sf probe command ** FAILED **;"\
		"exit;"\
	"fi \0"

#define NITRO_FW_IMAGES \
	"nitro_bin=nitro.img\0" \
	"nitro_bspd_cfg=nitro_fb_bspd_config.bin\0"

#define FASTBOOT_NITRO_SETUP \
	"nitro_fastboot_type=1\0" \
	"nitro_fastboot_secure=1\0" \
	"nitro_fastboot_img_buffer=0\0" \
	"nitro_fit_img_loc=0x90000000\0"

#define FASTBOOT_SETUP \
	"fastboot_nitro_setup=" \
	"setenv errstr fastboot_setup;" \
	"run func_qspi_probe;" \
	/* first load header only */ \
	"if sf read ${nitro_fit_img_loc} "\
		   "${spi_nitro_img_bin_start} 0x18; then "\
	"else "\
		"echo [fastboot_nitro_setup] sf read "\
		      "${spi_nitro_img_bin_start} ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if spi_nitro_images_addr ${nitro_fit_img_loc} "\
				 "${spi_nitro_img_bin_start}; then "\
	"else "\
		 "echo [fastboot_nitro_setup] spi_nitro_images_addr "\
		       "** FAILED **;"\
		"exit;"\
	"fi \0"

#define CHECK_CHIMP_HS\
	"check_chimp_hs=chimp_hs"\
	"\0"

#define FASTBOOT_NITRO "fastboot_nitro=chimp_ld_secure\0"

#define FIT_IMAGE "fit_image=Image_rsa.img\0"
#define BOOTCMD_MMC_FIT \
	"bootcmd_mmc_fit="\
	"mmc dev ${sd_device_number};"\
	"if test $exec_state = normal; then " \
		"setenv use_rootfs rootfs;"\
	"else " \
		"setenv use_rootfs recovery;"\
	"fi;" \
	"echo used filesystem :${use_rootfs};"\
	"gpt setenv mmc ${sd_device_number} ${use_rootfs};"\
	"setenv bootargs_fs ${setbootargs} ${ext4rd_args}; run bootargs_fs;"\
	"gpt setenv mmc ${sd_device_number} ${fit_image};"\
	"mmc read ${fit_image_loadaddr} ${gpt_partition_addr} "\
	"${gpt_partition_size};"\
	"bootm ${fit_image_loadaddr}\0"

#define BOOTCMD_MMC_FITS \
	"bootcmd_mmc_fits="\
	"setenv mmc_fit0 " \
	"'setenv fit_image Image_rsa.img; run bootcmd_mmc_fit';"\
	"setenv mmc_fit1 " \
	"'setenv fit_image Image1_rsa.img; run bootcmd_mmc_fit';"\
	"setenv mmc_fit2 " \
	"'setenv fit_image Image2_rsa.img; run bootcmd_mmc_fit';"\
	"run mmc_fit0 || run mmc_fit1 || run mmc_fit2\0"

#define USBDEV "usbdev=0\0"
#define BOOTCMD_USB\
	"bootcmd_usb="\
	"setenv usb_image_loadaddr 90000000;"\
	"setenv fit_image Image_rsa.img;"\
	"setenv bootargs_fs ${setbootargs} ${initrd_args}; run bootargs_fs;"\
	"if usb dev ${usbdev}; && usb start; then "\
		"echo Booting from USB...;"\
		"fatload usb ${usbdev} ${usb_image_loadaddr} ${fit_image};"\
		"fatload usb ${usbdev} ${initrd_loadaddr} ${initrd_image};"\
		"bootm ${usb_image_loadaddr} ${initrd_loadaddr}:${filesize};"\
	"fi;"\
	"\0"

#define START_PCI\
	"start_pci=pci e "\
	"\0"

#define BNXT_LOAD\
	"bnxt_load=bnxt 0 probe "\
	"\0"

#define BOOTCMD_PXE\
	"bootcmd_pxe="\
	"run check_chimp_hs && "\
	"run start_pci && "\
	"run bnxt_load;"\
	"setenv ethact bnxt_eth0;"\
	"setenv autoload no;"\
	"setenv bootargs_fs ${setbootargs} ${initrd_args}; run bootargs_fs;"\
	"if dhcp; then "\
		"setenv pxefile_addr_r ${loadaddr};"\
		"if pxe get; then "\
			"setenv ramdisk_addr_r ${initrd_loadaddr};"\
			"setenv kernel_addr_r ${fit_image_loadaddr};"\
			"pxe boot; "\
		"fi;"\
	"fi;"\
	"\0"

#define FLASH_PENDING_RFS_IMGS \
	"flash_pending_rfs_imgs=" \
	"if test $bcm_bl_flash_pending_rfs_imgs = 1; then " \
		"if test $bl_flash_pending_rfs_imgs = rootfs; then " \
			"dhcp;" \
			"run mmc_flash_rootfs;" \
		"fi;" \
		"if test $bl_flash_pending_rfs_imgs = recovery; then " \
			"dhcp;" \
			"run mmc_flash_recovery;" \
		"fi;" \
		"setenv bl_flash_pending_rfs_imgs;" \
	"fi; \0"

#define CONFIG_BOOTCOMMAND "run flash_pending_rfs_imgs;" \
			   "run fastboot_nitro && "\
			   "run bootcmd_mmc_fits || "\
			   "run bootcmd_usb || "\
			   "run bootcmd_pxe"

/* Flashing commands */
#define TFTP_QSPI_PARAM \
	"fip_qspi_addr=0x0\0"\
	"fip_qspi_mirror_addr=0x200000\0"\
	"loadaddr=0x90000000\0"\
	"tftpblocksize=1468\0"\
	"qspi_flash_fip=fip\0"\

/* Flash fit_GPT partition to eMMC */
#define MMC_FLASH_FIT_GPT \
	"mmc_flash_gpt="\
	"if mmc dev ${sd_device_number}; then "\
	"else "\
		"echo [mmc_flash_gpt] mmc dev ${sd_device_number} "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	"if gpt write mmc ${sd_device_number} ${fit_partitions}; then "\
	"else "\
		"echo [mmc_flash_gpt] gpt write ${fit_partitions} "\
		"** FAILED **;"\
		"exit;"\
	"fi \0"

#define MMC_FLASH_IMAGE_RSA \
	"mmc_flash_image_rsa="\
	"if mmc dev ${sd_device_number}; then "\
	"else "\
		"echo [mmc_flash_image_rsa] mmc dev ${sd_device_number} "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	"if gpt setenv mmc ${sd_device_number} ${fit_image}; then "\
	"else "\
		"echo [mmc_flash_image_rsa] gpt setenv ${fit_image} "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	"if tftp ${loadaddr} ${tftp_dir}${fit_image}; then "\
		"if test ${fit_image} = Image_rsa.img; then "\
			"if setenv tftp_fit_image yes; then "\
			"else "\
				"echo [mmc_flash_image_rsa] "\
				"setenv tftp_fit_image to yes"\
				"** FAILED **;"\
				"exit;"\
			"fi;"\
		"fi;"\
	"else "\
		"if test ${fit_image} = Image_rsa.img; then "\
			"echo [mmc_flash_image_rsa] tftp "\
			"${tftp_dir}${fit_image} ** FAILED **;"\
		"else "\
			"if test ${tftp_fit_image} = yes; then "\
				"if mmc write ${loadaddr} "\
				"${gpt_partition_addr} "\
				"${fileblocks}; then "\
				"else "\
					"echo "\
					"[mmc_flash_image_rsa] "\
					"mmc write "\
					"${gpt_partition_addr} "\
					"** FAILED **;"\
					"exit;"\
				"fi;"\
			"else "\
				"echo [mmc_flash_image_rsa] tftp "\
				"${tftp_dir}${fit_image} "\
				"** FAILED **;"\
			"fi;"\
		"fi;"\
		"exit;"\
	"fi;"\
	"if math add filesize filesize 1FF; then "\
	"else "\
		"echo [mmc_flash_image_rsa] math add command ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if math div fileblocks filesize 200; then "\
	"else "\
		"echo [mmc_flash_image_rsa] math div command ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if mmc write ${loadaddr} ${gpt_partition_addr} ${fileblocks}; then "\
	"else "\
		"echo [mmc_flash_image_rsa] mmc write ${gpt_partition_addr} "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	"if setenv image_sz_blk_cnt ${fileblocks}; then "\
	"else "\
		"echo [mmc_flash_image_rsa] setenv image_sz_blk_cnt ** "\
		"FAILED **;"\
		"exit;"\
	"fi;"\
	"if saveenv; then "\
	"else "\
		"echo [mmc_flash_image_rsa] saveenv command ** FAILED **;"\
		"exit;"\
	"fi \0"

#define MMC_FLASH_RECOVERY \
	"mmc_flash_recovery="\
	"if mmc dev ${sd_device_number}; then "\
	"else "\
		"echo [mmc_flash_recovery] mmc dev ${sd_device_number} "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	"if gpt setenv mmc ${sd_device_number} recovery; then "\
	"else "\
		"echo [mmc_flash_recovery] gpt setenv recovery ** FAILED **;"\
		"exit;"\
	"fi;"\
	"setenv index 1;"\
	"while tftp ${loadaddr} "\
	"${tftp_dir}${gpt_partition_name}/chunk_00${index}; do "\
		"if math add filesize filesize 1FF; then "\
		"else "\
			"echo [mmc_flash_recovery] math add command "\
			"** FAILED **;"\
			"exit;"\
		"fi;"\
		"if math div fileblocks filesize 200; then "\
		"else "\
			"echo [mmc_flash_recovery] math div command "\
			"** FAILED **;"\
			"exit;"\
		"fi;"\
		"if mmc write ${loadaddr} ${gpt_partition_addr} "\
		"${fileblocks}; then "\
		"else "\
			"echo [mmc_flash_recovery] mmc write "\
			"${gpt_partition_addr} ** FAILED **;"\
			"exit;"\
		"fi;"\
		"if math add index index 1; then "\
		"else "\
			"echo [mmc_flash_recovery] math add command "\
			"** FAILED **;"\
			"exit;"\
		"fi;"\
		"if math add gpt_partition_addr gpt_partition_addr"\
		" ${fileblocks}; then "\
		"else "\
			"echo [mmc_flash_recovery] math add command"\
			" ** FAILED **;"\
			"exit;"\
		"fi;"\
	"done;"\
	"if itest ${index} -ne 1; then "\
	"else "\
		"echo [mmc_flash_recovery] "\
		"${tftp_dir}${gpt_partition_name}/chunk_00${index} file "\
		"not found ** FAILED **;"\
		"exit;"\
	"fi \0"

#define MMC_FLASH_ROOTFS \
	"mmc_flash_rootfs="\
	"if mmc dev ${sd_device_number}; then "\
	"else "\
		"echo [mmc_flash_rootfs] mmc dev ${sd_device_number} "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	"if gpt setenv mmc ${sd_device_number} rootfs; then "\
	"else "\
		"echo [mmc_flash_rootfs] gpt setenv rootfs ** FAILED **;"\
		"exit;"\
	"fi;"\
	"setenv index 1;"\
	"while tftp ${loadaddr} "\
	"${tftp_dir}${gpt_partition_name}/chunk_00${index}; do "\
		"if math add filesize filesize 1FF; then "\
		"else "\
			"echo [mmc_flash_rootfs] math add command "\
			"** FAILED **;"\
			"exit;"\
		"fi;"\
		"if math div fileblocks filesize 200; then "\
		"else "\
			"echo [mmc_flash_rootfs] math div command "\
			"** FAILED **;"\
			"exit;"\
		"fi;"\
		"if mmc write ${loadaddr} ${gpt_partition_addr} "\
		"${fileblocks}; then "\
		"else "\
			"echo [mmc_flash_rootfs] mmc write "\
			"${gpt_partition_addr} ** FAILED **;"\
			"exit;"\
		"fi;"\
		"if math add index index 1; then "\
		"else "\
			"echo [mmc_flash_rootfs] math add command "\
			"** FAILED **;"\
			"exit;"\
		"fi;"\
		"if math add gpt_partition_addr gpt_partition_addr"\
		" ${fileblocks}; then "\
		"else "\
			"echo [mmc_flash_rootfs] math add command"\
			" ** FAILED **;"\
			"exit;"\
		"fi;"\
	"done;"\
	"if itest ${index} -ne 1; then "\
	"else "\
		"echo [mmc_flash_rootfs] "\
		"${tftp_dir}${gpt_partition_name}/chunk_00${index} file "\
		"not found ** FAILED **;"\
		"exit;"\
	"fi \0"

/*
 * For individual flash commands like mmc_flash_gpt, it is not
 * necessary to check for errors.
 * If any of its intermediate commands fails, then next commands
 * will not execute. Script will exit from the failure command.
 * For uniformity, checking for mmc_flash_gpt, mmc_flash_image_rsa
 * mmc_flash_nitro and mmc_flash_rootfs
 */
#define MMC_FLASH \
	"flash_mmc="\
	"if run mmc_flash_gpt; then "\
	"else "\
		"echo [flash_mmc] run mmc_flash_gpt ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if setenv tftp_fit_image no; then "\
	"else "\
		"echo [flash_mmc] setenv tftp_fit_image to no "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	"if setenv fit_image Image_rsa.img; then "\
	"else "\
		"echo [flash_mmc] setenv fit_image to Image_rsa.img "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	"if run mmc_flash_image_rsa; then "\
	"else "\
		"echo [flash_mmc] run mmc_flash_image_rsa ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if setenv fit_image Image1_rsa.img; then "\
	"else "\
		"echo [flash_mmc] setenv fit_image to Image1_rsa.img "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	"if run mmc_flash_image_rsa; then "\
	"else "\
		"echo [flash_mmc] run mmc_flash_image_rsa "\
		"for Image1_rsa.img ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if setenv fit_image Image2_rsa.img; then "\
	"else "\
		"echo [flash_mmc] setenv fit_image to Image2_rsa.img "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	"if run mmc_flash_image_rsa; then "\
	"else "\
		"echo [flash_mmc] run mmc_flash_image_rsa "\
		"for Image2_rsa.img ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if run mmc_flash_recovery; then "\
	"else "\
		"echo [flash_mmc] run mmc_flash_recovery ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if run mmc_flash_rootfs; then "\
	"else "\
		"echo [flash_mmc] run mmc_flash_rootfs ** FAILED **;"\
		"exit;"\
	"fi \0"

#define FUNC_ALIGN_QSPI_ERASE_BLOCK_SIZE \
	"align_erase_blk_size=" \
	"setenv fl_write_size 0;" \
	"if math add fl_write_size filesize FFFF; then "\
	"else "\
		"echo ${errstr} math add command ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if math div fl_write_size fl_write_size 10000; then "\
	"else "\
		"echo ${errstr} math div command ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if math mul fl_write_size fl_write_size 10000; then "\
	"else "\
		"echo ${errstr} math mul command ** FAILED **;"\
		"exit;"\
	"fi \0"

#define QSPI_FLASH_FIP \
	"flash_fip="\
	"if run qspi_access_en; then "\
	"else "\
		"echo [flash_fip] run qspi_access_en ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if tftp ${loadaddr} ${tftp_dir}fip.bin; then "\
	"else "\
		"echo [flash_fip] tftp ${tftp_dir}fip.bin "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	"if math add tmpsize filesize FFFF; then "\
	"else "\
		"echo [flash_fip] math add command ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if math div tmpsize tmpsize 10000; then "\
	"else "\
		"echo [flash_fip] math div command ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if math mul tmpsize tmpsize 10000; then "\
	"else "\
		"echo [flash_fip] math mul command ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if sf probe 0; then "\
	"else "\
		"echo [flash_fip] sf probe command ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if sf erase ${fip_qspi_addr} ${tmpsize}; then "\
	"else "\
		"echo [flash_fip] sf erase ${fip_qspi_addr} ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if sf write ${loadaddr} ${fip_qspi_addr} ${filesize}; then "\
	"else "\
		"echo [flash_fip] sf write ${fip_qspi_addr} ** FAILED **;"\
		"exit;"\
	"fi;"\
	/* Flash mirror FIP image */ \
	"if sf erase ${fip_qspi_mirror_addr} ${tmpsize}; then "\
	"else "\
		"echo [flash_fip] sf erase ${fip_qspi_mirror_addr} "\
			"** FAILED **;"\
		"exit;"\
	"fi;"\
	"if sf write ${loadaddr} ${fip_qspi_mirror_addr} ${filesize}; then "\
	"else "\
		"echo [flash_fip] sf write ${fip_qspi_mirror_addr} "\
			"** FAILED **;"\
		"exit;"\
	"fi \0"

#define QSPI_FLASH_NITRO \
	"flash_nitro="\
	"run func_qspi_probe; "\
	"if tftp ${loadaddr} ${tftp_dir}${nitro_bin}; then "\
	"else "\
		"echo [flash_nitro] tftp ${tftp_dir}${nitro_bin} "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	"setenv errstr flash_nitro;" \
	"run align_erase_blk_size;" \
	/* Flash Nitro fw fit + configuration */ \
	"if sf erase ${spi_nitro_img_bin_start} ${fl_write_size}; then "\
	"else "\
		"echo [flash_nitro] sf erase ${spi_nitro_img_bin_start} "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	"if sf write ${loadaddr} ${spi_nitro_img_bin_start}" \
		     " ${fl_write_size}; then "\
	"else "\
		"echo [flash_nitro] sf write ${spi_nitro_bin_start} "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	/* Mirror of Flash Nitro fw fit + configuration */ \
	"if sf erase ${spi_nitro_img_bin_mirror_start} ${fl_write_size}; then "\
	"else "\
		"echo [flash_nitro] sf erase "\
		      "${spi_nitro_img_bin_mirror_start} "\
		"** FAILED **;"\
		"exit;"\
	"fi;"\
	"if sf write ${loadaddr} ${spi_nitro_img_bin_mirror_start}" \
		     " ${fl_write_size}; then "\
	"else "\
		"echo [flash_nitro] sf write "\
		      "${spi_nitro_img_bin_mirror_start} "\
		"** FAILED **;"\
		"exit;"\
	"fi \0"

#define QSPI_FLASH_NITRO_BSPD_CONFIG \
	"flash_nitro_bspd_config="\
	"run func_qspi_probe; "\
	/* Flash BSPD configuration */ \
	"if tftp ${loadaddr} ${tftp_dir}${nitro_bspd_cfg}; then "\
		"setenv bspd_cfg_avialable 1; "\
		"setenv errstr flash_nitro_bspd_config; "\
		"run align_erase_blk_size;" \
		"if sf erase ${spi_nitro_bspd_cfg_start} "\
			    "${fl_write_size}; then "\
		"else "\
			"echo [flash_nitro] sf erase "\
				"${spi_nitro_bspd_cfg_start} "\
				"** FAILED **;"\
			"exit;"\
		"fi;"\
		"if sf write ${loadaddr} ${spi_nitro_bspd_cfg_start} "\
			    "${fl_write_size}; then "\
		"else "\
			"echo [flash_nitro] sf write "\
				"${spi_nitro_bspd_cfg_start} "\
				"** FAILED **;"\
			"exit;"\
		"fi;" \
		/* Flash BSPD mirror configuration */ \
		"if sf erase ${spi_nitro_bspd_mirror_cfg_start} "\
			    "${fl_write_size}; then "\
		"else "\
			"echo [flash_nitro] sf erase "\
				"${spi_nitro_bspd_mirror_cfg_start} "\
				"** FAILED **;"\
			"exit;"\
		"fi;"\
		"if sf write ${loadaddr} ${spi_nitro_bspd_mirror_cfg_start} "\
			"${fl_write_size}; then "\
		"else "\
			"echo [flash_nitro] sf write "\
				"${spi_nitro_bspd_mirror_cfg_start} "\
				"** FAILED **;"\
			"exit;"\
		"fi;" \
	"else "\
		"echo [flash_nitro] tftp ${tftp_dir}${nitro_bspd_cfg} "\
		"** Skip flashing bspd config file **;"\
	"fi \0"

#define QSPI_FLASH \
	"flash_qspi="\
	"if run qspi_access_en; then "\
	"else "\
		"echo [flash_qspi] run qspi_access_en ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if run flash_fip; then "\
	"else "\
		"echo [flash_qspi] run flash_fip ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if run flash_nitro; then "\
	"else "\
		"echo [flash_qspi] run flash_nitro ** FAILED **;"\
		"exit;"\
	"fi \0"

#define FLASH_IMAGES \
	"flash_images=" \
	"if run flash_qspi; then "\
	"else "\
		"echo [flash_images] run flash_qspi ** FAILED **;"\
		"exit;"\
	"fi;"\
	"if run flash_mmc; then "\
	"else "\
		"echo [flash_images] run flash_mmc ** FAILED **;"\
		"exit;"\
	"fi \0"

#define ARCH_ENV_SETTINGS \
	CONSOLE_ARGS \
	MAX_CPUS \
	OS_LOG_LEVEL \
	EXTRA_ARGS \
	PCIE_ARGS \
	ETH_ADDR \
	RESERVED_MEM \
	SETBOOTARGS \
	UPDATEME_FLASH_PARAMS \
	KERNEL_LOADADDR_CFG\
	INITRD_ARGS \
	INITRD_LOADADDR \
	INITRD_IMAGE \
	MMC_DEV \
	EXEC_STATE \
	EXT4RD_ARGS \
	WDT_CNTRL \
	ELOG_SETUP \
	FIT_MMC_PARTITION \
	QSPI_FLASH_NITRO_PARAMS \
	QSPI_ACCESS_ENABLE \
	FUNC_QSPI_PROBE \
	NITRO_FW_IMAGES \
	FASTBOOT_NITRO_SETUP \
	FASTBOOT_SETUP \
	CHECK_CHIMP_HS \
	FASTBOOT_NITRO \
	FIT_IMAGE \
	BOOTCMD_MMC_FIT \
	BOOTCMD_MMC_FITS \
	USBDEV \
	BOOTCMD_USB \
	START_PCI \
	BNXT_LOAD \
	BOOTCMD_PXE \
	FLASH_PENDING_RFS_IMGS \
	TFTP_QSPI_PARAM \
	MMC_FLASH_FIT_GPT \
	MMC_FLASH_IMAGE_RSA \
	MMC_FLASH_RECOVERY \
	MMC_FLASH_ROOTFS \
	MMC_FLASH \
	FUNC_ALIGN_QSPI_ERASE_BLOCK_SIZE \
	QSPI_FLASH_FIP \
	QSPI_FLASH_NITRO \
	QSPI_FLASH_NITRO_BSPD_CONFIG \
	QSPI_FLASH \
	FLASH_IMAGES

#define CONFIG_EXTRA_ENV_SETTINGS \
	ARCH_ENV_SETTINGS

#endif /* __BCM_NS3_H */
