| // SPDX-License-Identifier: GPL-2.0-only |
| // Copyright (C) 2021-2 ARM Limited. |
| // Original author: Mark Brown <broonie@kernel.org> |
| |
| #ifndef SME_INST_H |
| #define SME_INST_H |
| |
| /* |
| * RDSVL X\nx, #\imm |
| */ |
| .macro rdsvl nx, imm |
| .inst 0x4bf5800 \ |
| | (\imm << 5) \ |
| | (\nx) |
| .endm |
| |
| .macro smstop |
| msr S0_3_C4_C6_3, xzr |
| .endm |
| |
| .macro smstart_za |
| msr S0_3_C4_C5_3, xzr |
| .endm |
| |
| .macro smstart_sm |
| msr S0_3_C4_C3_3, xzr |
| .endm |
| |
| /* |
| * LDR (vector to ZA array): |
| * LDR ZA[\nw, #\offset], [X\nxbase, #\offset, MUL VL] |
| */ |
| .macro _ldr_za nw, nxbase, offset=0 |
| .inst 0xe1000000 \ |
| | (((\nw) & 3) << 13) \ |
| | ((\nxbase) << 5) \ |
| | ((\offset) & 7) |
| .endm |
| |
| /* |
| * STR (vector from ZA array): |
| * STR ZA[\nw, #\offset], [X\nxbase, #\offset, MUL VL] |
| */ |
| .macro _str_za nw, nxbase, offset=0 |
| .inst 0xe1200000 \ |
| | (((\nw) & 3) << 13) \ |
| | ((\nxbase) << 5) \ |
| | ((\offset) & 7) |
| .endm |
| |
| /* |
| * LDR (ZT0) |
| * |
| * LDR ZT0, nx |
| */ |
| .macro _ldr_zt nx |
| .inst 0xe11f8000 \ |
| | (((\nx) & 0x1f) << 5) |
| .endm |
| |
| /* |
| * STR (ZT0) |
| * |
| * STR ZT0, nx |
| */ |
| .macro _str_zt nx |
| .inst 0xe13f8000 \ |
| | (((\nx) & 0x1f) << 5) |
| .endm |
| |
| #endif |