// SPDX-License-Identifier: GPL-2.0+
// Copyright (C) 2022-2023 Texas Instruments Incorporated - https://www.ti.com/

#include "k3-binman.dtsi"

#ifdef CONFIG_TARGET_AM642_R5_EVM

&binman {
	tiboot3-am64x_sr2-hs-evm.bin {
		filename = "tiboot3-am64x_sr2-hs-evm.bin";
		ti-secure-rom {
			content = <&u_boot_spl>, <&ti_sci_enc>,
				<&combined_sysfw_cfg>, <&sysfw_inner_cert>;
			combined;
			sysfw-inner-cert;
			keyfile = "custMpk.pem";
			sw-rev = <1>;
			content-sbl = <&u_boot_spl>;
			content-sysfw = <&ti_sci_enc>;
			content-sysfw-data = <&combined_sysfw_cfg>;
			content-sysfw-inner-cert = <&sysfw_inner_cert>;
			load = <0x70000000>;
			load-sysfw = <0x44000>;
			load-sysfw-data = <0x7b000>;
		};
		u_boot_spl: u-boot-spl {
			no-expanded;
		};
		ti_sci_enc: ti-fs-enc.bin {
			filename = "ti-sysfw/ti-sci-firmware-am64x_sr2-hs-enc.bin";
			type = "blob-ext";
		};
		combined_sysfw_cfg: combined-sysfw-cfg.bin {
			filename = "combined-sysfw-cfg.bin";
			type = "blob-ext";
		};
		sysfw_inner_cert: sysfw-inner-cert {
			filename = "ti-sysfw/ti-sci-firmware-am64x_sr2-hs-cert.bin";
			type = "blob-ext";
		};

	};
};

&binman {
	tiboot3-am64x_sr2-hs-fs-evm.bin {
		filename = "tiboot3-am64x_sr2-hs-fs-evm.bin";
		symlink = "tiboot3.bin";
		ti-secure-rom {
			content = <&u_boot_spl_fs>, <&ti_sci_enc_fs>,
				<&combined_sysfw_cfg_fs>, <&sysfw_inner_cert_fs>;
			combined;
			sysfw-inner-cert;
			keyfile = "custMpk.pem";
			sw-rev = <1>;
			content-sbl = <&u_boot_spl_fs>;
			content-sysfw = <&ti_sci_enc_fs>;
			content-sysfw-data = <&combined_sysfw_cfg_fs>;
			content-sysfw-inner-cert = <&sysfw_inner_cert_fs>;
			load = <0x70000000>;
			load-sysfw = <0x44000>;
			load-sysfw-data = <0x7b000>;
		};
		u_boot_spl_fs: u-boot-spl {
			no-expanded;
		};
		ti_sci_enc_fs: ti-fs-enc.bin {
			filename = "ti-sysfw/ti-sci-firmware-am64x_sr2-hs-fs-enc.bin";
			type = "blob-ext";
		};
		combined_sysfw_cfg_fs: combined-sysfw-cfg.bin {
			filename = "combined-sysfw-cfg.bin";
			type = "blob-ext";
		};
		sysfw_inner_cert_fs: sysfw-inner-cert {
			filename = "ti-sysfw/ti-sci-firmware-am64x_sr2-hs-fs-cert.bin";
			type = "blob-ext";
		};

	};
};

&binman {
	tiboot3-am64x-gp-evm.bin {
		filename = "tiboot3-am64x-gp-evm.bin";
		ti-secure-rom {
			content = <&u_boot_spl_unsigned>, <&ti_sci_gp>, <&combined_sysfw_cfg_gp>;
			combined;
			content-sbl = <&u_boot_spl_unsigned>;
			load = <0x70000000>;
			content-sysfw = <&ti_sci_gp>;
			load-sysfw = <0x44000>;
			content-sysfw-data = <&combined_sysfw_cfg_gp>;
			load-sysfw-data = <0x7b000>;
			sw-rev = <1>;
			keyfile = "ti-degenerate-key.pem";
		};
		u_boot_spl_unsigned: u-boot-spl {
			no-expanded;
		};
		ti_sci_gp: ti-sci-gp.bin {
			filename = "ti-sysfw/ti-sci-firmware-am64x-gp.bin";
			type = "blob-ext";
		};
		combined_sysfw_cfg_gp: combined-sysfw-cfg-gp.bin {
			filename = "combined-sysfw-cfg.bin";
			type = "blob-ext";
		};
	};
};

#include "k3-binman-capsule-r5.dtsi"

// Capsule update GUIDs in string form.  See am64x_evm.h
#define AM64X_SK_TIBOOT3_IMAGE_GUID_STR "ede0a0d5-9116-4bfb-aa54-09e97b5afe1a"

&capsule_tiboot3 {
	efi-capsule {
		image-guid = AM64X_SK_TIBOOT3_IMAGE_GUID_STR;
	};
};

#endif

#ifdef CONFIG_TARGET_AM642_A53_EVM

#define SPL_AM642_EVM_DTB "spl/dts/ti/k3-am642-evm.dtb"
#define SPL_AM642_SK_DTB "spl/dts/ti/k3-am642-sk.dtb"

