diff --git a/arch/arm64/include/asm/mpam_sched.h b/arch/arm64/include/asm/mpam_sched.h
index 31522efbf8e5a31c1e02469169dc2254c2c7a6d8..14638793e53e5db702d878404792e6746057a8c2 100644
--- a/arch/arm64/include/asm/mpam_sched.h
+++ b/arch/arm64/include/asm/mpam_sched.h
@@ -39,6 +39,8 @@ static inline void mpam_sched_in(void)
 		__mpam_sched_in();
 }
 
+extern int __read_mostly mpam_enabled;
+
 #else
 
 static inline void mpam_sched_in(void) {}
diff --git a/arch/arm64/kernel/mpam.c b/arch/arm64/kernel/mpam.c
index aa52e5896ac91be7466d8ac052b6908c844ae903..623e9f8d6d8e9fecd8e42023daea4e0f498abc14 100644
--- a/arch/arm64/kernel/mpam.c
+++ b/arch/arm64/kernel/mpam.c
@@ -1242,11 +1242,23 @@ static void mpam_domains_init(struct resctrl_resource *r)
 	}
 }
 
+int __read_mostly mpam_enabled;
+
+static int __init mpam_setup(char *str)
+{
+	mpam_enabled = 1;
+	return 1;
+}
+__setup("mpam", mpam_setup);
+
 static int __init mpam_late_init(void)
 {
 	struct resctrl_resource *r;
 	int state, ret;
 
+	if (!mpam_enabled)
+		return 0;
+
 	if (!cpus_have_const_cap(ARM64_HAS_MPAM))
 		return -ENODEV;