summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Ogden <bernie.ogden@linaro.org>2015-09-08 10:27:34 +0100
committerBernard Ogden <bernie.ogden@linaro.org>2015-09-08 10:27:54 +0100
commitad7152dd68d0ceba124ba39f8f3eef2a6d7357e0 (patch)
tree9b289e6b981b3b20c86afa9d420fea0beb4f1abc
parentefba52390da3065d62362eff6f86dc9b5977dcc0 (diff)
Add AArch64 support
Change-Id: I24fbe49a2d46381ca0cad45b754cf27385b49c10
-rw-r--r--Makefile5
-rw-r--r--modex.c12
2 files changed, 16 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 614f663..5f6f519 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,7 @@
KERNEL_SOURCE ?= /usr/src/linux-headers-$(shell uname -r)
-all:
+arm:
make ARCH=arm -C $(KERNEL_SOURCE) SUBDIRS="`pwd`" modules
+
+arm64:
+ make ARCH=arm64 -C $(KERNEL_SOURCE) SUBDIRS="`pwd`" modules
diff --git a/modex.c b/modex.c
index 4745910..4e196d1 100644
--- a/modex.c
+++ b/modex.c
@@ -72,6 +72,7 @@ static ssize_t modex_read(struct file *file, char *buffer, size_t length, loff_t
int msg_len;
volatile unsigned int actlr, midr, clidr, ccsidr_l1d, ccsidr_l2u;
unsigned int l1d = 0; unsigned int l2u = 2;
+#ifdef __arm__
asm("mrc p15, 0, %0, c1, c0, 1" : "=r" (actlr)); //read actlr
asm("mrc p15, 0, %0, c0, c0, 0" : "=r" (midr)); //read midr
asm("mrc p15, 1, %0, c0, c0, 1" : "=r" (clidr));
@@ -79,6 +80,17 @@ static ssize_t modex_read(struct file *file, char *buffer, size_t length, loff_t
asm volatile("mrc p15, 1, %0, c0, c0, 0" : "=r" (ccsidr_l1d));
asm volatile("mcr p15, 2, %0, c0, c0, 0\nisb" :: "r" (l2u)); //set csselr (cache size selection register)
asm volatile("mrc p15, 1, %0, c0, c0, 0" : "=r" (ccsidr_l2u));
+#elif defined __aarch64__
+ asm("mrs %0, ACTLR_EL1" : "=r" (actlr));
+ asm("mrs %0, MIDR_EL1" : "=r" (midr));
+ asm("mrs %0, CLIDR_EL1" : "=r" (clidr));
+ asm volatile("msr CSSELR_EL1, %0\nisb" :: "r" (l1d));
+ asm volatile("mrs %0, CCSIDR_EL1" : "=r" (ccsidr_l1d));
+ asm volatile("msr CSSELR_EL1, %0\nisb" :: "r" (l2u));
+ asm volatile("mrs %0, CCSIDR_EL1" : "=r" (ccsidr_l2u));
+#else
+ #error "Non-ARM compiler"
+#endif
bytes_written = snprintf(msg, sizeof msg_buffer,
"ACTLR: %#.8x\n"
"MIDR: %#.8x\n"