Browse Source

add basic loongarch support, qemu does not boot the kernel, yet

Waldemar Brodkorb 1 year ago
parent
commit
cf30d29222

+ 1 - 0
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

+ 6 - 0
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

+ 1 - 1
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 \

+ 1 - 0
target/arch.lst

@@ -16,6 +16,7 @@ hppa
 ia64
 kvx
 lm32
+loongarch
 m32c
 m32r
 m68k

+ 5 - 0
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"

+ 9 - 0
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

+ 1 - 0
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 || \

+ 1 - 0
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

+ 8 - 0
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

+ 1 - 0
target/linux/arch.lst

@@ -13,6 +13,7 @@ hppa
 ia64
 kvx
 lm32
+loongarch
 m68k
 metag
 microblaze

+ 62 - 0
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

+ 7 - 0
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

+ 7 - 0
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.
+