diff mbox series

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

Message ID 20240710022430.1306-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 10, 2024, 2:24 a.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>
Acked-by: Alistair Francis <alistair.francis@wdc.com>
---
 tests/avocado/boot_linux_console.py | 38 +++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

Comments

Daniel Henrique Barboza July 12, 2024, 9:52 a.m. UTC | #1
On 7/9/24 11:24 PM, LIU Zhiwei 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>
> ---
>   tests/avocado/boot_linux_console.py | 38 +++++++++++++++++++++++++++++
>   1 file changed, 38 insertions(+)
> 
> diff --git a/tests/avocado/boot_linux_console.py b/tests/avocado/boot_linux_console.py
> index c35fc5e9ba..6d2f3b05cb 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,40 @@ 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', 'file=' + rootfs_path +
> +                                   ',format=raw,id=hd0,if=none',
> +                         '-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')


Nothing wrong with adding a boot_linux_console.py, but if we could add a tuxrun_baselines.py
testsuite instead I think it would be great.

I believe Tuxboot is now the preferable way of testing a distro up to boot in QEMU. We have
all other RISC-V CPU boards and CPUs tested in that framework. It's also faster to run.

Here's a diff adding it:

$ git diff
diff --git a/tests/avocado/tuxrun_baselines.py b/tests/avocado/tuxrun_baselines.py
index 736e4aa289..589c7f254b 100644
--- a/tests/avocado/tuxrun_baselines.py
+++ b/tests/avocado/tuxrun_baselines.py
@@ -533,6 +533,22 @@ def test_riscv64_maxcpu(self):
  
          self.common_tuxrun(csums=sums)
  
+    def test_riscv64_rv32(self):
+        """
+        :avocado: tags=arch:riscv64
+        :avocado: tags=machine:virt
+        :avocado: tags=tuxboot:riscv32
+        :avocado: tags=cpu:rv32
+        """
+        sums = { "Image" :
+                 "89599407d7334de629a40e7ad6503c73670359eb5f5ae9d686353a3d6deccbd5",
+                 "fw_jump.elf" :
+                 "f2ef28a0b77826f79d085d3e4aa686f1159b315eff9099a37046b18936676985",
+                 "rootfs.ext4.zst" :
+                 "7168d296d0283238ea73cd5a775b3dd608e55e04c7b92b76ecce31bb13108cba" }
+
+        self.common_tuxrun(csums=sums)
+
      def test_s390(self):
          """
          :avocado: tags=arch:s390x


$ make check-avocado
(...)
  (01/21) tests/avocado/boot_linux_console.py:BootLinuxConsole.test_riscv64_virt_rv32i: PASS (22.32 s)
(...)
  (14/21) tests/avocado/tuxrun_baselines.py:TuxRunBaselineTest.test_riscv64_rv32: PASS (10.34 s)



Thanks,

Daniel
LIU Zhiwei July 15, 2024, 1:29 a.m. UTC | #2
On 2024/7/12 17:52, Daniel Henrique Barboza wrote:
>
>
> On 7/9/24 11:24 PM, LIU Zhiwei 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>
>> ---
>>   tests/avocado/boot_linux_console.py | 38 +++++++++++++++++++++++++++++
>>   1 file changed, 38 insertions(+)
>>
>> diff --git a/tests/avocado/boot_linux_console.py 
>> b/tests/avocado/boot_linux_console.py
>> index c35fc5e9ba..6d2f3b05cb 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,40 @@ 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', 'file=' + rootfs_path +
>> + ',format=raw,id=hd0,if=none',
>> +                         '-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')
>
>
> Nothing wrong with adding a boot_linux_console.py, but if we could add 
> a tuxrun_baselines.py
> testsuite instead I think it would be great.
>
> I believe Tuxboot is now the preferable way of testing a distro up to 
> boot in QEMU. We have
> all other RISC-V CPU boards and CPUs tested in that framework. It's 
> also faster to run.
>
> Here's a diff adding it:
>
> $ git diff
> diff --git a/tests/avocado/tuxrun_baselines.py 
> b/tests/avocado/tuxrun_baselines.py
> index 736e4aa289..589c7f254b 100644
> --- a/tests/avocado/tuxrun_baselines.py
> +++ b/tests/avocado/tuxrun_baselines.py
> @@ -533,6 +533,22 @@ def test_riscv64_maxcpu(self):
>
>          self.common_tuxrun(csums=sums)
>
> +    def test_riscv64_rv32(self):
> +        """
> +        :avocado: tags=arch:riscv64
> +        :avocado: tags=machine:virt
> +        :avocado: tags=tuxboot:riscv32
> +        :avocado: tags=cpu:rv32
> +        """
> +        sums = { "Image" :
> + "89599407d7334de629a40e7ad6503c73670359eb5f5ae9d686353a3d6deccbd5",
> +                 "fw_jump.elf" :
> + "f2ef28a0b77826f79d085d3e4aa686f1159b315eff9099a37046b18936676985",
> +                 "rootfs.ext4.zst" :
> + "7168d296d0283238ea73cd5a775b3dd608e55e04c7b92b76ecce31bb13108cba" }
> +
> +        self.common_tuxrun(csums=sums)
> +
>      def test_s390(self):
>          """
>          :avocado: tags=arch:s390x
>
>
> $ make check-avocado
> (...)
>  (01/21) 
> tests/avocado/boot_linux_console.py:BootLinuxConsole.test_riscv64_virt_rv32i: 
> PASS (22.32 s)
> (...)
>  (14/21) 
> tests/avocado/tuxrun_baselines.py:TuxRunBaselineTest.test_riscv64_rv32: 
> PASS (10.34 s)

