[PATCH 1/1] The riscv spec has breaking change from 2.2 to 20191213. ...
Heinrich Schuchardt
heinrich.schuchardt at canonical.com
Sat Sep 3 06:53:07 CEST 2022
On 8/30/22 01:51, Pan Li wrote:
> The riscv spec has breaking change from 2.2 to 20191213.
> Both ZICSR and ZIFENCEI are separated extension since 20191213.
> Gcc bump up the riscv spec to 20191213 since 12.x.
> So add below 4 build option for compatibility::
Hello Pan,
thank you for addressing this problem.
Nits:
You ultra long subject should have been in the commit message.
Alexandre has suggested in his patch
[PATCH] riscv: Fix build against binutils 2.38
https://lore.kernel.org/u-boot/20220128134713.2322800-1-alexandre.ghiti@canonical.com/
to determine the ISA settings for building at runtime.
For a user it is preferable to use ready-made defconfigs with having to
adjust each build manually. This is why I think we should follow
Alexandre's approach.
On 8/30/22 01:51, Pan Li wrote:
> CONFIG_RISCV_ISA_F for single float point, default no.
> CONFIG_RISCV_ISA_D for double float point, default no.
> CONFIG_RISCV_ISA_ZICSR for control and status register, default no.
> CONFIG_RISCV_ISA_ZIFENCEI for instruction-fetch fence, default no.
I think defaults should reflect the newest and not the eldest build
chains. This will provide better long term stability.
Best regards
Heinrich
>
> Example when build with gcc 12.x as below.
>
> make qemu-riscv64_defconfig && make \
> CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv \
> CONFIG_RISCV_ISA_F=y \
> CONFIG_RISCV_ISA_D=y \
> CONFIG_RISCV_ISA_ZICSR=y \
> CONFIG_RISCV_ISA_ZIFENCEI=y
>
> Signed-off-by: Pan Li <incarnation.p.lee at outlook.com>
> ---
>
> arch/riscv/Kconfig | 28 ++++++++++++++++++++++++++++
> arch/riscv/Makefile | 20 ++++++++++++++++++--
> 2 files changed, 46 insertions(+), 2 deletions(-)
>
> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> index 78e964db12..d54ee3aaf3 100644
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -144,6 +144,34 @@ config SPL_RISCV_SMODE
>
> endchoice
>
> +config RISCV_ISA_F
> + bool "Single precision instructions"
> + help
> + Adds "F" to the ISA subsets that the toolchain is allowed to emit
> + when building U-Boot, which results in single precision floating point
> + instructions in the U-Boot binary.
> +
> +config RISCV_ISA_D
> + bool "Double precision instructions"
> + help
> + Adds "D" to the ISA subsets that the toolchain is allowed to emit
> + when building U-Boot, which results in double precision floating point
> + instructions in the U-Boot binary.
> +
> +config RISCV_ISA_ZICSR
> + bool "Control and status register instructions"
> + help
> + Adds "ZICSR" to the ISA subsets that the toolchain is allowed to emit
> + when building U-Boot, which results in control and status Register
> + instructions in the U-Boot binary, since gcc 12.x and riscv spec 20191213.
> +
> +config RISCV_ISA_ZIFENCEI
> + bool "Instruction-fetch fence instructions"
> + help
> + Adds "ZIFENCEI" to the ISA subsets that the toolchain is allowed to emit
> + when building U-Boot, which results in instruction-fetch fence instructions
> + in the U-Boot binary, since gcc 12.x and riscv spec 20191213.
> +
> config RISCV_ISA_C
> bool "Emit compressed instructions"
> default y
> diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile
> index 0b80eb8d86..d333af92d1 100644
> --- a/arch/riscv/Makefile
> +++ b/arch/riscv/Makefile
> @@ -14,9 +14,25 @@ endif
> ifeq ($(CONFIG_RISCV_ISA_A),y)
> ARCH_A = a
> endif
> +ifeq ($(CONFIG_RISCV_ISA_F),y)
> + ARCH_F = f
> +ifneq ($(CONFIG_RISCV_ISA_D),y)
> + ABI_FP_SUFFIX = $(ARCH_F)
> +endif
> +endif
> +ifeq ($(CONFIG_RISCV_ISA_D),y)
> + ARCH_D = d
> + ABI_FP_SUFFIX = $(ARCH_D)
> +endif
> ifeq ($(CONFIG_RISCV_ISA_C),y)
> ARCH_C = c
> endif
> +ifeq ($(CONFIG_RISCV_ISA_ZICSR),y)
> + ARCH_ZICSR = _zicsr
> +endif
> +ifeq ($(CONFIG_RISCV_ISA_ZIFENCEI),y)
> + ARCH_ZIFENCEI = _zifencei
> +endif
> ifeq ($(CONFIG_CMODEL_MEDLOW),y)
> CMODEL = medlow
> endif
> @@ -24,8 +40,8 @@ ifeq ($(CONFIG_CMODEL_MEDANY),y)
> CMODEL = medany
> endif
>
> -ARCH_FLAGS = -march=$(ARCH_BASE)$(ARCH_A)$(ARCH_C) -mabi=$(ABI) \
> - -mcmodel=$(CMODEL)
> +ARCH_FLAGS = -march=$(ARCH_BASE)$(ARCH_A)$(ARCH_F)$(ARCH_D)$(ARCH_C)$(ARCH_ZICSR)$(ARCH_ZIFENCEI) \
> + -mabi=$(ABI)$(ABI_FP_SUFFIX) -mcmodel=$(CMODEL)
>
> PLATFORM_CPPFLAGS += $(ARCH_FLAGS)
> CFLAGS_EFI += $(ARCH_FLAGS)
More information about the U-Boot
mailing list