// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
 * Copyright 2025 Toradex
 */

#include "k3-binman.dtsi"

#if IS_ENABLED(CONFIG_TARGET_VERDIN_AM62P_R5)

&binman {
	tiboot3-am62px-hs-fs-verdin.bin {
		filename = "tiboot3-am62px-hs-fs-verdin.bin";
		symlink = "tiboot3.bin";

		ti-secure-rom {
			content = <&u_boot_spl_fs>, <&ti_fs_enc_fs>, <&combined_tifs_cfg_fs>,
				  <&combined_dm_cfg_fs>, <&sysfw_inner_cert_fs>;
			combined;
			dm-data;
			sysfw-inner-cert;
			keyfile = "custMpk.pem";
			sw-rev = <1>;
			content-sbl = <&u_boot_spl_fs>;
			content-sysfw = <&ti_fs_enc_fs>;
			content-sysfw-data = <&combined_tifs_cfg_fs>;
			content-sysfw-inner-cert = <&sysfw_inner_cert_fs>;
			content-dm-data = <&combined_dm_cfg_fs>;
			load = <CONFIG_SPL_TEXT_BASE>;
			load-sysfw = <0x40000>;
			load-sysfw-data = <0x67000>;
			load-dm-data = <0x43c4a800>;
		};

		u_boot_spl_fs: u-boot-spl {
			no-expanded;
		};

		ti_fs_enc_fs: ti-fs-enc.bin {
			filename = "ti-sysfw/ti-fs-firmware-am62px-hs-fs-enc.bin";
			type = "blob-ext";
			optional;
		};

		combined_tifs_cfg_fs: combined-tifs-cfg.bin {
			filename = "combined-tifs-cfg.bin";
			type = "blob-ext";
		};

		sysfw_inner_cert_fs: sysfw-inner-cert {
			filename = "ti-sysfw/ti-fs-firmware-am62px-hs-fs-cert.bin";
			type = "blob-ext";
			optional;
		};

		combined_dm_cfg_fs: combined-dm-cfg.bin {
			filename = "combined-dm-cfg.bin";
			type = "blob-ext";
		};
	};

	tiboot3-am62px-hs-verdin.bin {
		filename = "tiboot3-am62px-hs-verdin.bin";

		ti-secure-rom {
			content = <&u_boot_spl_hs>, <&ti_fs_enc_hs>, <&combined_tifs_cfg_hs>,
				  <&combined_dm_cfg_hs>, <&sysfw_inner_cert_hs>;
			combined;
			dm-data;
			sysfw-inner-cert;
			keyfile = "custMpk.pem";
			sw-rev = <1>;
			content-sbl = <&u_boot_spl_hs>;
			content-sysfw = <&ti_fs_enc_hs>;
			content-sysfw-data = <&combined_tifs_cfg_hs>;
			content-sysfw-inner-cert = <&sysfw_inner_cert_hs>;
			content-dm-data = <&combined_dm_cfg_hs>;
			load = <CONFIG_SPL_TEXT_BASE>;
			load-sysfw = <0x40000>;
			load-sysfw-data = <0x67000>;
			load-dm-data = <0x43c4a800>;
		};

		u_boot_spl_hs: u-boot-spl {
			no-expanded;
		};

		ti_fs_enc_hs: ti-fs-enc.bin {
			filename = "ti-sysfw/ti-fs-firmware-am62px-hs-enc.bin";
			type = "blob-ext";
			optional;
		};

		combined_tifs_cfg_hs: combined-tifs-cfg.bin {
			filename = "combined-tifs-cfg.bin";
			type = "blob-ext";
		};

		sysfw_inner_cert_hs: sysfw-inner-cert {
			filename = "ti-sysfw/ti-fs-firmware-am62px-hs-cert.bin";
			type = "blob-ext";
			optional;
		};

		combined_dm_cfg_hs: combined-dm-cfg.bin {
			filename = "combined-dm-cfg.bin";
			type = "blob-ext";
		};
	};
};

#endif /* CONFIG_TARGET_VERDIN_AM62P_R5 */

#if IS_ENABLED(CONFIG_TARGET_VERDIN_AM62P_A53)

#define SPL_VERDIN_AM62P_DTB "spl/dts/ti/k3-am62p5-verdin-wifi-dev.dtb"
#define VERDIN_AM62P_DTB "u-boot.dtb"

