// SPDX-License-Identifier: GPL-2.0
/*
 * Based on k3-am625-sk-binman.dtsi
 *
 * Copyright (C) 2022 - 2023 PHYTEC Messtechnik GmbH
 * Author: Wadim Egorov <w.egorov@phytec.de>
 */

#include "k3-binman.dtsi"

#ifdef CONFIG_TARGET_PHYCORE_AM62X_R5

&rcfg_yaml_tifs {
	config = "tifs-rm-cfg.yaml";
};

&binman {
	tiboot3-am62x-hs-phycore-som.bin {
		filename = "tiboot3-am62x-hs-phycore-som.bin";
		ti-secure-rom {
			content = <&u_boot_spl>, <&ti_fs_enc>, <&combined_tifs_cfg>,
				<&combined_dm_cfg>, <&sysfw_inner_cert>;
			combined;
			dm-data;
			sysfw-inner-cert;
			keyfile = "custMpk.pem";
			sw-rev = <1>;
			content-sbl = <&u_boot_spl>;
			content-sysfw = <&ti_fs_enc>;
			content-sysfw-data = <&combined_tifs_cfg>;
			content-sysfw-inner-cert = <&sysfw_inner_cert>;
			content-dm-data = <&combined_dm_cfg>;
			load = <CONFIG_SPL_TEXT_BASE>;
			load-sysfw = <0x40000>;
			load-sysfw-data = <0x67000>;
			load-dm-data = <0x43c3a800>;
		};
		u_boot_spl: u-boot-spl {
			no-expanded;
		};
		ti_fs_enc: ti-fs-enc.bin {
			filename = "ti-sysfw/ti-fs-firmware-am62x-hs-enc.bin";
			type = "blob-ext";
		};
		combined_tifs_cfg: combined-tifs-cfg.bin {
			filename = "combined-tifs-cfg.bin";
			type = "blob-ext";
		};
		sysfw_inner_cert: sysfw-inner-cert {
			filename = "ti-sysfw/ti-fs-firmware-am62x-hs-cert.bin";
			type = "blob-ext";
		};
		combined_dm_cfg: combined-dm-cfg.bin {
			filename = "combined-dm-cfg.bin";
			type = "blob-ext";
		};
	};
};

&binman {
	tiboot3-am62x-hs-fs-phycore-som.bin {
		filename = "tiboot3-am62x-hs-fs-phycore-som.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 = <0x43c3a800>;
		};
		u_boot_spl_fs: u-boot-spl {
			no-expanded;
		};
		ti_fs_enc_fs: ti-fs-enc.bin {
			filename = "ti-sysfw/ti-fs-firmware-am62x-hs-fs-enc.bin";
			type = "blob-ext";
		};
		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-am62x-hs-fs-cert.bin";
			type = "blob-ext";
		};
		combined_dm_cfg_fs: combined-dm-cfg.bin {
			filename = "combined-dm-cfg.bin";
			type = "blob-ext";
		};
	};
};

&binman {
	tiboot3-am62x-gp-phycore-som.bin {
		filename = "tiboot3-am62x-gp-phycore-som.bin";
		ti-secure-rom {
			content = <&u_boot_spl_unsigned>, <&ti_fs_gp>,
				<&combined_tifs_cfg_gp>, <&combined_dm_cfg_gp>;
			combined;
			dm-data;
			content-sbl = <&u_boot_spl_unsigned>;
			load = <CONFIG_SPL_TEXT_BASE>;
			content-sysfw = <&ti_fs_gp>;
			load-sysfw = <0x40000>;
			content-sysfw-data = <&combined_tifs_cfg_gp>;
			load-sysfw-data = <0x67000>;
			content-dm-data = <&combined_dm_cfg_gp>;
			load-dm-data = <0x43c3a800>;
			sw-rev = <1>;
			keyfile = "ti-degenerate-key.pem";
		};
		u_boot_spl_unsigned: u-boot-spl {
			no-expanded;
		};
		ti_fs_gp: ti-fs-gp.bin {
			filename = "ti-sysfw/ti-fs-firmware-am62x-gp.bin";
			type = "blob-ext";
		};
		combined_tifs_cfg_gp: combined-tifs-cfg-gp.bin {
			filename = "combined-tifs-cfg.bin";
			type = "blob-ext";
		};
		combined_dm_cfg_gp: combined-dm-cfg-gp.bin {
			filename = "combined-dm-cfg.bin";
			type = "blob-ext";
		};
	};
};

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

