Skip to content

Commit 831a7f1

Browse files
author
James Morse
committed
arm64: mpam: Advertise the CPUs MPAM limits to the driver
Requesters need to populate the MPAM fields for any traffic they send on the interconnect. For the CPUs these values are taken from the corresponding MPAMy_ELx register. Each requester may have a limit on the largest PARTID or PMG value that can be used. The MPAM driver has to determine the system-wide minimum supported PARTID and PMG values. To do this, the driver needs to be told what each requestor's limit is. CPUs are special, but this infrastructure is also needed for the SMMU and GIC ITS. Call the helper to tell the MPAM driver what the CPUs can do. The return value can be ignored by the arch code as it runs well before the MPAM driver starts probing. Tested-by: Gavin Shan <gshan@redhat.com> Tested-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com> Tested-by: Peter Newman <peternewman@google.com> Tested-by: Zeng Heng <zengheng4@huawei.com> Tested-by: Punit Agrawal <punit.agrawal@oss.qualcomm.com> Tested-by: Jesse Chick <jessechick@os.amperecomputing.com> Reviewed-by: Zeng Heng <zengheng4@huawei.com> Reviewed-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Reviewed-by: Gavin Shan <gshan@redhat.com> Co-developed-by: Ben Horgan <ben.horgan@arm.com> Signed-off-by: Ben Horgan <ben.horgan@arm.com> [ morse: requestor->requester as argued by ispell ] Signed-off-by: James Morse <james.morse@arm.com>
1 parent c544f00 commit 831a7f1

1 file changed

Lines changed: 12 additions & 0 deletions

File tree

arch/arm64/kernel/mpam.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include <asm/mpam.h>
55

6+
#include <linux/arm_mpam.h>
67
#include <linux/jump_label.h>
78
#include <linux/percpu.h>
89

@@ -11,3 +12,14 @@ DEFINE_PER_CPU(u64, arm64_mpam_default);
1112
DEFINE_PER_CPU(u64, arm64_mpam_current);
1213

1314
u64 arm64_mpam_global_default;
15+
16+
static int __init arm64_mpam_register_cpus(void)
17+
{
18+
u64 mpamidr = read_sanitised_ftr_reg(SYS_MPAMIDR_EL1);
19+
u16 partid_max = FIELD_GET(MPAMIDR_EL1_PARTID_MAX, mpamidr);
20+
u8 pmg_max = FIELD_GET(MPAMIDR_EL1_PMG_MAX, mpamidr);
21+
22+
return mpam_register_requestor(partid_max, pmg_max);
23+
}
24+
/* Must occur before mpam_msc_driver_init() from subsys_initcall() */
25+
arch_initcall(arm64_mpam_register_cpus)

0 commit comments

Comments
 (0)