1f5288874d
In preparation for misaligned vector performance hwprobe keys, rename the hwprobe key values associated with misaligned scalar accesses to include the term SCALAR. Leave the old defines in place to maintain source compatibility. This change is intended to be a functional no-op. Signed-off-by: Evan Green <evan@rivosinc.com> Reviewed-by: Charlie Jenkins <charlie@rivosinc.com> Link: https://lore.kernel.org/r/20240809214444.3257596-3-evan@rivosinc.com Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
277 lines
13 KiB
ReStructuredText
277 lines
13 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0
|
|
|
|
RISC-V Hardware Probing Interface
|
|
---------------------------------
|
|
|
|
The RISC-V hardware probing interface is based around a single syscall, which
|
|
is defined in <asm/hwprobe.h>::
|
|
|
|
struct riscv_hwprobe {
|
|
__s64 key;
|
|
__u64 value;
|
|
};
|
|
|
|
long sys_riscv_hwprobe(struct riscv_hwprobe *pairs, size_t pair_count,
|
|
size_t cpusetsize, cpu_set_t *cpus,
|
|
unsigned int flags);
|
|
|
|
The arguments are split into three groups: an array of key-value pairs, a CPU
|
|
set, and some flags. The key-value pairs are supplied with a count. Userspace
|
|
must prepopulate the key field for each element, and the kernel will fill in the
|
|
value if the key is recognized. If a key is unknown to the kernel, its key field
|
|
will be cleared to -1, and its value set to 0. The CPU set is defined by
|
|
CPU_SET(3) with size ``cpusetsize`` bytes. For value-like keys (eg. vendor,
|
|
arch, impl), the returned value will only be valid if all CPUs in the given set
|
|
have the same value. Otherwise -1 will be returned. For boolean-like keys, the
|
|
value returned will be a logical AND of the values for the specified CPUs.
|
|
Usermode can supply NULL for ``cpus`` and 0 for ``cpusetsize`` as a shortcut for
|
|
all online CPUs. The currently supported flags are:
|
|
|
|
* :c:macro:`RISCV_HWPROBE_WHICH_CPUS`: This flag basically reverses the behavior
|
|
of sys_riscv_hwprobe(). Instead of populating the values of keys for a given
|
|
set of CPUs, the values of each key are given and the set of CPUs is reduced
|
|
by sys_riscv_hwprobe() to only those which match each of the key-value pairs.
|
|
How matching is done depends on the key type. For value-like keys, matching
|
|
means to be the exact same as the value. For boolean-like keys, matching
|
|
means the result of a logical AND of the pair's value with the CPU's value is
|
|
exactly the same as the pair's value. Additionally, when ``cpus`` is an empty
|
|
set, then it is initialized to all online CPUs which fit within it, i.e. the
|
|
CPU set returned is the reduction of all the online CPUs which can be
|
|
represented with a CPU set of size ``cpusetsize``.
|
|
|
|
All other flags are reserved for future compatibility and must be zero.
|
|
|
|
On success 0 is returned, on failure a negative error code is returned.
|
|
|
|
The following keys are defined:
|
|
|
|
* :c:macro:`RISCV_HWPROBE_KEY_MVENDORID`: Contains the value of ``mvendorid``,
|
|
as defined by the RISC-V privileged architecture specification.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_KEY_MARCHID`: Contains the value of ``marchid``, as
|
|
defined by the RISC-V privileged architecture specification.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_KEY_MIMPLID`: Contains the value of ``mimplid``, as
|
|
defined by the RISC-V privileged architecture specification.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_KEY_BASE_BEHAVIOR`: A bitmask containing the base
|
|
user-visible behavior that this kernel supports. The following base user ABIs
|
|
are defined:
|
|
|
|
* :c:macro:`RISCV_HWPROBE_BASE_BEHAVIOR_IMA`: Support for rv32ima or
|
|
rv64ima, as defined by version 2.2 of the user ISA and version 1.10 of the
|
|
privileged ISA, with the following known exceptions (more exceptions may be
|
|
added, but only if it can be demonstrated that the user ABI is not broken):
|
|
|
|
* The ``fence.i`` instruction cannot be directly executed by userspace
|
|
programs (it may still be executed in userspace via a
|
|
kernel-controlled mechanism such as the vDSO).
|
|
|
|
* :c:macro:`RISCV_HWPROBE_KEY_IMA_EXT_0`: A bitmask containing the extensions
|
|
that are compatible with the :c:macro:`RISCV_HWPROBE_BASE_BEHAVIOR_IMA`:
|
|
base system behavior.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_IMA_FD`: The F and D extensions are supported, as
|
|
defined by commit cd20cee ("FMIN/FMAX now implement
|
|
minimumNumber/maximumNumber, not minNum/maxNum") of the RISC-V ISA manual.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_IMA_C`: The C extension is supported, as defined
|
|
by version 2.2 of the RISC-V ISA manual.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_IMA_V`: The V extension is supported, as defined by
|
|
version 1.0 of the RISC-V Vector extension manual.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZBA`: The Zba address generation extension is
|
|
supported, as defined in version 1.0 of the Bit-Manipulation ISA
|
|
extensions.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZBB`: The Zbb extension is supported, as defined
|
|
in version 1.0 of the Bit-Manipulation ISA extensions.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZBS`: The Zbs extension is supported, as defined
|
|
in version 1.0 of the Bit-Manipulation ISA extensions.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZICBOZ`: The Zicboz extension is supported, as
|
|
ratified in commit 3dd606f ("Create cmobase-v1.0.pdf") of riscv-CMOs.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZBC` The Zbc extension is supported, as defined
|
|
in version 1.0 of the Bit-Manipulation ISA extensions.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZBKB` The Zbkb extension is supported, as
|
|
defined in version 1.0 of the Scalar Crypto ISA extensions.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZBKC` The Zbkc extension is supported, as
|
|
defined in version 1.0 of the Scalar Crypto ISA extensions.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZBKX` The Zbkx extension is supported, as
|
|
defined in version 1.0 of the Scalar Crypto ISA extensions.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZKND` The Zknd extension is supported, as
|
|
defined in version 1.0 of the Scalar Crypto ISA extensions.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZKNE` The Zkne extension is supported, as
|
|
defined in version 1.0 of the Scalar Crypto ISA extensions.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZKNH` The Zknh extension is supported, as
|
|
defined in version 1.0 of the Scalar Crypto ISA extensions.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZKSED` The Zksed extension is supported, as
|
|
defined in version 1.0 of the Scalar Crypto ISA extensions.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZKSH` The Zksh extension is supported, as
|
|
defined in version 1.0 of the Scalar Crypto ISA extensions.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZKT` The Zkt extension is supported, as defined
|
|
in version 1.0 of the Scalar Crypto ISA extensions.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVBB`: The Zvbb extension is supported as
|
|
defined in version 1.0 of the RISC-V Cryptography Extensions Volume II.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVBC`: The Zvbc extension is supported as
|
|
defined in version 1.0 of the RISC-V Cryptography Extensions Volume II.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVKB`: The Zvkb extension is supported as
|
|
defined in version 1.0 of the RISC-V Cryptography Extensions Volume II.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVKG`: The Zvkg extension is supported as
|
|
defined in version 1.0 of the RISC-V Cryptography Extensions Volume II.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVKNED`: The Zvkned extension is supported as
|
|
defined in version 1.0 of the RISC-V Cryptography Extensions Volume II.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVKNHA`: The Zvknha extension is supported as
|
|
defined in version 1.0 of the RISC-V Cryptography Extensions Volume II.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVKNHB`: The Zvknhb extension is supported as
|
|
defined in version 1.0 of the RISC-V Cryptography Extensions Volume II.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVKSED`: The Zvksed extension is supported as
|
|
defined in version 1.0 of the RISC-V Cryptography Extensions Volume II.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVKSH`: The Zvksh extension is supported as
|
|
defined in version 1.0 of the RISC-V Cryptography Extensions Volume II.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVKT`: The Zvkt extension is supported as
|
|
defined in version 1.0 of the RISC-V Cryptography Extensions Volume II.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZFH`: The Zfh extension version 1.0 is supported
|
|
as defined in the RISC-V ISA manual.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZFHMIN`: The Zfhmin extension version 1.0 is
|
|
supported as defined in the RISC-V ISA manual.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZIHINTNTL`: The Zihintntl extension version 1.0
|
|
is supported as defined in the RISC-V ISA manual.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVFH`: The Zvfh extension is supported as
|
|
defined in the RISC-V Vector manual starting from commit e2ccd0548d6c
|
|
("Remove draft warnings from Zvfh[min]").
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVFHMIN`: The Zvfhmin extension is supported as
|
|
defined in the RISC-V Vector manual starting from commit e2ccd0548d6c
|
|
("Remove draft warnings from Zvfh[min]").
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZFA`: The Zfa extension is supported as
|
|
defined in the RISC-V ISA manual starting from commit 056b6ff467c7
|
|
("Zfa is ratified").
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZTSO`: The Ztso extension is supported as
|
|
defined in the RISC-V ISA manual starting from commit 5618fb5a216b
|
|
("Ztso is now ratified.")
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZACAS`: The Zacas extension is supported as
|
|
defined in the Atomic Compare-and-Swap (CAS) instructions manual starting
|
|
from commit 5059e0ca641c ("update to ratified").
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZICOND`: The Zicond extension is supported as
|
|
defined in the RISC-V Integer Conditional (Zicond) operations extension
|
|
manual starting from commit 95cf1f9 ("Add changes requested by Ved
|
|
during signoff")
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZIHINTPAUSE`: The Zihintpause extension is
|
|
supported as defined in the RISC-V ISA manual starting from commit
|
|
d8ab5c78c207 ("Zihintpause is ratified").
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVE32X`: The Vector sub-extension Zve32x is
|
|
supported, as defined by version 1.0 of the RISC-V Vector extension manual.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVE32F`: The Vector sub-extension Zve32f is
|
|
supported, as defined by version 1.0 of the RISC-V Vector extension manual.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVE64X`: The Vector sub-extension Zve64x is
|
|
supported, as defined by version 1.0 of the RISC-V Vector extension manual.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVE64F`: The Vector sub-extension Zve64f is
|
|
supported, as defined by version 1.0 of the RISC-V Vector extension manual.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZVE64D`: The Vector sub-extension Zve64d is
|
|
supported, as defined by version 1.0 of the RISC-V Vector extension manual.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZIMOP`: The Zimop May-Be-Operations extension is
|
|
supported as defined in the RISC-V ISA manual starting from commit
|
|
58220614a5f ("Zimop is ratified/1.0").
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZCA`: The Zca extension part of Zc* standard
|
|
extensions for code size reduction, as ratified in commit 8be3419c1c0
|
|
("Zcf doesn't exist on RV64 as it contains no instructions") of
|
|
riscv-code-size-reduction.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZCB`: The Zcb extension part of Zc* standard
|
|
extensions for code size reduction, as ratified in commit 8be3419c1c0
|
|
("Zcf doesn't exist on RV64 as it contains no instructions") of
|
|
riscv-code-size-reduction.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZCD`: The Zcd extension part of Zc* standard
|
|
extensions for code size reduction, as ratified in commit 8be3419c1c0
|
|
("Zcf doesn't exist on RV64 as it contains no instructions") of
|
|
riscv-code-size-reduction.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZCF`: The Zcf extension part of Zc* standard
|
|
extensions for code size reduction, as ratified in commit 8be3419c1c0
|
|
("Zcf doesn't exist on RV64 as it contains no instructions") of
|
|
riscv-code-size-reduction.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZCMOP`: The Zcmop May-Be-Operations extension is
|
|
supported as defined in the RISC-V ISA manual starting from commit
|
|
c732a4f39a4 ("Zcmop is ratified/1.0").
|
|
|
|
* :c:macro:`RISCV_HWPROBE_EXT_ZAWRS`: The Zawrs extension is supported as
|
|
ratified in commit 98918c844281 ("Merge pull request #1217 from
|
|
riscv/zawrs") of riscv-isa-manual.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_KEY_CPUPERF_0`: Deprecated. Returns similar values to
|
|
:c:macro:`RISCV_HWPROBE_KEY_MISALIGNED_SCALAR_PERF`, but the key was
|
|
mistakenly classified as a bitmask rather than a value.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_KEY_MISALIGNED_SCALAR_PERF`: An enum value describing
|
|
the performance of misaligned scalar native word accesses on the selected set
|
|
of processors.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_MISALIGNED_SCALAR_UNKNOWN`: The performance of
|
|
misaligned scalar accesses is unknown.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED`: Misaligned scalar
|
|
accesses are emulated via software, either in or below the kernel. These
|
|
accesses are always extremely slow.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_MISALIGNED_SCALAR_SLOW`: Misaligned scalar native
|
|
word sized accesses are slower than the equivalent quantity of byte
|
|
accesses. Misaligned accesses may be supported directly in hardware, or
|
|
trapped and emulated by software.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_MISALIGNED_SCALAR_FAST`: Misaligned scalar native
|
|
word sized accesses are faster than the equivalent quantity of byte
|
|
accesses.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_MISALIGNED_SCALAR_UNSUPPORTED`: Misaligned scalar
|
|
accesses are not supported at all and will generate a misaligned address
|
|
fault.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_KEY_ZICBOZ_BLOCK_SIZE`: An unsigned int which
|
|
represents the size of the Zicboz block in bytes.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_KEY_HIGHEST_VIRT_ADDRESS`: An unsigned long which
|
|
represent the highest userspace virtual address usable.
|
|
|
|
* :c:macro:`RISCV_HWPROBE_KEY_TIME_CSR_FREQ`: Frequency (in Hz) of `time CSR`.
|