summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHanumant Singh <hanumant@codeaurora.org>2015-07-31 15:01:32 -0700
committerRohit Vaswani <rvaswani@codeaurora.org>2016-03-01 12:22:15 -0800
commitf443059ffdb736f10d093c4b7da2bfa71a3de5ff (patch)
tree916c2673d0bb515a132c72fa86e9ff9bd4b3a921
parent453d9d37edce996a96f09810c261769e7c8ad1f1 (diff)
arm64: Mask out 16KB granule in MMFR register
Memory model feature register specifies the supported page granules. Some ARM cpus may have support for 16KB granules. However currently we donot support 16KB pages sizes. Explicitly mask off that capability if advertised by the cpu. Change-Id: I7daf3f179a5ce103aec7cf103ac198cf64800543 Signed-off-by: Hanumant Singh <hanumant@codeaurora.org>
-rw-r--r--arch/arm64/include/asm/cputype.h4
-rw-r--r--arch/arm64/kernel/cpuinfo.c7
2 files changed, 10 insertions, 1 deletions
diff --git a/arch/arm64/include/asm/cputype.h b/arch/arm64/include/asm/cputype.h
index 1a5949364ed0..8c39167e89d2 100644
--- a/arch/arm64/include/asm/cputype.h
+++ b/arch/arm64/include/asm/cputype.h
@@ -32,6 +32,10 @@
#define MPIDR_AFFINITY_LEVEL(mpidr, level) \
((mpidr >> MPIDR_LEVEL_SHIFT(level)) & MPIDR_LEVEL_MASK)
+#define MMFR0_16KGRAN_SIZE 15
+#define MMFR0_16KGRAN_SHFT 20
+#define MMFR0_EL1_16KGRAN_MASK (MMFR0_16KGRAN_SIZE << MMFR0_16KGRAN_SHFT)
+
#define read_cpuid(reg) ({ \
u64 __val; \
asm("mrs %0, " #reg : "=r" (__val)); \
diff --git a/arch/arm64/kernel/cpuinfo.c b/arch/arm64/kernel/cpuinfo.c
index 0195fbb57119..1dfdb2fb7d35 100644
--- a/arch/arm64/kernel/cpuinfo.c
+++ b/arch/arm64/kernel/cpuinfo.c
@@ -208,7 +208,12 @@ static void __cpuinfo_store_cpu(struct cpuinfo_arm64 *info)
info->reg_id_aa64dfr1 = read_cpuid(ID_AA64DFR1_EL1);
info->reg_id_aa64isar0 = read_cpuid(ID_AA64ISAR0_EL1);
info->reg_id_aa64isar1 = read_cpuid(ID_AA64ISAR1_EL1);
- info->reg_id_aa64mmfr0 = read_cpuid(ID_AA64MMFR0_EL1);
+ /*
+ * Explicitly mask out 16KB granule since we donot
+ * want to support it
+ */
+ info->reg_id_aa64mmfr0 = read_cpuid(ID_AA64MMFR0_EL1) &
+ (~MMFR0_EL1_16KGRAN_MASK);
info->reg_id_aa64mmfr1 = read_cpuid(ID_AA64MMFR1_EL1);
info->reg_id_aa64pfr0 = read_cpuid(ID_AA64PFR0_EL1);
info->reg_id_aa64pfr1 = read_cpuid(ID_AA64PFR1_EL1);