&capsule_tiboot3 {
	efi-capsule {
		/*
		 * The GUID is generated dynamically by taking a namespace UUID and hashing
		 * it with the board compatible and fw_image name:
		 * mkeficapsule guidgen k3-am625-r5-phycore-som-2gb.dtb PHYCORE_AM62X_TIBOOT3
		 */
		image-guid = "C7D64D6D-10B2-54BC-A3BF-06A9DC3653D9";
	};
};

#endif /* CONFIG_TARGET_PHYCORE_AM62X_R5 */

#ifdef CONFIG_TARGET_PHYCORE_AM62X_A53
#define SPL_AM625_PHYBOARD_LYRA_DTB "spl/dts/ti/k3-am625-phyboard-lyra-rdk.dtb"
#define AM625_PHYBOARD_LYRA_DTB "u-boot.dtb"

&binman {
	tifsstub-hs {
		filename = "tifsstub.bin_hs";
		ti-secure-rom {
			content = <&tifsstub_hs_cert>;
			core = "secure";
			load = <0x40000>;
			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-am62x-hs-cert.bin";
			type = "blob-ext";
			optional;
		};
		tifsstub_hs_enc: tifsstub-hs-enc.bin {
			filename = "ti-sysfw/ti-fs-stub-firmware-am62x-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-am62x-hs-cert.bin";
			type = "blob-ext";
			optional;
		};
		tifsstub_fs_enc: tifsstub-fs-enc.bin {
			filename = "ti-sysfw/ti-fs-stub-firmware-am62x-hs-enc.bin";
			type = "blob-ext";
			optional;
		};

	};

	tifsstub-gp {
		filename = "tifsstub.bin_gp";
		ti-secure-rom {
			content = <&tifsstub_gp>;
			core = "secure";
			load = <0x60000>;
			sw-rev = <CONFIG_K3_X509_SWRV>;
			keyfile = "ti-degenerate-key.pem";
			tifsstub;
		};
		tifsstub_gp: tifsstub-gp.bin {
			filename = "ti-sysfw/ti-fs-stub-firmware-am62x-gp.bin";
			type = "blob-ext";
			optional;
		};
	};


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

		fit {

			images {
				atf {
					ti-secure {
						auth-in-place = <0xa02>;

						firewall-1-0 {
							insert-template = <&firewall_bg_3>;
							id = <1>;
							region = <0>;
						};

						firewall-1-1 {
							insert-template = <&firewall_armv8_atf_fg>;
							id = <1>;
							region = <1>;
						};
					};
				};

				tee {
					ti-secure {
						auth-in-place = <0xa02>;

						firewall-1-2 {
							insert-template = <&firewall_armv8_optee_fg>;
							id = <1>;
							region = <2>;
						};
					};
				};

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

				tifsstub-fs {
					description = "TIFSSTUB";
					type = "firmware";
					arch = "arm32";
					compression = "none";
					os = "tifsstub-fs";
					load = <0x9dc00000>;
					entry = <0x9dc00000>;
					blob-ext {
						filename = "tifsstub.bin_fs";
					};
				};

				tifsstub-gp {
					description = "TIFSSTUB";
					type = "firmware";
					arch = "arm32";
					compression = "none";
					os = "tifsstub-gp";
					load = <0x9dc00000>;
					entry = <0x9dc00000>;
					blob-ext {
						filename = "tifsstub.bin_gp";
					};
				};
				dm {
					ti-secure {
						content = <&dm>;
						keyfile = "custMpk.pem";
					};
					dm: ti-dm {
						filename = "ti-dm/am62xx/ipc_echo_testb_mcu1_0_release_strip.xer5f";
					};
				};

				fdt-0 {
					description = "k3-am625-phyboard-lyra-rdk";
					type = "flat_dt";
					arch = "arm";
					compression = "none";
					ti-secure {
						content = <&spl_am625_phyboard_lyra_dtb>;
						keyfile = "custMpk.pem";
					};
					spl_am625_phyboard_lyra_dtb: blob-ext {
						filename = SPL_AM625_PHYBOARD_LYRA_DTB;
					};
				};
			};

			configurations {
				default = "conf-hs-fs";

				conf-hs-fs {
					description = "k3-am625-phyboard-lyra-rdk-hs-fs";
					firmware = "atf";
					loadables = "tee", "tifsstub-fs", "dm", "spl";
					fdt = "fdt-0";
				};
				conf-hs-se {
					description = "k3-am625-phyboard-lyra-rdk-hs-se";
					firmware = "atf";
					loadables = "tee", "tifsstub-hs", "dm", "spl";
					fdt = "fdt-0";
				};
				conf-gp {
					description = "k3-am625-phyboard-lyra-rdk-gp";
					firmware = "atf";
					loadables = "tee", "tifsstub-gp", "dm", "spl";
					fdt = "fdt-0";
				};
			};
		};
	};
};

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

		fit {
			images {
				uboot {
					description = "U-Boot for phyCORE-AM62x";
				};

				som-no-rtc {
					description = "k3-am6xx-phycore-disable-rtc";
					type = "flat_dt";
					compression = "none";
					load = <0x8F000000>;
					arch = "arm";
					ti-secure {
						content = <&am6xx_phycore_disable_rtc_dtbo>;
						keyfile = "custMpk.pem";
					};
					am6xx_phycore_disable_rtc_dtbo: blob-ext {
						filename = "dts/upstream/src/arm64/ti/k3-am6xx-phycore-disable-rtc.dtbo";
					};
				};

				som-no-spi {
					description = "k3-am6xx-phycore-disable-spi-nor";
					type = "flat_dt";
					compression = "none";
					load = <0x8F001000>;
					arch = "arm";
					ti-secure {
						content = <&am6xx_phycore_disable_spi_not_dtbo>;
						keyfile = "custMpk.pem";
					};
					am6xx_phycore_disable_spi_not_dtbo: blob-ext {
						filename = "dts/upstream/src/arm64/ti/k3-am6xx-phycore-disable-spi-nor.dtbo";
					};
				};

				som-no-eth {
					description = "k3-am6xx-phycore-disable-eth-phy";
					type = "flat_dt";
					compression = "none";
					load = <0x8F002000>;
					arch = "arm";
					ti-secure {
						content = <&am6xx_phycore_disable_eth_phy_dtbo>;
						keyfile = "custMpk.pem";
					};
					am6xx_phycore_disable_eth_phy_dtbo: blob-ext {
						filename = "dts/upstream/src/arm64/ti/k3-am6xx-phycore-disable-eth-phy.dtbo";
					};
				};

				som-qspi {
					description = "k3-am6xx-phycore-qspi-nor";
					type = "flat_dt";
					compression = "none";
					load = <0x8F003000>;
					arch = "arm";
					ti-secure {
						content = <&am6xx_phycore_disable_qspi_nor_dtbo>;
						keyfile = "custMpk.pem";
					};
					am6xx_phycore_disable_qspi_nor_dtbo: blob-ext {
						filename = "dts/upstream/src/arm64/ti/k3-am6xx-phycore-qspi-nor.dtbo";
					};
				};

				fdt-0 {
					description = "k3-am625-phyboard-lyra-rdk";
					type = "flat_dt";
					arch = "arm";
					compression = "none";
					ti-secure {
						content = <&am625_phyboard_lyra_dtb>;
						keyfile = "custMpk.pem";
					};
					am625_phyboard_lyra_dtb: blob-ext {
						filename = AM625_PHYBOARD_LYRA_DTB;
					};
					hash {
						algo = "crc32";
					};
				};
			};

			configurations {
				default = "conf-0";

				conf-0 {
					description = "k3-am625-phyboard-lyra-rdk";
					firmware = "uboot";
					loadables = "uboot",
						    "som-no-rtc",
						    "som-no-spi",
						    "som-no-eth",
						    "som-qspi";
					fdt = "fdt-0";
				};
			};
		};
	};
};

