riscv: Introduce alternative mechanism to apply errata solution
Introduce the "alternative" mechanism from ARM64 and x86 to apply the CPU
vendors' errata solution at runtime. The main purpose of this patch is
to provide a framework. Therefore, the implementation is quite basic for
now so that some scenarios could not use this schemei, such as patching
code to a module, relocating the patching code and heterogeneous CPU
topology.
Users could use the macro ALTERNATIVE to apply an errata to the existing
code flow. In the macro ALTERNATIVE, users need to specify the manufacturer
information(vendorid, archid, and impid) for this errata. Therefore, kernel
will know this errata is suitable for which CPU core. During the booting
procedure, kernel will select the errata required by the CPU core and then
patch it. It means that the kernel only applies the errata to the specified
CPU core. In this case, the vendor's errata does not affect each other at
runtime. The above patching procedure only occurs during the booting phase,
so we only take the overhead of the "alternative" mechanism once.
This "alternative" mechanism is enabled by default to ensure that all
required errata will be applied. However, users can disable this feature by
the Kconfig "CONFIG_RISCV_ERRATA_ALTERNATIVE".
Signed-off-by: Vincent Chen <vincent.chen@sifive.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
2021-03-22 14:26:03 +00:00
|
|
|
menu "CPU errata selection"
|
|
|
|
|
2023-08-18 13:57:19 +00:00
|
|
|
config ERRATA_ANDES
|
|
|
|
bool "Andes AX45MP errata"
|
2023-09-01 11:03:20 +00:00
|
|
|
depends on RISCV_ALTERNATIVE && RISCV_SBI
|
2023-08-18 13:57:19 +00:00
|
|
|
help
|
|
|
|
All Andes errata Kconfig depend on this Kconfig. Disabling
|
|
|
|
this Kconfig will disable all Andes errata. Please say "Y"
|
|
|
|
here if your platform uses Andes CPU cores.
|
|
|
|
|
|
|
|
Otherwise, please say "N" here to avoid unnecessary overhead.
|
|
|
|
|
|
|
|
config ERRATA_ANDES_CMO
|
|
|
|
bool "Apply Andes cache management errata"
|
2023-09-01 10:58:58 +00:00
|
|
|
depends on ERRATA_ANDES && ARCH_R9A07G043
|
2023-08-18 13:57:19 +00:00
|
|
|
select RISCV_DMA_NONCOHERENT
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
This will apply the cache management errata to handle the
|
|
|
|
non-standard handling on non-coherent operations on Andes cores.
|
|
|
|
|
|
|
|
If you don't know what to do here, say "Y".
|
|
|
|
|
2021-03-22 14:26:04 +00:00
|
|
|
config ERRATA_SIFIVE
|
|
|
|
bool "SiFive errata"
|
RISC-V: always select RISCV_ALTERNATIVE for non-xip kernels
When moving switch_to's has_fpu() over to using
riscv_has_extension_likely() rather than static branches, the FPU code
gained a dependency on the alternatives framework.
That dependency has now been removed, as riscv_has_extension_ikely() now
contains a fallback path, using __riscv_isa_extension_available(), but
if CONFIG_RISCV_ALTERNATIVE isn't selected when CONFIG_FPU is, has_fpu()
checks will not benefit from the "fast path" that the alternatives
framework provides.
We want to ensure that alternatives are available whenever
riscv_has_extension_[un]likely() is used, rather than silently falling
back to the slow path, but rather than rely on selecting
RISCV_ALTERNATIVE in the myriad of locations that may use
riscv_has_extension_[un]likely(), select it (almost) always instead by
adding it to the main RISCV config entry.
xip kernels cannot make use of the alternatives framework, so it is not
enabled for those configurations, although this is the status quo.
All current sites that select RISCV_ALTERNATIVE are converted to
dependencies on the option instead. The explicit dependencies on
!XIP_KERNEL can be dropped, as RISCV_ALTERNATIVE is not user selectable.
Fixes: 702e64550b12 ("riscv: fpu: switch has_fpu() to riscv_has_extension_likely()")
Link: https://lore.kernel.org/all/ZBruFRwt3rUVngPu@zx2c4.com/
Reported-by: Jason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com>
Link: https://lore.kernel.org/r/20230324100538.3514663-3-conor.dooley@microchip.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
2023-03-24 10:05:39 +00:00
|
|
|
depends on RISCV_ALTERNATIVE
|
2021-03-22 14:26:04 +00:00
|
|
|
help
|
|
|
|
All SiFive errata Kconfig depend on this Kconfig. Disabling
|
|
|
|
this Kconfig will disable all SiFive errata. Please say "Y"
|
|
|
|
here if your platform uses SiFive CPU cores.
|
|
|
|
|
|
|
|
Otherwise, please say "N" here to avoid unnecessary overhead.
|
|
|
|
|
2021-03-22 14:26:05 +00:00
|
|
|
config ERRATA_SIFIVE_CIP_453
|
|
|
|
bool "Apply SiFive errata CIP-453"
|
2021-04-29 07:58:36 +00:00
|
|
|
depends on ERRATA_SIFIVE && 64BIT
|
2021-03-22 14:26:05 +00:00
|
|
|
default y
|
|
|
|
help
|
|
|
|
This will apply the SiFive CIP-453 errata to add sign extension
|
|
|
|
to the $badaddr when exception type is instruction page fault
|
|
|
|
and instruction access fault.
|
|
|
|
|
|
|
|
If you don't know what to do here, say "Y".
|
|
|
|
|
2021-03-22 14:26:06 +00:00
|
|
|
config ERRATA_SIFIVE_CIP_1200
|
|
|
|
bool "Apply SiFive errata CIP-1200"
|
2021-04-29 07:58:36 +00:00
|
|
|
depends on ERRATA_SIFIVE && 64BIT
|
2021-03-22 14:26:06 +00:00
|
|
|
default y
|
|
|
|
help
|
|
|
|
This will apply the SiFive CIP-1200 errata to repalce all
|
|
|
|
"sfence.vma addr" with "sfence.vma" to ensure that the addr
|
|
|
|
has been flushed from TLB.
|
|
|
|
|
|
|
|
If you don't know what to do here, say "Y".
|
|
|
|
|
2023-11-30 15:19:25 +00:00
|
|
|
config ERRATA_STARFIVE_JH7100
|
|
|
|
bool "StarFive JH7100 support"
|
2023-12-15 19:09:09 +00:00
|
|
|
depends on ARCH_STARFIVE
|
|
|
|
depends on !DMA_DIRECT_REMAP
|
|
|
|
depends on NONPORTABLE
|
2023-11-30 15:19:25 +00:00
|
|
|
select DMA_GLOBAL_POOL
|
|
|
|
select RISCV_DMA_NONCOHERENT
|
|
|
|
select RISCV_NONSTANDARD_CACHE_OPS
|
|
|
|
select SIFIVE_CCACHE
|
|
|
|
default n
|
|
|
|
help
|
|
|
|
The StarFive JH7100 was a test chip for the JH7110 and has
|
|
|
|
caches that are non-coherent with respect to peripheral DMAs.
|
|
|
|
It was designed before the Zicbom extension so needs non-standard
|
|
|
|
cache operations through the SiFive cache controller.
|
|
|
|
|
|
|
|
Say "Y" if you want to support the BeagleV Starlight and/or
|
|
|
|
StarFive VisionFive V1 boards.
|
|
|
|
|
2022-05-11 19:29:21 +00:00
|
|
|
config ERRATA_THEAD
|
|
|
|
bool "T-HEAD errata"
|
RISC-V: always select RISCV_ALTERNATIVE for non-xip kernels
When moving switch_to's has_fpu() over to using
riscv_has_extension_likely() rather than static branches, the FPU code
gained a dependency on the alternatives framework.
That dependency has now been removed, as riscv_has_extension_ikely() now
contains a fallback path, using __riscv_isa_extension_available(), but
if CONFIG_RISCV_ALTERNATIVE isn't selected when CONFIG_FPU is, has_fpu()
checks will not benefit from the "fast path" that the alternatives
framework provides.
We want to ensure that alternatives are available whenever
riscv_has_extension_[un]likely() is used, rather than silently falling
back to the slow path, but rather than rely on selecting
RISCV_ALTERNATIVE in the myriad of locations that may use
riscv_has_extension_[un]likely(), select it (almost) always instead by
adding it to the main RISCV config entry.
xip kernels cannot make use of the alternatives framework, so it is not
enabled for those configurations, although this is the status quo.
All current sites that select RISCV_ALTERNATIVE are converted to
dependencies on the option instead. The explicit dependencies on
!XIP_KERNEL can be dropped, as RISCV_ALTERNATIVE is not user selectable.
Fixes: 702e64550b12 ("riscv: fpu: switch has_fpu() to riscv_has_extension_likely()")
Link: https://lore.kernel.org/all/ZBruFRwt3rUVngPu@zx2c4.com/
Reported-by: Jason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com>
Link: https://lore.kernel.org/r/20230324100538.3514663-3-conor.dooley@microchip.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
2023-03-24 10:05:39 +00:00
|
|
|
depends on RISCV_ALTERNATIVE
|
2022-05-11 19:29:21 +00:00
|
|
|
help
|
|
|
|
All T-HEAD errata Kconfig depend on this Kconfig. Disabling
|
|
|
|
this Kconfig will disable all T-HEAD errata. Please say "Y"
|
|
|
|
here if your platform uses T-HEAD CPU cores.
|
|
|
|
|
|
|
|
Otherwise, please say "N" here to avoid unnecessary overhead.
|
|
|
|
|
|
|
|
config ERRATA_THEAD_PBMT
|
|
|
|
bool "Apply T-Head memory type errata"
|
2022-09-07 15:49:32 +00:00
|
|
|
depends on ERRATA_THEAD && 64BIT && MMU
|
2022-05-11 19:29:21 +00:00
|
|
|
select RISCV_ALTERNATIVE_EARLY
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
This will apply the memory type errata to handle the non-standard
|
|
|
|
memory type bits in page-table-entries on T-Head SoCs.
|
|
|
|
|
|
|
|
If you don't know what to do here, say "Y".
|
|
|
|
|
2022-07-06 23:15:36 +00:00
|
|
|
config ERRATA_THEAD_CMO
|
|
|
|
bool "Apply T-Head cache management errata"
|
2022-09-07 15:49:32 +00:00
|
|
|
depends on ERRATA_THEAD && MMU
|
2023-10-18 05:26:53 +00:00
|
|
|
select DMA_DIRECT_REMAP
|
2022-07-06 23:15:36 +00:00
|
|
|
select RISCV_DMA_NONCOHERENT
|
2023-11-14 14:33:37 +00:00
|
|
|
select RISCV_NONSTANDARD_CACHE_OPS
|
2022-07-06 23:15:36 +00:00
|
|
|
default y
|
|
|
|
help
|
|
|
|
This will apply the cache management errata to handle the
|
|
|
|
non-standard handling on non-coherent operations on T-Head SoCs.
|
|
|
|
|
|
|
|
If you don't know what to do here, say "Y".
|
|
|
|
|
2022-10-11 23:18:41 +00:00
|
|
|
config ERRATA_THEAD_PMU
|
|
|
|
bool "Apply T-Head PMU errata"
|
|
|
|
depends on ERRATA_THEAD && RISCV_PMU_SBI
|
|
|
|
default y
|
|
|
|
help
|
|
|
|
The T-Head C9xx cores implement a PMU overflow extension very
|
|
|
|
similar to the core SSCOFPMF extension.
|
|
|
|
|
|
|
|
This will apply the overflow errata to handle the non-standard
|
|
|
|
behaviour via the regular SBI PMU driver and interface.
|
|
|
|
|
|
|
|
If you don't know what to do here, say "Y".
|
|
|
|
|
2022-05-20 12:02:31 +00:00
|
|
|
endmenu # "CPU errata selection"
|