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 --- mk/image.mk | 1 + mk/linux-ver.mk | 6 ++++ scripts/config.sub | 2 +- 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 ++++ 13 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 target/loongarch/Makefile create mode 100644 target/loongarch/kernel/qemu-loongarch create mode 100644 target/loongarch/systems/qemu-loongarch diff --git a/mk/image.mk b/mk/image.mk index bc1fe5223..f17f26c12 100644 --- a/mk/image.mk +++ b/mk/image.mk @@ -229,6 +229,7 @@ createinitramfs: ${STAGING_TARGET_DIR}/${INITRAMFS}_list echo 'CONFIG_INITRAMFS_ROOT_UID=0'; \ echo 'CONFIG_INITRAMFS_ROOT_GID=0'; \ echo 'CONFIG_INITRAMFS_IS_LARGE=n'; \ + echo 'CONFIG_INITRAMFS_PRESERVE_MTIME=n'; \ ) >> ${LINUX_DIR}/.config ifeq ($(ADK_LINUX_KERNEL_COMP_XZ),y) echo "CONFIG_RD_BZIP2=n" >> ${LINUX_DIR}/.config diff --git a/mk/linux-ver.mk b/mk/linux-ver.mk index 52648efe3..6126798f9 100644 --- a/mk/linux-ver.mk +++ b/mk/linux-ver.mk @@ -15,6 +15,12 @@ KERNEL_FILE_VER:= $(ADK_TARGET_LINUX_KERNEL_GIT) KERNEL_RELEASE:= 1 KERNEL_VERSION:= $(ADK_TARGET_LINUX_KERNEL_GIT_VER)-$(KERNEL_RELEASE) endif +ifeq ($(ADK_TARGET_LINUX_KERNEL_VERSION_5_19),y) +KERNEL_FILE_VER:= 5.19 +KERNEL_RELEASE:= 1 +KERNEL_VERSION:= $(KERNEL_FILE_VER)-$(KERNEL_RELEASE) +KERNEL_HASH:= ff240c579b9ee1affc318917de07394fc1c3bb49dac25ec1287370c2e15005a8 +endif ifeq ($(ADK_TARGET_LINUX_KERNEL_VERSION_5_15),y) KERNEL_FILE_VER:= 5.15.23 KERNEL_RELEASE:= 1 diff --git a/scripts/config.sub b/scripts/config.sub index 111b01fc2..1e9cd5a84 100755 --- a/scripts/config.sub +++ b/scripts/config.sub @@ -1185,7 +1185,7 @@ case $cpu-$vendor in | kvx \ | k1om \ | le32 | le64 \ - | lm32 \ + | lm32 | loongarch64 \ | m32c | m32r | m32rle \ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ 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