1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright 2024 Rivos, Inc
6 #include <asm/vendorid_list.h>
7 #include <asm/vendor_extensions.h>
8 #include <asm/vendor_extensions/andes.h>
10 #include <linux/array_size.h>
11 #include <linux/types.h>
13 struct riscv_isa_vendor_ext_data_list
*riscv_isa_vendor_ext_list
[] = {
14 #ifdef CONFIG_RISCV_ISA_VENDOR_EXT_ANDES
15 &riscv_isa_vendor_ext_list_andes
,
19 const size_t riscv_isa_vendor_ext_list_size
= ARRAY_SIZE(riscv_isa_vendor_ext_list
);
22 * __riscv_isa_vendor_extension_available() - Check whether given vendor
23 * extension is available or not.
25 * @cpu: check if extension is available on this cpu
26 * @vendor: vendor that the extension is a member of
27 * @bit: bit position of the desired extension
28 * Return: true or false
30 * NOTE: When cpu is -1, will check if extension is available on all cpus
32 bool __riscv_isa_vendor_extension_available(int cpu
, unsigned long vendor
, unsigned int bit
)
34 struct riscv_isavendorinfo
*bmap
;
35 struct riscv_isavendorinfo
*cpu_bmap
;
38 #ifdef CONFIG_RISCV_ISA_VENDOR_EXT_ANDES
40 bmap
= &riscv_isa_vendor_ext_list_andes
.all_harts_isa_bitmap
;
41 cpu_bmap
= riscv_isa_vendor_ext_list_andes
.per_hart_isa_bitmap
;
49 bmap
= &cpu_bmap
[cpu
];
51 if (bit
>= RISCV_ISA_VENDOR_EXT_MAX
)
54 return test_bit(bit
, bmap
->isa
) ? true : false;
56 EXPORT_SYMBOL_GPL(__riscv_isa_vendor_extension_available
);