&binman {
	tifsstub-hs {
		filename = "tifsstub.bin_hs";
		ti-secure-rom {
			content = <&tifsstub_hs_cert>;
			core = "secure";
			load = <0x60000>;
			sw-rev = <CONFIG_K3_X509_SWRV>;
			keyfile = "custMpk.pem";
			countersign;
			tifsstub;
		};
		tifsstub_hs_cert: tifsstub-hs-cert.bin {
			filename = "ti-sysfw/ti-fs-stub-firmware-am62px-hs-cert.bin";
			type = "blob-ext";
			optional;
		};
		tifsstub_hs_enc: tifsstub-hs-enc.bin {
			filename = "ti-sysfw/ti-fs-stub-firmware-am62px-hs-enc.bin";
			type = "blob-ext";
			optional;
		};
	};

	tifsstub-fs {
		filename = "tifsstub.bin_fs";
		tifsstub_fs_cert: tifsstub-fs-cert.bin {
			filename = "ti-sysfw/ti-fs-stub-firmware-am62px-hs-cert.bin";
			type = "blob-ext";
			optional;
		};
		tifsstub_fs_enc: tifsstub-fs-enc.bin {
			filename = "ti-sysfw/ti-fs-stub-firmware-am62px-hs-enc.bin";
			type = "blob-ext";
			optional;
		};

	};

	ti-spl {
		insert-template = <&ti_spl_template>;

		fit {
			images {
				tifsstub-hs {
					description = "TIFSSTUB";
					type = "firmware";
					arch = "arm32";
					compression = "none";
					os = "tifsstub-hs";
					load = <0x9ca00000>;
					entry = <0x9ca00000>;
					blob-ext {
						filename = "tifsstub.bin_hs";
					};
				};

				tifsstub-fs {
					description = "TIFSSTUB";
					type = "firmware";
					arch = "arm32";
					compression = "none";
					os = "tifsstub-fs";
					load = <0x9ca00000>;
					entry = <0x9ca00000>;
					blob-ext {
						filename = "tifsstub.bin_fs";
					};
				};
				dm {
					ti-secure {
						content = <&dm>;
						keyfile = "custMpk.pem";
					};

					dm: ti-dm {
						filename = "ti-dm/am62pxx/ipc_echo_testb_mcu1_0_release_strip.xer5f";
						optional;
					};
				};

				fdt-0 {
					description = "k3-am62p5-verdin-wifi-dev";
					type = "flat_dt";
					arch = "arm";
					compression = "none";

					ti-secure {
						content = <&spl_verdin_am62p_dtb>;
						keyfile = "custMpk.pem";
					};

					spl_verdin_am62p_dtb: blob-ext {
						filename = SPL_VERDIN_AM62P_DTB;
					};

				};

			};

			configurations {
				default = "conf-0";

				conf-0 {
					description = "k3-am62p5-verdin-wifi-dev";
					firmware = "atf";
					loadables = "tee", "tifsstub-hs", "tifsstub-fs",
						    "dm", "spl";
					fdt = "fdt-0";
				};
			};
		};
	};
};

&binman {
	u-boot {
		insert-template = <&u_boot_template>;

		fit {
			images {
				uboot {
					description = "U-Boot for Verdin AM62P5 Boards";
				};

				fdt-0 {
					description = "k3-am62p5-verdin-wifi-dev";
					type = "flat_dt";
					arch = "arm";
					compression = "none";

					ti-secure {
						content = <&verdin_am62p_dtb>;
						keyfile = "custMpk.pem";
					};

					verdin_am62p_dtb: blob-ext {
						filename = VERDIN_AM62P_DTB;
					};

					hash {
						algo = "crc32";
					};
				};
			};

			configurations {
				default = "conf-0";

				conf-0 {
					description = "k3-am62p5-verdin-wifi-dev";
					firmware = "uboot";
					loadables = "uboot";
					fdt = "fdt-0";
				};

			};
		};
	};
};

&binman {
	firmware-verdin-am62px-hs.bin {
		filename = "firmware-verdin-am62px-hs.bin";

		blob-ext@1 {
			filename = "tiboot3-am62px-hs-verdin.bin";
		};

		blob-ext@2 {
			filename = "tispl.bin";
			/*
			 * This value matches CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
			 * from R5 SPL config.
			 */
			offset = <0x80000>;
		};

		blob-ext@3 {
			filename = "u-boot.img";
			offset = <(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR * 512)>;
		};
	};

	firmware-verdin-am62px-hs-fs.bin {
		filename = "firmware-verdin-am62px-hs-fs.bin";

		blob-ext@1 {
			filename = "tiboot3-am62px-hs-fs-verdin.bin";
		};

		blob-ext@2 {
			filename = "tispl.bin";
			/*
			 * This value matches CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
			 * from R5 SPL config.
			 */
			offset = <0x80000>;
		};

		blob-ext@3 {
			filename = "u-boot.img";
			offset = <(CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR * 512)>;
		};
	};
};

#endif /* CONFIG_TARGET_VERDIN_AM62P_A53 */
