From cf30d2922270a47c9e0336611477befcf8fa4239 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Thu, 11 Aug 2022 11:42:32 +0200 Subject: add basic loongarch support, qemu does not boot the kernel, yet --- target/arch.lst | 1 + target/config/Config.in.compiler | 5 +++ target/config/Config.in.cpu | 9 +++++ target/config/Config.in.libc | 1 + target/linux/Config.in.kernelcfg | 1 + target/linux/Config.in.kernelversion | 8 +++++ target/linux/arch.lst | 1 + target/loongarch/Makefile | 62 +++++++++++++++++++++++++++++++++ target/loongarch/kernel/qemu-loongarch | 7 ++++ target/loongarch/systems/qemu-loongarch | 7 ++++ 10 files changed, 102 insertions(+) create mode 100644 target/loongarch/Makefile create mode 100644 target/loongarch/kernel/qemu-loongarch create mode 100644 target/loongarch/systems/qemu-loongarch (limited to 'target') diff --git a/target/arch.lst b/target/arch.lst index 8ef05f730..d801075d8 100644 --- a/target/arch.lst +++ b/target/arch.lst @@ -16,6 +16,7 @@ hppa ia64 kvx lm32 +loongarch m32c m32r m68k diff --git a/target/config/Config.in.compiler b/target/config/Config.in.compiler index fa08eae29..175cd5afb 100644 --- a/target/config/Config.in.compiler +++ b/target/config/Config.in.compiler @@ -37,12 +37,14 @@ config ADK_TOOLCHAIN_GCC_11 bool "11.3.0" depends on !ADK_TARGET_ARCH_AVR32 depends on !ADK_TARGET_ARCH_METAG + depends on !ADK_TARGET_ARCH_LOONGARCH config ADK_TOOLCHAIN_GCC_10 bool "10.3.0" depends on !ADK_TARGET_ARCH_AVR32 depends on !ADK_TARGET_ARCH_METAG depends on !ADK_TARGET_ARCH_NDS32 + depends on !ADK_TARGET_ARCH_LOONGARCH config ADK_TOOLCHAIN_GCC_9 bool "9.4.0" @@ -50,6 +52,7 @@ config ADK_TOOLCHAIN_GCC_9 depends on !ADK_TARGET_ARCH_AVR32 depends on !ADK_TARGET_ARCH_METAG depends on !ADK_TARGET_ARCH_NDS32 + depends on !ADK_TARGET_ARCH_LOONGARCH config ADK_TOOLCHAIN_GCC_8 bool "8.5.0" @@ -60,6 +63,7 @@ config ADK_TOOLCHAIN_GCC_8 depends on !ADK_TARGET_ARCH_METAG depends on !ADK_TARGET_ARCH_NDS32 depends on !ADK_TARGET_ARCH_OR1K + depends on !ADK_TARGET_ARCH_LOONGARCH config ADK_TOOLCHAIN_GCC_7 bool "7.5.0" @@ -70,6 +74,7 @@ config ADK_TOOLCHAIN_GCC_7 depends on !ADK_TARGET_ARCH_METAG depends on !ADK_TARGET_ARCH_NDS32 depends on !ADK_TARGET_ARCH_OR1K + depends on !ADK_TARGET_ARCH_LOONGARCH config ADK_TOOLCHAIN_GCC_ARC bool "arc-2021.09" diff --git a/target/config/Config.in.cpu b/target/config/Config.in.cpu index 1b32fe20e..56befd8ef 100644 --- a/target/config/Config.in.cpu +++ b/target/config/Config.in.cpu @@ -553,6 +553,14 @@ config ADK_TARGET_CPU_LM32 select ADK_TARGET_UCLINUX depends on ADK_TARGET_ARCH_LM32 +# loongarch +config ADK_TARGET_CPU_LOONGARCH + bool "loongarch64" + select ADK_TARGET_SUPPORTS_THREADS + select ADK_TARGET_SUPPORTS_NPTL + select ADK_TARGET_WITH_MMU + depends on ADK_TARGET_ARCH_LOONGARCH + # coldfire config ADK_TARGET_CPU_CF_51 bool "coldfire 51" @@ -2214,6 +2222,7 @@ config ADK_TARGET_CPU_ARCH default "ia64" if ADK_TARGET_ARCH_IA64 default "kvx" if ADK_TARGET_ARCH_KVX default "lm32" if ADK_TARGET_ARCH_LM32 + default "loongarch64" if ADK_TARGET_ARCH_LOONGARCH default "m32c" if ADK_TARGET_ARCH_M32C default "m32r" if ADK_TARGET_ARCH_M32R default "m68k" if ADK_TARGET_ARCH_M68K diff --git a/target/config/Config.in.libc b/target/config/Config.in.libc index b071ed5af..477dcd10a 100644 --- a/target/config/Config.in.libc +++ b/target/config/Config.in.libc @@ -77,6 +77,7 @@ config ADK_TARGET_LIB_GLIBC ADK_TARGET_ARCH_CSKY || \ ADK_TARGET_ARCH_HPPA || \ ADK_TARGET_ARCH_IA64 || \ + ADK_TARGET_ARCH_LOONGARCH || \ ADK_TARGET_ARCH_M68K || \ ADK_TARGET_ARCH_MICROBLAZE || \ ADK_TARGET_ARCH_MIPS || \ diff --git a/target/linux/Config.in.kernelcfg b/target/linux/Config.in.kernelcfg index 749ed430f..50fff5c5d 100644 --- a/target/linux/Config.in.kernelcfg +++ b/target/linux/Config.in.kernelcfg @@ -49,6 +49,7 @@ config ADK_TARGET_LINUX_KERNEL_DEFCONFIG default "stm32_defconfig" if ADK_TARGET_SYSTEM_ST_STM32F429 default "stm32_defconfig" if ADK_TARGET_SYSTEM_ST_STM32F769 default "nommu_k210_defconfig" if ADK_TARGET_SYSTEM_SIPEED_MAIX_BIT + default "loongson3_defconfig" if ADK_TARGET_SYSTEM_QEMU_LOONGARCH default "" config ADK_TARGET_LINUX_KERNEL_CUSTOMCONFIG_PATH diff --git a/target/linux/Config.in.kernelversion b/target/linux/Config.in.kernelversion index 0206923db..af844978b 100644 --- a/target/linux/Config.in.kernelversion +++ b/target/linux/Config.in.kernelversion @@ -34,6 +34,14 @@ config ADK_TARGET_LINUX_KERNEL_VERSION_GIT select ADK_TARGET_LINUX_KERNEL_IMAGE if ADK_TARGET_SYSTEM_SOLIDRUN_IMX6 select ADK_TARGET_LINUX_KERNEL_IMAGE if ADK_TARGET_SYSTEM_BEAGLEBONE_BLACK +config ADK_TARGET_LINUX_KERNEL_VERSION_5_19 + bool "5.19" + depends on !ADK_TARGET_ARCH_AVR32 + depends on !ADK_TARGET_ARCH_BFIN + depends on !ADK_TARGET_ARCH_CRIS + depends on !ADK_TARGET_ARCH_FRV + depends on !ADK_TARGET_ARCH_METAG + config ADK_TARGET_LINUX_KERNEL_VERSION_5_15 bool "5.15.23" depends on !ADK_TARGET_ARCH_AVR32 diff --git a/target/linux/arch.lst b/target/linux/arch.lst index 5810d9174..94d0f018f 100644 --- a/target/linux/arch.lst +++ b/target/linux/arch.lst @@ -13,6 +13,7 @@ hppa ia64 kvx lm32 +loongarch m68k metag microblaze diff --git a/target/loongarch/Makefile b/target/loongarch/Makefile new file mode 100644 index 000000000..b8569d69a --- /dev/null +++ b/target/loongarch/Makefile @@ -0,0 +1,62 @@ +# This file is part of the OpenADK project. OpenADK is copyrighted +# material, please see the LICENCE file in the top-level directory. + +include $(ADK_TOPDIR)/rules.mk +include $(ADK_TOPDIR)/mk/kernel-build.mk +include $(ADK_TOPDIR)/mk/image.mk + +KERNEL:=$(LINUX_DIR)/vmlinux + +QEMU_ARGS:=-M virt +QEMU_ARGS+=-nographic +# +# target helper text +ifeq ($(ADK_TARGET_FS),archive) +targethelp: + @echo "The RootFS tarball is: $(FW_DIR)/$(ROOTFSTARBALL)" +ifeq ($(ADK_TARGET_QEMU),y) + @echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}' + @echo "Use following command to create a QEMU Image:" + @echo "./scripts/create.sh qemu-${ADK_TARGET_CPU_ARCH}.img $(FW_DIR)/$(ROOTFSUSERTARBALL)" + @echo "Start qemu with following options:" + @echo 'qemu-system-${ADK_TARGET_CPU_ARCH} ${QEMU_ARGS} -kernel $(FW_DIR)/$(TARGET_KERNEL) qemu-${ADK_TARGET_CPU_ARCH}.img' +endif +endif +ifeq ($(ADK_TARGET_FS),initramfs) +targethelp: + @echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}' + @echo 'The initramfs image is: ${FW_DIR}/${INITRAMFS}' +ifeq ($(ADK_TARGET_QEMU),y) + @echo "Start qemu with following command line:" + @echo 'qemu-system-${ADK_TARGET_CPU_ARCH} ${QEMU_ARGS} -kernel $(FW_DIR)/$(TARGET_KERNEL) -initrd ${FW_DIR}/${INITRAMFS}' +endif +endif +ifeq ($(ADK_TARGET_FS),initramfsarchive) +targethelp: + @echo 'The kernel file is: $(FW_DIR)/${TARGET_KERNEL}' + @echo "The RootFS tarball is: $(FW_DIR)/$(ROOTFSUSERTARBALL)" +endif +ifeq ($(ADK_TARGET_FS),initramfspiggyback) +targethelp: + @echo 'The kernel+initramfs file is: $(FW_DIR)/${TARGET_KERNEL}' +ifeq ($(ADK_TARGET_QEMU),y) + @echo "Start qemu with following command line:" + @echo 'qemu-system-${ADK_TARGET_CPU_ARCH} ${QEMU_ARGS} -kernel $(FW_DIR)/$(TARGET_KERNEL)' +endif +endif + +kernel-strip: + +kernel-install: kernel-strip + @cp $(KERNEL) $(FW_DIR)/$(TARGET_KERNEL) + +# filesystem specific targets +ifeq ($(ADK_TARGET_FS),initramfs) +imageinstall: kernel-install $(FW_DIR)/$(INITRAMFS) targethelp +endif +ifeq ($(ADK_TARGET_FS),initramfsarchive) +imageinstall: kernel-install $(FW_DIR)/$(ROOTFSUSERTARBALL) targethelp +endif +ifeq ($(ADK_TARGET_FS),initramfspiggyback) +imageinstall: createinitramfs targethelp +endif diff --git a/target/loongarch/kernel/qemu-loongarch b/target/loongarch/kernel/qemu-loongarch new file mode 100644 index 000000000..582028585 --- /dev/null +++ b/target/loongarch/kernel/qemu-loongarch @@ -0,0 +1,7 @@ +CONFIG_LOONGARCH=y +CONFIG_64BIT=y +CONFIG_MACH_LOONGSON64=y +CONFIG_EFI=y +CONFIG_SMP=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y diff --git a/target/loongarch/systems/qemu-loongarch b/target/loongarch/systems/qemu-loongarch new file mode 100644 index 000000000..b5f6c3d34 --- /dev/null +++ b/target/loongarch/systems/qemu-loongarch @@ -0,0 +1,7 @@ +config ADK_TARGET_SYSTEM_QEMU_LOONGARCH + bool "Qemu Emulator" + select ADK_TARGET_QEMU + select ADK_TARGET_CPU_LOONGARCH + help + Support for Qemu Emulator Loongarch architecture. + -- cgit v1.2.3