diff --git a/jenkins/lava-submit.jpl b/jenkins/lava-submit.jpl
index 65ac671..dd7d1f4 100644
--- a/jenkins/lava-submit.jpl
+++ b/jenkins/lava-submit.jpl
@@ -12,10 +12,10 @@
   return cause
 }
 
-def submitJobs(fvp_only_cmd, bl2_string, psa_string) {
+def submitJobs(device_type, bl2_string, psa_string) {
   dir("tf-m-ci-scripts") {
     def res = sh(script: """./lava_helper/lava_create_jobs.py \
-      --build-number ${env.BUILD_NUMBER} --output-dir lava_jobs ${fvp_only_cmd}\
+      --build-number ${env.BUILD_NUMBER} --output-dir lava_jobs ${device_type}\
       --compiler ${env.COMPILER} --platform ${env.TARGET_PLATFORM} \
       ${bl2_string} ${psa_string} --build-type ${env.CMAKE_BUILD_TYPE} \
       --jenkins-build-url ${env.BUILD_URL} --proj-config ${env.PROJ_CONFIG} \
@@ -40,11 +40,11 @@
       }
     }
     stage("LAVA") {
-      def fvp_only_cmd = ""
+      def device_type = ""
       def upstreamProject = getUpstreamJob()[0].upstreamProject
       if (upstreamProject == "tf-m-build-and-test") {
-        fvp_only_cmd = "--fvp-only "
-        print("Run test cases only on FVP in per-patch.")
+        device_type = "--physical-board-only "
+        print("Run test cases only on physical boards in per-patch.")
       }
 
       withCredentials([usernamePassword(credentialsId: env.LAVA_CREDENTIALS, passwordVariable: 'LAVA_TOKEN', usernameVariable: 'LAVA_USER')]) {
@@ -59,11 +59,11 @@
           psa_string = "--psa-api-suite ${env.PSA_API_SUITE}"
         }
         try {
-          submitJobs(fvp_only_cmd, bl2_string, psa_string)
+          submitJobs(device_type, bl2_string, psa_string)
         } catch (Exception ex) {
           print("LAVA-Submit failed! Exception: ${ex}")
           print("Try to submit again...")
-          submitJobs(fvp_only_cmd, bl2_string, psa_string)
+          submitJobs(device_type, bl2_string, psa_string)
           currentBuild.setDescription(currentBuild.getDescription() + " Submitted twice!")
         }
       }
diff --git a/lava_helper/lava_create_jobs.py b/lava_helper/lava_create_jobs.py
index f5c7721..83be77d 100755
--- a/lava_helper/lava_create_jobs.py
+++ b/lava_helper/lava_create_jobs.py
@@ -207,6 +207,10 @@
         for key in config_keys:
             if "fvp" not in key:
                 config_keys.remove(key)
+    if user_args.physical_board_only:
+        for key in config_keys:
+            if "fvp" in key or "qemu" in key:
+                config_keys.remove(key)
     if user_args.config_key:
         config_keys = [user_args.config_key]
     for config_key in config_keys:
@@ -220,6 +224,7 @@
     # Parse command line arguments to override config
     parser = argparse.ArgumentParser(description="Lava Create Jobs")
     cmdargs = parser.add_argument_group("Create LAVA Jobs")
+    device_type = parser.add_mutually_exclusive_group()
 
     # Configuration control
     cmdargs.add_argument(
@@ -268,12 +273,6 @@
         help="Set the jenkins job name",
     )
     cmdargs.add_argument(
-        "--fvp-only",
-        dest="fvp_only",
-        action="store_true",
-        help="Run test cases on FVP only",
-    )
-    cmdargs.add_argument(
         "--proj-config", dest="proj_config", action="store", help="Proj config"
     )
     cmdargs.add_argument(
@@ -292,8 +291,21 @@
     cmdargs.add_argument(
         "--psa-api-suite", dest="psa_suite", action="store", help="PSA API Suite name"
     )
-    return parser.parse_args()
 
+    device_type.add_argument(
+        "--fvp-only",
+        dest="fvp_only",
+        action="store_true",
+        help="Run test cases on FVP only",
+    )
+    device_type.add_argument(
+        "--physical-board-only",
+        dest="physical_board_only",
+        action="store_true",
+        help="Run test cases on physical boards only",
+    )
+
+    return parser.parse_args()
 
 if __name__ == "__main__":
     main(get_cmd_args())
