162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci// Copyright (C) 2021-2 ARM Limited.
362306a36Sopenharmony_ci// Original author: Mark Brown <broonie@kernel.org>
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#ifndef SME_INST_H
662306a36Sopenharmony_ci#define SME_INST_H
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci/*
962306a36Sopenharmony_ci * RDSVL X\nx, #\imm
1062306a36Sopenharmony_ci */
1162306a36Sopenharmony_ci.macro rdsvl nx, imm
1262306a36Sopenharmony_ci	.inst	0x4bf5800			\
1362306a36Sopenharmony_ci		| (\imm << 5)			\
1462306a36Sopenharmony_ci		| (\nx)
1562306a36Sopenharmony_ci.endm
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci.macro smstop
1862306a36Sopenharmony_ci	msr	S0_3_C4_C6_3, xzr
1962306a36Sopenharmony_ci.endm
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci.macro smstart_za
2262306a36Sopenharmony_ci	msr	S0_3_C4_C5_3, xzr
2362306a36Sopenharmony_ci.endm
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci.macro smstart_sm
2662306a36Sopenharmony_ci	msr	S0_3_C4_C3_3, xzr
2762306a36Sopenharmony_ci.endm
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci/*
3062306a36Sopenharmony_ci * LDR (vector to ZA array):
3162306a36Sopenharmony_ci *	LDR ZA[\nw, #\offset], [X\nxbase, #\offset, MUL VL]
3262306a36Sopenharmony_ci */
3362306a36Sopenharmony_ci.macro _ldr_za nw, nxbase, offset=0
3462306a36Sopenharmony_ci	.inst	0xe1000000			\
3562306a36Sopenharmony_ci		| (((\nw) & 3) << 13)		\
3662306a36Sopenharmony_ci		| ((\nxbase) << 5)		\
3762306a36Sopenharmony_ci		| ((\offset) & 7)
3862306a36Sopenharmony_ci.endm
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci/*
4162306a36Sopenharmony_ci * STR (vector from ZA array):
4262306a36Sopenharmony_ci *	STR ZA[\nw, #\offset], [X\nxbase, #\offset, MUL VL]
4362306a36Sopenharmony_ci */
4462306a36Sopenharmony_ci.macro _str_za nw, nxbase, offset=0
4562306a36Sopenharmony_ci	.inst	0xe1200000			\
4662306a36Sopenharmony_ci		| (((\nw) & 3) << 13)		\
4762306a36Sopenharmony_ci		| ((\nxbase) << 5)		\
4862306a36Sopenharmony_ci		| ((\offset) & 7)
4962306a36Sopenharmony_ci.endm
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci/*
5262306a36Sopenharmony_ci * LDR (ZT0)
5362306a36Sopenharmony_ci *
5462306a36Sopenharmony_ci *	LDR ZT0, nx
5562306a36Sopenharmony_ci */
5662306a36Sopenharmony_ci.macro _ldr_zt nx
5762306a36Sopenharmony_ci	.inst	0xe11f8000			\
5862306a36Sopenharmony_ci		| (((\nx) & 0x1f) << 5)
5962306a36Sopenharmony_ci.endm
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci/*
6262306a36Sopenharmony_ci * STR (ZT0)
6362306a36Sopenharmony_ci *
6462306a36Sopenharmony_ci *	STR ZT0, nx
6562306a36Sopenharmony_ci */
6662306a36Sopenharmony_ci.macro _str_zt nx
6762306a36Sopenharmony_ci	.inst	0xe13f8000			\
6862306a36Sopenharmony_ci		| (((\nx) & 0x1f) << 5)
6962306a36Sopenharmony_ci.endm
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci#endif
72