From: George Guo <[email protected]>

Add loongarch.conf to configure QEMU's LoongArch virtual machine with a
la464 CPU, an 8250 serial console, and the generic PCI host controller.
Extend vmtest.sh to recognize loongarch64 as a supported target and map
it to the loongarch kernel architecture name.

Boot vmlinux.efi through EFI firmware.  The KHO configuration table
channel is installed by the EFI stub during the initial boot, so direct
kernel boot bypasses the path that this test needs to exercise.  QEMU_EFI
defaults to the firmware shipped under /usr/share/edk2/loongarch64/ and
can be overridden for distributions that install it under a different
path, such as Debian's qemu-efi-loongarch64 package.

QEMU's LoongArch virt machine has no i8042 controller.  Enable the generic
PCI host so its I/O space is mapped before the i8042 fallback probe
accesses the legacy ports.  This avoids disabling the i8042 options and
allows the same kernel configuration to remain usable on physical hosts.

Enable ACPI_SPCR_TABLE so the bare earlycon parameter can obtain the UART
type, MMIO address and baud rate from the SPCR table installed by EDK2.
Unlike on x86, ACPI_SPCR_TABLE does not default to enabled on LoongArch.
Without it, no early console is registered for the EFI firmware boot path,
and vmtest cannot observe the early kernel output in its serial log.

The KHO vmtest requires CONFIG_DEFERRED_STRUCT_PAGE_INIT=y, which
depends on SPARSEMEM.  Select CONFIG_SPARSEMEM_MANUAL=y to satisfy the
dependency on LoongArch.

Co-developed-by: Kexin Liu <[email protected]>
Signed-off-by: Kexin Liu <[email protected]>
Signed-off-by: George Guo <[email protected]>
---
 tools/testing/selftests/kho/loongarch.conf | 11 +++++++++++
 tools/testing/selftests/kho/vmtest.sh      |  3 ++-
 2 files changed, 13 insertions(+), 1 deletion(-)
 create mode 100644 tools/testing/selftests/kho/loongarch.conf

diff --git a/tools/testing/selftests/kho/loongarch.conf 
b/tools/testing/selftests/kho/loongarch.conf
new file mode 100644
index 000000000000..36153b03c4ef
--- /dev/null
+++ b/tools/testing/selftests/kho/loongarch.conf
@@ -0,0 +1,11 @@
+QEMU_EFI="${QEMU_EFI:-/usr/share/edk2/loongarch64/QEMU_EFI.fd}"
+QEMU_CMD="qemu-system-loongarch64 -M virt -cpu la464 -bios $QEMU_EFI"
+QEMU_KCONFIG="
+CONFIG_ACPI_SPCR_TABLE=y
+CONFIG_PCI_HOST_GENERIC=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SPARSEMEM_MANUAL=y
+"
+KERNEL_IMAGE="vmlinux.efi"
+KERNEL_CMDLINE="console=ttyS0 earlycon"
diff --git a/tools/testing/selftests/kho/vmtest.sh 
b/tools/testing/selftests/kho/vmtest.sh
index 0014bd76e88d..d05ba0734b25 100755
--- a/tools/testing/selftests/kho/vmtest.sh
+++ b/tools/testing/selftests/kho/vmtest.sh
@@ -21,7 +21,7 @@ Options:
        -d)     path to the kernel build directory
        -j)     number of jobs for compilation, similar to -j in make
        -t)     run test for target_arch, requires CROSS_COMPILE set
-               supported targets: aarch64, x86_64
+               supported targets: aarch64, loongarch64, x86_64
        -h)     display this help
 EOF
 }
@@ -126,6 +126,7 @@ function target_to_arch() {
 
        case $target in
             aarch64) echo "arm64" ;;
+            loongarch64) echo "loongarch" ;;
             x86_64) echo "x86" ;;
             *) skip "architecture $target is not supported"
        esac
-- 
2.53.0


Reply via email to