diff mbox series

[v3,7/7] tests/avocado: Add an avocado test for riscv64

Message ID 20240703144921.1281-8-zhiwei_liu@linux.alibaba.com (mailing list archive)
State New, archived
Headers show
Series target/riscv: Expose RV32 cpu to RV64 QEMU | expand

Commit Message

LIU Zhiwei July 3, 2024, 2:49 p.m. UTC
From: TANG Tiancheng <tangtiancheng.ttc@alibaba-inc.com>

To regularly test booting Linux with rv32 on QEMU RV64,
we have added a test to boot_linux_console.py to retrieve
cpuinfo and verify if it shows 'rv32' when using RV64 to
boot rv32 CPUs.

Signed-off-by: TANG Tiancheng <tangtiancheng.ttc@alibaba-inc.com>
Reviewed-by: Liu Zhiwei <zhiwei_liu@linux.alibaba.com>
---
 tests/avocado/boot_linux_console.py | 37 +++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

Comments

Alistair Francis July 8, 2024, 2:47 a.m. UTC | #1
On Thu, Jul 4, 2024 at 12:55 AM LIU Zhiwei <zhiwei_liu@linux.alibaba.com> wrote:
>
> From: TANG Tiancheng <tangtiancheng.ttc@alibaba-inc.com>
>
> To regularly test booting Linux with rv32 on QEMU RV64,
> we have added a test to boot_linux_console.py to retrieve
> cpuinfo and verify if it shows 'rv32' when using RV64 to
> boot rv32 CPUs.
>
> Signed-off-by: TANG Tiancheng <tangtiancheng.ttc@alibaba-inc.com>
> Reviewed-by: Liu Zhiwei <zhiwei_liu@linux.alibaba.com>

Acked-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
>  tests/avocado/boot_linux_console.py | 37 +++++++++++++++++++++++++++++
>  1 file changed, 37 insertions(+)
>
> diff --git a/tests/avocado/boot_linux_console.py b/tests/avocado/boot_linux_console.py
> index c35fc5e9ba..193b03d970 100644
> --- a/tests/avocado/boot_linux_console.py
> +++ b/tests/avocado/boot_linux_console.py
> @@ -12,6 +12,7 @@
>  import lzma
>  import gzip
>  import shutil
> +import time
>
>  from avocado import skip
>  from avocado import skipUnless
> @@ -1545,3 +1546,39 @@ def test_xtensa_lx60(self):
>          """
>          tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34'
>          self.do_test_advcal_2018('02', tar_hash, 'santas-sleigh-ride.elf')
> +
> +    def test_riscv64_virt_rv32i(self):
> +        """
> +        :avocado: tags=arch:riscv64
> +        :avocado: tags=machine:virt
> +        :avocado: tags=cpu:rv32
> +        """
> +        kernel_url = ('https://github.com/romanheros/rv32-linux/raw'
> +                      '/master/Image32.xz')
> +        kernel_hash = 'a7ced5c38722481e0821b7cd70719cf53e46c13b'
> +        kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
> +
> +        kernel_path =  os.path.join(self.workdir, 'kernel.riscv32')
> +        archive.lzma_uncompress(kernel_path_xz, kernel_path)
> +
> +        rootfs_url = ('https://github.com/romanheros/rv32-linux/raw'
> +                      '/master/rootfs.ext2.xz')
> +        rootfs_hash = 'dc25ab9d4b233e8e0bcf7eb220d56fd2008fe263'
> +        rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash)
> +
> +        rootfs_path =  os.path.join(self.workdir, 'rootfs.riscv32')
> +        archive.lzma_uncompress(rootfs_path_xz, rootfs_path)
> +
> +        self.vm.set_console()
> +        kernel_command_line = 'root=/dev/vda ro console=ttyS0'
> +        self.vm.add_args('-kernel', kernel_path,
> +                         '-append', kernel_command_line,
> +                         '-drive', f'file={rootfs_path},format=raw,id=hd0',
> +                         '-device', 'virtio-blk-device,drive=hd0',)
> +        self.vm.launch()
> +
> +        console_pattern = 'Welcome to Buildroot'
> +        self.wait_for_console_pattern(console_pattern)
> +        exec_command(self, 'root')
> +        time.sleep(0.1)
> +        exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 'rv32i')
> --
> 2.25.1
>
>
diff mbox series

Patch

diff --git a/tests/avocado/boot_linux_console.py b/tests/avocado/boot_linux_console.py
index c35fc5e9ba..193b03d970 100644
--- a/tests/avocado/boot_linux_console.py
+++ b/tests/avocado/boot_linux_console.py
@@ -12,6 +12,7 @@ 
 import lzma
 import gzip
 import shutil
+import time
 
 from avocado import skip
 from avocado import skipUnless
@@ -1545,3 +1546,39 @@  def test_xtensa_lx60(self):
         """
         tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34'
         self.do_test_advcal_2018('02', tar_hash, 'santas-sleigh-ride.elf')
+
+    def test_riscv64_virt_rv32i(self):
+        """
+        :avocado: tags=arch:riscv64
+        :avocado: tags=machine:virt
+        :avocado: tags=cpu:rv32
+        """
+        kernel_url = ('https://github.com/romanheros/rv32-linux/raw'
+                      '/master/Image32.xz')
+        kernel_hash = 'a7ced5c38722481e0821b7cd70719cf53e46c13b'
+        kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
+
+        kernel_path =  os.path.join(self.workdir, 'kernel.riscv32')
+        archive.lzma_uncompress(kernel_path_xz, kernel_path)
+
+        rootfs_url = ('https://github.com/romanheros/rv32-linux/raw'
+                      '/master/rootfs.ext2.xz')
+        rootfs_hash = 'dc25ab9d4b233e8e0bcf7eb220d56fd2008fe263'
+        rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash)
+
+        rootfs_path =  os.path.join(self.workdir, 'rootfs.riscv32')
+        archive.lzma_uncompress(rootfs_path_xz, rootfs_path)
+
+        self.vm.set_console()
+        kernel_command_line = 'root=/dev/vda ro console=ttyS0'
+        self.vm.add_args('-kernel', kernel_path,
+                         '-append', kernel_command_line,
+                         '-drive', f'file={rootfs_path},format=raw,id=hd0',
+                         '-device', 'virtio-blk-device,drive=hd0',)
+        self.vm.launch()
+
+        console_pattern = 'Welcome to Buildroot'
+        self.wait_for_console_pattern(console_pattern)
+        exec_command(self, 'root')
+        time.sleep(0.1)
+        exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 'rv32i')