&binman {
	tifsstub-hs {
		filename = "tifsstub.bin_hs";
		ti-secure-rom {
			content = <&tifsstub_hs_cert>;
			core = "secure";
			load = <0x40000>;
			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-am62x-hs-cert.bin";
			type = "blob-ext";
			optional;
		};
		tifsstub_hs_enc: tifsstub-hs-enc.bin {
			filename = "ti-sysfw/ti-fs-stub-firmware-am62x-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-am62x-hs-cert.bin";
			type = "blob-ext";
			optional;
		};
		tifsstub_fs_enc: tifsstub-fs-enc.bin {
			filename = "ti-sysfw/ti-fs-stub-firmware-am62x-hs-enc.bin";
			type = "blob-ext";
			optional;
		};

	};

	tifsstub-gp {
		filename = "tifsstub.bin_gp";
		ti-secure-rom {
			content = <&tifsstub_gp>;
			core = "secure";
			load = <0x60000>;
			sw-rev = <CONFIG_K3_X509_SWRV>;
			keyfile = "ti-degenerate-key.pem";
			tifsstub;
		};
		tifsstub_gp: tifsstub-gp.bin {
			filename = "ti-sysfw/ti-fs-stub-firmware-am62x-gp.bin";
			type = "blob-ext";
			optional;
		};
	};

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

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

				tifsstub-fs {
					description = "TIFSSTUB";
					type = "firmware";
					arch = "arm32";
					compression = "none";
					os = "tifsstub-fs";
					load = <0x9dc00000>;
					entry = <0x9dc00000>;
					blob-ext {
						filename = "tifsstub.bin_fs";
					};
				};

				tifsstub-gp {
					description = "TIFSSTUB";
					type = "firmware";
					arch = "arm32";
					compression = "none";
					os = "tifsstub-gp";
					load = <0x9dc00000>;
					entry = <0x9dc00000>;
					blob-ext {
						filename = "tifsstub.bin_gp";
					};
				};

				dm {
					ti-dm {
						filename = "ti-dm/am62xx/ipc_echo_testb_mcu1_0_release_strip.xer5f";
					};
				};

				fdt-0 {
					description = "k3-am625-phyboard-lyra-rdk";
					type = "flat_dt";
					arch = "arm";
					compression = "none";
					spl_am625_phyboard_lyra_dtb_unsigned: blob {
						filename = SPL_AM625_PHYBOARD_LYRA_DTB;
					};
				};
			};

			configurations {
				default = "conf-hs-fs";

				conf-hs-fs {
					description = "k3-am625-phyboard-lyra-rdk-hs-fs";
					firmware = "atf";
					loadables = "tee", "tifsstub-fs", "dm", "spl";
					fdt = "fdt-0";
				};
				conf-hs-se {
					description = "k3-am625-phyboard-lyra-rdk-hs-se";
					firmware = "atf";
					loadables = "tee", "tifsstub-hs", "dm", "spl";
					fdt = "fdt-0";
				};
				conf-gp {
					description = "k3-am625-phyboard-lyra-rdk-gp";
					firmware = "atf";
					loadables = "tee", "tifsstub-gp", "dm", "spl";
					fdt = "fdt-0";
				};
			};
		};
	};
};

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

		fit {
			images {
				uboot {
					description = "U-Boot for phyCORE-AM62x";
				};

				fdt-0 {
					description = "k3-am625-phyboard-lyra-rdk";
					type = "flat_dt";
					arch = "arm";
					compression = "none";
					am625_phyboard_lyra_dtb_unsigned: blob {
						filename = AM625_PHYBOARD_LYRA_DTB;
					};
					hash {
						algo = "crc32";
					};
				};
			};

			configurations {
				default = "conf-0";

				conf-0 {
					description = "k3-am625-phyboard-lyra-rdk";
					firmware = "uboot";
					loadables = "uboot";
					fdt = "fdt-0";
				};
			};
		};
	};
};

#include "k3-binman-capsule.dtsi"

&capsule_tispl {
	efi-capsule {
		/*
		 * The GUID is generated dynamically by taking a namespace UUID and hashing
		 * it with the board compatible and fw_image name:
		 * mkeficapsule guidgen k3-am625-phyboard-lyra-rdk.dtb PHYCORE_AM62X_SPL
		 */
		image-guid = "09841C3F-F177-5D57-B1F6-754D92879205";
	};
};

&capsule_uboot {
	efi-capsule {
		/*
		 * The GUID is generated dynamically by taking a namespace UUID and hashing
		 * it with the board compatible and fw_image name:
		 * mkeficapsule guidgen k3-am625-phyboard-lyra-rdk.dtb PHYCORE_AM62X_UBOOT
		 */
		image-guid = "D11A9016-515E-503A-8872-3FF65384D0C4";
	};
};

#endif /* CONFIG_TARGET_PHYCORE_AM62X_A53 */
