static bool illegal_handler_invoked;
 
+#define SBI_PMU_TEST_BASIC     BIT(0)
+#define SBI_PMU_TEST_EVENTS    BIT(1)
+#define SBI_PMU_TEST_SNAPSHOT  BIT(2)
+#define SBI_PMU_TEST_OVERFLOW  BIT(3)
+
+static int disabled_tests;
+
 unsigned long pmu_csr_read_num(int csr_num)
 {
 #define switchcase_csr_read(__csr_num, __val)          {\
        test_vm_destroy(vm);
 }
 
-int main(void)
+static void test_print_help(char *name)
+{
+       pr_info("Usage: %s [-h] [-d <test name>]\n", name);
+       pr_info("\t-d: Test to disable. Available tests are 'basic', 'events', 'snapshot', 'overflow'\n");
+       pr_info("\t-h: print this help screen\n");
+}
+
+static bool parse_args(int argc, char *argv[])
+{
+       int opt;
+
+       while ((opt = getopt(argc, argv, "hd:")) != -1) {
+               switch (opt) {
+               case 'd':
+                       if (!strncmp("basic", optarg, 5))
+                               disabled_tests |= SBI_PMU_TEST_BASIC;
+                       else if (!strncmp("events", optarg, 6))
+                               disabled_tests |= SBI_PMU_TEST_EVENTS;
+                       else if (!strncmp("snapshot", optarg, 8))
+                               disabled_tests |= SBI_PMU_TEST_SNAPSHOT;
+                       else if (!strncmp("overflow", optarg, 8))
+                               disabled_tests |= SBI_PMU_TEST_OVERFLOW;
+                       else
+                               goto done;
+                       break;
+               case 'h':
+               default:
+                       goto done;
+               }
+       }
+
+       return true;
+done:
+       test_print_help(argv[0]);
+       return false;
+}
+
+int main(int argc, char *argv[])
 {
-       test_vm_basic_test(test_pmu_basic_sanity);
-       pr_info("SBI PMU basic test : PASS\n");
+       if (!parse_args(argc, argv))
+               exit(KSFT_SKIP);
+
+       if (!(disabled_tests & SBI_PMU_TEST_BASIC)) {
+               test_vm_basic_test(test_pmu_basic_sanity);
+               pr_info("SBI PMU basic test : PASS\n");
+       }
 
-       test_vm_events_test(test_pmu_events);
-       pr_info("SBI PMU event verification test : PASS\n");
+       if (!(disabled_tests & SBI_PMU_TEST_EVENTS)) {
+               test_vm_events_test(test_pmu_events);
+               pr_info("SBI PMU event verification test : PASS\n");
+       }
 
-       test_vm_events_snapshot_test(test_pmu_events_snaphost);
-       pr_info("SBI PMU event verification with snapshot test : PASS\n");
+       if (!(disabled_tests & SBI_PMU_TEST_SNAPSHOT)) {
+               test_vm_events_snapshot_test(test_pmu_events_snaphost);
+               pr_info("SBI PMU event verification with snapshot test : PASS\n");
+       }
 
-       test_vm_events_overflow(test_pmu_events_overflow);
-       pr_info("SBI PMU event verification with overflow test : PASS\n");
+       if (!(disabled_tests & SBI_PMU_TEST_OVERFLOW)) {
+               test_vm_events_overflow(test_pmu_events_overflow);
+               pr_info("SBI PMU event verification with overflow test : PASS\n");
+       }
 
        return 0;
 }