Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm64/lib/clear_page.S
26425 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* Copyright (C) 2012 ARM Ltd.
4
*/
5
6
#include <linux/linkage.h>
7
#include <linux/const.h>
8
#include <asm/assembler.h>
9
#include <asm/page.h>
10
11
/*
12
* Clear page @dest
13
*
14
* Parameters:
15
* x0 - dest
16
*/
17
SYM_FUNC_START(__pi_clear_page)
18
#ifdef CONFIG_AS_HAS_MOPS
19
.arch_extension mops
20
alternative_if_not ARM64_HAS_MOPS
21
b .Lno_mops
22
alternative_else_nop_endif
23
24
mov x1, #PAGE_SIZE
25
setpn [x0]!, x1!, xzr
26
setmn [x0]!, x1!, xzr
27
seten [x0]!, x1!, xzr
28
ret
29
.Lno_mops:
30
#endif
31
mrs x1, dczid_el0
32
tbnz x1, #4, 2f /* Branch if DC ZVA is prohibited */
33
and w1, w1, #0xf
34
mov x2, #4
35
lsl x1, x2, x1
36
37
1: dc zva, x0
38
add x0, x0, x1
39
tst x0, #(PAGE_SIZE - 1)
40
b.ne 1b
41
ret
42
43
2: stnp xzr, xzr, [x0]
44
stnp xzr, xzr, [x0, #16]
45
stnp xzr, xzr, [x0, #32]
46
stnp xzr, xzr, [x0, #48]
47
add x0, x0, #64
48
tst x0, #(PAGE_SIZE - 1)
49
b.ne 2b
50
ret
51
SYM_FUNC_END(__pi_clear_page)
52
SYM_FUNC_ALIAS(clear_page, __pi_clear_page)
53
EXPORT_SYMBOL(clear_page)
54
55