Commit 8688c01e authored by Yicong Yang's avatar Yicong Yang Committed by Will Deacon
Browse files

drivers/perf: hisi: Provide a generic implementation of cpumask/identifier



Each type of HiSilicon Uncore PMU has the following sysfs attributes:

- format: bitmask in perf_event_attr::config[012] of corresponding
  attribute
- event: events name and corresponding event code
- cpumask: range of CPUs the events can be opened on
- identifier: the version of this PMU

Different types of PMU have different implementations of the "format"
and "event" but all share the same implementation of the "cpumask"
and "identifier". Thus we can move cpumask and identifier to the
hisi_uncore_pmu framework and drivers can use the generic
implementation.

Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: default avatarYicong Yang <yangyicong@hisilicon.com>
Link: https://lore.kernel.org/r/20241210141525.37788-8-yangyicong@huawei.com


Signed-off-by: default avatarWill Deacon <will@kernel.org>
parent 32528b16
Loading
Loading
Loading
Loading
+2 −25
Original line number Diff line number Diff line
@@ -225,34 +225,11 @@ static const struct attribute_group hisi_cpa_pmu_events_group = {
	.attrs = hisi_cpa_pmu_events_attr,
};

static DEVICE_ATTR(cpumask, 0444, hisi_cpumask_sysfs_show, NULL);

static struct attribute *hisi_cpa_pmu_cpumask_attrs[] = {
	&dev_attr_cpumask.attr,
	NULL
};

static const struct attribute_group hisi_cpa_pmu_cpumask_attr_group = {
	.attrs = hisi_cpa_pmu_cpumask_attrs,
};

static struct device_attribute hisi_cpa_pmu_identifier_attr =
	__ATTR(identifier, 0444, hisi_uncore_pmu_identifier_attr_show, NULL);

static struct attribute *hisi_cpa_pmu_identifier_attrs[] = {
	&hisi_cpa_pmu_identifier_attr.attr,
	NULL
};

static const struct attribute_group hisi_cpa_pmu_identifier_group = {
	.attrs = hisi_cpa_pmu_identifier_attrs,
};

static const struct attribute_group *hisi_cpa_pmu_attr_groups[] = {
	&hisi_cpa_pmu_format_group,
	&hisi_cpa_pmu_events_group,
	&hisi_cpa_pmu_cpumask_attr_group,
	&hisi_cpa_pmu_identifier_group,
	&hisi_pmu_cpumask_attr_group,
	&hisi_pmu_identifier_group,
	NULL
};

+4 −27
Original line number Diff line number Diff line
@@ -380,42 +380,19 @@ static const struct attribute_group hisi_ddrc_pmu_v2_events_group = {
	.attrs = hisi_ddrc_pmu_v2_events_attr,
};

static DEVICE_ATTR(cpumask, 0444, hisi_cpumask_sysfs_show, NULL);

static struct attribute *hisi_ddrc_pmu_cpumask_attrs[] = {
	&dev_attr_cpumask.attr,
	NULL,
};

static const struct attribute_group hisi_ddrc_pmu_cpumask_attr_group = {
	.attrs = hisi_ddrc_pmu_cpumask_attrs,
};

static struct device_attribute hisi_ddrc_pmu_identifier_attr =
	__ATTR(identifier, 0444, hisi_uncore_pmu_identifier_attr_show, NULL);

static struct attribute *hisi_ddrc_pmu_identifier_attrs[] = {
	&hisi_ddrc_pmu_identifier_attr.attr,
	NULL
};

static const struct attribute_group hisi_ddrc_pmu_identifier_group = {
	.attrs = hisi_ddrc_pmu_identifier_attrs,
};

static const struct attribute_group *hisi_ddrc_pmu_v1_attr_groups[] = {
	&hisi_ddrc_pmu_v1_format_group,
	&hisi_ddrc_pmu_v1_events_group,
	&hisi_ddrc_pmu_cpumask_attr_group,
	&hisi_ddrc_pmu_identifier_group,
	&hisi_pmu_cpumask_attr_group,
	&hisi_pmu_identifier_group,
	NULL,
};

static const struct attribute_group *hisi_ddrc_pmu_v2_attr_groups[] = {
	&hisi_ddrc_pmu_v2_format_group,
	&hisi_ddrc_pmu_v2_events_group,
	&hisi_ddrc_pmu_cpumask_attr_group,
	&hisi_ddrc_pmu_identifier_group,
	&hisi_pmu_cpumask_attr_group,
	&hisi_pmu_identifier_group,
	NULL
};

+4 −27
Original line number Diff line number Diff line
@@ -405,42 +405,19 @@ static const struct attribute_group hisi_hha_pmu_v2_events_group = {
	.attrs = hisi_hha_pmu_v2_events_attr,
};

static DEVICE_ATTR(cpumask, 0444, hisi_cpumask_sysfs_show, NULL);

static struct attribute *hisi_hha_pmu_cpumask_attrs[] = {
	&dev_attr_cpumask.attr,
	NULL,
};

static const struct attribute_group hisi_hha_pmu_cpumask_attr_group = {
	.attrs = hisi_hha_pmu_cpumask_attrs,
};

static struct device_attribute hisi_hha_pmu_identifier_attr =
	__ATTR(identifier, 0444, hisi_uncore_pmu_identifier_attr_show, NULL);

static struct attribute *hisi_hha_pmu_identifier_attrs[] = {
	&hisi_hha_pmu_identifier_attr.attr,
	NULL
};

static const struct attribute_group hisi_hha_pmu_identifier_group = {
	.attrs = hisi_hha_pmu_identifier_attrs,
};

