.attrs = uncore_pmu_attrs,
 };
 
+void uncore_get_alias_name(char *pmu_name, struct intel_uncore_pmu *pmu)
+{
+       struct intel_uncore_type *type = pmu->type;
+
+       if (type->num_boxes == 1)
+               sprintf(pmu_name, "uncore_type_%u", type->type_id);
+       else {
+               sprintf(pmu_name, "uncore_type_%u_%d",
+                       type->type_id, type->box_ids[pmu->pmu_idx]);
+       }
+}
+
 static void uncore_get_pmu_name(struct intel_uncore_pmu *pmu)
 {
        struct intel_uncore_type *type = pmu->type;
         * Use uncore_type_&typeid_&boxid as name.
         */
        if (!type->name) {
-               if (type->num_boxes == 1)
-                       sprintf(pmu->name, "uncore_type_%u", type->type_id);
-               else {
-                       sprintf(pmu->name, "uncore_type_%u_%d",
-                               type->type_id, type->box_ids[pmu->pmu_idx]);
-               }
+               uncore_get_alias_name(pmu->name, pmu);
                return;
        }
 
 
        .attrs = spr_uncore_cha_formats_attr,
 };
 
+static ssize_t alias_show(struct device *dev,
+                         struct device_attribute *attr,
+                         char *buf)
+{
+       struct intel_uncore_pmu *pmu = dev_to_uncore_pmu(dev);
+       char pmu_name[UNCORE_PMU_NAME_LEN];
+
+       uncore_get_alias_name(pmu_name, pmu);
+       return sysfs_emit(buf, "%s\n", pmu_name);
+}
+
+static DEVICE_ATTR_RO(alias);
+
+static struct attribute *uncore_alias_attrs[] = {
+       &dev_attr_alias.attr,
+       NULL
+};
+
+ATTRIBUTE_GROUPS(uncore_alias);
+
 static struct intel_uncore_type spr_uncore_chabox = {
        .name                   = "cha",
        .event_mask             = SPR_CHA_PMON_EVENT_MASK,
        .num_shared_regs        = 1,
        .ops                    = &spr_uncore_chabox_ops,
        .format_group           = &spr_uncore_chabox_format_group,
+       .attr_update            = uncore_alias_groups,
 };
 
 static struct intel_uncore_type spr_uncore_iio = {
        .event_mask             = SNBEP_PMON_RAW_EVENT_MASK,
        .event_mask_ext         = SNR_IIO_PMON_RAW_EVENT_MASK_EXT,
        .format_group           = &snr_uncore_iio_format_group,
+       .attr_update            = uncore_alias_groups,
 };
 
 static struct attribute *spr_uncore_raw_formats_attr[] = {
 #define SPR_UNCORE_COMMON_FORMAT()                             \
        .event_mask             = SNBEP_PMON_RAW_EVENT_MASK,    \
        .event_mask_ext         = SPR_RAW_EVENT_MASK_EXT,       \
-       .format_group           = &spr_uncore_raw_format_group
+       .format_group           = &spr_uncore_raw_format_group, \
+       .attr_update            = uncore_alias_groups
 
 static struct intel_uncore_type spr_uncore_irp = {
        SPR_UNCORE_COMMON_FORMAT(),
 
 static struct intel_uncore_type spr_uncore_pcu = {
        .name                   = "pcu",
+       .attr_update            = uncore_alias_groups,
 };
 
 static void spr_uncore_mmio_enable_event(struct intel_uncore_box *box,
                to_type->event_descs = from_type->event_descs;
        if (from_type->format_group)
                to_type->format_group = from_type->format_group;
+       if (from_type->attr_update)
+               to_type->attr_update = from_type->attr_update;
 }
 
 static struct intel_uncore_type **