summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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]) : );
+}