Message ID | 20240524-loongarch64-v1-3-d24078d79cd5@flygoat.com |
---|---|
State | Changes Requested |
Headers | show |
Series | LoongArch64 initial support | expand |
Hello Jiaxun, Le 24/05/2024 à 21:36, Jiaxun Yang a écrit : > Introduce LoongArch64 at architecture level. > > Config.in.loongarch is prepared for possible loongarch32 > enablement in future. > > Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com> > --- > arch/Config.in | 13 +++++ > arch/Config.in.loongarch | 127 +++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 140 insertions(+) > > diff --git a/arch/Config.in b/arch/Config.in > index cc902446bfd9..504808fcbce4 100644 > --- a/arch/Config.in > +++ b/arch/Config.in > @@ -77,6 +77,15 @@ config BR2_i386 > Intel i386 architecture compatible microprocessor > http://en.wikipedia.org/wiki/I386 > > +config BR2_loongarch64 > + bool "LoongArch64" > + select BR2_USE_MMU > + select BR2_ARCH_IS_64 select BR2_ARCH_HAS_NO_TOOLCHAIN_BUILDROOT since there is no internal toolchain support yet in Buildroot. > + help > + LoongArch64 is a is a 64-bit architecture developed by Loongson. > + http://www.loongson.cn/ > + https://en.wikipedia.org/wiki/Loongson The help text is too long, please check the coding style with utils/check-package. > + > config BR2_m68k > bool "m68k" > # MMU support is set by the subarchitecture file, arch/Config.in.m68k > @@ -380,6 +389,10 @@ if BR2_arm || BR2_armeb || BR2_aarch64 || BR2_aarch64_be > source "arch/Config.in.arm" > endif > > +if BR2_loongarch64 > +source "arch/Config.in.loongarch" > +endif > + > if BR2_m68k > source "arch/Config.in.m68k" > endif > diff --git a/arch/Config.in.loongarch b/arch/Config.in.loongarch > new file mode 100644 > index 000000000000..f5d767a9d87d > --- /dev/null > +++ b/arch/Config.in.loongarch > @@ -0,0 +1,127 @@ > +# LoongArch CPU > + > +choice > + prompt "Target Architecture Variant" > + default BR2_loongarch64_generic > + > +config BR2_loongarch64_generic > + bool "Generic LoongArch 64-bit" > + depends on BR2_ARCH_IS_64 > + select BR2_ARCH_NEEDS_GCC_AT_LEAST_12 > + help > + Generic LoongArch 64-bit processor. > + > +config BR2_loongarch64_v1_0 > + bool "LoongArch64 ISA version 1.0" > + depends on BR2_ARCH_IS_64 > + select BR2_ARCH_NEEDS_GCC_AT_LEAST_13 > + help > + LoongArch64 ISA version 1.0 processor. > + > +config BR2_loongarch64_v1_1 > + bool "LoongArch64 ISA version 1.1" > + depends on BR2_ARCH_IS_64 > + select BR2_ARCH_NEEDS_GCC_AT_LEAST_13 > + help > + LoongArch64 ISA version 1.1 processor. Add a new line here for Kconfig help text rendering. > +endchoice > + > +choice > + prompt "FPU Type" > + default BR2_LOONGARCH_FPU_64 > + > +config BR2_LOONGARCH_FPU_64 > + bool "64" > + help > + Allow the use of hardware floating-point instructions for 32-bit > + and 64-bit operations. > + > +config BR2_LOONGARCH_FPU_32 > + bool "32" > + help > + Allow the use of hardware floating-point instructions for 32-bit > + operations only. > + > +config BR2_LOONGARCH_FPU_NONE > + bool "none" > + help > + Prevent the use of hardware floating-point instructions. Add a new line here for Kconfig help text rendering. > +endchoice > + > +choice > + prompt "SIMD Type" > + default BR2_LOONGARCH_SIMD_NONE > + > +config BR2_LOONGARCH_SIMD_NONE > + bool "none" > + help > + Prevent the use of hardware SIMD instructions. > + > +config BR2_LOONGARCH_SIMD_LSX > + bool "LSX" > + help > + Enable generating instructions from the 128-bit LoongArch SIMD > + Extension (LSX). > + > +config BR2_LOONGARCH_SIMD_LASX > + bool "LASX" > + help > + Enable generating instructions from the 256-bit LoongArch Advanced > + SIMD Extension (LASX) and the 128-bit LoongArch SIMD Extension (LSX). Add a new line here for Kconfig help text rendering. Best regards, Romain > +endchoice > + > +choice > + prompt "Target ABI" > + default BR2_LOONGARCH_ABI_LP64D if BR2_ARCH_IS_64 && BR2_LOONGARCH_FPU_64 > + default BR2_LOONGARCH_ABI_LP64F if BR2_ARCH_IS_64 && BR2_LOONGARCH_FPU_32 > + default BR2_LOONGARCH_ABI_LP64S if BR2_ARCH_IS_64 && BR2_LOONGARCH_SIMD_NONE > + > +config BR2_LOONGARCH_ABI_LP64D > + bool "lp64d" > + depends on BR2_ARCH_IS_64 > + depends on BR2_LOONGARCH_FPU_64 > + > +config BR2_LOONGARCH_ABI_LP64F > + bool "lp64f" > + depends on BR2_ARCH_IS_64 > + depends on BR2_LOONGARCH_FPU_64 || BR2_LOONGARCH_FPU_32 > + > +config BR2_LOONGARCH_ABI_LP64S > + bool "lp64d" > + depends on BR2_ARCH_IS_64 > +endchoice > + > +config BR2_ARCH > + default "loongarch64" if BR2_ARCH_IS_64 > + > +config BR2_NORMALIZED_ARCH > + default "loongarch" > + > +config BR2_ENDIAN > + default "LITTLE" > + > +config BR2_GCC_TARGET_ARCH > + default "loongarch64" if BR2_loongarch64_generic > + default "la64v1.0" if BR2_loongarch64_v1_0 > + default "la64v1.1" if BR2_loongarch64_v1_1 > + > +config BR2_GCC_TARGET_FPU > + default "64" if BR2_LOONGARCH_FPU_64 > + default "32" if BR2_LOONGARCH_FPU_32 > + default "none" if BR2_LOONGARCH_FPU_NONE > + > +config BR2_GCC_TARGET_SIMD > + default "lasx" if BR2_LOONGARCH_SIMD_LASX > + default "lsx" if BR2_LOONGARCH_SIMD_LSX > + default "none" if BR2_LOONGARCH_FPU_NONE > + > +config BR2_GCC_TARGET_ABI > + default "lp64d" if BR2_LOONGARCH_ABI_LP64D > + default "lp64f" if BR2_LOONGARCH_ABI_LP64F > + default "lp64s" if BR2_LOONGARCH_ABI_LP64S > + > +config BR2_READELF_ARCH_NAME > + default "LoongArch" > + > +# vim: ft=kconfig > +# -*- mode:kconfig; -*- >
diff --git a/arch/Config.in b/arch/Config.in index cc902446bfd9..504808fcbce4 100644 --- a/arch/Config.in +++ b/arch/Config.in @@ -77,6 +77,15 @@ config BR2_i386 Intel i386 architecture compatible microprocessor http://en.wikipedia.org/wiki/I386 +config BR2_loongarch64 + bool "LoongArch64" + select BR2_USE_MMU + select BR2_ARCH_IS_64 + help + LoongArch64 is a is a 64-bit architecture developed by Loongson. + http://www.loongson.cn/ + https://en.wikipedia.org/wiki/Loongson + config BR2_m68k bool "m68k" # MMU support is set by the subarchitecture file, arch/Config.in.m68k @@ -380,6 +389,10 @@ if BR2_arm || BR2_armeb || BR2_aarch64 || BR2_aarch64_be source "arch/Config.in.arm" endif +if BR2_loongarch64 +source "arch/Config.in.loongarch" +endif + if BR2_m68k source "arch/Config.in.m68k" endif diff --git a/arch/Config.in.loongarch b/arch/Config.in.loongarch new file mode 100644 index 000000000000..f5d767a9d87d --- /dev/null +++ b/arch/Config.in.loongarch @@ -0,0 +1,127 @@ +# LoongArch CPU + +choice + prompt "Target Architecture Variant" + default BR2_loongarch64_generic + +config BR2_loongarch64_generic + bool "Generic LoongArch 64-bit" + depends on BR2_ARCH_IS_64 + select BR2_ARCH_NEEDS_GCC_AT_LEAST_12 + help + Generic LoongArch 64-bit processor. + +config BR2_loongarch64_v1_0 + bool "LoongArch64 ISA version 1.0" + depends on BR2_ARCH_IS_64 + select BR2_ARCH_NEEDS_GCC_AT_LEAST_13 + help + LoongArch64 ISA version 1.0 processor. + +config BR2_loongarch64_v1_1 + bool "LoongArch64 ISA version 1.1" + depends on BR2_ARCH_IS_64 + select BR2_ARCH_NEEDS_GCC_AT_LEAST_13 + help + LoongArch64 ISA version 1.1 processor. +endchoice + +choice + prompt "FPU Type" + default BR2_LOONGARCH_FPU_64 + +config BR2_LOONGARCH_FPU_64 + bool "64" + help + Allow the use of hardware floating-point instructions for 32-bit + and 64-bit operations. + +config BR2_LOONGARCH_FPU_32 + bool "32" + help + Allow the use of hardware floating-point instructions for 32-bit + operations only. + +config BR2_LOONGARCH_FPU_NONE + bool "none" + help + Prevent the use of hardware floating-point instructions. +endchoice + +choice + prompt "SIMD Type" + default BR2_LOONGARCH_SIMD_NONE + +config BR2_LOONGARCH_SIMD_NONE + bool "none" + help + Prevent the use of hardware SIMD instructions. + +config BR2_LOONGARCH_SIMD_LSX + bool "LSX" + help + Enable generating instructions from the 128-bit LoongArch SIMD + Extension (LSX). + +config BR2_LOONGARCH_SIMD_LASX + bool "LASX" + help + Enable generating instructions from the 256-bit LoongArch Advanced + SIMD Extension (LASX) and the 128-bit LoongArch SIMD Extension (LSX). +endchoice + +choice + prompt "Target ABI" + default BR2_LOONGARCH_ABI_LP64D if BR2_ARCH_IS_64 && BR2_LOONGARCH_FPU_64 + default BR2_LOONGARCH_ABI_LP64F if BR2_ARCH_IS_64 && BR2_LOONGARCH_FPU_32 + default BR2_LOONGARCH_ABI_LP64S if BR2_ARCH_IS_64 && BR2_LOONGARCH_SIMD_NONE + +config BR2_LOONGARCH_ABI_LP64D + bool "lp64d" + depends on BR2_ARCH_IS_64 + depends on BR2_LOONGARCH_FPU_64 + +config BR2_LOONGARCH_ABI_LP64F + bool "lp64f" + depends on BR2_ARCH_IS_64 + depends on BR2_LOONGARCH_FPU_64 || BR2_LOONGARCH_FPU_32 + +config BR2_LOONGARCH_ABI_LP64S + bool "lp64d" + depends on BR2_ARCH_IS_64 +endchoice + +config BR2_ARCH + default "loongarch64" if BR2_ARCH_IS_64 + +config BR2_NORMALIZED_ARCH + default "loongarch" + +config BR2_ENDIAN + default "LITTLE" + +config BR2_GCC_TARGET_ARCH + default "loongarch64" if BR2_loongarch64_generic + default "la64v1.0" if BR2_loongarch64_v1_0 + default "la64v1.1" if BR2_loongarch64_v1_1 + +config BR2_GCC_TARGET_FPU + default "64" if BR2_LOONGARCH_FPU_64 + default "32" if BR2_LOONGARCH_FPU_32 + default "none" if BR2_LOONGARCH_FPU_NONE + +config BR2_GCC_TARGET_SIMD + default "lasx" if BR2_LOONGARCH_SIMD_LASX + default "lsx" if BR2_LOONGARCH_SIMD_LSX + default "none" if BR2_LOONGARCH_FPU_NONE + +config BR2_GCC_TARGET_ABI + default "lp64d" if BR2_LOONGARCH_ABI_LP64D + default "lp64f" if BR2_LOONGARCH_ABI_LP64F + default "lp64s" if BR2_LOONGARCH_ABI_LP64S + +config BR2_READELF_ARCH_NAME + default "LoongArch" + +# vim: ft=kconfig +# -*- mode:kconfig; -*-
Introduce LoongArch64 at architecture level. Config.in.loongarch is prepared for possible loongarch32 enablement in future. Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com> --- arch/Config.in | 13 +++++ arch/Config.in.loongarch | 127 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 140 insertions(+)