xref: /openbmc/linux/arch/arm64/lib/clear_page.S (revision 0f61f6be)
1caab277bSThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */
2f27bb139SMarc Zyngier/*
3f27bb139SMarc Zyngier * Copyright (C) 2012 ARM Ltd.
4f27bb139SMarc Zyngier */
5f27bb139SMarc Zyngier
6f27bb139SMarc Zyngier#include <linux/linkage.h>
7f27bb139SMarc Zyngier#include <linux/const.h>
8f27bb139SMarc Zyngier#include <asm/assembler.h>
9f27bb139SMarc Zyngier#include <asm/page.h>
10f27bb139SMarc Zyngier
11f27bb139SMarc Zyngier/*
12f27bb139SMarc Zyngier * Clear page @dest
13f27bb139SMarc Zyngier *
14f27bb139SMarc Zyngier * Parameters:
15f27bb139SMarc Zyngier *	x0 - dest
16f27bb139SMarc Zyngier */
17*0f61f6beSMark RutlandSYM_FUNC_START(__pi_clear_page)
18f27bb139SMarc Zyngier	mrs	x1, dczid_el0
19f0616abdSReiji Watanabe	tbnz	x1, #4, 2f	/* Branch if DC ZVA is prohibited */
20f27bb139SMarc Zyngier	and	w1, w1, #0xf
21f27bb139SMarc Zyngier	mov	x2, #4
22f27bb139SMarc Zyngier	lsl	x1, x2, x1
23f27bb139SMarc Zyngier
24f27bb139SMarc Zyngier1:	dc	zva, x0
25f27bb139SMarc Zyngier	add	x0, x0, x1
26f27bb139SMarc Zyngier	tst	x0, #(PAGE_SIZE - 1)
27f27bb139SMarc Zyngier	b.ne	1b
28f27bb139SMarc Zyngier	ret
29f0616abdSReiji Watanabe
30f0616abdSReiji Watanabe2:	stnp	xzr, xzr, [x0]
31f0616abdSReiji Watanabe	stnp	xzr, xzr, [x0, #16]
32f0616abdSReiji Watanabe	stnp	xzr, xzr, [x0, #32]
33f0616abdSReiji Watanabe	stnp	xzr, xzr, [x0, #48]
34f0616abdSReiji Watanabe	add	x0, x0, #64
35f0616abdSReiji Watanabe	tst	x0, #(PAGE_SIZE - 1)
36f0616abdSReiji Watanabe	b.ne	2b
37f0616abdSReiji Watanabe	ret
38*0f61f6beSMark RutlandSYM_FUNC_END(__pi_clear_page)
39*0f61f6beSMark RutlandSYM_FUNC_ALIAS(clear_page, __pi_clear_page)
4050fdecb2SMark RutlandEXPORT_SYMBOL(clear_page)
41