bool metrics;
        /** @metricgroups: Controls printing of metric and metric groups. */
        bool metricgroups;
+       /** @exclude_abi: Exclude PMUs with types less than PERF_TYPE_MAX except PERF_TYPE_RAW. */
+       bool exclude_abi;
        /** @last_topic: The last printed event topic. */
        char *last_topic;
        /** @last_metricgroups: The last printed metric group. */
        }
 }
 
-static void default_print_event(void *ps, const char *topic, const char *pmu_name,
+static void default_print_event(void *ps, const char *topic,
+                               const char *pmu_name, u32 pmu_type,
                                const char *event_name, const char *event_alias,
                                const char *scale_unit __maybe_unused,
                                bool deprecated, const char *event_type_desc,
        if (print_state->pmu_glob && pmu_name && !strglobmatch(pmu_name, print_state->pmu_glob))
                return;
 
+       if (print_state->exclude_abi && pmu_type < PERF_TYPE_MAX && pmu_type != PERF_TYPE_RAW)
+               return;
+
        if (print_state->event_glob &&
            (!event_name || !strglobmatch(event_name, print_state->event_glob)) &&
            (!event_alias || !strglobmatch(event_alias, print_state->event_glob)) &&
        fputs(buf->buf, fp);
 }
 
-static void json_print_event(void *ps, const char *topic, const char *pmu_name,
+static void json_print_event(void *ps, const char *topic,
+                            const char *pmu_name, u32 pmu_type __maybe_unused,
                             const char *event_name, const char *event_alias,
                             const char *scale_unit,
                             bool deprecated, const char *event_type_desc,
                } else if (strcmp(argv[i], "cache") == 0 ||
                         strcmp(argv[i], "hwcache") == 0)
                        print_hwcache_events(&print_cb, ps);
-               else if (strcmp(argv[i], "pmu") == 0)
+               else if (strcmp(argv[i], "pmu") == 0) {
+                       default_ps.exclude_abi = true;
                        perf_pmus__print_pmu_events(&print_cb, ps);
-               else if (strcmp(argv[i], "sdt") == 0)
+                       default_ps.exclude_abi = false;
+               } else if (strcmp(argv[i], "sdt") == 0)
                        print_sdt_events(&print_cb, ps);
                else if (strcmp(argv[i], "metric") == 0 || strcmp(argv[i], "metrics") == 0) {
                        default_ps.metricgroups = false;
 
 
        if (is_libpfm_event_supported(name, cpus, threads)) {
                print_cb->print_event(print_state, topic, pinfo->name,
+                                     /*pmu_type=*/PERF_TYPE_RAW,
                                      name, info->equiv,
                                      /*scale_unit=*/NULL,
                                      /*deprecated=*/NULL, "PFM event",
                        print_cb->print_event(print_state,
                                        topic,
                                        pinfo->name,
+                                       /*pmu_type=*/PERF_TYPE_RAW,
                                        name, /*alias=*/NULL,
                                        /*scale_unit=*/NULL,
                                        /*deprecated=*/NULL, "PFM event",