Skip to content

Commit d82f322

Browse files
ConchuODpalmer-dabbelt
authored andcommitted
RISC-V: Ignore V from the riscv,isa DT property on older T-Head CPUs
Before attempting to support the pre-ratification version of vector found on older T-Head CPUs, disallow "v" in riscv,isa on these platforms. The deprecated property has no clear way to communicate the specific version of vector that is supported and much of the vendor provided software puts "v" in the isa string. riscv,isa-extensions should be used instead. This should not be too much of a burden for these systems, as the vendor shipped devicetrees and firmware do not work with a mainline kernel and will require updating. We can limit this restriction to only ignore v in riscv,isa on CPUs that report T-Head's vendor ID and a zero marchid. Newer T-Head CPUs that support the ratified version of vector should report non-zero marchid, according to Guo Ren [1]. Link: https://lore.kernel.org/linux-riscv/CAJF2gTRy5eK73=d6s7CVy9m9pB8p4rAoMHM3cZFwzg=AuF7TDA@mail.gmail.com/ [1] Fixes: dc6667a ("riscv: Extending cpufeature.c to detect V-extension") Co-developed-by: Conor Dooley <conor.dooley@microchip.com> Signed-off-by: Conor Dooley <conor.dooley@microchip.com> Acked-by: Guo Ren <guoren@kernel.org> Link: https://lore.kernel.org/r/20240223-tidings-shabby-607f086cb4d7@spud Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
1 parent fc325b1 commit d82f322

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

arch/riscv/kernel/cpufeature.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <asm/hwprobe.h>
2525
#include <asm/patch.h>
2626
#include <asm/processor.h>
27+
#include <asm/sbi.h>
2728
#include <asm/vector.h>
2829

2930
#include "copy-unaligned.h"
@@ -538,6 +539,20 @@ static void __init riscv_fill_hwcap_from_isa_string(unsigned long *isa2hwcap)
538539
set_bit(RISCV_ISA_EXT_ZIHPM, isainfo->isa);
539540
}
540541

542+
/*
543+
* "V" in ISA strings is ambiguous in practice: it should mean
544+
* just the standard V-1.0 but vendors aren't well behaved.
545+
* Many vendors with T-Head CPU cores which implement the 0.7.1
546+
* version of the vector specification put "v" into their DTs.
547+
* CPU cores with the ratified spec will contain non-zero
548+
* marchid.
549+
*/
550+
if (acpi_disabled && riscv_cached_mvendorid(cpu) == THEAD_VENDOR_ID &&
551+
riscv_cached_marchid(cpu) == 0x0) {
552+
this_hwcap &= ~isa2hwcap[RISCV_ISA_EXT_v];
553+
clear_bit(RISCV_ISA_EXT_v, isainfo->isa);
554+
}
555+
541556
/*
542557
* All "okay" hart should have same isa. Set HWCAP based on
543558
* common capabilities of every "okay" hart, in case they don't

0 commit comments

Comments
 (0)