Hi Daniel,

Thanks for sharing this test way to us. I'd like to replace our test 
with yours. And this commit will be authored to you.

Thanks,
Zhiwei

>
>
>
> Thanks,
>
> Daniel
Daniel Henrique Barboza July 15, 2024, 8:42 a.m. UTC | #3
On 7/14/24 10:29 PM, LIU Zhiwei wrote:
> 
> On 2024/7/12 17:52, Daniel Henrique Barboza wrote:
>>
>>
>> On 7/9/24 11:24 PM, LIU Zhiwei 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>
>>> ---
>>>   tests/avocado/boot_linux_console.py | 38 +++++++++++++++++++++++++++++
>>>   1 file changed, 38 insertions(+)
>>>
>>> diff --git a/tests/avocado/boot_linux_console.py b/tests/avocado/boot_linux_console.py
>>> index c35fc5e9ba..6d2f3b05cb 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,40 @@ 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', 'file=' + rootfs_path +
>>> + ',format=raw,id=hd0,if=none',
>>> +                         '-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')
>>
>>
>> Nothing wrong with adding a boot_linux_console.py, but if we could add a tuxrun_baselines.py
>> testsuite instead I think it would be great.
>>
>> I believe Tuxboot is now the preferable way of testing a distro up to boot in QEMU. We have
>> all other RISC-V CPU boards and CPUs tested in that framework. It's also faster to run.
>>
>> Here's a diff adding it:
>>
>> $ git diff
>> diff --git a/tests/avocado/tuxrun_baselines.py b/tests/avocado/tuxrun_baselines.py
>> index 736e4aa289..589c7f254b 100644
>> --- a/tests/avocado/tuxrun_baselines.py
>> +++ b/tests/avocado/tuxrun_baselines.py
>> @@ -533,6 +533,22 @@ def test_riscv64_maxcpu(self):
>>
>>          self.common_tuxrun(csums=sums)
>>
>> +    def test_riscv64_rv32(self):
>> +        """
>> +        :avocado: tags=arch:riscv64
>> +        :avocado: tags=machine:virt
>> +        :avocado: tags=tuxboot:riscv32
>> +        :avocado: tags=cpu:rv32
>> +        """
>> +        sums = { "Image" :
>> + "89599407d7334de629a40e7ad6503c73670359eb5f5ae9d686353a3d6deccbd5",
>> +                 "fw_jump.elf" :
>> + "f2ef28a0b77826f79d085d3e4aa686f1159b315eff9099a37046b18936676985",
>> +                 "rootfs.ext4.zst" :
>> + "7168d296d0283238ea73cd5a775b3dd608e55e04c7b92b76ecce31bb13108cba" }
>> +
>> +        self.common_tuxrun(csums=sums)
>> +
>>      def test_s390(self):
>>          """
>>          :avocado: tags=arch:s390x
>>
>>
>> $ make check-avocado
>> (...)
>>  (01/21) tests/avocado/boot_linux_console.py:BootLinuxConsole.test_riscv64_virt_rv32i: PASS (22.32 s)
>> (...)
>>  (14/21) tests/avocado/tuxrun_baselines.py:TuxRunBaselineTest.test_riscv64_rv32: PASS (10.34 s)
> 
> Hi Daniel,
> 
> Thanks for sharing this test way to us. I'd like to replace our test with yours. And this commit will be authored to you.

Feel free to use this diff. A "Suggested-by" reference in my name is enough :D


Thanks,

Daniel

> 
> Thanks,
> Zhiwei
> 
>>
>>
>>
>> Thanks,
>>
>> Daniel
diff mbox series

Patch

diff --git a/tests/avocado/boot_linux_console.py b/tests/avocado/boot_linux_console.py
index c35fc5e9ba..6d2f3b05cb 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,40 @@  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', 'file=' + rootfs_path +
+                                   ',format=raw,id=hd0,if=none',
+                         '-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')