From: apinski@cavium.com (Andrew Pinski)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv2] ARM64: Add AT_ARM64_MIDR to the aux vector
Date: Sun, 30 Aug 2015 02:46:22 +0800 [thread overview]
Message-ID: <1440873982-44062-1-git-send-email-apinski@cavium.com> (raw)
It is useful to pass down MIDR register down to userland if all of
the online cores are all the same type. This adds AT_ARM64_MIDR
aux vector type and passes down the midr system register.
This is alternative to MIDR_EL1 part of
http://lists.infradead.org/pipermail/linux-arm-kernel/2015-July/358995.html.
It allows for faster access to midr_el1 than going through a trap and
does not exist if the set of cores are not the same.
Changes from v1:
Forgot to include the auxvec.h part.
Signed-off-by: Andrew Pinski <apinski@cavium.com>
---
arch/arm64/include/asm/cpu.h | 1 +
arch/arm64/include/asm/elf.h | 6 ++++++
arch/arm64/include/uapi/asm/auxvec.h | 3 +++
arch/arm64/kernel/cpuinfo.c | 22 ++++++++++++++++++++++
4 files changed, 32 insertions(+)
diff --git a/arch/arm64/include/asm/cpu.h b/arch/arm64/include/asm/cpu.h
index 8e797b2..fab0aa1 100644
--- a/arch/arm64/include/asm/cpu.h
+++ b/arch/arm64/include/asm/cpu.h
@@ -62,5 +62,6 @@ DECLARE_PER_CPU(struct cpuinfo_arm64, cpu_data);
void cpuinfo_store_cpu(void);
void __init cpuinfo_store_boot_cpu(void);
+u32 get_arm64_midr(void);
#endif /* __ASM_CPU_H */
diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h
index faad6df..d3549de 100644
--- a/arch/arm64/include/asm/elf.h
+++ b/arch/arm64/include/asm/elf.h
@@ -17,6 +17,7 @@
#define __ASM_ELF_H
#include <asm/hwcap.h>
+#include <asm/cpu.h>
/*
* ELF register definitions..
@@ -138,8 +139,13 @@ typedef struct user_fpsimd_state elf_fpregset_t;
#define ARCH_DLINFO \
do { \
+ u32 midr; \
+ \
NEW_AUX_ENT(AT_SYSINFO_EHDR, \
(elf_addr_t)current->mm->context.vdso); \
+ midr = get_arm64_midr(); \
+ if (midr != 0) \
+ NEW_AUX_ENT(AT_ARM64_MIDR, (elf_addr_t)midr); \
} while (0)
#define ARCH_HAS_SETUP_ADDITIONAL_PAGES
diff --git a/arch/arm64/include/uapi/asm/auxvec.h b/arch/arm64/include/uapi/asm/auxvec.h
index 22d6d88..dc55c56 100644
--- a/arch/arm64/include/uapi/asm/auxvec.h
+++ b/arch/arm64/include/uapi/asm/auxvec.h
@@ -19,4 +19,7 @@
/* vDSO location */
#define AT_SYSINFO_EHDR 33
+/* Machine IDenfier Register (MDIR). */
+#define AT_ARM64_MIDR 38
+
#endif
diff --git a/arch/arm64/kernel/cpuinfo.c b/arch/arm64/kernel/cpuinfo.c
index 75d5a86..b14c87d 100644
--- a/arch/arm64/kernel/cpuinfo.c
+++ b/arch/arm64/kernel/cpuinfo.c
@@ -254,3 +254,25 @@ void __init cpuinfo_store_boot_cpu(void)
boot_cpu_data = *info;
}
+
+u32 get_arm64_midr(void)
+{
+ int i;
+ u32 midr = 0;
+
+ for_each_online_cpu(i) {
+ struct cpuinfo_arm64 *cpuinfo = &per_cpu(cpu_data, i);
+ u32 oldmidr = midr;
+
+ midr = cpuinfo->reg_midr;
+ /*
+ * If there are cpus which have a different
+ * midr just return 0.
+ */
+ if (oldmidr && oldmidr != midr)
+ return 0;
+ }
+
+ return midr;
+}
+
--
1.7.10.4
next reply other threads:[~2015-08-29 18:46 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-29 18:46 Andrew Pinski [this message]
2015-09-01 16:33 ` [PATCHv2] ARM64: Add AT_ARM64_MIDR to the aux vector Mark Rutland
2015-09-01 16:51 ` pinskia at gmail.com
2015-09-01 17:06 ` Pinski, Andrew
2015-09-01 17:30 ` Mark Rutland
2015-09-01 17:58 ` pinskia at gmail.com
2015-09-01 19:12 ` Siarhei Siamashka
2015-09-02 0:28 ` Pinski, Andrew
2015-09-02 13:57 ` Siarhei Siamashka
2015-09-02 14:52 ` Andrew Pinski
2015-09-02 17:11 ` Catalin Marinas
2015-09-02 17:21 ` Pinski, Andrew
2015-09-02 20:11 ` Thomas Gleixner
2015-09-03 17:14 ` Catalin Marinas
2015-09-01 17:19 ` Mark Rutland
2015-09-01 17:29 ` Pinski, Andrew
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1440873982-44062-1-git-send-email-apinski@cavium.com \
--to=apinski@cavium.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox