mirror of https://github.com/torvalds/linux.git
riscv: hwprobe: Add MIPS vendor extension probing
Add a new hwprobe key "RISCV_HWPROBE_KEY_VENDOR_EXT_MIPS_0" which allows userspace to probe for the new xmipsexectl vendor extension. Signed-off-by: Aleksa Paunovic <aleksa.paunovic@htecgroup.com> Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com> Link: https://lore.kernel.org/r/20250724-p8700-pause-v5-4-a6cbbe1c3412@htecgroup.com [pjw@kernel.org: fixed some checkpatch issues] Signed-off-by: Paul Walmsley <pjw@kernel.org>
This commit is contained in:
parent
1d4ce63e33
commit
bb4b0f8a1b
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
#include <uapi/asm/hwprobe.h>
|
#include <uapi/asm/hwprobe.h>
|
||||||
|
|
||||||
#define RISCV_HWPROBE_MAX_KEY 13
|
#define RISCV_HWPROBE_MAX_KEY 14
|
||||||
|
|
||||||
static inline bool riscv_hwprobe_key_is_valid(__s64 key)
|
static inline bool riscv_hwprobe_key_is_valid(__s64 key)
|
||||||
{
|
{
|
||||||
|
|
@ -22,6 +22,7 @@ static inline bool hwprobe_key_is_bitmask(__s64 key)
|
||||||
case RISCV_HWPROBE_KEY_IMA_EXT_0:
|
case RISCV_HWPROBE_KEY_IMA_EXT_0:
|
||||||
case RISCV_HWPROBE_KEY_CPUPERF_0:
|
case RISCV_HWPROBE_KEY_CPUPERF_0:
|
||||||
case RISCV_HWPROBE_KEY_VENDOR_EXT_THEAD_0:
|
case RISCV_HWPROBE_KEY_VENDOR_EXT_THEAD_0:
|
||||||
|
case RISCV_HWPROBE_KEY_VENDOR_EXT_MIPS_0:
|
||||||
case RISCV_HWPROBE_KEY_VENDOR_EXT_SIFIVE_0:
|
case RISCV_HWPROBE_KEY_VENDOR_EXT_SIFIVE_0:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2025 MIPS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _ASM_RISCV_VENDOR_EXTENSIONS_MIPS_HWPROBE_H_
|
||||||
|
#define _ASM_RISCV_VENDOR_EXTENSIONS_MIPS_HWPROBE_H_
|
||||||
|
|
||||||
|
#include <linux/cpumask.h>
|
||||||
|
#include <uapi/asm/hwprobe.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_RISCV_ISA_VENDOR_EXT_MIPS
|
||||||
|
void hwprobe_isa_vendor_ext_mips_0(struct riscv_hwprobe *pair, const struct cpumask *cpus);
|
||||||
|
#else
|
||||||
|
static inline void hwprobe_isa_vendor_ext_mips_0(struct riscv_hwprobe *pair,
|
||||||
|
const struct cpumask *cpus)
|
||||||
|
{
|
||||||
|
pair->value = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // _ASM_RISCV_VENDOR_EXTENSIONS_MIPS_HWPROBE_H_
|
||||||
|
|
@ -106,6 +106,7 @@ struct riscv_hwprobe {
|
||||||
#define RISCV_HWPROBE_KEY_VENDOR_EXT_THEAD_0 11
|
#define RISCV_HWPROBE_KEY_VENDOR_EXT_THEAD_0 11
|
||||||
#define RISCV_HWPROBE_KEY_ZICBOM_BLOCK_SIZE 12
|
#define RISCV_HWPROBE_KEY_ZICBOM_BLOCK_SIZE 12
|
||||||
#define RISCV_HWPROBE_KEY_VENDOR_EXT_SIFIVE_0 13
|
#define RISCV_HWPROBE_KEY_VENDOR_EXT_SIFIVE_0 13
|
||||||
|
#define RISCV_HWPROBE_KEY_VENDOR_EXT_MIPS_0 14
|
||||||
/* Increase RISCV_HWPROBE_MAX_KEY when adding items. */
|
/* Increase RISCV_HWPROBE_MAX_KEY when adding items. */
|
||||||
|
|
||||||
/* Flags */
|
/* Flags */
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||||
|
|
||||||
|
#define RISCV_HWPROBE_VENDOR_EXT_XMIPSEXECTL BIT(0)
|
||||||
|
|
@ -15,6 +15,7 @@
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
#include <asm/vector.h>
|
#include <asm/vector.h>
|
||||||
|
#include <asm/vendor_extensions/mips_hwprobe.h>
|
||||||
#include <asm/vendor_extensions/sifive_hwprobe.h>
|
#include <asm/vendor_extensions/sifive_hwprobe.h>
|
||||||
#include <asm/vendor_extensions/thead_hwprobe.h>
|
#include <asm/vendor_extensions/thead_hwprobe.h>
|
||||||
#include <vdso/vsyscall.h>
|
#include <vdso/vsyscall.h>
|
||||||
|
|
@ -307,6 +308,9 @@ static void hwprobe_one_pair(struct riscv_hwprobe *pair,
|
||||||
case RISCV_HWPROBE_KEY_VENDOR_EXT_THEAD_0:
|
case RISCV_HWPROBE_KEY_VENDOR_EXT_THEAD_0:
|
||||||
hwprobe_isa_vendor_ext_thead_0(pair, cpus);
|
hwprobe_isa_vendor_ext_thead_0(pair, cpus);
|
||||||
break;
|
break;
|
||||||
|
case RISCV_HWPROBE_KEY_VENDOR_EXT_MIPS_0:
|
||||||
|
hwprobe_isa_vendor_ext_mips_0(pair, cpus);
|
||||||
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For forward compatibility, unknown keys don't fail the whole
|
* For forward compatibility, unknown keys don't fail the whole
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_ANDES) += andes.o
|
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_ANDES) += andes.o
|
||||||
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_MIPS) += mips.o
|
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_MIPS) += mips.o
|
||||||
|
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_MIPS) += mips_hwprobe.o
|
||||||
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_SIFIVE) += sifive.o
|
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_SIFIVE) += sifive.o
|
||||||
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_SIFIVE) += sifive_hwprobe.o
|
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_SIFIVE) += sifive_hwprobe.o
|
||||||
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_THEAD) += thead.o
|
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_THEAD) += thead.o
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2025 MIPS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm/vendor_extensions.h>
|
||||||
|
#include <asm/vendor_extensions/mips.h>
|
||||||
|
#include <asm/vendor_extensions/mips_hwprobe.h>
|
||||||
|
#include <asm/vendor_extensions/vendor_hwprobe.h>
|
||||||
|
|
||||||
|
#include <linux/cpumask.h>
|
||||||
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
#include <uapi/asm/hwprobe.h>
|
||||||
|
#include <uapi/asm/vendor/mips.h>
|
||||||
|
|
||||||
|
void hwprobe_isa_vendor_ext_mips_0(struct riscv_hwprobe *pair,
|
||||||
|
const struct cpumask *cpus)
|
||||||
|
{
|
||||||
|
VENDOR_EXTENSION_SUPPORTED(pair, cpus,
|
||||||
|
riscv_isa_vendor_ext_list_mips.per_hart_isa_bitmap,
|
||||||
|
{ VENDOR_EXT_KEY(XMIPSEXECTL); });
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue