Skip to content

Commit a8fed1b

Browse files
aleksapaunovic-htecPaul Walmsley
authored andcommitted
riscv: Add xmipsexectl as a vendor extension
Add support for MIPS vendor extensions. Add support for the 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-2-a6cbbe1c3412@htecgroup.com [pjw@kernel.org: added the MIPS vendor ID from another patch to fix the build] Signed-off-by: Paul Walmsley <pjw@kernel.org>
1 parent f79671d commit a8fed1b

6 files changed

Lines changed: 65 additions & 0 deletions

File tree

arch/riscv/Kconfig.vendor

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,19 @@ config RISCV_ISA_VENDOR_EXT_ANDES
1616
If you don't know what to do here, say Y.
1717
endmenu
1818

19+
menu "MIPS"
20+
config RISCV_ISA_VENDOR_EXT_MIPS
21+
bool "MIPS vendor extension support"
22+
select RISCV_ISA_VENDOR_EXT
23+
default y
24+
help
25+
Say N here to disable detection of and support for all MIPS vendor
26+
extensions. Without this option enabled, MIPS vendor extensions will
27+
not be detected at boot and their presence not reported to userspace.
28+
29+
If you don't know what to do here, say Y.
30+
endmenu
31+
1932
menu "SiFive"
2033
config RISCV_ISA_VENDOR_EXT_SIFIVE
2134
bool "SiFive vendor extension support"
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/* SPDX-License-Identifier: GPL-2.0-only */
2+
/*
3+
* Copyright (C) 2025 MIPS.
4+
*/
5+
6+
#ifndef _ASM_RISCV_VENDOR_EXTENSIONS_MIPS_H
7+
#define _ASM_RISCV_VENDOR_EXTENSIONS_MIPS_H
8+
9+
#include <linux/types.h>
10+
11+
#define RISCV_ISA_VENDOR_EXT_XMIPSEXECTL 0
12+
13+
#ifndef __ASSEMBLER__
14+
struct riscv_isa_vendor_ext_data_list;
15+
extern struct riscv_isa_vendor_ext_data_list riscv_isa_vendor_ext_list_mips;
16+
#endif
17+
18+
#endif // _ASM_RISCV_VENDOR_EXTENSIONS_MIPS_H

arch/riscv/include/asm/vendorid_list.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@
99
#define MICROCHIP_VENDOR_ID 0x029
1010
#define SIFIVE_VENDOR_ID 0x489
1111
#define THEAD_VENDOR_ID 0x5b7
12+
#define MIPS_VENDOR_ID 0x722
1213

1314
#endif

arch/riscv/kernel/vendor_extensions.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <asm/vendorid_list.h>
77
#include <asm/vendor_extensions.h>
88
#include <asm/vendor_extensions/andes.h>
9+
#include <asm/vendor_extensions/mips.h>
910
#include <asm/vendor_extensions/sifive.h>
1011
#include <asm/vendor_extensions/thead.h>
1112

@@ -16,6 +17,9 @@ struct riscv_isa_vendor_ext_data_list *riscv_isa_vendor_ext_list[] = {
1617
#ifdef CONFIG_RISCV_ISA_VENDOR_EXT_ANDES
1718
&riscv_isa_vendor_ext_list_andes,
1819
#endif
20+
#ifdef CONFIG_RISCV_ISA_VENDOR_EXT_MIPS
21+
&riscv_isa_vendor_ext_list_mips,
22+
#endif
1923
#ifdef CONFIG_RISCV_ISA_VENDOR_EXT_SIFIVE
2024
&riscv_isa_vendor_ext_list_sifive,
2125
#endif
@@ -49,6 +53,12 @@ bool __riscv_isa_vendor_extension_available(int cpu, unsigned long vendor, unsig
4953
cpu_bmap = riscv_isa_vendor_ext_list_andes.per_hart_isa_bitmap;
5054
break;
5155
#endif
56+
#ifdef CONFIG_RISCV_ISA_VENDOR_EXT_MIPS
57+
case MIPS_VENDOR_ID:
58+
bmap = &riscv_isa_vendor_ext_list_mips.all_harts_isa_bitmap;
59+
cpu_bmap = riscv_isa_vendor_ext_list_mips.per_hart_isa_bitmap;
60+
break;
61+
#endif
5262
#ifdef CONFIG_RISCV_ISA_VENDOR_EXT_SIFIVE
5363
case SIFIVE_VENDOR_ID:
5464
bmap = &riscv_isa_vendor_ext_list_sifive.all_harts_isa_bitmap;

arch/riscv/kernel/vendor_extensions/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# SPDX-License-Identifier: GPL-2.0-only
22

33
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_ANDES) += andes.o
4+
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_MIPS) += mips.o
45
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_SIFIVE) += sifive.o
56
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_SIFIVE) += sifive_hwprobe.o
67
obj-$(CONFIG_RISCV_ISA_VENDOR_EXT_THEAD) += thead.o
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// SPDX-License-Identifier: GPL-2.0-only
2+
/*
3+
* Copyright (C) 2025 MIPS.
4+
*/
5+
6+
#include <asm/cpufeature.h>
7+
#include <asm/vendor_extensions.h>
8+
#include <asm/vendor_extensions/mips.h>
9+
10+
#include <linux/array_size.h>
11+
#include <linux/cpumask.h>
12+
#include <linux/types.h>
13+
14+
/* All MIPS vendor extensions supported in Linux */
15+
static const struct riscv_isa_ext_data riscv_isa_vendor_ext_mips[] = {
16+
__RISCV_ISA_EXT_DATA(xmipsexectl, RISCV_ISA_VENDOR_EXT_XMIPSEXECTL),
17+
};
18+
19+
struct riscv_isa_vendor_ext_data_list riscv_isa_vendor_ext_list_mips = {
20+
.ext_data_count = ARRAY_SIZE(riscv_isa_vendor_ext_mips),
21+
.ext_data = riscv_isa_vendor_ext_mips,
22+
};

0 commit comments

Comments
 (0)