diff --git a/tools/ci/gitlab-ci/build.yml b/tools/ci/gitlab-ci/build.yml
index ce47b8701a6d39b6ab0852f5913601027c285779..ab0722c55ba3ca555fd6e12061cbc887da4adcea 100644
--- a/tools/ci/gitlab-ci/build.yml
+++ b/tools/ci/gitlab-ci/build.yml
@@ -18,13 +18,13 @@ build:x86_64:
   - .build-common
   - .x86_64-config
 
-build:arm64:
+.build:arm64:
   extends:
   - .use-debian/arm64_build
   - .build-common
   - .arm64-config
 
-build:arm32:
+.build:arm32:
   extends:
   - .use-debian/arm64_build
   - .build-common
diff --git a/tools/ci/gitlab-ci/gitlab-ci.yml b/tools/ci/gitlab-ci/gitlab-ci.yml
index d2679d9929de14dfeb81064ef1f3334a46581577..43fbe34568c210a2d06984c7f2bdb5109b87bce7 100644
--- a/tools/ci/gitlab-ci/gitlab-ci.yml
+++ b/tools/ci/gitlab-ci/gitlab-ci.yml
@@ -33,6 +33,7 @@ workflow:
     - if: $FORCE_CI == 'true'
 
 variables:
+  LAVA_URL: "https://lava.collabora.dev"
   SMATCH_DB_DIR: /smatch/smatch_data
   # exit code of bash script on `script` will be the exit code of the job
   FF_USE_NEW_BASH_EVAL_STRATEGY: "true"
diff --git a/tools/ci/gitlab-ci/test.yml b/tools/ci/gitlab-ci/test.yml
index e64ea36c13214fc067e277d1d9ed9db7a6028ca6..1ee9faf1eb4f3da95262581317ff4a36df9abb39 100644
--- a/tools/ci/gitlab-ci/test.yml
+++ b/tools/ci/gitlab-ci/test.yml
@@ -14,3 +14,17 @@ test-boot:
     - ./tools/ci/gitlab-ci/ci-scripts/run-virtme.sh /install/bzImage ./tools/ci/gitlab-ci/ci-scripts/test-boot.sh
   needs:
     - build:x86_64