#define AM642_EVM_DTB "u-boot.dtb"
#define AM642_SK_DTB "dts/upstream/src/arm64/ti/k3-am642-sk.dtb"

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

		fit {
			description = "Configuration to load ATF and SPL";
			#address-cells = <1>;

			images {
				dm {
					blob-ext {
						filename = "/dev/null";
					};
				};


				fdt-0 {
					description = "k3-am642-evm";
					type = "flat_dt";
					arch = "arm";
					compression = "none";
					ti-secure {
						content = <&spl_am64x_evm_dtb>;
						keyfile = "custMpk.pem";
					};
					spl_am64x_evm_dtb: blob-ext {
						filename = SPL_AM642_EVM_DTB;
					};

				};

				fdt-1 {
					description = "k3-am642-sk";
					type = "flat_dt";
					arch = "arm";
					compression = "none";
					ti-secure {
						content = <&spl_am64x_sk_dtb>;
						keyfile = "custMpk.pem";
					};
					spl_am64x_sk_dtb: blob-ext {
						filename = SPL_AM642_SK_DTB;
					};

				};
			};

			configurations {
				default = "conf-0";

				conf-0 {
					description = "k3-am642-evm";
					firmware = "atf";
					loadables = "tee", "dm", "spl";
					fdt = "fdt-0";
				};

				conf-1 {
					description = "k3-am642-sk";
					firmware = "atf";
					loadables = "tee", "dm", "spl";
					fdt = "fdt-1";
				};
			};
		};
	};
};

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

		fit {
			images {
				uboot {
					description = "U-Boot for AM64 Board";
				};

				fdt-0 {
					description = "k3-am642-evm";
					type = "flat_dt";
					arch = "arm";
					compression = "none";
					ti-secure {
						content = <&am64x_evm_dtb>;
						keyfile = "custMpk.pem";

					};
					am64x_evm_dtb: blob-ext {
						filename = AM642_EVM_DTB;
					};
					hash {
						algo = "crc32";
					};
				};

				fdt-1 {
					description = "k3-am642-sk";
					type = "flat_dt";
					arch = "arm";
					compression = "none";
					ti-secure {
						content = <&am64x_sk_dtb>;
						keyfile = "custMpk.pem";

					};
					am64x_sk_dtb: blob-ext {
						filename = AM642_SK_DTB;
					};
					hash {
						algo = "crc32";
					};
				};

			};

			configurations {
				default = "conf-0";

				conf-0 {
					description = "k3-am642-evm";
					firmware = "uboot";
					loadables = "uboot";
					fdt = "fdt-0";
				};

				conf-1 {
					description = "k3-am642-sk";
					firmware = "uboot";
					loadables = "uboot";
					fdt = "fdt-1";
				};
			};
		};
	};
};

&binman {
	ti-spl_unsigned {
		insert-template = <&ti_spl_unsigned_template>;

		fit {
			images {

				dm {
					blob-ext {
						filename = "/dev/null";
					};
				};

				fdt-0 {
					description = "k3-am642-evm";
					type = "flat_dt";
					arch = "arm";
					compression = "none";
					blob {
						filename = SPL_AM642_EVM_DTB;
					};
				};

				fdt-1 {
					description = "k3-am642-sk";
					type = "flat_dt";
					arch = "arm";
					compression = "none";
					blob {
						filename = SPL_AM642_SK_DTB;
					};
				};
			};

			configurations {
				default = "conf-0";

				conf-0 {
					description = "k3-am642-evm";
					firmware = "atf";
					loadables = "tee", "dm", "spl";
					fdt = "fdt-0";
				};

				conf-1 {
					description = "k3-am642-sk";
					firmware = "atf";
					loadables = "tee", "dm", "spl";
					fdt = "fdt-1";
				};
			};
		};
	};
};

&binman {
	u-boot_unsigned {
		insert-template = <&u_boot_unsigned_template>;

		fit {
			images {
				uboot {
					description = "U-Boot for AM64 Board";
				};

				fdt-0 {
					description = "k3-am642-evm";
					type = "flat_dt";
					arch = "arm";
					compression = "none";
					blob {
						filename = AM642_EVM_DTB;
					};
					hash {
						algo = "crc32";
					};
				};

				fdt-1 {
					description = "k3-am642-sk";
					type = "flat_dt";
					arch = "arm";
					compression = "none";
					blob {
						filename = AM642_SK_DTB;
					};
					hash {
						algo = "crc32";
					};
				};
			};

			configurations {
				default = "conf-0";

				conf-0 {
					description = "k3-am642-evm";
					firmware = "uboot";
					loadables = "uboot";
					fdt = "fdt-0";
				};

				conf-1 {
					description = "k3-am642-sk";
					firmware = "uboot";
					loadables = "uboot";
					fdt = "fdt-1";
				};
			};
		};
	};
};

#include "k3-binman-capsule.dtsi"

// Capsule update GUIDs in string form.  See am64x_evm.h
#define AM64X_SK_SPL_IMAGE_GUID_STR "77678f5c-64d4-4910-ad75-52c9d95cdb1d"
#define AM64X_SK_UBOOT_IMAGE_GUID_STR "c6ad43a9-7d31-4f5d-83e9-b8efecae05bf"

&capsule_tispl {
	efi-capsule {
		image-guid = AM64X_SK_SPL_IMAGE_GUID_STR;
	};
};

&capsule_uboot {
	efi-capsule {
		image-guid = AM64X_SK_UBOOT_IMAGE_GUID_STR;
	};
};

#endif
