diff options
author | Alex Van Brunt <avanbrunt@nvidia.com> | 2014-05-08 19:09:48 -0700 |
---|---|---|
committer | Mandar Padmawar <mpadmawar@nvidia.com> | 2014-06-03 07:32:58 -0700 |
commit | 6355a9d7ab54fc5c2aa1e5a7351a45bf059a69be (patch) | |
tree | f75ca0a83cf38ad8616d7217e090c769443ff0d5 /arch/arm64 | |
parent | 4280c2cac05905ea976d713373ac62df18cc27f1 (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.S | 39 | ||||
-rw-r--r-- | arch/arm64/lib/clear_page.c | 12 |
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]) : ); +} |