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