1ea3de9ceSEvan Green.. SPDX-License-Identifier: GPL-2.0 2ea3de9ceSEvan Green 3ea3de9ceSEvan GreenRISC-V Hardware Probing Interface 4ea3de9ceSEvan Green--------------------------------- 5ea3de9ceSEvan Green 6ea3de9ceSEvan GreenThe RISC-V hardware probing interface is based around a single syscall, which 7ea3de9ceSEvan Greenis defined in <asm/hwprobe.h>:: 8ea3de9ceSEvan Green 9ea3de9ceSEvan Green struct riscv_hwprobe { 10ea3de9ceSEvan Green __s64 key; 11ea3de9ceSEvan Green __u64 value; 12ea3de9ceSEvan Green }; 13ea3de9ceSEvan Green 14ea3de9ceSEvan Green long sys_riscv_hwprobe(struct riscv_hwprobe *pairs, size_t pair_count, 15ea3de9ceSEvan Green size_t cpu_count, cpu_set_t *cpus, 16ea3de9ceSEvan Green unsigned int flags); 17ea3de9ceSEvan Green 18ea3de9ceSEvan GreenThe arguments are split into three groups: an array of key-value pairs, a CPU 19ea3de9ceSEvan Greenset, and some flags. The key-value pairs are supplied with a count. Userspace 20ea3de9ceSEvan Greenmust prepopulate the key field for each element, and the kernel will fill in the 21ea3de9ceSEvan Greenvalue if the key is recognized. If a key is unknown to the kernel, its key field 22ea3de9ceSEvan Greenwill be cleared to -1, and its value set to 0. The CPU set is defined by 23ea3de9ceSEvan GreenCPU_SET(3). For value-like keys (eg. vendor/arch/impl), the returned value will 24ea3de9ceSEvan Greenbe only be valid if all CPUs in the given set have the same value. Otherwise -1 25ea3de9ceSEvan Greenwill be returned. For boolean-like keys, the value returned will be a logical 26ea3de9ceSEvan GreenAND of the values for the specified CPUs. Usermode can supply NULL for cpus and 27ea3de9ceSEvan Green0 for cpu_count as a shortcut for all online CPUs. There are currently no flags, 28ea3de9ceSEvan Greenthis value must be zero for future compatibility. 29ea3de9ceSEvan Green 30ea3de9ceSEvan GreenOn success 0 is returned, on failure a negative error code is returned. 31ea3de9ceSEvan Green 32ea3de9ceSEvan GreenThe following keys are defined: 33ea3de9ceSEvan Green 34ea3de9ceSEvan Green* :c:macro:`RISCV_HWPROBE_KEY_MVENDORID`: Contains the value of ``mvendorid``, 35ea3de9ceSEvan Green as defined by the RISC-V privileged architecture specification. 36ea3de9ceSEvan Green 37ea3de9ceSEvan Green* :c:macro:`RISCV_HWPROBE_KEY_MARCHID`: Contains the value of ``marchid``, as 38ea3de9ceSEvan Green defined by the RISC-V privileged architecture specification. 39ea3de9ceSEvan Green 40ea3de9ceSEvan Green* :c:macro:`RISCV_HWPROBE_KEY_MIMPLID`: Contains the value of ``mimplid``, as 41ea3de9ceSEvan Green defined by the RISC-V privileged architecture specification. 4200e76e2cSEvan Green 4300e76e2cSEvan Green* :c:macro:`RISCV_HWPROBE_KEY_BASE_BEHAVIOR`: A bitmask containing the base 4400e76e2cSEvan Green user-visible behavior that this kernel supports. The following base user ABIs 4500e76e2cSEvan Green are defined: 4600e76e2cSEvan Green 4700e76e2cSEvan Green * :c:macro:`RISCV_HWPROBE_BASE_BEHAVIOR_IMA`: Support for rv32ima or 4800e76e2cSEvan Green rv64ima, as defined by version 2.2 of the user ISA and version 1.10 of the 4900e76e2cSEvan Green privileged ISA, with the following known exceptions (more exceptions may be 5000e76e2cSEvan Green added, but only if it can be demonstrated that the user ABI is not broken): 5100e76e2cSEvan Green 52d6e724d3SPalmer Dabbelt * The ``fence.i`` instruction cannot be directly executed by userspace 5300e76e2cSEvan Green programs (it may still be executed in userspace via a 5400e76e2cSEvan Green kernel-controlled mechanism such as the vDSO). 5500e76e2cSEvan Green 5600e76e2cSEvan Green* :c:macro:`RISCV_HWPROBE_KEY_IMA_EXT_0`: A bitmask containing the extensions 5700e76e2cSEvan Green that are compatible with the :c:macro:`RISCV_HWPROBE_BASE_BEHAVIOR_IMA`: 5800e76e2cSEvan Green base system behavior. 5900e76e2cSEvan Green 6000e76e2cSEvan Green * :c:macro:`RISCV_HWPROBE_IMA_FD`: The F and D extensions are supported, as 6100e76e2cSEvan Green defined by commit cd20cee ("FMIN/FMAX now implement 6200e76e2cSEvan Green minimumNumber/maximumNumber, not minNum/maxNum") of the RISC-V ISA manual. 6300e76e2cSEvan Green 6400e76e2cSEvan Green * :c:macro:`RISCV_HWPROBE_IMA_C`: The C extension is supported, as defined 6500e76e2cSEvan Green by version 2.2 of the RISC-V ISA manual. 6662a31d6eSEvan Green 67162e4df1SAndy Chiu * :c:macro:`RISCV_HWPROBE_IMA_V`: The V extension is supported, as defined by 68162e4df1SAndy Chiu version 1.0 of the RISC-V Vector extension manual. 69162e4df1SAndy Chiu 70c0baf321SEvan Green * :c:macro:`RISCV_HWPROBE_EXT_ZBA`: The Zba address generation extension is 71c0baf321SEvan Green supported, as defined in version 1.0 of the Bit-Manipulation ISA 72c0baf321SEvan Green extensions. 73c0baf321SEvan Green 74c0baf321SEvan Green * :c:macro:`RISCV_HWPROBE_EXT_ZBB`: The Zbb extension is supported, as defined 75c0baf321SEvan Green in version 1.0 of the Bit-Manipulation ISA extensions. 76c0baf321SEvan Green 77c0baf321SEvan Green * :c:macro:`RISCV_HWPROBE_EXT_ZBS`: The Zbs extension is supported, as defined 78c0baf321SEvan Green in version 1.0 of the Bit-Manipulation ISA extensions. 79c0baf321SEvan Green 8062a31d6eSEvan Green* :c:macro:`RISCV_HWPROBE_KEY_CPUPERF_0`: A bitmask that contains performance 8162a31d6eSEvan Green information about the selected set of processors. 8262a31d6eSEvan Green 8362a31d6eSEvan Green * :c:macro:`RISCV_HWPROBE_MISALIGNED_UNKNOWN`: The performance of misaligned 8462a31d6eSEvan Green accesses is unknown. 8562a31d6eSEvan Green 8662a31d6eSEvan Green * :c:macro:`RISCV_HWPROBE_MISALIGNED_EMULATED`: Misaligned accesses are 8762a31d6eSEvan Green emulated via software, either in or below the kernel. These accesses are 8862a31d6eSEvan Green always extremely slow. 8962a31d6eSEvan Green 90*584ea656SEvan Green * :c:macro:`RISCV_HWPROBE_MISALIGNED_SLOW`: Misaligned accesses are slower 91*584ea656SEvan Green than equivalent byte accesses. Misaligned accesses may be supported 92*584ea656SEvan Green directly in hardware, or trapped and emulated by software. 9362a31d6eSEvan Green 94*584ea656SEvan Green * :c:macro:`RISCV_HWPROBE_MISALIGNED_FAST`: Misaligned accesses are faster 95*584ea656SEvan Green than equivalent byte accesses. 9662a31d6eSEvan Green 9762a31d6eSEvan Green * :c:macro:`RISCV_HWPROBE_MISALIGNED_UNSUPPORTED`: Misaligned accesses are 9862a31d6eSEvan Green not supported at all and will generate a misaligned address fault. 99