+
+lava-test:
+  extends: build:x86_64
+  stage: test
+  tags:
+    - lava-runner
+  script:
+    - submit ./tools/ci/gitlab-ci/testjob.yaml
+  artifacts:
+    when: always
+    paths:
+      - "*"
+    reports:
+      junit: "*_junit.xml"
diff --git a/tools/ci/gitlab-ci/testjob.yml b/tools/ci/gitlab-ci/testjob.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7ac1d24250c1a81f60820162485d6daf30d3ae6e
--- /dev/null
+++ b/tools/ci/gitlab-ci/testjob.yml
@@ -0,0 +1,134 @@
+job_name: 'linux: meson:g12b 1/3: https://gitlab.freedesktop.org/vigneshraman/linux/-/pipelines/1391440 on wip/vignesh/uprev-mesa-s3cp 1/3'
+device_type: meson-g12b-a311d-khadas-vim3
+visibility:
+  group:
+  - Collabora+fdo
+priority: 75
+context:
+  extra_nfsroot_args: ' init=/init rootwait usbcore.quirks=0bda:8153:k'
+timeouts:
+  job:
+    minutes: 85
+  actions:
+    depthcharge-retry:
+      minutes: 6
+    depthcharge-action:
+      minutes: 5
+    uboot-action:
+      seconds: 200
+tags:
+- subset-1-gfx
+actions:
+- deploy:
+    timeout:
+      minutes: 10
+    to: tftp
+    os: oe
+    kernel:
+      url: https://s3.freedesktop.org/artifacts/vigneshraman/linux/1391440/arm64/Image
+      type: image
+    nfsrootfs:
+      url: https://s3.freedesktop.org/mesa-rootfs/vigneshraman/linux/20250328-mesa-uprev--v6.13-rc4-mesa-5e77--20250328-mesa-uprev--bca9635d--d5aa3941aa03c2f716595116354fb81eb8012acb/arm64/lava-rootfs.tar.zst
+      compression: zstd
+      format: tar
+      overlays:
+        kernel-build:
+          compression: zstd
+          format: tar
+          path: /builds/vigneshraman/linux
+          url: https://s3.freedesktop.org/artifacts/vigneshraman/linux/1391440/arm64/kernel-files.tar.zst
+        job-overlay:
+          compression: gz
+          format: tar
+          path: /
+          url: https://s3.freedesktop.org/artifacts/vigneshraman/linux/1391440/73511165/job-rootfs-overlay.tar.gz
+    dtb:
+      url: https://s3.freedesktop.org/artifacts/vigneshraman/linux/1391440/arm64/meson-g12b-a311d-khadas-vim3.dtb
+    namespace: dut
+    failure_retry: 2
+- boot:
+    failure_retry: 2
+    method: u-boot
+    prompts:
+    - 'lava-shell:'
+    commands: nfs
+    namespace: dut
+    auto_login:
+      login_commands:
+      - dropbear -R -B
+      - touch /dut_ready
+      login_prompt: 'login:'
+      username: ''
+- test:
+    namespace: dut
+    definitions:
+    - from: inline
+      name: setup-ssh-server
+      path: inline-setup-ssh-server
+      repository:
+        metadata:
+          format: Lava-Test Test Definition 1.0
+          name: dut-env-export
+        run:
+          steps:
+          - |-
+            set -ex
+            cd /
+            findmnt --mountpoint /proc || mount -t proc none /proc
+            findmnt --mountpoint /sys || mount -t sysfs none /sys
+            mount -t debugfs none /sys/kernel/debug
+            findmnt --mountpoint /dev || mount -t devtmpfs none /dev
+            mkdir -p /dev/pts
+            mount -t devpts devpts /dev/pts
+            mkdir /dev/shm
+            mount -t tmpfs -o noexec,nodev,nosuid tmpfs /dev/shm
+            mount -t tmpfs tmpfs /tmp
+            echo "nameserver 8.8.8.8" > /etc/resolv.conf
+            [ -z "$NFS_SERVER_IP" ] || echo "$NFS_SERVER_IP caching-proxy" >> /etc/hosts
+            for _ in 1 2 3; do sntp -sS pool.ntp.org && break || sleep 2; done || true
+            export CURRENT_SECTION=dut_boot
+          - export -p > /dut-env-vars.sh
+- test:
+    namespace: container
+    timeout:
+      minutes: 85
+    failure_retry: 3
+    definitions:
+    - name: docker_ssh_client
+      from: inline
+      path: inline/docker_ssh_client.yaml
+      repository:
+        metadata:
+          name: mesa
+          description: Mesa test plan
+          format: Lava-Test Test Definition 1.0
+        run:
+          steps:
+          - |-
+            set -ex
+            timeout 1m bash << EOF
+            while [ -z "$(lava-target-ip)" ]; do
+                echo Waiting for DUT to join LAN;
+                sleep 1;
+            done
+            EOF
+
+            ping -c 5 -w 60 $(lava-target-ip)
+
+            lava_ssh_test_case() {
+                set -ex
+                local test_case="${1}"
+                shift
+                lava-test-case "${test_case}" --shell \
+                    ssh ${SSH_PTY_ARGS:--T} \
+                    -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
+                    root@$(lava-target-ip) "${@}"
+            }
+          - lava_ssh_test_case 'wait_for_dut_login' << EOF
+          - while [ ! -e /dut_ready ]; do sleep 1; done;
+          - EOF
+          - export SSH_PTY_ARGS=-tt
+          - lava_ssh_test_case 'linux_meson:g12b' 'cd / && /init-stage2.sh'
+    docker:
+      image: registry.freedesktop.org/vigneshraman/linux/alpine/x86_64_lava_ssh_client:20250328-mesa-uprev--d5aa3941aa03c2f716595116354fb81eb8012acb
+