summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXiaotian Wu <wuxiaotian@loongson.cn>2023-02-03 07:16:12 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2023-02-04 17:02:10 +0000
commit324b03e15fb8623690a5c5c64006602fdc7027a2 (patch)
treeee0bd81ab19521469baa48447cc61132351f91a0
parent69b8b7ef1bd3c2e4a5140aff3de5318b1b292986 (diff)
downloadpoky-324b03e15fb8623690a5c5c64006602fdc7027a2.tar.gz
base: add support for loongarch64
(From OE-Core rev: 759baaceb4dd623d5da12ba0d01540fa080154ba) Signed-off-by: Xiaotian Wu <wuxiaotian@loongson.cn> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/classes-recipe/siteinfo.bbclass4
-rw-r--r--meta/conf/machine-sdk/loongarch64.conf2
-rw-r--r--meta/conf/machine/include/loongarch/arch-loongarch.inc7
-rw-r--r--meta/conf/machine/include/loongarch/qemuloongarch.inc35
-rw-r--r--meta/conf/machine/include/loongarch/tune-loongarch.inc13
-rw-r--r--meta/conf/machine/qemuloongarch64.conf11
-rw-r--r--meta/lib/oe/elf.py2
-rw-r--r--meta/recipes-devtools/meson/meson_1.0.0.bb2
-rw-r--r--meta/recipes-devtools/qemu/qemu.inc2
-rw-r--r--meta/site/loongarch64-linux11
-rw-r--r--scripts/lib/wic/canned-wks/qemuloongarch.wks3
-rwxr-xr-xscripts/runqemu4
12 files changed, 94 insertions, 2 deletions
diff --git a/meta/classes-recipe/siteinfo.bbclass b/meta/classes-recipe/siteinfo.bbclass
index d31c9b2571..05253ae90d 100644
--- a/meta/classes-recipe/siteinfo.bbclass
+++ b/meta/classes-recipe/siteinfo.bbclass
@@ -39,6 +39,8 @@ def siteinfo_data_for_machine(arch, os, d):
39 "i686": "endian-little bit-32 ix86-common", 39 "i686": "endian-little bit-32 ix86-common",
40 "ia64": "endian-little bit-64", 40 "ia64": "endian-little bit-64",
41 "lm32": "endian-big bit-32", 41 "lm32": "endian-big bit-32",
42 "loongarch32": "endian-little bit-32 loongarch",
43 "loongarch64": "endian-little bit-64 loongarch",
42 "m68k": "endian-big bit-32", 44 "m68k": "endian-big bit-32",
43 "microblaze": "endian-big bit-32 microblaze-common", 45 "microblaze": "endian-big bit-32 microblaze-common",
44 "microblazeel": "endian-little bit-32 microblaze-common", 46 "microblazeel": "endian-little bit-32 microblaze-common",
@@ -97,6 +99,8 @@ def siteinfo_data_for_machine(arch, os, d):
97 "arm-linux-musleabi": "arm-linux", 99 "arm-linux-musleabi": "arm-linux",
98 "armeb-linux-gnueabi": "armeb-linux", 100 "armeb-linux-gnueabi": "armeb-linux",
99 "armeb-linux-musleabi": "armeb-linux", 101 "armeb-linux-musleabi": "armeb-linux",
102 "loongarch32-linux": "loongarch32-linux",
103 "loongarch64-linux": "loongarch64-linux",
100 "microblazeel-linux" : "microblaze-linux", 104 "microblazeel-linux" : "microblaze-linux",
101 "microblazeel-linux-musl" : "microblaze-linux", 105 "microblazeel-linux-musl" : "microblaze-linux",
102 "mips-linux-musl": "mips-linux", 106 "mips-linux-musl": "mips-linux",
diff --git a/meta/conf/machine-sdk/loongarch64.conf b/meta/conf/machine-sdk/loongarch64.conf
new file mode 100644
index 0000000000..40bf0039ea
--- /dev/null
+++ b/meta/conf/machine-sdk/loongarch64.conf
@@ -0,0 +1,2 @@
1SDK_ARCH = "loongarch64"
2ABIEXTENSION:class-nativesdk = ""
diff --git a/meta/conf/machine/include/loongarch/arch-loongarch.inc b/meta/conf/machine/include/loongarch/arch-loongarch.inc
new file mode 100644
index 0000000000..4b44614035
--- /dev/null
+++ b/meta/conf/machine/include/loongarch/arch-loongarch.inc
@@ -0,0 +1,7 @@
1# LoongArch Architecture definition
2
3DEFAULTTUNE ?= "loongarch64"
4
5TUNE_ARCH = "${TUNE_ARCH:tune-${DEFAULTTUNE}}"
6TUNE_PKGARCH = "${TUNE_PKGARCH:tune-${DEFAULTTUNE}}"
7TUNE_CCARGS:append = "${@bb.utils.contains('TUNE_FEATURES', 'loongarch64', ' -march=la464 -mabi=lp64d', ' ', d)}"
diff --git a/meta/conf/machine/include/loongarch/qemuloongarch.inc b/meta/conf/machine/include/loongarch/qemuloongarch.inc
new file mode 100644
index 0000000000..77245ff85d
--- /dev/null
+++ b/meta/conf/machine/include/loongarch/qemuloongarch.inc
@@ -0,0 +1,35 @@
1PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot"
2
3require conf/machine/include/qemu.inc
4require conf/machine/include/loongarch/tune-loongarch.inc
5
6MACHINE_FEATURES = "screen keyboard ext2 ext3 serial"
7
8KERNEL_IMAGETYPE = "vmlinuz"
9KERNEL_IMAGETYPES += "vmlinuz"
10KEEPUIMAGE = "no"
11
12SERIAL_CONSOLES ?= "115200;ttyS0 115200;hvc0"
13
14IMAGE_FSTYPES += "ext4 wic.qcow2"
15
16WKS_FILE ?= "qemuloongarch.wks"
17
18MACHINE_EXTRA_RRECOMMENDS += " kernel-modules"
19
20#EXTRA_IMAGEDEPENDS += "opensbi"
21
22UBOOT_ENTRYPOINT_loongarch32 = "0x80400000"
23UBOOT_ENTRYPOINT_loongarch64 = "0x80200000"
24
25# qemuboot options
26QB_KERNEL_CMDLINE_APPEND = "earlycon=sbi"
27QB_MACHINE = "-machine virt"
28QB_DEFAULT_BIOS = "fw_jump.elf"
29QB_TAP_OPT = "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no"
30QB_NETWORK_DEVICE = "-device virtio-net-device,netdev=net0,mac=@MAC@"
31QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0"
32QB_SERIAL_OPT = "-device virtio-serial-device -chardev null,id=virtcon -device virtconsole,chardev=virtcon"
33QB_TCPSERIAL_OPT = " -device virtio-serial-device -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1 -device virtconsole,chardev=virtcon"
34# Add the 'virtio-rng-pci' device otherwise the guest may run out of entropy
35QB_OPT_APPEND = " -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-device,rng=rng0"
diff --git a/meta/conf/machine/include/loongarch/tune-loongarch.inc b/meta/conf/machine/include/loongarch/tune-loongarch.inc
new file mode 100644
index 0000000000..f02ddda474
--- /dev/null
+++ b/meta/conf/machine/include/loongarch/tune-loongarch.inc
@@ -0,0 +1,13 @@
1require conf/machine/include/loongarch/arch-loongarch.inc
2
3TUNEVALID[loongarch64] = "Enable 64-bit LoongArch optimizations"
4
5TUNEVALID[littleendian] = "Little endian mode"
6
7AVAILTUNES += "loongarch64"
8
9# Default
10TUNE_FEATURES:tune-loongarch64 = "loongarch64"
11TUNE_ARCH:tune-loongarch64 = "loongarch64"
12TUNE_PKGARCH:tune-loongarch64 = "loongarch64"
13PACKAGE_EXTRA_ARCHS:tune-loongarch64 = "loongarch64"
diff --git a/meta/conf/machine/qemuloongarch64.conf b/meta/conf/machine/qemuloongarch64.conf
new file mode 100644
index 0000000000..675d525afd
--- /dev/null
+++ b/meta/conf/machine/qemuloongarch64.conf
@@ -0,0 +1,11 @@
1#@TYPE: Machine
2#@NAME: generic loongarch64 machine
3#@DESCRIPTION: Machine configuration for running a generic loongarch64
4
5require conf/machine/include/loongarch/qemuloongarch.inc
6
7XVISOR_PLAT = "loongarch/virt64"
8
9EXTRA_IMAGEDEPENDS += "u-boot"
10UBOOT_MACHINE = "qemu-loongarch64_smode_defconfig"
11UBOOT_ELF = "u-boot"
diff --git a/meta/lib/oe/elf.py b/meta/lib/oe/elf.py
index fb07995b3e..eab2349a4f 100644
--- a/meta/lib/oe/elf.py
+++ b/meta/lib/oe/elf.py
@@ -21,6 +21,7 @@ def machine_dict(d):
21 "x86_64": (62, 0, 0, True, 64), 21 "x86_64": (62, 0, 0, True, 64),
22 "epiphany": (4643, 0, 0, True, 32), 22 "epiphany": (4643, 0, 0, True, 32),
23 "lm32": (138, 0, 0, False, 32), 23 "lm32": (138, 0, 0, False, 32),
24 "loongarch64":(258, 0, 0, True, 64),
24 "mips": ( 8, 0, 0, False, 32), 25 "mips": ( 8, 0, 0, False, 32),
25 "mipsel": ( 8, 0, 0, True, 32), 26 "mipsel": ( 8, 0, 0, True, 32),
26 "microblaze": (189, 0, 0, False, 32), 27 "microblaze": (189, 0, 0, False, 32),
@@ -45,6 +46,7 @@ def machine_dict(d):
45 "ia64": (50, 0, 0, True, 64), 46 "ia64": (50, 0, 0, True, 64),
46 "alpha": (36902, 0, 0, True, 64), 47 "alpha": (36902, 0, 0, True, 64),
47 "hppa": (15, 3, 0, False, 32), 48 "hppa": (15, 3, 0, False, 32),
49 "loongarch64":(258, 0, 0, True, 64),
48 "m68k": ( 4, 0, 0, False, 32), 50 "m68k": ( 4, 0, 0, False, 32),
49 "mips": ( 8, 0, 0, False, 32), 51 "mips": ( 8, 0, 0, False, 32),
50 "mipsel": ( 8, 0, 0, True, 32), 52 "mipsel": ( 8, 0, 0, True, 32),
diff --git a/meta/recipes-devtools/meson/meson_1.0.0.bb b/meta/recipes-devtools/meson/meson_1.0.0.bb
index a7740cc6dd..578dfb9d64 100644
--- a/meta/recipes-devtools/meson/meson_1.0.0.bb
+++ b/meta/recipes-devtools/meson/meson_1.0.0.bb
@@ -66,6 +66,8 @@ def generate_native_link_template(d):
66 loader = 'ld-linux-aarch64.so.1' 66 loader = 'ld-linux-aarch64.so.1'
67 elif 'ppc64le' in build_arch: 67 elif 'ppc64le' in build_arch:
68 loader = 'ld64.so.2' 68 loader = 'ld64.so.2'
69 elif 'loongarch64' in build_arch:
70 loader = 'ld-linux-loongarch-lp64d.so.1'
69 71
70 if loader: 72 if loader:
71 val += ['-Wl,--dynamic-linker=@{OECORE_NATIVE_SYSROOT}${base_libdir_native}/' + loader] 73 val += ['-Wl,--dynamic-linker=@{OECORE_NATIVE_SYSROOT}${base_libdir_native}/' + loader]
diff --git a/meta/recipes-devtools/qemu/qemu.inc b/meta/recipes-devtools/qemu/qemu.inc
index 80f6edd2b9..92828e8f2d 100644
--- a/meta/recipes-devtools/qemu/qemu.inc
+++ b/meta/recipes-devtools/qemu/qemu.inc
@@ -86,7 +86,7 @@ do_install_ptest() {
86} 86}
87 87
88# QEMU_TARGETS is overridable variable 88# QEMU_TARGETS is overridable variable
89QEMU_TARGETS ?= "arm aarch64 i386 mips mipsel mips64 mips64el ppc ppc64 ppc64le riscv32 riscv64 sh4 x86_64" 89QEMU_TARGETS ?= "arm aarch64 i386 loongarch64 mips mipsel mips64 mips64el ppc ppc64 ppc64le riscv32 riscv64 sh4 x86_64"
90 90
91EXTRA_OECONF = " \ 91EXTRA_OECONF = " \
92 --prefix=${prefix} \ 92 --prefix=${prefix} \
diff --git a/meta/site/loongarch64-linux b/meta/site/loongarch64-linux
new file mode 100644
index 0000000000..38bc5f044d
--- /dev/null
+++ b/meta/site/loongarch64-linux
@@ -0,0 +1,11 @@
1# general
2ac_cv_alignof_guint32=4
3ac_cv_alignof_guint64=8
4ac_cv_alignof_unsigned_long=8
5
6# glib-2.0
7glib_cv_stack_grows=${glib_cv_stack_grows=no}
8glib_cv_uscore=${glib_cv_uscore=no}
9
10# startup-notification
11lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
diff --git a/scripts/lib/wic/canned-wks/qemuloongarch.wks b/scripts/lib/wic/canned-wks/qemuloongarch.wks
new file mode 100644
index 0000000000..8465c7a8c0
--- /dev/null
+++ b/scripts/lib/wic/canned-wks/qemuloongarch.wks
@@ -0,0 +1,3 @@
1# short-description: Create qcow2 image for LoongArch QEMU machines
2
3part / --source rootfs --fstype=ext4 --label root --align 4096 --size 5G
diff --git a/scripts/runqemu b/scripts/runqemu
index 5907390573..def11ea911 100755
--- a/scripts/runqemu
+++ b/scripts/runqemu
@@ -1313,7 +1313,7 @@ class BaseConfig(object):
1313 """attempt to determine the appropriate qemu-system binary""" 1313 """attempt to determine the appropriate qemu-system binary"""
1314 mach = self.get('MACHINE') 1314 mach = self.get('MACHINE')
1315 if not mach: 1315 if not mach:
1316 search = '.*(qemux86-64|qemux86|qemuarm64|qemuarm|qemumips64|qemumips64el|qemumipsel|qemumips|qemuppc).*' 1316 search = '.*(qemux86-64|qemux86|qemuarm64|qemuarm|qemuloongarch64|qemumips64|qemumips64el|qemumipsel|qemumips|qemuppc).*'
1317 if self.rootfs: 1317 if self.rootfs:
1318 match = re.match(search, self.rootfs) 1318 match = re.match(search, self.rootfs)
1319 if match: 1319 if match:
@@ -1336,6 +1336,8 @@ class BaseConfig(object):
1336 qbsys = 'x86_64' 1336 qbsys = 'x86_64'
1337 elif mach == 'qemuppc': 1337 elif mach == 'qemuppc':
1338 qbsys = 'ppc' 1338 qbsys = 'ppc'
1339 elif mach == 'qemuloongarch64':
1340 qbsys = 'loongarch64'
1339 elif mach == 'qemumips': 1341 elif mach == 'qemumips':
1340 qbsys = 'mips' 1342 qbsys = 'mips'
1341 elif mach == 'qemumips64': 1343 elif mach == 'qemumips64':