static const struct attribute_group *hisi_hha_pmu_v1_attr_groups[] = {
	&hisi_hha_pmu_v1_format_group,
	&hisi_hha_pmu_v1_events_group,
	&hisi_hha_pmu_cpumask_attr_group,
	&hisi_hha_pmu_identifier_group,
	&hisi_pmu_cpumask_attr_group,
	&hisi_pmu_identifier_group,
	NULL,
};

static const struct attribute_group *hisi_hha_pmu_v2_attr_groups[] = {
	&hisi_hha_pmu_v2_format_group,
	&hisi_hha_pmu_v2_events_group,
	&hisi_hha_pmu_cpumask_attr_group,
	&hisi_hha_pmu_identifier_group,
	&hisi_pmu_cpumask_attr_group,
	&hisi_pmu_identifier_group,
	NULL
};

+4 −27
Original line number Diff line number Diff line
@@ -441,42 +441,19 @@ static const struct attribute_group hisi_l3c_pmu_v2_events_group = {
	.attrs = hisi_l3c_pmu_v2_events_attr,
};

static DEVICE_ATTR(cpumask, 0444, hisi_cpumask_sysfs_show, NULL);

static struct attribute *hisi_l3c_pmu_cpumask_attrs[] = {
	&dev_attr_cpumask.attr,
	NULL,
};

static const struct attribute_group hisi_l3c_pmu_cpumask_attr_group = {
	.attrs = hisi_l3c_pmu_cpumask_attrs,
};

static struct device_attribute hisi_l3c_pmu_identifier_attr =
	__ATTR(identifier, 0444, hisi_uncore_pmu_identifier_attr_show, NULL);

static struct attribute *hisi_l3c_pmu_identifier_attrs[] = {
	&hisi_l3c_pmu_identifier_attr.attr,
	NULL
};

static const struct attribute_group hisi_l3c_pmu_identifier_group = {
	.attrs = hisi_l3c_pmu_identifier_attrs,
};

static const struct attribute_group *hisi_l3c_pmu_v1_attr_groups[] = {
	&hisi_l3c_pmu_v1_format_group,
	&hisi_l3c_pmu_v1_events_group,
	&hisi_l3c_pmu_cpumask_attr_group,
	&hisi_l3c_pmu_identifier_group,
	&hisi_pmu_cpumask_attr_group,
	&hisi_pmu_identifier_group,
	NULL,
};

static const struct attribute_group *hisi_l3c_pmu_v2_attr_groups[] = {
	&hisi_l3c_pmu_v2_format_group,
	&hisi_l3c_pmu_v2_events_group,
	&hisi_l3c_pmu_cpumask_attr_group,
	&hisi_l3c_pmu_identifier_group,
	&hisi_pmu_cpumask_attr_group,
	&hisi_pmu_identifier_group,
	NULL
};

+6 −29
Original line number Diff line number Diff line
@@ -353,29 +353,6 @@ static const struct attribute_group hisi_h60pa_pmu_events_group = {
	.attrs = hisi_h60pa_pmu_events_attr,
};

static DEVICE_ATTR(cpumask, 0444, hisi_cpumask_sysfs_show, NULL);

static struct attribute *hisi_pa_pmu_cpumask_attrs[] = {
	&dev_attr_cpumask.attr,
	NULL
};

static const struct attribute_group hisi_pa_pmu_cpumask_attr_group = {
	.attrs = hisi_pa_pmu_cpumask_attrs,
};

static struct device_attribute hisi_pa_pmu_identifier_attr =
	__ATTR(identifier, 0444, hisi_uncore_pmu_identifier_attr_show, NULL);

static struct attribute *hisi_pa_pmu_identifier_attrs[] = {
	&hisi_pa_pmu_identifier_attr.attr,
	NULL
};

static const struct attribute_group hisi_pa_pmu_identifier_group = {
	.attrs = hisi_pa_pmu_identifier_attrs,
};

static struct hisi_pa_pmu_int_regs hisi_pa_pmu_regs = {
	.mask_offset = PA_INT_MASK,
	.clear_offset = PA_INT_CLEAR,
@@ -385,8 +362,8 @@ static struct hisi_pa_pmu_int_regs hisi_pa_pmu_regs = {
static const struct attribute_group *hisi_pa_pmu_v2_attr_groups[] = {
	&hisi_pa_pmu_v2_format_group,
	&hisi_pa_pmu_v2_events_group,
	&hisi_pa_pmu_cpumask_attr_group,
	&hisi_pa_pmu_identifier_group,
	&hisi_pmu_cpumask_attr_group,
	&hisi_pmu_identifier_group,
	NULL
};

@@ -399,8 +376,8 @@ static const struct hisi_pmu_dev_info hisi_h32pa_v2 = {
static const struct attribute_group *hisi_pa_pmu_v3_attr_groups[] = {
	&hisi_pa_pmu_v2_format_group,
	&hisi_pa_pmu_v3_events_group,
	&hisi_pa_pmu_cpumask_attr_group,
	&hisi_pa_pmu_identifier_group,
	&hisi_pmu_cpumask_attr_group,
	&hisi_pmu_identifier_group,
	NULL
};

@@ -419,8 +396,8 @@ static struct hisi_pa_pmu_int_regs hisi_h60pa_pmu_regs = {
static const struct attribute_group *hisi_h60pa_pmu_attr_groups[] = {
	&hisi_pa_pmu_v2_format_group,
	&hisi_h60pa_pmu_events_group,
	&hisi_pa_pmu_cpumask_attr_group,
	&hisi_pa_pmu_identifier_group,
	&hisi_pmu_cpumask_attr_group,
	&hisi_pmu_identifier_group,
	NULL
};

Loading