1// SPDX-License-Identifier: GPL-2.0-only
2// Copyright (C) 2021-2 ARM Limited.
3// Original author: Mark Brown <broonie@kernel.org>
4
5#ifndef SME_INST_H
6#define SME_INST_H
7
8/*
9 * RDSVL X\nx, #\imm
10 */
11.macro rdsvl nx, imm
12	.inst	0x4bf5800			\
13		| (\imm << 5)			\
14		| (\nx)
15.endm
16
17.macro smstop
18	msr	S0_3_C4_C6_3, xzr
19.endm
20
21.macro smstart_za
22	msr	S0_3_C4_C5_3, xzr
23.endm
24
25.macro smstart_sm
26	msr	S0_3_C4_C3_3, xzr
27.endm
28
29/*
30 * LDR (vector to ZA array):
31 *	LDR ZA[\nw, #\offset], [X\nxbase, #\offset, MUL VL]
32 */
33.macro _ldr_za nw, nxbase, offset=0
34	.inst	0xe1000000			\
35		| (((\nw) & 3) << 13)		\
36		| ((\nxbase) << 5)		\
37		| ((\offset) & 7)
38.endm
39
40/*
41 * STR (vector from ZA array):
42 *	STR ZA[\nw, #\offset], [X\nxbase, #\offset, MUL VL]
43 */
44.macro _str_za nw, nxbase, offset=0
45	.inst	0xe1200000			\
46		| (((\nw) & 3) << 13)		\
47		| ((\nxbase) << 5)		\
48		| ((\offset) & 7)
49.endm
50
51/*
52 * LDR (ZT0)
53 *
54 *	LDR ZT0, nx
55 */
56.macro _ldr_zt nx
57	.inst	0xe11f8000			\
58		| (((\nx) & 0x1f) << 5)
59.endm
60
61/*
62 * STR (ZT0)
63 *
64 *	STR ZT0, nx
65 */
66.macro _str_zt nx
67	.inst	0xe13f8000			\
68		| (((\nx) & 0x1f) << 5)
69.endm
70
71#endif
72