lava_helper: Add multiple image support to jinja2 binary templating

Signed-off-by: Gergely Korcsák <gergely.korcsak@arm.com>
Change-Id: I1cf213f50dd8e6aa566ee985637ed0e4c2c9a931
diff --git a/lava_helper/jinja2_templates/b_u585i_iot02a.jinja2 b/lava_helper/jinja2_templates/b_u585i_iot02a.jinja2
index c1aa3c4..e51b2aa 100644
--- a/lava_helper/jinja2_templates/b_u585i_iot02a.jinja2
+++ b/lava_helper/jinja2_templates/b_u585i_iot02a.jinja2
@@ -1,5 +1,5 @@
 {#------------------------------------------------------------------------------
-# Copyright (c) 2020-2023, Arm Limited and Contributors. All rights reserved.
+# Copyright (c) 2020-2024, Arm Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -12,8 +12,10 @@
           minutes: 12
         to: flasher
         images:
-          tarball:
-            url: {{ tarball_url }}
+{% for name, img in binaries.items() %}
+          {{ name }}:
+            url: {{ data_url_prefix }}/{{ img.data }}
+{% endfor %}
 
     - boot:
         method: minimal
diff --git a/lava_helper/jinja2_templates/fvp_corstone1000.jinja2 b/lava_helper/jinja2_templates/fvp_corstone1000.jinja2
index ec2c841..d70c65f 100644
--- a/lava_helper/jinja2_templates/fvp_corstone1000.jinja2
+++ b/lava_helper/jinja2_templates/fvp_corstone1000.jinja2
@@ -1,5 +1,5 @@
 {#------------------------------------------------------------------------------
-# Copyright (c) 2018-2022, Arm Limited and Contributors. All rights reserved.
+# Copyright (c) 2018-2024, Arm Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -20,10 +20,14 @@
     namespace: docker
     to: fvp
     images:
-      app:
-        url: {{ application_url }}
-      data:
-        url: {{ data_url }}
+{% for name, img in binaries.items() %}
+      {{ name }}:
+    {% if img.application is defined %}
+        url: {{ data_url_prefix }}/{{ img.application }}
+    {% else %}
+        url: {{ data_url_prefix }}/{{ img.data }}
+    {% endif %}
+{% endfor %}
 - boot:
     failure_retry: 3
     namespace: docker
@@ -40,14 +44,19 @@
     license_variable: '{{ license_variable }}'
     use_telnet: True
     arguments:
-    -  "-C se.trustedBootROMloader.fname=\"{APP}\""
+{% for name, img in binaries.items() %}
+    {% if img.application is defined %}
+    -  "-C se.trustedBootROMloader.fname=\"{{ '{' ~ name.upper() ~ '}' }}\""
+    {% else %}
+    -  "--data board.flash0={{ '{' ~ name.upper() ~ '}' }}@{{ img.offset }}"
+    {% endif %}
+{% endfor %}
     -  "-C board.flashloader0.fname=\"none\""
     -  "-C board.xnvm_size=64"
     -  "-C se.trustedSRAM_config=6"
     -  "-C se.BootROM_config=\"3\""
     -  "-C board.smsc_91c111.enabled=0"
     -  "-C board.hostbridge.userNetworking=true"
-    -  "--data board.flash0={DATA}@{{ data_bin_offset }}"
     -  "-C diagnostics=4"
     -  "-C disable_visualisation=true"
     -  "-C board.se_flash_size=8192"
diff --git a/lava_helper/jinja2_templates/fvp_mps2.jinja2 b/lava_helper/jinja2_templates/fvp_mps2.jinja2
index d650670..e203f40 100644
--- a/lava_helper/jinja2_templates/fvp_mps2.jinja2
+++ b/lava_helper/jinja2_templates/fvp_mps2.jinja2
@@ -1,5 +1,5 @@
 {#------------------------------------------------------------------------------
-# Copyright (c) 2018-2022, Arm Limited and Contributors. All rights reserved.
+# Copyright (c) 2018-2024, Arm Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -20,10 +20,14 @@
     namespace: docker
     to: fvp
     images:
-      app:
-        url: {{ application_url }}
-      data:
-        url: {{ data_url }}
+{% for name, img in binaries.items() %}
+      {{ name }}:
+    {% if img.application is defined %}
+        url: {{ data_url_prefix }}/{{ img.application }}
+    {% else %}
+        url: {{ data_url_prefix }}/{{ img.data }}
+    {% endif %}
+{% endfor %}
 {%- if enable_code_coverage %}
       cc:
         url: {{ coverage_trace_plugin }}
@@ -57,8 +61,13 @@
     -  "/opt/model/FVP_ARM_Std_Library/FVP_MPS2/FVP_MPS2_AEMv8M"
 {%- endif %}
     -  "--simlimit 900"
-    -  "--application cpu0={APP}"
-    -  "--data cpu0={DATA}@{{ data_bin_offset }}"
+{% for name, img in binaries.items() %}
+    {% if img.application is defined %}
+    -  "--application cpu0={{ '{' ~ name.upper() ~ '}' }}"
+    {% else %}
+    -  "--data cpu0={{ '{' ~ name.upper() ~ '}' }}@{{ img.offset }}"
+    {% endif %}
+{% endfor %}
     -  "--parameter fvp_mps2.platform_type=2"
     -  "--parameter cpu0.baseline={{ cpu0_baseline }}"
     -  "--parameter cpu0.INITVTOR_S={{ cpu0_initvtor_s }}"
diff --git a/lava_helper/jinja2_templates/fvp_mps3.jinja2 b/lava_helper/jinja2_templates/fvp_mps3.jinja2
index 1b6d95e..5e7c0cf 100644
--- a/lava_helper/jinja2_templates/fvp_mps3.jinja2
+++ b/lava_helper/jinja2_templates/fvp_mps3.jinja2
@@ -1,5 +1,5 @@
 {#------------------------------------------------------------------------------
-# Copyright (c) 2018-2023, Arm Limited and Contributors. All rights reserved.
+# Copyright (c) 2018-2024, Arm Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -20,10 +20,14 @@
     namespace: docker
     to: fvp
     images:
-      app:
-        url: {{ application_url }}
-      data:
-        url: {{ data_url }}
+{% for name, img in binaries.items() %}
+      {{ name }}:
+    {% if img.application is defined %}
+        url: {{ data_url_prefix }}/{{ img.application }}
+    {% else %}
+        url: {{ data_url_prefix }}/{{ img.data }}
+    {% endif %}
+{% endfor %}
 {%- if enable_code_coverage %}
       cc:
         url: {{ coverage_trace_plugin }}
@@ -45,8 +49,13 @@
     use_telnet: False
     arguments:
     -  "--simlimit 900"
-    -  "--application cpu0={APP}"
-    -  "--data cpu0={DATA}@{{ data_bin_offset }}"
+{% for name, img in binaries.items() %}
+    {% if img.application is defined %}
+    -  "--application cpu0={{ '{' ~ name.upper() ~ '}' }}"
+    {% else %}
+    -  "--data cpu0={{ '{' ~ name.upper() ~ '}' }}@{{ img.offset }}"
+    {% endif %}
+{% endfor %}
     -  "--parameter mps3_board.platform_type=1"
     -  "--parameter cpu0.INITSVTOR={{ cpu0_initvtor_s }}"
     -  "--parameter cpu0.semihosting-enable=0"
diff --git a/lava_helper/jinja2_templates/lpcxpresso55s69.jinja2 b/lava_helper/jinja2_templates/lpcxpresso55s69.jinja2
index f95c437..e51b2aa 100644
--- a/lava_helper/jinja2_templates/lpcxpresso55s69.jinja2
+++ b/lava_helper/jinja2_templates/lpcxpresso55s69.jinja2
@@ -1,5 +1,5 @@
 {#------------------------------------------------------------------------------
-# Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved.
+# Copyright (c) 2020-2024, Arm Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -12,8 +12,10 @@
           minutes: 12
         to: flasher
         images:
-          tarball:
-            url: {{ tarball_url }}
+{% for name, img in binaries.items() %}
+          {{ name }}:
+            url: {{ data_url_prefix }}/{{ img.data }}
+{% endfor %}
 
     - boot:
         method: minimal
diff --git a/lava_helper/jinja2_templates/mps2.jinja2 b/lava_helper/jinja2_templates/mps2.jinja2
index 2df0641..bc5f4df 100644
--- a/lava_helper/jinja2_templates/mps2.jinja2
+++ b/lava_helper/jinja2_templates/mps2.jinja2
@@ -1,5 +1,5 @@
 {#------------------------------------------------------------------------------
-# Copyright (c) 2018-2022, Arm Limited and Contributors. All rights reserved.
+# Copyright (c) 2018-2024, Arm Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -21,10 +21,10 @@
       recovery_image:
         url: {{ recovery_image_url }}
         compression: gz
-      test_binary_1:
-        url: {{ firmware_url }}
-      test_binary_2:
-        url: {{ bootloader_url }}
+{% for name, img in binaries.items() %}
+      {{ name }}:
+        url: {{ data_url_prefix }}/{{ img.data }}
+{% endfor %}
     namespace: target
 
 - boot:
diff --git a/lava_helper/jinja2_templates/musca_b1.jinja2 b/lava_helper/jinja2_templates/musca_b1.jinja2
index 7bc2d88..c1396f9 100644
--- a/lava_helper/jinja2_templates/musca_b1.jinja2
+++ b/lava_helper/jinja2_templates/musca_b1.jinja2
@@ -1,5 +1,5 @@
 {#------------------------------------------------------------------------------
-# Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved.
+# Copyright (c) 2020-2024, Arm Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -12,8 +12,10 @@
           minutes: 12
         to: musca
         images:
-          test_binary:
-            url: {{ firmware_url }}
+{% for name, img in binaries.items() %}
+          {{ name }}:
+            url: {{ data_url_prefix }}/{{ img.data }}
+{% endfor %}
 
     - boot:
         method: musca
diff --git a/lava_helper/jinja2_templates/psoc64.jinja2 b/lava_helper/jinja2_templates/psoc64.jinja2
index cc40483..88031ec 100644
--- a/lava_helper/jinja2_templates/psoc64.jinja2
+++ b/lava_helper/jinja2_templates/psoc64.jinja2
@@ -1,5 +1,5 @@
 {#------------------------------------------------------------------------------
-# Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved.
+# Copyright (c) 2020-2024, Arm Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -12,10 +12,10 @@
           minutes: 12
         to: flasher
         images:
-          spe:
-            url: {{ spe_url }}
-          nspe:
-            url: {{ nspe_url }}
+{% for name, img in binaries.items() %}
+          {{ name }}:
+            url: {{ data_url_prefix }}/{{ img.data }}
+{% endfor %}
 
     - boot:
         method: minimal
diff --git a/lava_helper/jinja2_templates/qemu_mps2_bl2.jinja2 b/lava_helper/jinja2_templates/qemu_mps2_bl2.jinja2
index 2a6da2d..84f32fd 100644
--- a/lava_helper/jinja2_templates/qemu_mps2_bl2.jinja2
+++ b/lava_helper/jinja2_templates/qemu_mps2_bl2.jinja2
@@ -1,5 +1,5 @@
 {#------------------------------------------------------------------------------
-# Copyright (c) 2019-2022, Arm Limited and Contributors. All rights reserved.
+# Copyright (c) 2019-2024, Arm Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -7,8 +7,11 @@
 actions:
 - deploy:
     images:
-      mcuboot: {image_arg: '-device loader,file={mcuboot},addr=0x10000000', url: '{{ bootloader_url }}'}
-      tfm: {image_arg: '-device loader,file={tfm},addr=0x10080000', url: '{{ firmware_url }}'}
+{% for name, img in binaries.items() %}
+      {{ name }}:
+        image_arg: "{{ '-device loader,file={' ~ name ~ '},addr=' ~ img.offset }}"
+        url: {{ data_url_prefix }}/{{ img.data }}
+{% endfor %}
     to: tmpfs
 - boot:
     docker: {binary: /usr/bin/qemu-system-arm, image: 'trustedfirmware/ci-amd64-tf-m-qemu-debian:bullseye'}
diff --git a/lava_helper/jinja2_templates/stm32h573i_dk.jinja2 b/lava_helper/jinja2_templates/stm32h573i_dk.jinja2
index c1aa3c4..e51b2aa 100644
--- a/lava_helper/jinja2_templates/stm32h573i_dk.jinja2
+++ b/lava_helper/jinja2_templates/stm32h573i_dk.jinja2
@@ -1,5 +1,5 @@
 {#------------------------------------------------------------------------------
-# Copyright (c) 2020-2023, Arm Limited and Contributors. All rights reserved.
+# Copyright (c) 2020-2024, Arm Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -12,8 +12,10 @@
           minutes: 12
         to: flasher
         images:
-          tarball:
-            url: {{ tarball_url }}
+{% for name, img in binaries.items() %}
+          {{ name }}:
+            url: {{ data_url_prefix }}/{{ img.data }}
+{% endfor %}
 
     - boot:
         method: minimal
diff --git a/lava_helper/jinja2_templates/stm32l562e_dk.jinja2 b/lava_helper/jinja2_templates/stm32l562e_dk.jinja2
index 8c00dd7..8b9426d 100644
--- a/lava_helper/jinja2_templates/stm32l562e_dk.jinja2
+++ b/lava_helper/jinja2_templates/stm32l562e_dk.jinja2
@@ -1,5 +1,5 @@
 {#------------------------------------------------------------------------------
-# Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved.
+# Copyright (c) 2020-2024, Arm Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -12,8 +12,10 @@
           minutes: 12
         to: flasher
         images:
-          tarball:
-            url: {{ tarball_url }}
+{% for name, img in binaries.items() %}
+          {{ name }}:
+            url: {{ data_url_prefix }}/{{ img.data }}
+{% endfor %}
 
     - boot:
         method: musca
diff --git a/lava_helper/lava_create_jobs.py b/lava_helper/lava_create_jobs.py
index 3c0e3dd..3bd7b39 100755
--- a/lava_helper/lava_create_jobs.py
+++ b/lava_helper/lava_create_jobs.py
@@ -4,7 +4,7 @@
 
 __copyright__ = """
 /*
- * Copyright (c) 2020-2022, Arm Limited. All rights reserved.
+ * Copyright (c) 2020-2024, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  *
@@ -77,22 +77,16 @@
             "monitors": config['monitors'].get(monitor_name, []),
             "platform": platform,
             "recovery_image_url": recovery_image_url,
-            "data_bin_offset": config.get('data_bin_offset', ''),
             "docker_prefix": vars(user_args).get('docker_prefix', ''),
             "license_variable": vars(user_args).get('license_variable', ''),
             "enable_code_coverage": user_args.enable_code_coverage == "TRUE",
             "coverage_trace_plugin": coverage_trace_plugin,
-            "build_job_url": os.getenv("BUILD_URL"),
             "cpu0_baseline": config.get("cpu0_baseline", 0),
             "cpu0_initvtor_s": config.get("cpu0_initvtor_s", "0x10000000"),
             "psa_api_suite": os.getenv("TEST_PSA_API") if os.getenv("TEST_PSA_API") == "IPC" else "",
+            "binaries": config.get('binaries', []),
+            "data_url_prefix": "{}/artifact/ci_build".format(os.getenv("BUILD_URL"))
         }
-        for binary_type, binary_name in config["binaries"].items():
-            params.update(
-                {
-                    "{}_url".format(binary_type): "{}/artifact/ci_build/{}".format(params["build_job_url"], binary_name)
-                }
-            )
 
         if len(params["monitors"]) == 0:
             break
diff --git a/lava_helper/lava_helper_configs.py b/lava_helper/lava_helper_configs.py
index fe02a98..3bc6ab3 100644
--- a/lava_helper/lava_helper_configs.py
+++ b/lava_helper/lava_helper_configs.py
@@ -102,8 +102,14 @@
     "recovery_store_url": "https://ci.trustedfirmware.org/userContent/",
     "platforms": {"arm/mps2/an521": "mps2_sse200_an512_new.tar.gz"},
     "binaries": {
-        "firmware": "nspe/tfm_s_ns_signed.bin",
-        "bootloader": "spe/bin/bl2.bin"
+        # Run script references to test_.*/.*.bin
+        # These files will be saved under folders: test_firmware and test_bootloader
+        "test_firmware": {
+            "data": "nspe/tfm_s_ns_signed.bin"
+        },
+        "test_bootloader": {
+            "data": "spe/bin/bl2.bin"
+        }
     },
     "monitors": {
         'no_reg_tests': no_reg_tests_monitors,
@@ -126,10 +132,14 @@
     "monitor_timeout": 15,
     "poweroff_timeout": 1,
     "platforms": {"arm/mps3/corstone300/fvp": ""},
-    "data_bin_offset": "0x38000000",
     "binaries": {
-        "application": "spe/bin/bl2.axf",
-        "data": "nspe/tfm_s_ns_signed.bin"
+        "bl2": {
+            "application": "spe/bin/bl2.axf"
+        },
+        "tfm_s_ns_img": {
+            "data": "nspe/tfm_s_ns_signed.bin",
+            "offset": "0x38000000",
+        }
     },
     "monitors": {
         'no_reg_tests': no_reg_tests_monitors,
@@ -147,10 +157,14 @@
     "monitor_timeout": 15,
     "poweroff_timeout": 1,
     "platforms": {"arm/corstone1000": ""},
-    "data_bin_offset": "0x68000000",
     "binaries": {
-        "application": "spe/bin/bl1.bin",
-        "data": "spe/bin/cs1000.bin"
+        "bl1": {
+            "application": "spe/bin/bl1.bin"
+        },
+        "tfm_s_ns_img": {
+            "data": "spe/bin/cs1000.bin",
+            "offset": "0x68000000",
+        }
     },
     "monitors": {
         'reg_tests': reg_tests_monitors if "FVP" in os.getenv('EXTRA_PARAMS') else [],
@@ -169,10 +183,14 @@
     "monitor_timeout": 15,
     "poweroff_timeout": 1,
     "platforms": {"arm/mps2/an521": ""},
-    "data_bin_offset": "0x10080000",
     "binaries": {
-        "application": "spe/bin/bl2.axf",
-        "data": "nspe/tfm_s_ns_signed.bin"
+        "bl2": {
+            "application": "spe/bin/bl2.axf"
+        },
+        "tfm_s_ns_img": {
+            "data": "nspe/tfm_s_ns_signed.bin",
+            "offset": "0x10080000",
+        }
     },
     "monitors": {
         'no_reg_tests': no_reg_tests_monitors,
@@ -194,11 +212,15 @@
     "monitor_timeout": 15,
     "poweroff_timeout": 1,
     "platforms": {"arm/mps2/an519": ""},
-    "data_bin_offset": "0x10080000",
     "cpu0_baseline": 1,
     "binaries": {
-        "application": "spe/bin/bl2.axf",
-        "data": "nspe/tfm_s_ns_signed.bin"
+        "bl2": {
+            "application": "spe/bin/bl2.axf"
+        },
+        "tfm_s_ns_img": {
+            "data": "nspe/tfm_s_ns_signed.bin",
+            "offset": "0x10080000",
+        }
     },
     "monitors": {
         'no_reg_tests': no_reg_tests_monitors,
@@ -239,8 +261,14 @@
     "poweroff_timeout": 1,
     "platforms": {"arm/mps2/an521": ""},
     "binaries": {
-        "firmware": "nspe/tfm_s_ns_signed.bin",
-        "bootloader": "spe/bin/bl2.bin"
+        "mcuboot": {
+            "data": "spe/bin/bl2.bin",
+            "offset": "0x10000000"
+        },
+        "tfm": {
+            "data": "nspe/tfm_s_ns_signed.bin",
+            "offset": "0x10080000"
+        }
     },
     "monitors": {
         # FPU test on AN521 qemu not supported yet
@@ -262,7 +290,9 @@
     "poweroff_timeout": 5,
     "platforms": {"arm/musca_b1": ""},
     "binaries": {
-        "firmware": "spe/bin/tfm.hex",
+        "test_binary": {
+            "data": "spe/bin/tfm.hex"   # firmware
+        }
     },
     "monitors": {
         'no_reg_tests': no_reg_tests_monitors,
@@ -281,7 +311,9 @@
     "poweroff_timeout": 5,
     "platforms": {"stm/stm32l562e_dk": ""},
     "binaries": {
-        "tarball": "spe/api_ns/bin/stm32l562e-dk-tfm.tar.bz2",
+        "tarball": {
+            "data": "spe/api_ns/bin/stm32l562e-dk-tfm.tar.bz2"
+        }
     },
     "monitors": {
         'reg_tests': reg_tests_monitors,
@@ -299,7 +331,9 @@
     "poweroff_timeout": 2,
     "platforms": {"stm/b_u585i_iot02a": ""},
     "binaries": {
-        "tarball": "spe/api_ns/bin/b_u585i_iot02a-tfm.tar.bz2",
+        "tarball": {
+            "data": "spe/api_ns/bin/b_u585i_iot02a-tfm.tar.bz2"
+        }
     },
     "monitors": {
         'reg_tests': reg_tests_monitors,
@@ -317,7 +351,9 @@
     "poweroff_timeout": 2,
     "platforms": {"stm/stm32h573i_dk": ""},
     "binaries": {
-        "tarball": "spe/api_ns/bin/stm32h573i_dk-tfm.tar.bz2",
+        "tarball": {
+            "data": "spe/api_ns/bin/stm32h573i_dk-tfm.tar.bz2"
+        }
     },
     "monitors": {
         'reg_tests': reg_tests_monitors,
@@ -335,7 +371,9 @@
     "poweroff_timeout": 5,
     "platforms": {"nxp/lpcxpresso55s69": ""},
     "binaries": {
-        "tarball": "nspe/bin/lpcxpresso55s69-tfm.tar.bz2",
+        "tarball": {
+            "data": "nspe/bin/lpcxpresso55s69-tfm.tar.bz2"
+        }
     },
     "monitors": {
         'no_reg_tests': no_reg_tests_monitors,
@@ -354,8 +392,12 @@
     "poweroff_timeout": 5,
     "platforms": {"cypress/psoc64": ""},
     "binaries": {
-        "spe": "spe/bin/tfm_s_signed.hex",
-        "nspe": "nspe/tfm_ns_signed.hex",
+        "spe": {
+            "data": "spe/bin/tfm_s_signed.hex"
+        },
+        "nspe": {
+            "data": "nspe/tfm_ns_signed.hex"
+        }
     },
     "monitors": {
         'reg_tests': reg_tests_monitors,