summaryrefslogtreecommitdiff
path: root/arch/arm64
diff options
context:
space:
mode:
authorAlex Van Brunt <avanbrunt@nvidia.com>2014-05-08 19:09:48 -0700
committerMandar Padmawar <mpadmawar@nvidia.com>2014-06-03 07:32:58 -0700
commit6355a9d7ab54fc5c2aa1e5a7351a45bf059a69be (patch)
treef75ca0a83cf38ad8616d7217e090c769443ff0d5 /arch/arm64
parent4280c2cac05905ea976d713373ac62df18cc27f1 (diff)
arm64: lib: clear_page with non-temporal store
Bug 1512428 Change-Id: Ic9541339b8d6113fe929bc2f7619bce9adce6c97 Signed-off-by: Alex Van Brunt <avanbrunt@nvidia.com> Reviewed-on: http://git-master/r/411674 Reviewed-by: Mandar Padmawar <mpadmawar@nvidia.com> Tested-by: Mandar Padmawar <mpadmawar@nvidia.com>
Diffstat (limited to 'arch/arm64')
-rw-r--r--arch/arm64/lib/clear_page.S39
-rw-r--r--arch/arm64/lib/clear_page.c12
2 files changed, 12 insertions, 39 deletions
diff --git a/arch/arm64/lib/clear_page.S b/arch/arm64/lib/clear_page.S
deleted file mode 100644
index ef08e905e35b..000000000000
--- a/arch/arm64/lib/clear_page.S
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2012 ARM Ltd.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <linux/linkage.h>
-#include <linux/const.h>
-#include <asm/assembler.h>
-#include <asm/page.h>
-
-/*
- * Clear page @dest
- *
- * Parameters:
- * x0 - dest
- */
-ENTRY(clear_page)
- mrs x1, dczid_el0
- and w1, w1, #0xf
- mov x2, #4
- lsl x1, x2, x1
-
-1: dc zva, x0
- add x0, x0, x1
- tst x0, #(PAGE_SIZE - 1)
- b.ne 1b
- ret
-ENDPROC(clear_page)
diff --git a/arch/arm64/lib/clear_page.c b/arch/arm64/lib/clear_page.c
new file mode 100644
index 000000000000..45ecbda81c48
--- /dev/null
+++ b/arch/arm64/lib/clear_page.c
@@ -0,0 +1,12 @@
+#include <asm/page.h>
+#include <linux/types.h>
+
+
+void clear_page(void *to) {
+ u64 *buffer = (u64 *) to;
+ u64 zero = 0ULL;
+ u32 i;
+
+ for (i = 0; i < PAGE_SIZE / sizeof(u64); i += 2)
+ asm volatile("stnp %0, %0, %1" : : "r" (zero), "Q" (buffer[i]) : );
+}