loosper-arm: sync jobs to upstream and add new ones

Change-Id: I1ee31c54bcb1838ec559903fe29e77aeacd8d935
Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
diff --git a/loosper-arm-tf-a-builder.yaml b/loosper-arm-tf-a-builder.yaml
index 1c850c3..5ecb3bb 100644
--- a/loosper-arm-tf-a-builder.yaml
+++ b/loosper-arm-tf-a-builder.yaml
@@ -8,109 +8,139 @@
     description: |
       Trusted Firmware A (TF-A) builder
     properties:
-        - build-discarder:
-            days-to-keep: 15
-        - authorization:
-            !include: loosper-arm-authorization.yaml.inc
+      - build-discarder:
+          days-to-keep: 15
+          artifact-num-to-keep: 40000
     parameters:
-        - string:
-            name: import_cc
-        - string:
-            name: TEST_CONFIG
-            description: |
-              Original test configuration.
-        - string:
-            name: TEST_DESC
-            description: |
-              Expanded and normalized test configuration, aka "test description"
-        - string:
-            name: TF_GERRIT_PROJECT
-            default: 'TF-A/trusted-firmware-a'
-        - string:
-            name: TF_GERRIT_BRANCH
-            default: 'refs/heads/master'
-        - string:
-            name: TF_GERRIT_REFSPEC
-            default: '+refs/heads/master:refs/remotes/origin/master'
-        - string:
-            name: TFTF_GERRIT_PROJECT
-            default: 'TF-A/tf-a-tests'
-        - string:
-            name: TFTF_GERRIT_BRANCH
-            default: 'refs/heads/master'
-        - string:
-            name: TFTF_GERRIT_REFSPEC
-            default: '+refs/heads/master:refs/remotes/origin/master'
-        - string:
-            name: DOCKER_REGISTRY
-            default: '987685672616.dkr.ecr.us-east-1.amazonaws.com'
-        - string:
-            name: JUNO_ROOTFS_URL
-            default: 'http://releases.linaro.org/openembedded/aarch64/17.01/linaro-image-minimal-genericarmv8-20170127-888.rootfs.tar.gz'
-        - string:
-            name: MBEDTLS_URL
-            default: 'https://github.com/Mbed-TLS/mbedtls/archive/mbedtls-2.28.1.tar.gz'
-        - string:
-            name: GERRIT_PATCHSET_NUMBER
-            default: ''
-        - string:
-            name: GERRIT_CHANGE_NUMBER
-            default: ''
-        - string:
-            name: GERRIT_HOST
-            default: 'review.trustedfirmware.org'
-        - string:
-            name: QA_SERVER_TEAM
-            default: 'tf'
-        - string:
-            name: QA_SERVER_PROJECT
-            default: 'tf-a'
-        - string:
-            name: QA_SERVER_VERSION
-            default: ${BUILD_NUMBER}
-        - string:
-            name: QA_SERVER
-            default: 'https://qa-reports.linaro.org'
-        - string:
-            name: QA_TOOLS_REPO
-            default: 'https://git.gitlab.arm.com/tooling/qa-tools.git'
-        - string:
-            name: SHARE_FOLDER
-            default: '/srv/shared/staging/${JOB_NAME}/${BUILD_NUMBER}'
-            description: 'Folder containing shared repositories for downstream pipeline jobs'
+      - string:
+          name: import_cc
+      - string:
+          name: TEST_CONFIG
+          description: |
+            Original test configuration.
+      - string:
+          name: TEST_DESC
+          description: |
+            Expanded and normalized test configuration, aka "test description"
+      - string:
+          name: TF_GERRIT_PROJECT
+          default: TF-A/trusted-firmware-a
+      - string:
+          name: TF_GERRIT_BRANCH
+          default: refs/heads/master
+      - string:
+          name: TF_GERRIT_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+      - string:
+          name: TFTF_GERRIT_PROJECT
+          default: TF-A/tf-a-tests
+      - string:
+          name: TFTF_GERRIT_BRANCH
+          default: refs/heads/master
+      - string:
+          name: TFTF_GERRIT_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+      - string:
+          name: CI_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+      - string:
+          name: JOBS_REFSPEC
+          default: refs/heads/master
+          description: |
+            tf-a-job-configs refspec to use. The master branch is used by default.
+      - string:
+          name: DOCKER_REGISTRY
+          default: ${PRIVATE_CONTAINER_REGISTRY}
+          description: PRIVATE_CONTAINER_REGISTRY is a system-wide environment variable
+      - string:
+          name: JUNO_ROOTFS_URL
+          default: http://releases.linaro.org/openembedded/aarch64/17.01/linaro-image-minimal-genericarmv8-20170127-888.rootfs.tar.gz
+      - string:
+          name: MBEDTLS_URL
+          default: https://github.com/Mbed-TLS/mbedtls/archive/mbedtls-3.6.3.tar.gz
+      - string:
+          name: GERRIT_PATCHSET_NUMBER
+          default: ""
+      - string:
+          name: GERRIT_CHANGE_NUMBER
+          default: ""
+      - string:
+          name: GERRIT_HOST
+          default: review.trustedfirmware.org
+      - string:
+          name: QA_SERVER_TEAM
+          default: tf
+      - string:
+          name: QA_SERVER_PROJECT
+          default: tf-a
+      - string:
+          name: QA_SERVER_VERSION
+          default: ${BUILD_NUMBER}
+      - string:
+          name: QA_SERVER
+          default: https://qa-reports.linaro.org
+      - string:
+          name: QA_TOOLS_REPO
+          default: https://git.gitlab.arm.com/tooling/qa-tools.git
+      - string:
+          name: QA_TOOLS_BRANCH
+          default: master
+      - string:
+          name: LAVA_RETRIES
+          default: 2
+          description: |
+            Number of tries submitting job to LAVA in case it fails (stopgap measure against nondeterministic failures)
+      - string:
+          name: USE_TUXSUITE_FVP
+          default: 1
+          description: |
+            Whether to submit FVP tests via TuxSuite (instead of LAVA)
+      - string:
+          name: SHARE_FOLDER
+          default: /srv/shared/staging/${JOB_NAME}/${BUILD_NUMBER}
+          description: Folder containing shared repositories for downstream pipeline jobs
     wrappers:
-        - timestamps
-        - timeout:
-            timeout: 120
-            fail: true
-        - credentials-binding:
-            - text:
-                credential-id: QA_REPORTS_TOKEN
-                variable: QA_REPORTS_TOKEN
-        - credentials-binding:
-            - text:
-                credential-id: LAVA_USER_TF
-                variable: LAVA_USER
-        - credentials-binding:
-            - text:
-                credential-id: LAVA_TOKEN_TF
-                variable: LAVA_TOKEN
+      - timestamps
+      - timeout:
+          timeout: 120
+          fail: true
+      - credentials-binding:
+          - text:
+              credential-id: QA_REPORTS_TOKEN
+              variable: QA_REPORTS_TOKEN
+      - credentials-binding:
+          - text:
+              credential-id: LAVA_USER_TF
+              variable: LAVA_USER
+      - credentials-binding:
+          - text:
+              credential-id: LAVA_TOKEN_TF
+              variable: LAVA_TOKEN
+      - credentials-binding:
+          - text:
+              credential-id: TUXSUITE_TOKEN
+              variable: TUXSUITE_TOKEN
+      - credentials-binding:
+          - text:
+              credential-id: ARMCLANG_UBL_CODE
+              variable: ARMCLANG_UBL_CODE
     builders:
-        - shell:
-            !include-raw: scripts/clone.sh
-        - shell:
-            !include-raw: tf-a-builder/builders.sh
-        - inject:
-            properties-file: artefacts/env
-        - shell: |
-            ln -s "artefacts/${BIN_MODE:-release}" "artefacts-lava"
-        - conditional-step:
-            condition-kind: file-exists
-            on-evaluation-failure: dont-run
-            condition-filename: artefacts-lava/job.yaml
-            condition-basedir: workspace
-            steps:
-            - shell:  |
+      - shell: |
+          aarch64-none-elf-gcc -v || true
+      - shell: !include-raw: scripts/clone.sh
+      - shell: !include-raw: tf-a-builder/builders.sh
+      - inject:
+          properties-file: artefacts/env
+      - shell: |
+          ln -s "artefacts/${BIN_MODE:-release}" "artefacts-lava"
+          echo ${BIN_MODE:-release} >lava-binmode.txt
+      - conditional-step:
+          condition-kind: file-exists
+          on-evaluation-failure: dont-run
+          condition-filename: artefacts-lava/job.yaml
+          condition-basedir: workspace
+          steps:
+            - shell: |
                 #!/bin/bash
                 set -e
                 DEVICE_TYPE=fvp
@@ -121,78 +151,62 @@
                 LAVA_SERVER=tf.validation.linaro.org
                 EOF
     publishers:
-        - archive:
-            artifacts: artefacts/**, artefacts-lava/**
-            latest-only: false
-            allow-empty: true
-        - conditional-publisher:
+      - archive:
+          artifacts: artefacts/**, lava-binmode.txt
+          latest-only: false
+          allow-empty: true
+          follow-symlinks: true
+      - conditional-publisher:
           - condition-kind: file-exists
             on-evaluation-failure: dont-run
             condition-filename: artefacts-lava/job.yaml
             condition-basedir: workspace
             action:
-                - postbuildscript:
-                    builders:
-                        - role: SLAVE
-                          build-on:
-                              - SUCCESS
-                          build-steps:
-                            - inject:
-                                properties-file: ${WORKSPACE}/lava.param
-                            - shell: |
-                                #!/bin/bash
+              - postbuildscript:
+                  mark-unstable-if-failed: true
+                  builders:
+                    - role: SLAVE
+                      build-on:
+                        - SUCCESS
+                      build-steps:
+                        - inject:
+                            properties-file: ${WORKSPACE}/lava.param
+                        - shell: |
+                            #!/bin/bash -x
 
-                                squad='tf-a-job-configs/tf-a-builder/squad.sh'
-                                # FIXME: Juno and FVP jobs may fail due to non-related users changes,
-                                # so CI needs to resubmit the job, at most three times:
-                                # Juno jobs may fail due to LAVA lab infrastructure issues (see
-                                # https://projects.linaro.org/browse/LSS-2128)
-                                # FVP jobs may hang at some particular TFTF test (see
-                                # https://linaro.atlassian.net/browse/TFC-176)
-                                passed=0
-                                for i in $(seq 1 3); do
-                                    echo "# SQUAD submission iteration #$i"
-                                    if $squad; then
-                                        passed=1
-                                        break
-                                    fi
-                                done
-                                if [ $passed -eq 0 ]; then
-                                    echo "LAVA JOB RESULT: 1"
-                                else
-                                    echo "LAVA JOB RESULT: 0"
-                                fi
-                - postbuildscript:
-                    builders:
-                        - role: SLAVE
-                          build-on:
-                              - SUCCESS
-                          build-steps:
-                            - shell: |
-                                #!/bin/bash -e
-                                echo "=== Starting expect-post tests ==="
-                                ./tf-a-ci-scripts/script/expect-post-runner.sh
-        - conditional-publisher:
+                            tf-a-job-configs/tf-a-builder/submit-test-job.sh
+                            status=$?
+                            tf-a-job-configs/tf-a-builder/lava-log-process.sh
+                            if [ $status -ne 0 ]; then
+                                echo "LAVA JOB RESULT: 1"
+                                exit 1
+                            else
+                                echo "LAVA JOB RESULT: 0"
+                            fi
+              - postbuildscript:
+                  builders:
+                    - role: SLAVE
+                      build-on:
+                        - SUCCESS
+                      build-steps:
+                        - shell: |
+                            #!/bin/bash -e
+                            echo "=== Starting expect-post tests ==="
+                            ./tf-a-ci-scripts/script/expect-post-runner.sh
+      - conditional-publisher:
           - condition-kind: file-exists
             on-evaluation-failure: dont-run
             condition-filename: lava-raw-debug.log
             condition-basedir: workspace
             action:
-                - archive:
-                    artifacts: lava-raw-debug.log
-                    latest-only: false
-                    allow-empty: true
-        - conditional-publisher:
-          - condition-kind: file-exists
-            on-evaluation-failure: dont-run
-            condition-filename: lava.log
-            condition-basedir: workspace
-            action:
-                - archive:
-                    artifacts: lava.log, lava-*.log, feedback.log, config_file.json, covtrace-*.log, trace_report/**
-                    latest-only: false
-                    allow-empty: true
-        - groovy-postbuild:
-            script:
-                !include-raw:
-                  - tf-a-builder/postbuild.groovy
+              - archive:
+                  artifacts: lava-raw-debug.log
+                  latest-only: false
+                  allow-empty: true
+      - archive:
+          artifacts: lava.log, lava-*.log, tux.id, feedback.log, config_file.json, covtrace-*.log, trace_report/**
+          latest-only: false
+          allow-empty: true
+      - groovy-postbuild:
+          script: !include-raw:
+            - tf-a-builder/postbuild.groovy
diff --git a/loosper-arm-tf-a-ci-gateway.yaml b/loosper-arm-tf-a-ci-gateway.yaml
index bc61fa1..5faa3b9 100644
--- a/loosper-arm-tf-a-ci-gateway.yaml
+++ b/loosper-arm-tf-a-ci-gateway.yaml
@@ -8,104 +8,131 @@
     description: |
       Main job entry point for a Trusted Firmware A (TF-A) CI.
     properties:
-    - build-discarder:
-        days-to-keep: 15
-    - throttle:
-        option: project
-        enabled: true
-        max-per-node: 3
-        max-total: 10
-    - authorization:
-        !include: loosper-arm-authorization.yaml.inc
+      - build-discarder:
+          days-to-keep: 15
+      - throttle:
+          option: project
+          enabled: true
+          max-per-node: 3
+          max-total: 10
     wrappers:
-    - credentials-binding:
-      - ssh-user-private-key:
-          credential-id: TFA_CI_BOT_USER_SSH_KEY
-          key-file-variable: CI_BOT_KEY
-          username-variable: CI_BOT_USERNAME
-          passphrase-variable: ''
-    - workspace-cleanup
-    - timeout:
-        timeout: 180
-        fail: true
-    - timestamps
+      - credentials-binding:
+          - ssh-user-private-key:
+              credential-id: TFA_CI_BOT_USER_SSH_KEY
+              key-file-variable: CI_BOT_KEY
+              username-variable: CI_BOT_USERNAME
+              passphrase-variable: ""
+      - workspace-cleanup
+      - timeout:
+          timeout: 240
+          fail: true
+      - timestamps
     parameters:
-    - string:
-        name: TEST_GROUPS
-        default: tf-l2-boot-tests-cortex/fvp-default:fvp-linux-dtb-fip.uboot-cortexa35x4-debug
-        description: |
-          White space separated list of test configs: can be mix of specific
-          test configs (e.g., <code>l1/fvp-default:fvp-linux-default</code>) and
-          group names (e.g., <code>l1 l2</code>).
-    - string:
-        name: TF_GERRIT_REFSPEC
-        default: '+refs/heads/master:refs/remotes/origin/master'
-        description: |
-          trusted-firmware-a refspec to use. The master branch is used by default.
-    - string:
-        name: TFTF_GERRIT_REFSPEC
-        default: '+refs/heads/master:refs/remotes/origin/master'
-        description: |
-          tf-a-tests refspec to use. The master branch is used by default.
-    - string:
-       name: SPM_REFSPEC
-       default: '+refs/heads/master:refs/remotes/origin/master'
-       description: |
-         SPM(Hafnium) refspec to use. The master branch is used by default.
-    - string:
-        name: CI_REFSPEC
-        default: '+refs/heads/master:refs/remotes/origin/master'
-        description: |
-          tf-a-ci-scripts refspec to use. The master branch is used by default.
-    - bool:
-        name: ENABLE_STATIC_CHECK
-        default: false
-    - string:
-            name: SHARE_FOLDER
-            default: '/srv/shared/staging/${JOB_NAME}/${BUILD_NUMBER}'
-            description: 'Folder containing shared repositories for downstream pipeline jobs'
+      - string:
+          name: TEST_GROUPS
+          default: tf-l2-boot-tests-cortex/fvp-default:fvp-linux-dtb-fip.uboot-cortexa35x4-debug
+          description: |
+            White space separated list of test configs: can be mix of specific
+            test configs (e.g., <code>l1/fvp-default:fvp-linux-default</code>) and
+            group names (e.g., <code>l1 l2</code>).
+      - string:
+          name: TF_GERRIT_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+          description: |
+            trusted-firmware-a refspec to use. The master branch is used by default.
+      - string:
+          name: TFTF_GERRIT_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+          description: |
+            tf-a-tests refspec to use. The master branch is used by default.
+      - string:
+          name: TF_M_TESTS_GERRIT_REFSPEC
+          default: +refs/heads/tfa_ci_dep_revision:refs/remotes/origin/tfa_ci_dep_revision
+          description: |
+            tf-m-tests refspec to use. The tfa_ci_dep_revision branch is used by default.
+      - string:
+          name: TF_M_EXTRAS_GERRIT_REFSPEC
+          default: +refs/heads/tfa_ci_dep_revision:refs/remotes/origin/tfa_ci_dep_revision
+          description: |
+            tf-m-extras refspec to use. The tfa_ci_dep_revision branch is used by default.
+      - string:
+          name: SPM_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+          description: |
+            SPM(Hafnium) refspec to use. The master branch is used by default.
+      - string:
+          name: CI_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+          description: |
+            tf-a-ci-scripts refspec to use. The master branch is used by default.
+      - string:
+          name: RMM_REFSPEC
+          default: +refs/heads/main:refs/remotes/origin/main
+          description: |
+            tf-rmm refspec to use. The main branch is used by default.
+      - string:
+          name: JOBS_REFSPEC
+          default: refs/heads/master
+          description: |
+            tf-a-job-configs refspec to use. The master branch is used by default.
+      - bool:
+          name: ENABLE_STATIC_CHECK
+          default: false
+      - string:
+          name: QA_TOOLS_REPO
+          default: https://git.gitlab.arm.com/tooling/qa-tools.git
+      - string:
+          name: QA_TOOLS_BRANCH
+          default: master
+      - string:
+          name: USE_TUXSUITE_FVP
+          default: 1
+          description: |
+            Whether to submit FVP tests via TuxSuite (instead of LAVA)
+      - string:
+          name: SHARE_FOLDER
+          default: /srv/shared/staging/${JOB_NAME}/${BUILD_NUMBER}
+          description: Folder containing shared repositories for downstream pipeline jobs
     builders:
-    - shell:
-        !include-raw: scripts/clone.sh
-    - shell: |
-        #!/bin/bash
-        set -e
-        CI_ROOT=${PWD}/tf-a-ci-scripts
-        export workspace=$PWD
-        export test_groups=$TEST_GROUPS
-        $CI_ROOT/script/gen_test_desc.py
-        cat << EOF > share.param
-        SHARE_FOLDER=${SHARE_FOLDER}
-        EOF
-    - trigger-builds:
-      - project:
-        - loosper-arm-tf-a-builder
-        block: true
-        property-file: share.param
-        current-parameters: true
-        property-file-fail-on-missing: false
-        parameter-factories:
-        - factory: filebuild
-          file-pattern: '*.testprop'
-          no-files-found-action: FAIL
+      - shell: !include-raw: scripts/clone.sh
+      - shell: |
+          #!/bin/bash
+          set -e
+          CI_ROOT=${PWD}/tf-a-ci-scripts
+          export workspace=$PWD
+          export test_groups=$TEST_GROUPS
+          $CI_ROOT/script/gen_test_desc.py
+          cat << EOF > share.param
+          SHARE_FOLDER=${SHARE_FOLDER}
+          EOF
+      - trigger-builds:
+          - project:
+              - tf-a-builder
+            block: true
+            property-file: share.param
+            current-parameters: true
+            property-file-fail-on-missing: false
+            parameter-factories:
+              - factory: filebuild
+                file-pattern: '*.testprop'
+                no-files-found-action: FAIL
     publishers:
-        - postbuildscript:
-            builders:
-                - role: SLAVE
-                  build-on:
-                      - SUCCESS
-                      - FAILURE
-                      - UNSTABLE
-                      - ABORTED
-                      - NOT_BUILT
-                  build-steps:
-                      - shell: |-
-                          #!/bin/bash -e
-                          export CI_ROOT=${PWD}/tf-a-ci-scripts
-                          bash "$CI_ROOT/job/tf-ci-gateway/generate_report.sh"
-        - archive:
-            artifacts: report.json, report.html, merge/outdir/**
-        - groovy-postbuild:
-            script:
-                !include-raw:
-                  - tf-a-ci-gateway/postbuild.groovy
+      - postbuildscript:
+          builders:
+            - role: SLAVE
+              build-on:
+                - SUCCESS
+                - FAILURE
+                - UNSTABLE
+                - ABORTED
+                - NOT_BUILT
+              build-steps:
+                - shell: |-
+                    #!/bin/bash -e
+                    export CI_ROOT=${PWD}/tf-a-ci-scripts
+                    bash "$CI_ROOT/job/tf-ci-gateway/generate_report.sh"
+      - archive:
+          artifacts: report.json, report.html, merge/outdir/**
+      - groovy-postbuild:
+          script: !include-raw:
+            - tf-a-ci-gateway/postbuild.groovy
diff --git a/loosper-arm-tf-a-daily.yaml b/loosper-arm-tf-a-daily.yaml
new file mode 100644
index 0000000..b2c4e2e
--- /dev/null
+++ b/loosper-arm-tf-a-daily.yaml
@@ -0,0 +1,84 @@
+- job:
+    name: loosper-arm-tf-a-daily
+    node: docker-amd64-tf-a-jammy
+    project-type: freestyle
+    concurrent: false
+    disabled: false
+    description: Triggers tf-a-windows-builder, tf-main and tf-coverity for the TF-A project.
+    properties:
+      - build-discarder:
+          days-to-keep: 14
+          num-to-keep: 60
+    parameters:
+      - string:
+          name: TF_GERRIT_PROJECT
+          default: TF-A/trusted-firmware-a
+      - string:
+          name: TF_GERRIT_BRANCH
+          default: refs/heads/integration
+      - string:
+          name: TF_GERRIT_REFSPEC
+          default: +refs/heads/integration:refs/remotes/origin/integration
+      - string:
+          name: TFTF_GERRIT_PROJECT
+          default: TF-A/tf-a-tests
+      - string:
+          name: TFTF_GERRIT_BRANCH
+          default: refs/heads/master
+      - string:
+          name: TFTF_GERRIT_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+      - string:
+          name: SPM_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+          description: |
+            SPM(Hafnium) refspec to use. The master branch is used by default.
+      - string:
+          name: RMM_REFSPEC
+          default: +refs/heads/main:refs/remotes/origin/main
+          description: |
+            tf-rmm refspec to use. The main branch is used by default.
+      - string:
+          name: CI_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+      - string:
+          name: JOBS_REFSPEC
+          default: refs/heads/master
+          description: |
+            tf-a-job-configs refspec to use. The master branch is used by default.
+      - string:
+          name: MBEDTLS_URL
+          default: https://github.com/Mbed-TLS/mbedtls/archive/mbedtls-3.6.3.tar.gz
+      - string:
+          name: LAVA_PRIORITY
+          default: low
+      - string:
+          name: SHARE_FOLDER
+          default: /srv/shared/staging/${JOB_NAME}/${BUILD_NUMBER}
+          description: Folder containing shared repositories for downstream pipeline jobs
+    wrappers:
+      - timestamps
+    builders:
+      - shell: !include-raw: scripts/clone.sh
+      - shell: |
+          #!/bin/bash
+          set -e
+          cat << EOF > share.param
+          SHARE_FOLDER=${SHARE_FOLDER}
+          EOF
+      - trigger-builds:
+          - project:
+              - tf-a-main
+            block: true
+            current-parameters: true
+            property-file: share.param
+          - project:
+              - tf-a-coverity
+            block: true
+            current-parameters: true
+            property-file: share.param
+          - project:
+              - tf-a-windows-builder
+            block: true
+            current-parameters: true
+            property-file: share.param
diff --git a/loosper-arm-tf-a-main.yaml b/loosper-arm-tf-a-main.yaml
index dd2e5ed..d1c6edc 100644
--- a/loosper-arm-tf-a-main.yaml
+++ b/loosper-arm-tf-a-main.yaml
@@ -6,304 +6,358 @@
     disabled: false
     description: Main CI job for Trusted Firmware.
     properties:
-    - throttle:
-        option: project
-        enabled: true
-        max-total: 5
-    - build-discarder:
-        days-to-keep: 14
-        num-to-keep: 60
-    - authorization:
-        !include: loosper-arm-authorization.yaml.inc
+      - throttle:
+          option: project
+          enabled: true
+          max-total: 5
+      - build-discarder:
+          days-to-keep: 14
+          num-to-keep: 60
     parameters:
-        - string:
-            name: TF_GERRIT_PROJECT
-            default: 'TF-A/trusted-firmware-a'
-        - string:
-            name: TF_GERRIT_BRANCH
-            default: 'refs/heads/integration'
-        - string:
-            name: TF_GERRIT_REFSPEC
-            default: '+refs/heads/integration:refs/remotes/origin/integration'
-        - string:
-            name: TFTF_GERRIT_PROJECT
-            default: 'TF-A/tf-a-tests'
-        - string:
-            name: TFTF_GERRIT_BRANCH
-            default: 'refs/heads/master'
-        - string:
-            name: TFTF_GERRIT_REFSPEC
-            default: '+refs/heads/master:refs/remotes/origin/master'
-        - string:
-            name: CI_REFSPEC
-            default: '+refs/heads/master:refs/remotes/origin/master'
-        - string:
-            name: SHARE_FOLDER
-            default: '/srv/shared/staging/${JOB_NAME}/${BUILD_NUMBER}'
-            description: 'Folder containing shared repositories for downstream pipeline jobs'
+      - string:
+          name: TF_GERRIT_PROJECT
+          default: TF-A/trusted-firmware-a
+      - string:
+          name: TF_GERRIT_BRANCH
+          default: refs/heads/integration
+      - string:
+          name: TF_GERRIT_REFSPEC
+          default: +refs/heads/integration:refs/remotes/origin/integration
+      - string:
+          name: TFTF_GERRIT_PROJECT
+          default: TF-A/tf-a-tests
+      - string:
+          name: TFTF_GERRIT_BRANCH
+          default: refs/heads/master
+      - string:
+          name: TFTF_GERRIT_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+      - string:
+          name: SPM_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+          description: |
+            SPM(Hafnium) refspec to use. The master branch is used by default.
+      - string:
+          name: RMM_REFSPEC
+          default: +refs/heads/main:refs/remotes/origin/main
+          description: |
+            tf-rmm refspec to use. The main branch is used by default.
+      - string:
+          name: CI_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+      - string:
+          name: JOBS_REFSPEC
+          default: refs/heads/master
+          description: |
+            tf-a-job-configs refspec to use. The master branch is used by default.
+      - string:
+          name: MBEDTLS_URL
+          default: https://github.com/Mbed-TLS/mbedtls/archive/mbedtls-3.6.3.tar.gz
+      - string:
+          name: LAVA_RETRIES
+          default: 2
+          description: |
+            Number of tries submitting job to LAVA in case it fails (stopgap measure against nondeterministic failures)
+      - string:
+          name: USE_TUXSUITE_FVP
+          default: 1
+          description: |
+            Whether to submit FVP tests via TuxSuite (instead of LAVA)
+      - string:
+          name: SHARE_FOLDER
+          default: /srv/shared/staging/${JOB_NAME}/${BUILD_NUMBER}
+          description: Folder containing shared repositories for downstream pipeline jobs
     wrappers:
       - credentials-binding:
           - ssh-user-private-key:
               credential-id: TFA_CI_BOT_USER_SSH_KEY
               key-file-variable: CI_BOT_KEY
               username-variable: CI_BOT_USERNAME
-              passphrase-variable: ''
+              passphrase-variable: ""
       - workspace-cleanup
       - timestamps
     builders:
-    - shell:
-        !include-raw: scripts/clone.sh
-    - shell: |
-        #!/bin/bash
-        set -e
-        cat << EOF > tf-a-env.param
-        GERRIT_PROJECT=${TF_GERRIT_PROJECT}
-        GERRIT_BRANCH=${TF_GERRIT_BRANCH}
-        GERRIT_REFSPEC=${TF_GERRIT_REFSPEC}
-        QA_SERVER_PROJECT=${JOB_NAME}
-        QA_SERVER_VERSION=${BUILD_NUMBER}
-        SHARE_FOLDER=${SHARE_FOLDER}
-        EOF
-        cat << EOF > tf-a-tests-env.param
-        GERRIT_PROJECT=${TFTF_GERRIT_PROJECT}
-        GERRIT_BRANCH=${TFTF_GERRIT_BRANCH}
-        GERRIT_REFSPEC=${TFTF_GERRIT_REFSPEC}
-        QA_SERVER_PROJECT=${JOB_NAME}
-        QA_SERVER_VERSION=${BUILD_NUMBER}
-        SHARE_FOLDER=${SHARE_FOLDER}
-        EOF
-    - multijob:
-        name: Run static checks on the code
-        condition: COMPLETED
-        projects:
-        - name: tf-a-static-checks
-          current-parameters: true
-          kill-phase-on: NEVER
-          property-file: tf-a-env.param
-    - multijob:
-        name: Build Trusted Firmware
-        condition: COMPLETED
-        projects:
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: |
-            TEST_GROUPS=tf-l1-build-fvp tf-l2-build-fvp
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l1-build-juno tf-l2-build-juno
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l1-build-plat
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l1-build-clang
-          property-file: tf-a-env.param
-    - multijob:
-        name: TFTF Tests for FVP
-        condition: COMPLETED
-        projects:
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tftf-l2-fwu
-          property-file: tf-a-tests-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tftf-l1-fvp tftf-l2-fvp-auxiliary
-          property-file: tf-a-tests-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tftf-l2-fvp tftf-l2-fvp-dynamiq
-          property-file: tf-a-tests-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tftf-l2-extensive-tests-fvp
-          property-file: tf-a-tests-env.param
-    - multijob:
-        name: Boot up to the Linux shell prompt
-        condition: COMPLETED
-        projects:
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-foundation
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-aarch32
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-rootfs
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-spm-mm
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=spm-l2-boot-tests
-          property-file: tf-a-env.param
-    - multijob:
-        name: Boot up to the Linux shell prompt - Part 2
-        condition: COMPLETED
-        projects:
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-misc
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-latest
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-cortex
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-gicv2
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-bl2_el3
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=qemu-boot-tests
-          property-file: tf-a-env.param
-    - multijob:
-        name: Juno Boot Tests
-        condition: COMPLETED
-        projects:
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l1-boot-tests-juno
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-juno
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tftf-l1-juno
-          property-file: tf-a-env.param
-    - multijob:
-        name: Miscellaneous tests
-        condition: COMPLETED
-        projects:
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l3-boot-tests-css
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l3-boot-tests-spm-mm
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l3-boot-tests-ras
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l3-boot-tests-misc
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=spm-l3-boot-tests
-          property-file: tf-a-env.param
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l1-boot-tests-plat
-          property-file: tf-a-env.param
-    - multijob:
-        name: Code coverage
-        condition: COMPLETED
-        projects:
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l3-code-coverage
-          property-file: tf-a-env.param
-    - multijob:
-        name: Run doc build check
-        condition: COMPLETED
-        projects:
-        - name: loosper-arm-tf-a-ci-gateway
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TEST_GROUPS=tf-l1-check-docs
-          property-file: tf-a-env.param
-    - multijob:
-       name: Generate visualizations
-       condition: COMPLETED
-       projects:
-#        - name: tf-a-sloc-visualization
-#          current-parameters: true
-#          kill-phase-on: NEVER
-#          property-file: tf-a-env.param
-#        - name: tf-a-test-category-visualization
-#          current-parameters: true
-#          kill-phase-on: NEVER
-#          property-file: tf-a-env.param
-        - name: tf-a-test-result-visualization
-          current-parameters: true
-          kill-phase-on: NEVER
-          predefined-parameters: TARGET_BUILD=${JOB_NAME}/${BUILD_NUMBER}
-          property-file: tf-a-env.param
-    # Run the unstable TF-A Tests at the end but do not let their results
-    # participate in the job's success/failure.
-    - trigger-builds:
-        - project: loosper-arm-tf-a-ci-gateway
-          current-parameters: True
-          property-file: tf-a-tests-env.param
-          property-file-fail-on-missing: True
-          predefined-parameters: TEST_GROUPS=tftf-unstable
-          block: True
-          block-thresholds:
-            build-step-failure-threshold: never
-            unstable-threshold: never
-            failure-threshold: never
-    # If all tests passed, catch up the master branch with integration
-    - conditional-step:
-        condition-kind: current-status
-        condition-best: SUCCESS
-        condition-worst: SUCCESS
-        steps:
-        - shell: |-
-            #!/bin/bash
-            if [ $MULTIJOB_FAILED -eq 0 ]; then
-                echo "Proceed with integration->master fast-forward merge"
-                bash "${WORKSPACE}/tf-a-ci-scripts/script/scratch_scripts/fast-forward-master.sh"
-            else
-                echo "Do not proceed with integration->master merge as sub-jobs failed"
-            fi
+      - shell: !include-raw: scripts/clone.sh
+      - shell: |
+          #!/bin/bash
+          set -e
+          cat << EOF > tf-a-env.param
+          GERRIT_PROJECT=${TF_GERRIT_PROJECT}
+          GERRIT_BRANCH=${TF_GERRIT_BRANCH}
+          GERRIT_REFSPEC=${TF_GERRIT_REFSPEC}
+          QA_SERVER_PROJECT=${JOB_NAME}
+          QA_SERVER_VERSION=${BUILD_NUMBER}
+          SHARE_FOLDER=${SHARE_FOLDER}
+          EOF
+          cat << EOF > tf-a-tests-env.param
+          GERRIT_PROJECT=${TFTF_GERRIT_PROJECT}
+          GERRIT_BRANCH=${TFTF_GERRIT_BRANCH}
+          GERRIT_REFSPEC=${TFTF_GERRIT_REFSPEC}
+          QA_SERVER_PROJECT=${JOB_NAME}
+          QA_SERVER_VERSION=${BUILD_NUMBER}
+          SHARE_FOLDER=${SHARE_FOLDER}
+          EOF
+      - multijob:
+          name: Run static checks on the code
+          condition: COMPLETED
+          projects:
+            - name: tf-a-static-checks
+              current-parameters: true
+              kill-phase-on: NEVER
+              property-file: tf-a-env.param
+      - multijob:
+          name: Build Trusted Firmware
+          condition: COMPLETED
+          projects:
+            - name: tf-a-ci-gateway
+              alias: tf-l1-build-fvp tf-l2-build-fvp
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: |
+                TEST_GROUPS=tf-l1-build-fvp tf-l2-build-fvp
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tf-l1-build-juno tf-l2-build-juno
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l1-build-juno tf-l2-build-juno
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tf-l1-build-plat
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l1-build-plat
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tf-l1-build-clang
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l1-build-clang
+              property-file: tf-a-env.param
+      - multijob:
+          name: TFTF Tests for FVP
+          condition: COMPLETED
+          projects:
+            - name: tf-a-ci-gateway
+              alias: tftf-l2-fwu
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tftf-l2-fwu
+              property-file: tf-a-tests-env.param
+            - name: tf-a-ci-gateway
+              alias: tftf-l1-fvp tftf-l2-fvp-auxiliary
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tftf-l1-fvp tftf-l2-fvp-auxiliary
+              property-file: tf-a-tests-env.param
+            - name: tf-a-ci-gateway
+              alias: tftf-l2-fvp tftf-l2-fvp-dynamiq
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tftf-l2-fvp tftf-l2-fvp-dynamiq
+              property-file: tf-a-tests-env.param
+            - name: tf-a-ci-gateway
+              alias: tftf-l2-extensive-tests-fvp
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tftf-l2-extensive-tests-fvp
+              property-file: tf-a-tests-env.param
+      - multijob:
+          name: Boot up to the Linux shell prompt
+          condition: COMPLETED
+          projects:
+            - name: tf-a-ci-gateway
+              alias: tf-l2-boot-tests-aarch32
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-aarch32
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tf-l2-boot-tests-rootfs
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-rootfs
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tf-l2-boot-tests-spm-mm
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-spm-mm
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: spm-l2-boot-tests
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=spm-l2-boot-tests
+              property-file: tf-a-env.param
+      - multijob:
+          name: Boot up to the Linux shell prompt - Part 2
+          condition: COMPLETED
+          projects:
+            - name: tf-a-ci-gateway
+              alias: tf-l2-boot-tests-misc
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-misc
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tf-l2-boot-tests-latest
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-latest
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tf-l2-boot-tests-cortex
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-cortex
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tf-l2-boot-tests-gicv2
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-gicv2
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tf-l2-boot-tests-bl2_el3
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-bl2_el3
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: qemu-boot-tests
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=qemu-boot-tests
+              property-file: tf-a-env.param
+      - multijob:
+          name: Juno Boot Tests
+          condition: COMPLETED
+          projects:
+            - name: tf-a-ci-gateway
+              alias: tf-l2-boot-tests-juno
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-juno
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tftf-l1-juno
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tftf-l1-juno
+              property-file: tf-a-env.param
+      - multijob:
+          name: Miscellaneous tests
+          condition: COMPLETED
+          projects:
+            - name: tf-a-ci-gateway
+              alias: tf-l3-boot-tests-css
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l3-boot-tests-css
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tf-l3-boot-tests-spm-mm
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l3-boot-tests-spm-mm
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tf-l3-boot-tests-ras
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l3-boot-tests-ras
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tf-l3-boot-tests-misc
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l3-boot-tests-misc
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tf-l3-boot-tests-n1sdp
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l3-boot-tests-n1sdp
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: spm-l3-boot-tests
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=spm-l3-boot-tests
+              property-file: tf-a-env.param
+            - name: tf-a-ci-gateway
+              alias: tf-l2-boot-tests-partner-boards
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-partner-boards
+              property-file: tf-a-env.param
+            # Platform-specific self-tests.
+            # These tests run from the BL31 image then halt the target.
+            - name: tf-a-ci-gateway
+              alias: tf-l2-boot-tests-arm-plats
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l2-boot-tests-arm-plats
+              property-file: tf-a-env.param
+      - multijob:
+          name: Run doc build check
+          condition: COMPLETED
+          projects:
+            - name: tf-a-ci-gateway
+              alias: tf-l1-check-docs
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TEST_GROUPS=tf-l1-check-docs
+              property-file: tf-a-env.param
+      - multijob:
+          name: Generate visualizations
+          condition: COMPLETED
+          projects:
+            - name: tf-a-sloc-visualization
+              current-parameters: true
+              kill-phase-on: NEVER
+              property-file: tf-a-env.param
+            - name: tf-a-test-category-visualization
+              current-parameters: true
+              kill-phase-on: NEVER
+              property-file: tf-a-env.param
+            - name: tf-a-test-result-visualization
+              current-parameters: true
+              kill-phase-on: NEVER
+              predefined-parameters: TARGET_BUILD=${JOB_NAME}/${BUILD_NUMBER}
+              property-file: tf-a-env.param
+      # Run the unstable TF-A Tests at the end but do not let their results
+      # participate in the job's success/failure.
+      - trigger-builds:
+          - project: tf-a-ci-gateway
+            current-parameters: True
+            property-file: tf-a-tests-env.param
+            property-file-fail-on-missing: True
+            predefined-parameters: TEST_GROUPS=tftf-unstable
+            block: True
+            block-thresholds:
+              build-step-failure-threshold: never
+              unstable-threshold: never
+              failure-threshold: never
+      # If all tests passed, catch up the master branch with integration
+      - conditional-step:
+          condition-kind: current-status
+          condition-best: SUCCESS
+          condition-worst: SUCCESS
+          steps:
+            - shell: |-
+                #!/bin/bash
+                #
+                if echo ${JENKINS_PUBLIC_URL} | grep -q "ci.trustedfirmware.org"; then
+                    # Only do it on the OpenCI production site
+                    echo "It's running on the OpenCI procution site"
+                    if [ $MULTIJOB_FAILED -eq 0 ]; then
+                        echo "Proceed with integration->master fast-forward merge"
+                        bash "${WORKSPACE}/tf-a-ci-scripts/script/scratch_scripts/fast-forward-master.sh"
+                    else
+                        echo "Do not proceed with integration->master merge as sub-jobs failed"
+                    fi
+                else
+                    echo "It's NOT on the OpenCI production site"
+                fi
diff --git a/loosper-arm-tf-a-static-checks.yaml b/loosper-arm-tf-a-static-checks.yaml
new file mode 100644
index 0000000..3b5f166
--- /dev/null
+++ b/loosper-arm-tf-a-static-checks.yaml
@@ -0,0 +1,90 @@
+- job:
+    name: loosper-arm-tf-a-static-checks
+    node: docker-amd64-tf-a-jammy
+    project-type: freestyle
+    concurrent: true
+    disabled: false
+    defaults: global
+    description: Run static checks on Git repository
+    properties:
+      - build-discarder:
+          days-to-keep: 14
+    parameters:
+      - string:
+          name: TF_GERRIT_PROJECT
+          default: TF-A/trusted-firmware-a
+      - string:
+          name: TF_GERRIT_BRANCH
+          default: refs/heads/integration
+      - string:
+          name: TF_GERRIT_REFSPEC
+          default: +refs/heads/integration:refs/remotes/origin/integration
+      - string:
+          name: TFTF_GERRIT_PROJECT
+          default: TF-A/tf-a-tests
+      - string:
+          name: TFTF_GERRIT_BRANCH
+          default: refs/heads/master
+      - string:
+          name: TFTF_GERRIT_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+      - string:
+          name: CI_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+      - string:
+          name: JOBS_REFSPEC
+          default: refs/heads/master
+          description: |
+            tf-a-job-configs refspec to use. The master branch is used by default.
+      - choice:
+          name: REPO_UNDER_TEST
+          choices:
+            - trusted-firmware-a
+            - tf-a-tests
+          default: trusted-firmware-a
+          description: Repository to run static checks on.
+      - string:
+          name: GERRIT_BRANCH
+          default: ""
+      - string:
+          name: SHARE_FOLDER
+          default: /srv/shared/staging/${JOB_NAME}/${BUILD_NUMBER}
+          description: Folder containing shared repositories for downstream pipeline jobs
+    wrappers:
+      - timestamps
+      - timeout:
+          timeout: 240
+          fail: true
+    builders:
+      - shell: !include-raw: scripts/clone.sh
+      - shell: |
+          #!/bin/bash
+          set -e
+          if [[ "${REPO_UNDER_TEST}" == trusted-firmware-a ]]; then
+          cat <<EOF > env.param
+          QA_SERVER_PROJECT=${JOB_NAME}
+          QA_SERVER_VERSION=${BUILD_NUMBER}
+          GERRIT_PROJECT=${TF_GERRIT_PROJECT}
+          GERRIT_BRANCH=${TF_GERRIT_BRANCH}
+          GERRIT_REFSPEC=${TF_GERRIT_REFSPEC}
+          TEST_GROUPS=tf-l2-scan-build
+          EOF
+          fi
+          cd ${WORKSPACE}/${REPO_UNDER_TEST}
+          # Executed project-related static checks: copyright presence, headers in alphabetical order,
+          # line endings, coding style and banned API.
+          IS_CONTINUOUS_INTEGRATION=1 ${WORKSPACE}/tf-a-ci-scripts/script/static-checks/static-checks.sh
+      - trigger-builds:
+          - project: tf-a-ci-gateway
+            block: true
+            property-file: env.param
+            current-parameters: true
+            # Do not trigger tf-a-ci-gateway if env.param file does not exist,
+            # which is the case here for TF-A Tests repository
+            property-file-fail-on-missing: True
+    publishers:
+      - archive:
+          artifacts: ${REPO_UNDER_TEST}/static-checks.log
+      - groovy-postbuild:
+          script: !include-raw:
+            - tf-a-static-checks/postbuild.groovy
diff --git a/loosper-arm-tf-a-tftf-main.yaml b/loosper-arm-tf-a-tftf-main.yaml
new file mode 100644
index 0000000..0ec3652
--- /dev/null
+++ b/loosper-arm-tf-a-tftf-main.yaml
@@ -0,0 +1,147 @@
+- job:
+    name: loosper-arm-tf-a-tftf-main
+    description: Main CI job for the Trusted Firmware-A Test Framework.
+    node: docker-amd64-tf-a-jammy
+    project-type: multijob
+    concurrent: true
+    disabled: false
+    properties:
+      - build-discarder:
+          days-to-keep: 14
+          num-to-keep: 60
+      - throttle:
+          option: project
+          enabled: true
+          max-total: 5
+    parameters:
+      - string:
+          name: TF_GERRIT_PROJECT
+          default: TF-A/trusted-firmware-a
+          description: Gerrit project name for Trusted Firmware-A.
+      - string:
+          name: TF_GERRIT_BRANCH
+          default: refs/heads/integration
+          description: Git project branch for Trusted Firmware-A.
+      - string:
+          name: TF_GERRIT_REFSPEC
+          default: +refs/heads/integration:refs/remotes/origin/integration
+          description: Git refspec for Trusted Firmware-A.
+      - string:
+          name: TFTF_GERRIT_PROJECT
+          default: TF-A/tf-a-tests
+          description: Gerrit project name for the Trusted Firmware-A Test Framework.
+      - string:
+          name: TFTF_GERRIT_BRANCH
+          default: refs/heads/master
+          description: Git branch for the Trusted Firmware-A Test Framework.
+      - string:
+          name: TFTF_GERRIT_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+          description: Git refspec for the Trusted Firmware-A Test Framework.
+      - string:
+          name: CI_REFSPEC
+          default: +refs/heads/master:refs/remotes/origin/master
+          description: Git refspec for the Trusted Firmware-A CI scripts.
+      - string:
+          name: RMM_REFSPEC
+          default: +refs/heads/main:refs/remotes/origin/main
+          description: |
+            tf-rmm refspec to use. The main branch is used by default.
+      - string:
+          name: JOBS_REFSPEC
+          default: refs/heads/master
+          description: |
+            tf-a-job-configs refspec to use. The master branch is used by default.
+      - string:
+          name: SHARE_FOLDER
+          default: /srv/shared/staging/${JOB_NAME}/${BUILD_NUMBER}
+          description: Folder containing shared repositories for downstream pipeline jobs.
+    wrappers:
+      - credentials-binding:
+          - ssh-user-private-key:
+              credential-id: TFA_CI_BOT_USER_SSH_KEY
+              key-file-variable: CI_BOT_KEY
+              username-variable: CI_BOT_USERNAME
+              passphrase-variable: ""
+      - workspace-cleanup
+      - timestamps
+    builders:
+      - shell: !include-raw: scripts/clone.sh
+      - shell: |
+          #!/bin/bash
+
+          cat << EOF > tf-a-tests-env.param
+          GERRIT_PROJECT=${TFTF_GERRIT_PROJECT}
+          GERRIT_BRANCH=${TFTF_GERRIT_BRANCH}
+          GERRIT_REFSPEC=${TFTF_GERRIT_REFSPEC}
+          QA_SERVER_PROJECT=${JOB_NAME}
+          QA_SERVER_VERSION=${BUILD_NUMBER}
+          SHARE_FOLDER=${SHARE_FOLDER}
+          EOF
+      - multijob:
+          condition: COMPLETED
+          name: Static checks on TFTF
+          projects:
+            - current-parameters: true
+              kill-phase-on: NEVER
+              name: tf-a-static-checks
+              predefined-parameters: REPO_UNDER_TEST=tf-a-tests
+              property-file: tf-a-tests-env.param
+      - multijob:
+          condition: COMPLETED
+          name: Build TFTF
+          projects:
+            - current-parameters: true
+              kill-phase-on: NEVER
+              name: tf-a-ci-gateway
+              alias: tftf-l1-build
+              predefined-parameters: TEST_GROUPS=tftf-l1-build
+              property-file: tf-a-tests-env.param
+      - multijob:
+          condition: COMPLETED
+          name: Run TFTF FWU
+          projects:
+            - current-parameters: true
+              kill-phase-on: NEVER
+              name: tf-a-ci-gateway
+              alias: tftf-l2-fwu
+              predefined-parameters: TEST_GROUPS=tftf-l2-fwu
+              property-file: tf-a-tests-env.param
+      - multijob:
+          condition: COMPLETED
+          name: Run TFTF
+          projects:
+            - current-parameters: true
+              kill-phase-on: NEVER
+              name: tf-a-ci-gateway
+              alias: tftf-l1-fvp tftf-l1-juno
+              predefined-parameters: TEST_GROUPS=tftf-l1-fvp tftf-l1-juno
+              property-file: tf-a-tests-env.param
+            - current-parameters: true
+              kill-phase-on: NEVER
+              name: tf-a-ci-gateway
+              alias: tftf-l2-fvp-auxiliary tftf-l2-fvp-dynamiq
+              predefined-parameters: TEST_GROUPS=tftf-l2-fvp-auxiliary tftf-l2-fvp-dynamiq
+              property-file: tf-a-tests-env.param
+            - current-parameters: true
+              kill-phase-on: NEVER
+              name: tf-a-ci-gateway
+              alias: spm-l2-boot-tests tf-l2-boot-tests-spm-mm
+              predefined-parameters: TEST_GROUPS=spm-l2-boot-tests tf-l2-boot-tests-spm-mm
+              property-file: tf-a-tests-env.param
+            - current-parameters: true
+              kill-phase-on: NEVER
+              name: tf-a-ci-gateway
+              alias: spm-l3-boot-tests tf-l3-boot-tests-spm-mm
+              predefined-parameters: TEST_GROUPS=spm-l3-boot-tests tf-l3-boot-tests-spm-mm
+              property-file: tf-a-tests-env.param
+      - multijob:
+          condition: SUCCESSFUL
+          name: Run TFTF Extensive
+          projects:
+            - current-parameters: true
+              kill-phase-on: FAILURE
+              name: tf-a-ci-gateway
+              alias: tftf-l2-extensive-tests-fvp
+              predefined-parameters: TEST_GROUPS=tftf-l2-extensive-tests-fvp
+              property-file: tf-a-tests-env.param