Commit 9a3b675c authored by Alexander Antonov's avatar Alexander Antonov Committed by Peter Zijlstra
Browse files

perf/x86/intel/uncore: Enable UPI topology discovery for Sapphire Rapids



UPI topology discovery on SPR is same as in ICX but UBOX device has
different Device ID 0x3250.

This patch enables /sys/devices/uncore_upi_*/die* attributes on SPR.

Signed-off-by: default avatarAlexander Antonov <alexander.antonov@linux.intel.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: default avatarKan Liang <kan.liang@linux.intel.com>
Link: https://lore.kernel.org/r/20221117122833.3103580-10-alexander.antonov@linux.intel.com
parent f680b6e6
Loading
Loading
Loading
Loading
+42 −1
Original line number Diff line number Diff line
@@ -458,6 +458,7 @@

/* SPR */
#define SPR_RAW_EVENT_MASK_EXT			0xffffff
#define SPR_UBOX_DID				0x3250

/* SPR CHA */
#define SPR_CHA_PMON_CTL_TID_EN			(1 << 16)
@@ -6112,9 +6113,43 @@ static struct intel_uncore_type spr_uncore_m2m = {
	.name			= "m2m",
};

static struct attribute_group spr_upi_mapping_group = {
	.is_visible	= skx_upi_mapping_visible,
};

static const struct attribute_group *spr_upi_attr_update[] = {
	&uncore_alias_group,
	&spr_upi_mapping_group,
	NULL
};

#define SPR_UPI_REGS_ADDR_DEVICE_LINK0	0x01

static int spr_upi_set_mapping(struct intel_uncore_type *type)
{
	return pmu_upi_set_mapping(type, &spr_upi_mapping_group);
}

static void spr_upi_cleanup_mapping(struct intel_uncore_type *type)
{
	pmu_cleanup_mapping(type, &spr_upi_mapping_group);
}

static int spr_upi_get_topology(struct intel_uncore_type *type)
{
	return discover_upi_topology(type, SPR_UBOX_DID, SPR_UPI_REGS_ADDR_DEVICE_LINK0);
}

static struct intel_uncore_type spr_uncore_upi = {
	SPR_UNCORE_PCI_COMMON_FORMAT(),
	.event_mask		= SNBEP_PMON_RAW_EVENT_MASK,
	.event_mask_ext		= SPR_RAW_EVENT_MASK_EXT,
	.format_group		= &spr_uncore_raw_format_group,
	.ops			= &spr_uncore_pci_ops,
	.name			= "upi",
	.attr_update		= spr_upi_attr_update,
	.get_topology		= spr_upi_get_topology,
	.set_mapping		= spr_upi_set_mapping,
	.cleanup_mapping	= spr_upi_cleanup_mapping,
};

static struct intel_uncore_type spr_uncore_m3upi = {
@@ -6318,6 +6353,12 @@ static void uncore_type_customized_copy(struct intel_uncore_type *to_type,
		to_type->format_group = from_type->format_group;
	if (from_type->attr_update)
		to_type->attr_update = from_type->attr_update;
	if (from_type->set_mapping)
		to_type->set_mapping = from_type->set_mapping;
	if (from_type->get_topology)
		to_type->get_topology = from_type->get_topology;
	if (from_type->cleanup_mapping)
		to_type->cleanup_mapping = from_type->cleanup_mapping;
}

static struct intel_uncore_type **