[PATCH 5/5] tests/acceptance: Test PMON on the Fuloong 2E machine

Philippe Mathieu-Daudé posted 5 patches 4 years, 7 months ago
[PATCH 5/5] tests/acceptance: Test PMON on the Fuloong 2E machine
Posted by Philippe Mathieu-Daudé 4 years, 7 months ago
Test the PMON firmware. As the firmware is not redistributable,
it has to be downloaded manually first. Then it can be used by
providing its path via the PMON_BIN_PATH environment variable:

  $ PMON2E_BIN_PATH=~/images/fuloong2e/pmon_2e.bin \
    AVOCADO_ALLOW_UNTRUSTED_CODE=1 \
    avocado --show=app,console run tests/acceptance/machine_mips_fuloong2e.py
  Fetching asset from tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_linux_kernel_isa_serial
   (1/3) tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_pmon_serial_console:
  console: PMON2000 MIPS Initializing. Standby...
  console: ERRORPC=00000000 CONFIG=00030932
  console: PRID=00006302
  console: Init SDRAM Done!
  console: Sizing caches...
  console: Init caches...
  console: godson2 caches found
  console: Init caches done, cfg = 00030932
  console: Copy PMON to execute location...
  console: copy text section done.
  console: Copy PMON to execute location done.
  Uncompressing Bios........................OK,Booting Bios
  PASS (0.25 s)
   (2/3) tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_pmon_framebuffer_console:
  [...]
  Uncompressing Bios........................OK,Booting Bios
  console: FREQ
  console: FREI
  console: DONE
  console: TTYI
  console: TTYD
  console: ENVI
  console: MAPV
  console: Mfg  0, Id 60
  console: STDV
  console: SBDD
  console: PPCIH
  console: PCIS
  console: PCIR
  console: PCIW
  console: NETI
  console: RTCL
  console: PCID
  console: VGAI
  console: Default MODE_ID 2
  console: starting radeon init...
  console: radeon init done
  console: FRBI
  console: cfb_console init,fb=b4000000
  console: Video: Drawing the logo ...
  console: CONSOLE_SIZE 450560HSTI
  PASS (4.10 s)
   (3/3) tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_linux_kernel_isa_serial:
  console: Linux version 2.6.27.7lemote (root@debian) (gcc version 4.1.3 20080623 (prerelease) (Debian 4.1.2-23)) #6 Fri Dec 12 00:11:25 CST 2008
  console: busclock=33000000, cpuclock=-2145008360,memsize=256,highmemsize=0
  console: console [early0] enabled
  console: CPU revision is: 00006302 (ICT Loongson-2)
  PASS (0.19 s)
  RESULTS    : PASS 3 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
  JOB TIME   : 5.10 s

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 tests/acceptance/machine_mips_fuloong2e.py | 62 ++++++++++++++++++++++
 1 file changed, 62 insertions(+)

diff --git a/tests/acceptance/machine_mips_fuloong2e.py b/tests/acceptance/machine_mips_fuloong2e.py
index 0ac285e2af1..4854ba98560 100644
--- a/tests/acceptance/machine_mips_fuloong2e.py
+++ b/tests/acceptance/machine_mips_fuloong2e.py
@@ -8,15 +8,77 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 
 import os
+import time
 
 from avocado import skipUnless
 from avocado_qemu import Test
 from avocado_qemu import wait_for_console_pattern
 
+from tesseract_utils import tesseract_available, tesseract_ocr
+
 class MipsFuloong2e(Test):
 
     timeout = 60
 
+    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
+    @skipUnless(os.getenv('PMON2E_BIN_PATH'), 'PMON2E_BIN_PATH not available')
+    def test_pmon_serial_console(self):
+        """
+        :avocado: tags=arch:mips64el
+        :avocado: tags=machine:fuloong2e
+        :avocado: tags=endian:little
+        :avocado: tags=device:bonito64
+        :avocado: tags=device:via686b
+        """
+        pmon_hash = 'c812e1695d7b2320036f3ef494976969' # v1.1.2
+        pmon_path = self.fetch_asset('file://' + os.getenv('PMON2E_BIN_PATH'),
+                                     asset_hash=pmon_hash, algorithm='md5')
+
+        self.vm.set_console()
+        self.vm.add_args('-bios', pmon_path)
+        self.vm.launch()
+        wait_for_console_pattern(self, 'PMON2000 MIPS Initializing. Standby...')
+        wait_for_console_pattern(self, 'Booting Bios')
+
+    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
+    # Tesseract 4 adds a new OCR engine based on LSTM neural networks. The
+    # new version is faster and more accurate than version 3. The drawback is
+    # that it is still alpha-level software.
+    @skipUnless(tesseract_available(4), 'tesseract v4 OCR tool not available')
+    @skipUnless(os.getenv('PMON2E_BIN_PATH'), 'PMON2E_BIN_PATH not available')
+    def test_pmon_framebuffer_console(self):
+        """
+        :avocado: tags=arch:mips64el
+        :avocado: tags=machine:fuloong2e
+        :avocado: tags=endian:little
+        :avocado: tags=device:bonito64
+        :avocado: tags=device:ati-vga
+        """
+        screenshot_path = os.path.join(self.workdir, 'dump.ppm')
+
+        pmon_hash = 'c812e1695d7b2320036f3ef494976969' # v1.1.2
+        pmon_path = self.fetch_asset('file://' + os.getenv('PMON2E_BIN_PATH'),
+                                     asset_hash=pmon_hash, algorithm='md5')
+
+        self.vm.set_console()
+        self.vm.add_args('-bios', pmon_path,
+                         '-vga', 'std',
+                         '-device', 'ati-vga,model=rv100')
+        self.vm.launch()
+
+        wait_for_console_pattern(self, 'Video: Drawing the logo ...')
+        self.log.info('VM launched, waiting for logo on display')
+        time.sleep(2)
+        wait_for_console_pattern(self, 'CONSOLE_SIZE')
+        self.vm.command('human-monitor-command', command_line='stop')
+        self.vm.command('human-monitor-command',
+                        command_line='screendump %s' % screenshot_path)
+
+        lines = tesseract_ocr(screenshot_path, tesseract_version=4,
+                              tesseract_args='--dpi 128')
+        pmon_version = 'PNON2000 for Loongson, Version 1.1.2' # PNON is enough
+        self.assertIn(pmon_version, lines)
+
     @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
     @skipUnless(os.getenv('RESCUE_YL_PATH'), 'RESCUE_YL_PATH not available')
     def test_linux_kernel_isa_serial(self):
-- 
2.31.1

Re: [PATCH 5/5] tests/acceptance: Test PMON on the Fuloong 2E machine
Posted by BALATON Zoltan 4 years, 7 months ago
On Thu, 24 Jun 2021, Philippe Mathieu-Daudé wrote:
> Test the PMON firmware. As the firmware is not redistributable,
> it has to be downloaded manually first. Then it can be used by
> providing its path via the PMON_BIN_PATH environment variable:
>
>  $ PMON2E_BIN_PATH=~/images/fuloong2e/pmon_2e.bin \
>    AVOCADO_ALLOW_UNTRUSTED_CODE=1 \
>    avocado --show=app,console run tests/acceptance/machine_mips_fuloong2e.py
>  Fetching asset from tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_linux_kernel_isa_serial
>   (1/3) tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_pmon_serial_console:
>  console: PMON2000 MIPS Initializing. Standby...
>  console: ERRORPC=00000000 CONFIG=00030932
>  console: PRID=00006302
>  console: Init SDRAM Done!
>  console: Sizing caches...
>  console: Init caches...
>  console: godson2 caches found
>  console: Init caches done, cfg = 00030932
>  console: Copy PMON to execute location...
>  console: copy text section done.
>  console: Copy PMON to execute location done.
>  Uncompressing Bios........................OK,Booting Bios
>  PASS (0.25 s)
>   (2/3) tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_pmon_framebuffer_console:
>  [...]
>  Uncompressing Bios........................OK,Booting Bios
>  console: FREQ
>  console: FREI
>  console: DONE
>  console: TTYI
>  console: TTYD
>  console: ENVI
>  console: MAPV
>  console: Mfg  0, Id 60
>  console: STDV
>  console: SBDD
>  console: PPCIH
>  console: PCIS
>  console: PCIR
>  console: PCIW
>  console: NETI
>  console: RTCL
>  console: PCID
>  console: VGAI
>  console: Default MODE_ID 2
>  console: starting radeon init...
>  console: radeon init done
>  console: FRBI
>  console: cfb_console init,fb=b4000000
>  console: Video: Drawing the logo ...
>  console: CONSOLE_SIZE 450560HSTI
>  PASS (4.10 s)
>   (3/3) tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_linux_kernel_isa_serial:
>  console: Linux version 2.6.27.7lemote (root@debian) (gcc version 4.1.3 20080623 (prerelease) (Debian 4.1.2-23)) #6 Fri Dec 12 00:11:25 CST 2008
>  console: busclock=33000000, cpuclock=-2145008360,memsize=256,highmemsize=0
>  console: console [early0] enabled
>  console: CPU revision is: 00006302 (ICT Loongson-2)
>  PASS (0.19 s)
>  RESULTS    : PASS 3 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
>  JOB TIME   : 5.10 s
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> tests/acceptance/machine_mips_fuloong2e.py | 62 ++++++++++++++++++++++
> 1 file changed, 62 insertions(+)
>
> diff --git a/tests/acceptance/machine_mips_fuloong2e.py b/tests/acceptance/machine_mips_fuloong2e.py
> index 0ac285e2af1..4854ba98560 100644
> --- a/tests/acceptance/machine_mips_fuloong2e.py
> +++ b/tests/acceptance/machine_mips_fuloong2e.py
> @@ -8,15 +8,77 @@
> # SPDX-License-Identifier: GPL-2.0-or-later
>
> import os
> +import time
>
> from avocado import skipUnless
> from avocado_qemu import Test
> from avocado_qemu import wait_for_console_pattern
>
> +from tesseract_utils import tesseract_available, tesseract_ocr
> +
> class MipsFuloong2e(Test):
>
>     timeout = 60
>
> +    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
> +    @skipUnless(os.getenv('PMON2E_BIN_PATH'), 'PMON2E_BIN_PATH not available')
> +    def test_pmon_serial_console(self):
> +        """
> +        :avocado: tags=arch:mips64el
> +        :avocado: tags=machine:fuloong2e
> +        :avocado: tags=endian:little
> +        :avocado: tags=device:bonito64
> +        :avocado: tags=device:via686b
> +        """
> +        pmon_hash = 'c812e1695d7b2320036f3ef494976969' # v1.1.2
> +        pmon_path = self.fetch_asset('file://' + os.getenv('PMON2E_BIN_PATH'),
> +                                     asset_hash=pmon_hash, algorithm='md5')
> +
> +        self.vm.set_console()
> +        self.vm.add_args('-bios', pmon_path)
> +        self.vm.launch()
> +        wait_for_console_pattern(self, 'PMON2000 MIPS Initializing. Standby...')
> +        wait_for_console_pattern(self, 'Booting Bios')
> +
> +    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
> +    # Tesseract 4 adds a new OCR engine based on LSTM neural networks. The
> +    # new version is faster and more accurate than version 3. The drawback is
> +    # that it is still alpha-level software.
> +    @skipUnless(tesseract_available(4), 'tesseract v4 OCR tool not available')
> +    @skipUnless(os.getenv('PMON2E_BIN_PATH'), 'PMON2E_BIN_PATH not available')
> +    def test_pmon_framebuffer_console(self):
> +        """
> +        :avocado: tags=arch:mips64el
> +        :avocado: tags=machine:fuloong2e
> +        :avocado: tags=endian:little
> +        :avocado: tags=device:bonito64
> +        :avocado: tags=device:ati-vga
> +        """
> +        screenshot_path = os.path.join(self.workdir, 'dump.ppm')
> +
> +        pmon_hash = 'c812e1695d7b2320036f3ef494976969' # v1.1.2
> +        pmon_path = self.fetch_asset('file://' + os.getenv('PMON2E_BIN_PATH'),
> +                                     asset_hash=pmon_hash, algorithm='md5')
> +
> +        self.vm.set_console()
> +        self.vm.add_args('-bios', pmon_path,
> +                         '-vga', 'std',
> +                         '-device', 'ati-vga,model=rv100')

I think this is the default if you just drop -vga std so I don't know why 
you have that in the first place but then you should not need to add 
ati-vga explicitely.

Regards,
BALATON Zoltan

> +        self.vm.launch()
> +
> +        wait_for_console_pattern(self, 'Video: Drawing the logo ...')
> +        self.log.info('VM launched, waiting for logo on display')
> +        time.sleep(2)
> +        wait_for_console_pattern(self, 'CONSOLE_SIZE')
> +        self.vm.command('human-monitor-command', command_line='stop')
> +        self.vm.command('human-monitor-command',
> +                        command_line='screendump %s' % screenshot_path)
> +
> +        lines = tesseract_ocr(screenshot_path, tesseract_version=4,
> +                              tesseract_args='--dpi 128')
> +        pmon_version = 'PNON2000 for Loongson, Version 1.1.2' # PNON is enough
> +        self.assertIn(pmon_version, lines)
> +
>     @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
>     @skipUnless(os.getenv('RESCUE_YL_PATH'), 'RESCUE_YL_PATH not available')
>     def test_linux_kernel_isa_serial(self):
>
Re: [PATCH 5/5] tests/acceptance: Test PMON on the Fuloong 2E machine
Posted by Philippe Mathieu-Daudé 4 years, 7 months ago
On 6/24/21 10:43 PM, BALATON Zoltan wrote:
> On Thu, 24 Jun 2021, Philippe Mathieu-Daudé wrote:
>> Test the PMON firmware. As the firmware is not redistributable,
>> it has to be downloaded manually first. Then it can be used by
>> providing its path via the PMON_BIN_PATH environment variable:
>>
>>  $ PMON2E_BIN_PATH=~/images/fuloong2e/pmon_2e.bin \
>>    AVOCADO_ALLOW_UNTRUSTED_CODE=1 \
>>    avocado --show=app,console run
>> tests/acceptance/machine_mips_fuloong2e.py
>>  Fetching asset from
>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_linux_kernel_isa_serial
>>
>>   (1/3)
>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_pmon_serial_console:
>>
>>  console: PMON2000 MIPS Initializing. Standby...
>>  console: ERRORPC=00000000 CONFIG=00030932
>>  console: PRID=00006302
>>  console: Init SDRAM Done!
>>  console: Sizing caches...
>>  console: Init caches...
>>  console: godson2 caches found
>>  console: Init caches done, cfg = 00030932
>>  console: Copy PMON to execute location...
>>  console: copy text section done.
>>  console: Copy PMON to execute location done.
>>  Uncompressing Bios........................OK,Booting Bios
>>  PASS (0.25 s)
>>   (2/3)
>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_pmon_framebuffer_console:
>>
>>  [...]
>>  Uncompressing Bios........................OK,Booting Bios
>>  console: FREQ
>>  console: FREI
>>  console: DONE
>>  console: TTYI
>>  console: TTYD
>>  console: ENVI
>>  console: MAPV
>>  console: Mfg  0, Id 60
>>  console: STDV
>>  console: SBDD
>>  console: PPCIH
>>  console: PCIS
>>  console: PCIR
>>  console: PCIW
>>  console: NETI
>>  console: RTCL
>>  console: PCID
>>  console: VGAI
>>  console: Default MODE_ID 2
>>  console: starting radeon init...
>>  console: radeon init done
>>  console: FRBI
>>  console: cfb_console init,fb=b4000000
>>  console: Video: Drawing the logo ...
>>  console: CONSOLE_SIZE 450560HSTI
>>  PASS (4.10 s)
>>   (3/3)
>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_linux_kernel_isa_serial:
>>
>>  console: Linux version 2.6.27.7lemote (root@debian) (gcc version
>> 4.1.3 20080623 (prerelease) (Debian 4.1.2-23)) #6 Fri Dec 12 00:11:25
>> CST 2008
>>  console: busclock=33000000,
>> cpuclock=-2145008360,memsize=256,highmemsize=0
>>  console: console [early0] enabled
>>  console: CPU revision is: 00006302 (ICT Loongson-2)
>>  PASS (0.19 s)
>>  RESULTS    : PASS 3 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT
>> 0 | CANCEL 0
>>  JOB TIME   : 5.10 s
>>
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> ---
>> tests/acceptance/machine_mips_fuloong2e.py | 62 ++++++++++++++++++++++
>> 1 file changed, 62 insertions(+)
>>
>> diff --git a/tests/acceptance/machine_mips_fuloong2e.py
>> b/tests/acceptance/machine_mips_fuloong2e.py
>> index 0ac285e2af1..4854ba98560 100644
>> --- a/tests/acceptance/machine_mips_fuloong2e.py
>> +++ b/tests/acceptance/machine_mips_fuloong2e.py
>> @@ -8,15 +8,77 @@
>> # SPDX-License-Identifier: GPL-2.0-or-later
>>
>> import os
>> +import time
>>
>> from avocado import skipUnless
>> from avocado_qemu import Test
>> from avocado_qemu import wait_for_console_pattern
>>
>> +from tesseract_utils import tesseract_available, tesseract_ocr
>> +
>> class MipsFuloong2e(Test):
>>
>>     timeout = 60
>>
>> +    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted
>> code')
>> +    @skipUnless(os.getenv('PMON2E_BIN_PATH'), 'PMON2E_BIN_PATH not
>> available')
>> +    def test_pmon_serial_console(self):
>> +        """
>> +        :avocado: tags=arch:mips64el
>> +        :avocado: tags=machine:fuloong2e
>> +        :avocado: tags=endian:little
>> +        :avocado: tags=device:bonito64
>> +        :avocado: tags=device:via686b
>> +        """
>> +        pmon_hash = 'c812e1695d7b2320036f3ef494976969' # v1.1.2
>> +        pmon_path = self.fetch_asset('file://' +
>> os.getenv('PMON2E_BIN_PATH'),
>> +                                     asset_hash=pmon_hash,
>> algorithm='md5')
>> +
>> +        self.vm.set_console()
>> +        self.vm.add_args('-bios', pmon_path)
>> +        self.vm.launch()
>> +        wait_for_console_pattern(self, 'PMON2000 MIPS Initializing.
>> Standby...')
>> +        wait_for_console_pattern(self, 'Booting Bios')
>> +
>> +    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted
>> code')
>> +    # Tesseract 4 adds a new OCR engine based on LSTM neural
>> networks. The
>> +    # new version is faster and more accurate than version 3. The
>> drawback is
>> +    # that it is still alpha-level software.
>> +    @skipUnless(tesseract_available(4), 'tesseract v4 OCR tool not
>> available')
>> +    @skipUnless(os.getenv('PMON2E_BIN_PATH'), 'PMON2E_BIN_PATH not
>> available')
>> +    def test_pmon_framebuffer_console(self):
>> +        """
>> +        :avocado: tags=arch:mips64el
>> +        :avocado: tags=machine:fuloong2e
>> +        :avocado: tags=endian:little
>> +        :avocado: tags=device:bonito64
>> +        :avocado: tags=device:ati-vga
>> +        """
>> +        screenshot_path = os.path.join(self.workdir, 'dump.ppm')
>> +
>> +        pmon_hash = 'c812e1695d7b2320036f3ef494976969' # v1.1.2
>> +        pmon_path = self.fetch_asset('file://' +
>> os.getenv('PMON2E_BIN_PATH'),
>> +                                     asset_hash=pmon_hash,
>> algorithm='md5')
>> +
>> +        self.vm.set_console()
>> +        self.vm.add_args('-bios', pmon_path,
>> +                         '-vga', 'std',
>> +                         '-device', 'ati-vga,model=rv100')
> 
> I think this is the default if you just drop -vga std so I don't know
> why you have that in the first place but then you should not need to add
> ati-vga explicitely.

I thought this is what you asked me here:
https://www.mail-archive.com/qemu-devel@nongnu.org/msg753832.html

Currently:

console: VGAI
console: Default MODE_ID 2
console: starting radeon init...
console: iobase=bfd0a200,mmbase=b6064000
console: mc_status=5
console: mc_status=5
console: mc_status=5
console: mc_status=5
console: ppll_div_3 = 301f4
console: Wrote: 0x00000043 0x000301f4 0x00000000 (0x00000000)
console: Wrote: rd=67, fd=500, pd=3
console: VCLK_ECP_CNTL = 000000C3
console: radeon init done
console: FRBI
console: cfb_console init,fb=b5000000
console: Video: Drawing the logo ...
console: CONSOLE_SIZE 450560HSTI
PASS (4.53 s)

Without '-vga std -device ati-vga,model=rv100':

console: VGAI
console: Default MODE_ID 2
console: starting radeon init...
INTERRUPTED: Test interrupted by SIGTERM
Runner error occurred: Timeout reached... (60.29 s)

With '-vga std':

console: VGAI
console: Default MODE_ID 2
console: starting radeon init...
console: iobase=bfd0a200,mmbase=b6064000
console: mc_status=5
console: mc_status=5
console: mc_status=5
console: mc_status=5
console: ppll_div_3 = 301f4
console: Wrote: 0x00000043 0x000301f4 0x00000000 (0x00000000)
console: Wrote: rd=67, fd=500, pd=3
console: VCLK_ECP_CNTL = 000000C3
console: radeon init done
console: FRBI
console: cfb_console init,fb=b5000000
console: Video: Drawing the logo ...
console: CONSOLE_SIZE 450560HSTI
PASS (4.34 s)

So I'll simply keep "-vga std".

Thanks,

Phil.

Re: [PATCH 5/5] tests/acceptance: Test PMON on the Fuloong 2E machine
Posted by BALATON Zoltan 4 years, 7 months ago
On Tue, 29 Jun 2021, Philippe Mathieu-Daudé wrote:
> On 6/24/21 10:43 PM, BALATON Zoltan wrote:
>> On Thu, 24 Jun 2021, Philippe Mathieu-Daudé wrote:
>>> Test the PMON firmware. As the firmware is not redistributable,
>>> it has to be downloaded manually first. Then it can be used by
>>> providing its path via the PMON_BIN_PATH environment variable:
>>>
>>>  $ PMON2E_BIN_PATH=~/images/fuloong2e/pmon_2e.bin \
>>>    AVOCADO_ALLOW_UNTRUSTED_CODE=1 \
>>>    avocado --show=app,console run
>>> tests/acceptance/machine_mips_fuloong2e.py
>>>  Fetching asset from
>>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_linux_kernel_isa_serial
>>>
>>>   (1/3)
>>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_pmon_serial_console:
>>>
>>>  console: PMON2000 MIPS Initializing. Standby...
>>>  console: ERRORPC=00000000 CONFIG=00030932
>>>  console: PRID=00006302
>>>  console: Init SDRAM Done!
>>>  console: Sizing caches...
>>>  console: Init caches...
>>>  console: godson2 caches found
>>>  console: Init caches done, cfg = 00030932
>>>  console: Copy PMON to execute location...
>>>  console: copy text section done.
>>>  console: Copy PMON to execute location done.
>>>  Uncompressing Bios........................OK,Booting Bios
>>>  PASS (0.25 s)
>>>   (2/3)
>>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_pmon_framebuffer_console:
>>>
>>>  [...]
>>>  Uncompressing Bios........................OK,Booting Bios
>>>  console: FREQ
>>>  console: FREI
>>>  console: DONE
>>>  console: TTYI
>>>  console: TTYD
>>>  console: ENVI
>>>  console: MAPV
>>>  console: Mfg  0, Id 60
>>>  console: STDV
>>>  console: SBDD
>>>  console: PPCIH
>>>  console: PCIS
>>>  console: PCIR
>>>  console: PCIW
>>>  console: NETI
>>>  console: RTCL
>>>  console: PCID
>>>  console: VGAI
>>>  console: Default MODE_ID 2
>>>  console: starting radeon init...
>>>  console: radeon init done
>>>  console: FRBI
>>>  console: cfb_console init,fb=b4000000
>>>  console: Video: Drawing the logo ...
>>>  console: CONSOLE_SIZE 450560HSTI
>>>  PASS (4.10 s)
>>>   (3/3)
>>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_linux_kernel_isa_serial:
>>>
>>>  console: Linux version 2.6.27.7lemote (root@debian) (gcc version
>>> 4.1.3 20080623 (prerelease) (Debian 4.1.2-23)) #6 Fri Dec 12 00:11:25
>>> CST 2008
>>>  console: busclock=33000000,
>>> cpuclock=-2145008360,memsize=256,highmemsize=0
>>>  console: console [early0] enabled
>>>  console: CPU revision is: 00006302 (ICT Loongson-2)
>>>  PASS (0.19 s)
>>>  RESULTS    : PASS 3 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT
>>> 0 | CANCEL 0
>>>  JOB TIME   : 5.10 s
>>>
>>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>>> ---
>>> tests/acceptance/machine_mips_fuloong2e.py | 62 ++++++++++++++++++++++
>>> 1 file changed, 62 insertions(+)
>>>
>>> diff --git a/tests/acceptance/machine_mips_fuloong2e.py
>>> b/tests/acceptance/machine_mips_fuloong2e.py
>>> index 0ac285e2af1..4854ba98560 100644
>>> --- a/tests/acceptance/machine_mips_fuloong2e.py
>>> +++ b/tests/acceptance/machine_mips_fuloong2e.py
>>> @@ -8,15 +8,77 @@
>>> # SPDX-License-Identifier: GPL-2.0-or-later
>>>
>>> import os
>>> +import time
>>>
>>> from avocado import skipUnless
>>> from avocado_qemu import Test
>>> from avocado_qemu import wait_for_console_pattern
>>>
>>> +from tesseract_utils import tesseract_available, tesseract_ocr
>>> +
>>> class MipsFuloong2e(Test):
>>>
>>>     timeout = 60
>>>
>>> +    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted
>>> code')
>>> +    @skipUnless(os.getenv('PMON2E_BIN_PATH'), 'PMON2E_BIN_PATH not
>>> available')
>>> +    def test_pmon_serial_console(self):
>>> +        """
>>> +        :avocado: tags=arch:mips64el
>>> +        :avocado: tags=machine:fuloong2e
>>> +        :avocado: tags=endian:little
>>> +        :avocado: tags=device:bonito64
>>> +        :avocado: tags=device:via686b
>>> +        """
>>> +        pmon_hash = 'c812e1695d7b2320036f3ef494976969' # v1.1.2
>>> +        pmon_path = self.fetch_asset('file://' +
>>> os.getenv('PMON2E_BIN_PATH'),
>>> +                                     asset_hash=pmon_hash,
>>> algorithm='md5')
>>> +
>>> +        self.vm.set_console()
>>> +        self.vm.add_args('-bios', pmon_path)
>>> +        self.vm.launch()
>>> +        wait_for_console_pattern(self, 'PMON2000 MIPS Initializing.
>>> Standby...')
>>> +        wait_for_console_pattern(self, 'Booting Bios')
>>> +
>>> +    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted
>>> code')
>>> +    # Tesseract 4 adds a new OCR engine based on LSTM neural
>>> networks. The
>>> +    # new version is faster and more accurate than version 3. The
>>> drawback is
>>> +    # that it is still alpha-level software.
>>> +    @skipUnless(tesseract_available(4), 'tesseract v4 OCR tool not
>>> available')
>>> +    @skipUnless(os.getenv('PMON2E_BIN_PATH'), 'PMON2E_BIN_PATH not
>>> available')
>>> +    def test_pmon_framebuffer_console(self):
>>> +        """
>>> +        :avocado: tags=arch:mips64el
>>> +        :avocado: tags=machine:fuloong2e
>>> +        :avocado: tags=endian:little
>>> +        :avocado: tags=device:bonito64
>>> +        :avocado: tags=device:ati-vga
>>> +        """
>>> +        screenshot_path = os.path.join(self.workdir, 'dump.ppm')
>>> +
>>> +        pmon_hash = 'c812e1695d7b2320036f3ef494976969' # v1.1.2
>>> +        pmon_path = self.fetch_asset('file://' +
>>> os.getenv('PMON2E_BIN_PATH'),
>>> +                                     asset_hash=pmon_hash,
>>> algorithm='md5')
>>> +
>>> +        self.vm.set_console()
>>> +        self.vm.add_args('-bios', pmon_path,
>>> +                         '-vga', 'std',
>>> +                         '-device', 'ati-vga,model=rv100')
>>
>> I think this is the default if you just drop -vga std so I don't know
>> why you have that in the first place but then you should not need to add
>> ati-vga explicitely.
>
> I thought this is what you asked me here:
> https://www.mail-archive.com/qemu-devel@nongnu.org/msg753832.html

No, I've said the same in that message that fuloong2e has an ati-vga as 
default so no -vga option should be needed at all.

> Currently:
>
> console: VGAI
> console: Default MODE_ID 2
> console: starting radeon init...
> console: iobase=bfd0a200,mmbase=b6064000
> console: mc_status=5
> console: mc_status=5
> console: mc_status=5
> console: mc_status=5
> console: ppll_div_3 = 301f4
> console: Wrote: 0x00000043 0x000301f4 0x00000000 (0x00000000)
> console: Wrote: rd=67, fd=500, pd=3
> console: VCLK_ECP_CNTL = 000000C3
> console: radeon init done
> console: FRBI
> console: cfb_console init,fb=b5000000
> console: Video: Drawing the logo ...
> console: CONSOLE_SIZE 450560HSTI
> PASS (4.53 s)
>
> Without '-vga std -device ati-vga,model=rv100':
>
> console: VGAI
> console: Default MODE_ID 2
> console: starting radeon init...
> INTERRUPTED: Test interrupted by SIGTERM
> Runner error occurred: Timeout reached... (60.29 s)

That's strange (with the REG_MASK fixed to 0xff in bonito.c) I get:

$ qemu-system-mips64el -M fuloong2e -bios pmon_2e.bin -serial stdio
[...]
VGAI
Default MODE_ID 2
starting radeon init...
iobase=bfd0a100,mmbase=b5050000
mc_status=5
mc_status=5
mc_status=5
mc_status=5
ppll_div_3 = 301f4
Wrote: 0x00000043 0x000301f4 0x00000000 (0x00000000)
Wrote: rd=67, fd=500, pd=3
VCLK_ECP_CNTL = 000000C3
radeon init done
FRBI
cfb_console init,fb=b4000000
Video: Drawing the logo ...
CONSOLE_SIZE 450560HSTI

So I think you should not need either -vga std nor -device ati-vga as 
those would add another VGA card to the one already on the board.

Regards,
BALATON Zoltan

> With '-vga std':
>
> console: VGAI
> console: Default MODE_ID 2
> console: starting radeon init...
> console: iobase=bfd0a200,mmbase=b6064000
> console: mc_status=5
> console: mc_status=5
> console: mc_status=5
> console: mc_status=5
> console: ppll_div_3 = 301f4
> console: Wrote: 0x00000043 0x000301f4 0x00000000 (0x00000000)
> console: Wrote: rd=67, fd=500, pd=3
> console: VCLK_ECP_CNTL = 000000C3
> console: radeon init done
> console: FRBI
> console: cfb_console init,fb=b5000000
> console: Video: Drawing the logo ...
> console: CONSOLE_SIZE 450560HSTI
> PASS (4.34 s)
>
> So I'll simply keep "-vga std".
>
> Thanks,
>
> Phil.
>
>
Re: [PATCH 5/5] tests/acceptance: Test PMON on the Fuloong 2E machine
Posted by Philippe Mathieu-Daudé 4 years, 7 months ago
On 6/29/21 12:47 PM, BALATON Zoltan wrote:
> On Tue, 29 Jun 2021, Philippe Mathieu-Daudé wrote:
>> On 6/24/21 10:43 PM, BALATON Zoltan wrote:
>>> On Thu, 24 Jun 2021, Philippe Mathieu-Daudé wrote:
>>>> Test the PMON firmware. As the firmware is not redistributable,
>>>> it has to be downloaded manually first. Then it can be used by
>>>> providing its path via the PMON_BIN_PATH environment variable:
>>>>
>>>>  $ PMON2E_BIN_PATH=~/images/fuloong2e/pmon_2e.bin \
>>>>    AVOCADO_ALLOW_UNTRUSTED_CODE=1 \
>>>>    avocado --show=app,console run
>>>> tests/acceptance/machine_mips_fuloong2e.py
>>>>  Fetching asset from
>>>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_linux_kernel_isa_serial
>>>>
>>>>
>>>>   (1/3)
>>>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_pmon_serial_console:
>>>>
>>>>
>>>>  console: PMON2000 MIPS Initializing. Standby...
>>>>  console: ERRORPC=00000000 CONFIG=00030932
>>>>  console: PRID=00006302
>>>>  console: Init SDRAM Done!
>>>>  console: Sizing caches...
>>>>  console: Init caches...
>>>>  console: godson2 caches found
>>>>  console: Init caches done, cfg = 00030932
>>>>  console: Copy PMON to execute location...
>>>>  console: copy text section done.
>>>>  console: Copy PMON to execute location done.
>>>>  Uncompressing Bios........................OK,Booting Bios
>>>>  PASS (0.25 s)
>>>>   (2/3)
>>>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_pmon_framebuffer_console:
>>>>
>>>>
>>>>  [...]
>>>>  Uncompressing Bios........................OK,Booting Bios
>>>>  console: FREQ
>>>>  console: FREI
>>>>  console: DONE
>>>>  console: TTYI
>>>>  console: TTYD
>>>>  console: ENVI
>>>>  console: MAPV
>>>>  console: Mfg  0, Id 60
>>>>  console: STDV
>>>>  console: SBDD
>>>>  console: PPCIH
>>>>  console: PCIS
>>>>  console: PCIR
>>>>  console: PCIW
>>>>  console: NETI
>>>>  console: RTCL
>>>>  console: PCID
>>>>  console: VGAI
>>>>  console: Default MODE_ID 2
>>>>  console: starting radeon init...
>>>>  console: radeon init done
>>>>  console: FRBI
>>>>  console: cfb_console init,fb=b4000000
>>>>  console: Video: Drawing the logo ...
>>>>  console: CONSOLE_SIZE 450560HSTI
>>>>  PASS (4.10 s)
>>>>   (3/3)
>>>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_linux_kernel_isa_serial:
>>>>
>>>>
>>>>  console: Linux version 2.6.27.7lemote (root@debian) (gcc version
>>>> 4.1.3 20080623 (prerelease) (Debian 4.1.2-23)) #6 Fri Dec 12 00:11:25
>>>> CST 2008
>>>>  console: busclock=33000000,
>>>> cpuclock=-2145008360,memsize=256,highmemsize=0
>>>>  console: console [early0] enabled
>>>>  console: CPU revision is: 00006302 (ICT Loongson-2)
>>>>  PASS (0.19 s)
>>>>  RESULTS    : PASS 3 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT
>>>> 0 | CANCEL 0
>>>>  JOB TIME   : 5.10 s
>>>>
>>>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>>>> ---
>>>> tests/acceptance/machine_mips_fuloong2e.py | 62 ++++++++++++++++++++++
>>>> 1 file changed, 62 insertions(+)
>>>>
>>>> diff --git a/tests/acceptance/machine_mips_fuloong2e.py
>>>> b/tests/acceptance/machine_mips_fuloong2e.py
>>>> index 0ac285e2af1..4854ba98560 100644
>>>> --- a/tests/acceptance/machine_mips_fuloong2e.py
>>>> +++ b/tests/acceptance/machine_mips_fuloong2e.py
>>>> @@ -8,15 +8,77 @@
>>>> # SPDX-License-Identifier: GPL-2.0-or-later
>>>>
>>>> import os
>>>> +import time
>>>>
>>>> from avocado import skipUnless
>>>> from avocado_qemu import Test
>>>> from avocado_qemu import wait_for_console_pattern
>>>>
>>>> +from tesseract_utils import tesseract_available, tesseract_ocr
>>>> +
>>>> class MipsFuloong2e(Test):
>>>>
>>>>     timeout = 60
>>>>
>>>> +    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted
>>>> code')
>>>> +    @skipUnless(os.getenv('PMON2E_BIN_PATH'), 'PMON2E_BIN_PATH not
>>>> available')
>>>> +    def test_pmon_serial_console(self):
>>>> +        """
>>>> +        :avocado: tags=arch:mips64el
>>>> +        :avocado: tags=machine:fuloong2e
>>>> +        :avocado: tags=endian:little
>>>> +        :avocado: tags=device:bonito64
>>>> +        :avocado: tags=device:via686b
>>>> +        """
>>>> +        pmon_hash = 'c812e1695d7b2320036f3ef494976969' # v1.1.2
>>>> +        pmon_path = self.fetch_asset('file://' +
>>>> os.getenv('PMON2E_BIN_PATH'),
>>>> +                                     asset_hash=pmon_hash,
>>>> algorithm='md5')
>>>> +
>>>> +        self.vm.set_console()
>>>> +        self.vm.add_args('-bios', pmon_path)
>>>> +        self.vm.launch()
>>>> +        wait_for_console_pattern(self, 'PMON2000 MIPS Initializing.
>>>> Standby...')
>>>> +        wait_for_console_pattern(self, 'Booting Bios')
>>>> +
>>>> +    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted
>>>> code')
>>>> +    # Tesseract 4 adds a new OCR engine based on LSTM neural
>>>> networks. The
>>>> +    # new version is faster and more accurate than version 3. The
>>>> drawback is
>>>> +    # that it is still alpha-level software.
>>>> +    @skipUnless(tesseract_available(4), 'tesseract v4 OCR tool not
>>>> available')
>>>> +    @skipUnless(os.getenv('PMON2E_BIN_PATH'), 'PMON2E_BIN_PATH not
>>>> available')
>>>> +    def test_pmon_framebuffer_console(self):
>>>> +        """
>>>> +        :avocado: tags=arch:mips64el
>>>> +        :avocado: tags=machine:fuloong2e
>>>> +        :avocado: tags=endian:little
>>>> +        :avocado: tags=device:bonito64
>>>> +        :avocado: tags=device:ati-vga
>>>> +        """
>>>> +        screenshot_path = os.path.join(self.workdir, 'dump.ppm')
>>>> +
>>>> +        pmon_hash = 'c812e1695d7b2320036f3ef494976969' # v1.1.2
>>>> +        pmon_path = self.fetch_asset('file://' +
>>>> os.getenv('PMON2E_BIN_PATH'),
>>>> +                                     asset_hash=pmon_hash,
>>>> algorithm='md5')
>>>> +
>>>> +        self.vm.set_console()
>>>> +        self.vm.add_args('-bios', pmon_path,
>>>> +                         '-vga', 'std',
>>>> +                         '-device', 'ati-vga,model=rv100')
>>>
>>> I think this is the default if you just drop -vga std so I don't know
>>> why you have that in the first place but then you should not need to add
>>> ati-vga explicitely.
>>
>> I thought this is what you asked me here:
>> https://www.mail-archive.com/qemu-devel@nongnu.org/msg753832.html
> 
> No, I've said the same in that message that fuloong2e has an ati-vga as
> default so no -vga option should be needed at all.
> 
>> Currently:
>>
>> console: VGAI
>> console: Default MODE_ID 2
>> console: starting radeon init...
>> console: iobase=bfd0a200,mmbase=b6064000
>> console: mc_status=5
>> console: mc_status=5
>> console: mc_status=5
>> console: mc_status=5
>> console: ppll_div_3 = 301f4
>> console: Wrote: 0x00000043 0x000301f4 0x00000000 (0x00000000)
>> console: Wrote: rd=67, fd=500, pd=3
>> console: VCLK_ECP_CNTL = 000000C3
>> console: radeon init done
>> console: FRBI
>> console: cfb_console init,fb=b5000000
>> console: Video: Drawing the logo ...
>> console: CONSOLE_SIZE 450560HSTI
>> PASS (4.53 s)
>>
>> Without '-vga std -device ati-vga,model=rv100':
>>
>> console: VGAI
>> console: Default MODE_ID 2
>> console: starting radeon init...
>> INTERRUPTED: Test interrupted by SIGTERM
>> Runner error occurred: Timeout reached... (60.29 s)
> 
> That's strange (with the REG_MASK fixed to 0xff in bonito.c) I get:
> 
> $ qemu-system-mips64el -M fuloong2e -bios pmon_2e.bin -serial stdio
> [...]
> VGAI
> Default MODE_ID 2
> starting radeon init...
> iobase=bfd0a100,mmbase=b5050000
> mc_status=5
> mc_status=5
> mc_status=5
> mc_status=5
> ppll_div_3 = 301f4
> Wrote: 0x00000043 0x000301f4 0x00000000 (0x00000000)
> Wrote: rd=67, fd=500, pd=3
> VCLK_ECP_CNTL = 000000C3
> radeon init done
> FRBI
> cfb_console init,fb=b4000000
> Video: Drawing the logo ...
> CONSOLE_SIZE 450560HSTI
> 
> So I think you should not need either -vga std nor -device ati-vga as
> those would add another VGA card to the one already on the board.

So after looking in git history, Avocado tests inherited iotests,
and since commit 0fd05e8dd1e ("qemu-iotests: start vms in qtest mode")
the VMs are started with -display none -vga none.
See in python/qemu/machine/machine.py:

    def _base_args(self) -> List[str]:
        args = ['-display', 'none', '-vga', 'none']

Which is why we have to use '-vga std' here.

Except if you disagree, I'll queue the patch using:

      self.vm.add_args('-bios', pmon_path,
                       '-vga', 'std')

Thanks,

Phil.

Re: [PATCH 5/5] tests/acceptance: Test PMON on the Fuloong 2E machine
Posted by BALATON Zoltan 4 years, 7 months ago
On Tue, 29 Jun 2021, Philippe Mathieu-Daudé wrote:
> On 6/29/21 12:47 PM, BALATON Zoltan wrote:
>> On Tue, 29 Jun 2021, Philippe Mathieu-Daudé wrote:
>>> On 6/24/21 10:43 PM, BALATON Zoltan wrote:
>>>> On Thu, 24 Jun 2021, Philippe Mathieu-Daudé wrote:
>>>>> Test the PMON firmware. As the firmware is not redistributable,
>>>>> it has to be downloaded manually first. Then it can be used by
>>>>> providing its path via the PMON_BIN_PATH environment variable:
>>>>>
>>>>>  $ PMON2E_BIN_PATH=~/images/fuloong2e/pmon_2e.bin \
>>>>>    AVOCADO_ALLOW_UNTRUSTED_CODE=1 \
>>>>>    avocado --show=app,console run
>>>>> tests/acceptance/machine_mips_fuloong2e.py
>>>>>  Fetching asset from
>>>>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_linux_kernel_isa_serial
>>>>>
>>>>>
>>>>>   (1/3)
>>>>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_pmon_serial_console:
>>>>>
>>>>>
>>>>>  console: PMON2000 MIPS Initializing. Standby...
>>>>>  console: ERRORPC=00000000 CONFIG=00030932
>>>>>  console: PRID=00006302
>>>>>  console: Init SDRAM Done!
>>>>>  console: Sizing caches...
>>>>>  console: Init caches...
>>>>>  console: godson2 caches found
>>>>>  console: Init caches done, cfg = 00030932
>>>>>  console: Copy PMON to execute location...
>>>>>  console: copy text section done.
>>>>>  console: Copy PMON to execute location done.
>>>>>  Uncompressing Bios........................OK,Booting Bios
>>>>>  PASS (0.25 s)
>>>>>   (2/3)
>>>>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_pmon_framebuffer_console:
>>>>>
>>>>>
>>>>>  [...]
>>>>>  Uncompressing Bios........................OK,Booting Bios
>>>>>  console: FREQ
>>>>>  console: FREI
>>>>>  console: DONE
>>>>>  console: TTYI
>>>>>  console: TTYD
>>>>>  console: ENVI
>>>>>  console: MAPV
>>>>>  console: Mfg  0, Id 60
>>>>>  console: STDV
>>>>>  console: SBDD
>>>>>  console: PPCIH
>>>>>  console: PCIS
>>>>>  console: PCIR
>>>>>  console: PCIW
>>>>>  console: NETI
>>>>>  console: RTCL
>>>>>  console: PCID
>>>>>  console: VGAI
>>>>>  console: Default MODE_ID 2
>>>>>  console: starting radeon init...
>>>>>  console: radeon init done
>>>>>  console: FRBI
>>>>>  console: cfb_console init,fb=b4000000
>>>>>  console: Video: Drawing the logo ...
>>>>>  console: CONSOLE_SIZE 450560HSTI
>>>>>  PASS (4.10 s)
>>>>>   (3/3)
>>>>> tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_linux_kernel_isa_serial:
>>>>>
>>>>>
>>>>>  console: Linux version 2.6.27.7lemote (root@debian) (gcc version
>>>>> 4.1.3 20080623 (prerelease) (Debian 4.1.2-23)) #6 Fri Dec 12 00:11:25
>>>>> CST 2008
>>>>>  console: busclock=33000000,
>>>>> cpuclock=-2145008360,memsize=256,highmemsize=0
>>>>>  console: console [early0] enabled
>>>>>  console: CPU revision is: 00006302 (ICT Loongson-2)
>>>>>  PASS (0.19 s)
>>>>>  RESULTS    : PASS 3 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT
>>>>> 0 | CANCEL 0
>>>>>  JOB TIME   : 5.10 s
>>>>>
>>>>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>>>>> ---
>>>>> tests/acceptance/machine_mips_fuloong2e.py | 62 ++++++++++++++++++++++
>>>>> 1 file changed, 62 insertions(+)
>>>>>
>>>>> diff --git a/tests/acceptance/machine_mips_fuloong2e.py
>>>>> b/tests/acceptance/machine_mips_fuloong2e.py
>>>>> index 0ac285e2af1..4854ba98560 100644
>>>>> --- a/tests/acceptance/machine_mips_fuloong2e.py
>>>>> +++ b/tests/acceptance/machine_mips_fuloong2e.py
>>>>> @@ -8,15 +8,77 @@
>>>>> # SPDX-License-Identifier: GPL-2.0-or-later
>>>>>
>>>>> import os
>>>>> +import time
>>>>>
>>>>> from avocado import skipUnless
>>>>> from avocado_qemu import Test
>>>>> from avocado_qemu import wait_for_console_pattern
>>>>>
>>>>> +from tesseract_utils import tesseract_available, tesseract_ocr
>>>>> +
>>>>> class MipsFuloong2e(Test):
>>>>>
>>>>>     timeout = 60
>>>>>
>>>>> +    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted
>>>>> code')
>>>>> +    @skipUnless(os.getenv('PMON2E_BIN_PATH'), 'PMON2E_BIN_PATH not
>>>>> available')
>>>>> +    def test_pmon_serial_console(self):
>>>>> +        """
>>>>> +        :avocado: tags=arch:mips64el
>>>>> +        :avocado: tags=machine:fuloong2e
>>>>> +        :avocado: tags=endian:little
>>>>> +        :avocado: tags=device:bonito64
>>>>> +        :avocado: tags=device:via686b
>>>>> +        """
>>>>> +        pmon_hash = 'c812e1695d7b2320036f3ef494976969' # v1.1.2
>>>>> +        pmon_path = self.fetch_asset('file://' +
>>>>> os.getenv('PMON2E_BIN_PATH'),
>>>>> +                                     asset_hash=pmon_hash,
>>>>> algorithm='md5')
>>>>> +
>>>>> +        self.vm.set_console()
>>>>> +        self.vm.add_args('-bios', pmon_path)
>>>>> +        self.vm.launch()
>>>>> +        wait_for_console_pattern(self, 'PMON2000 MIPS Initializing.
>>>>> Standby...')
>>>>> +        wait_for_console_pattern(self, 'Booting Bios')
>>>>> +
>>>>> +    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted
>>>>> code')
>>>>> +    # Tesseract 4 adds a new OCR engine based on LSTM neural
>>>>> networks. The
>>>>> +    # new version is faster and more accurate than version 3. The
>>>>> drawback is
>>>>> +    # that it is still alpha-level software.
>>>>> +    @skipUnless(tesseract_available(4), 'tesseract v4 OCR tool not
>>>>> available')
>>>>> +    @skipUnless(os.getenv('PMON2E_BIN_PATH'), 'PMON2E_BIN_PATH not
>>>>> available')
>>>>> +    def test_pmon_framebuffer_console(self):
>>>>> +        """
>>>>> +        :avocado: tags=arch:mips64el
>>>>> +        :avocado: tags=machine:fuloong2e
>>>>> +        :avocado: tags=endian:little
>>>>> +        :avocado: tags=device:bonito64
>>>>> +        :avocado: tags=device:ati-vga
>>>>> +        """
>>>>> +        screenshot_path = os.path.join(self.workdir, 'dump.ppm')
>>>>> +
>>>>> +        pmon_hash = 'c812e1695d7b2320036f3ef494976969' # v1.1.2
>>>>> +        pmon_path = self.fetch_asset('file://' +
>>>>> os.getenv('PMON2E_BIN_PATH'),
>>>>> +                                     asset_hash=pmon_hash,
>>>>> algorithm='md5')
>>>>> +
>>>>> +        self.vm.set_console()
>>>>> +        self.vm.add_args('-bios', pmon_path,
>>>>> +                         '-vga', 'std',
>>>>> +                         '-device', 'ati-vga,model=rv100')
>>>>
>>>> I think this is the default if you just drop -vga std so I don't know
>>>> why you have that in the first place but then you should not need to add
>>>> ati-vga explicitely.
>>>
>>> I thought this is what you asked me here:
>>> https://www.mail-archive.com/qemu-devel@nongnu.org/msg753832.html
>>
>> No, I've said the same in that message that fuloong2e has an ati-vga as
>> default so no -vga option should be needed at all.
>>
>>> Currently:
>>>
>>> console: VGAI
>>> console: Default MODE_ID 2
>>> console: starting radeon init...
>>> console: iobase=bfd0a200,mmbase=b6064000
>>> console: mc_status=5
>>> console: mc_status=5
>>> console: mc_status=5
>>> console: mc_status=5
>>> console: ppll_div_3 = 301f4
>>> console: Wrote: 0x00000043 0x000301f4 0x00000000 (0x00000000)
>>> console: Wrote: rd=67, fd=500, pd=3
>>> console: VCLK_ECP_CNTL = 000000C3
>>> console: radeon init done
>>> console: FRBI
>>> console: cfb_console init,fb=b5000000
>>> console: Video: Drawing the logo ...
>>> console: CONSOLE_SIZE 450560HSTI
>>> PASS (4.53 s)
>>>
>>> Without '-vga std -device ati-vga,model=rv100':
>>>
>>> console: VGAI
>>> console: Default MODE_ID 2
>>> console: starting radeon init...
>>> INTERRUPTED: Test interrupted by SIGTERM
>>> Runner error occurred: Timeout reached... (60.29 s)
>>
>> That's strange (with the REG_MASK fixed to 0xff in bonito.c) I get:
>>
>> $ qemu-system-mips64el -M fuloong2e -bios pmon_2e.bin -serial stdio
>> [...]
>> VGAI
>> Default MODE_ID 2
>> starting radeon init...
>> iobase=bfd0a100,mmbase=b5050000
>> mc_status=5
>> mc_status=5
>> mc_status=5
>> mc_status=5
>> ppll_div_3 = 301f4
>> Wrote: 0x00000043 0x000301f4 0x00000000 (0x00000000)
>> Wrote: rd=67, fd=500, pd=3
>> VCLK_ECP_CNTL = 000000C3
>> radeon init done
>> FRBI
>> cfb_console init,fb=b4000000
>> Video: Drawing the logo ...
>> CONSOLE_SIZE 450560HSTI
>>
>> So I think you should not need either -vga std nor -device ati-vga as
>> those would add another VGA card to the one already on the board.
>
> So after looking in git history, Avocado tests inherited iotests,
> and since commit 0fd05e8dd1e ("qemu-iotests: start vms in qtest mode")
> the VMs are started with -display none -vga none.
> See in python/qemu/machine/machine.py:
>
>    def _base_args(self) -> List[str]:
>        args = ['-display', 'none', '-vga', 'none']
>
> Which is why we have to use '-vga std' here.
>
> Except if you disagree, I'll queue the patch using:
>
>      self.vm.add_args('-bios', pmon_path,
>                       '-vga', 'std')

I think it's better modelling the original machine if you use the ati-vga 
that the machine has instead of std vga that it doesn't. Also it tests 
ati-vga that way while it doesn't with -vga std. I also don't see the 
point having both. With this command I get:

$ qemu-system-mips64el -M fuloong2e -bios pmon_2e.bin -serial stdio 
-display none -vga none -device ati-vga,model=rv100

VGAI
Default MODE_ID 2
starting radeon init...
iobase=bfd0a100,mmbase=b5050000
mc_status=5
mc_status=5
mc_status=5
mc_status=5
ppll_div_3 = 301f4
Wrote: 0x00000043 0x000301f4 0x00000000 (0x00000000)
Wrote: rd=67, fd=500, pd=3
VCLK_ECP_CNTL = 000000C3
radeon init done
FRBI
cfb_console init,fb=b4000000
Video: Drawing the logo ...
CONSOLE_SIZE 450560HSTI

and I think that matches the default config of the machine that -vga none 
turns off. What do you need std vga for?

Regards,
BALATON Zoltan
Re: [PATCH 5/5] tests/acceptance: Test PMON on the Fuloong 2E machine
Posted by Wainer dos Santos Moschetta 4 years, 7 months ago
Hi,

On 6/24/21 5:27 PM, Philippe Mathieu-Daudé wrote:
> Test the PMON firmware. As the firmware is not redistributable,
> it has to be downloaded manually first. Then it can be used by
> providing its path via the PMON_BIN_PATH environment variable:
In the code it is used PMON2E_BIN_PATH.
>
>    $ PMON2E_BIN_PATH=~/images/fuloong2e/pmon_2e.bin \
>      AVOCADO_ALLOW_UNTRUSTED_CODE=1 \
>      avocado --show=app,console run tests/acceptance/machine_mips_fuloong2e.py
>    Fetching asset from tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_linux_kernel_isa_serial
>     (1/3) tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_pmon_serial_console:
>    console: PMON2000 MIPS Initializing. Standby...
>    console: ERRORPC=00000000 CONFIG=00030932
>    console: PRID=00006302
>    console: Init SDRAM Done!
>    console: Sizing caches...
>    console: Init caches...
>    console: godson2 caches found
>    console: Init caches done, cfg = 00030932
>    console: Copy PMON to execute location...
>    console: copy text section done.
>    console: Copy PMON to execute location done.
>    Uncompressing Bios........................OK,Booting Bios
>    PASS (0.25 s)
>     (2/3) tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_pmon_framebuffer_console:
>    [...]
>    Uncompressing Bios........................OK,Booting Bios
>    console: FREQ
>    console: FREI
>    console: DONE
>    console: TTYI
>    console: TTYD
>    console: ENVI
>    console: MAPV
>    console: Mfg  0, Id 60
>    console: STDV
>    console: SBDD
>    console: PPCIH
>    console: PCIS
>    console: PCIR
>    console: PCIW
>    console: NETI
>    console: RTCL
>    console: PCID
>    console: VGAI
>    console: Default MODE_ID 2
>    console: starting radeon init...
>    console: radeon init done
>    console: FRBI
>    console: cfb_console init,fb=b4000000
>    console: Video: Drawing the logo ...
>    console: CONSOLE_SIZE 450560HSTI
>    PASS (4.10 s)
>     (3/3) tests/acceptance/machine_mips_fuloong2e.py:MipsFuloong2e.test_linux_kernel_isa_serial:
>    console: Linux version 2.6.27.7lemote (root@debian) (gcc version 4.1.3 20080623 (prerelease) (Debian 4.1.2-23)) #6 Fri Dec 12 00:11:25 CST 2008
>    console: busclock=33000000, cpuclock=-2145008360,memsize=256,highmemsize=0
>    console: console [early0] enabled
>    console: CPU revision is: 00006302 (ICT Loongson-2)
>    PASS (0.19 s)
>    RESULTS    : PASS 3 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
>    JOB TIME   : 5.10 s
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
>   tests/acceptance/machine_mips_fuloong2e.py | 62 ++++++++++++++++++++++
>   1 file changed, 62 insertions(+)

Need to fix the commit message (or the code) as pointed above. With that,

Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>

>
> diff --git a/tests/acceptance/machine_mips_fuloong2e.py b/tests/acceptance/machine_mips_fuloong2e.py
> index 0ac285e2af1..4854ba98560 100644
> --- a/tests/acceptance/machine_mips_fuloong2e.py
> +++ b/tests/acceptance/machine_mips_fuloong2e.py
> @@ -8,15 +8,77 @@
>   # SPDX-License-Identifier: GPL-2.0-or-later
>   
>   import os
> +import time
>   
>   from avocado import skipUnless
>   from avocado_qemu import Test
>   from avocado_qemu import wait_for_console_pattern
>   
> +from tesseract_utils import tesseract_available, tesseract_ocr
> +
>   class MipsFuloong2e(Test):
>   
>       timeout = 60
>   
> +    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
> +    @skipUnless(os.getenv('PMON2E_BIN_PATH'), 'PMON2E_BIN_PATH not available')
> +    def test_pmon_serial_console(self):
> +        """
> +        :avocado: tags=arch:mips64el
> +        :avocado: tags=machine:fuloong2e
> +        :avocado: tags=endian:little
> +        :avocado: tags=device:bonito64
> +        :avocado: tags=device:via686b
> +        """
> +        pmon_hash = 'c812e1695d7b2320036f3ef494976969' # v1.1.2
> +        pmon_path = self.fetch_asset('file://' + os.getenv('PMON2E_BIN_PATH'),
> +                                     asset_hash=pmon_hash, algorithm='md5')
> +
> +        self.vm.set_console()
> +        self.vm.add_args('-bios', pmon_path)
> +        self.vm.launch()
> +        wait_for_console_pattern(self, 'PMON2000 MIPS Initializing. Standby...')
> +        wait_for_console_pattern(self, 'Booting Bios')
> +
> +    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
> +    # Tesseract 4 adds a new OCR engine based on LSTM neural networks. The
> +    # new version is faster and more accurate than version 3. The drawback is
> +    # that it is still alpha-level software.
> +    @skipUnless(tesseract_available(4), 'tesseract v4 OCR tool not available')
> +    @skipUnless(os.getenv('PMON2E_BIN_PATH'), 'PMON2E_BIN_PATH not available')
> +    def test_pmon_framebuffer_console(self):
> +        """
> +        :avocado: tags=arch:mips64el
> +        :avocado: tags=machine:fuloong2e
> +        :avocado: tags=endian:little
> +        :avocado: tags=device:bonito64
> +        :avocado: tags=device:ati-vga
> +        """
> +        screenshot_path = os.path.join(self.workdir, 'dump.ppm')
> +
> +        pmon_hash = 'c812e1695d7b2320036f3ef494976969' # v1.1.2
> +        pmon_path = self.fetch_asset('file://' + os.getenv('PMON2E_BIN_PATH'),
> +                                     asset_hash=pmon_hash, algorithm='md5')
> +
> +        self.vm.set_console()
> +        self.vm.add_args('-bios', pmon_path,
> +                         '-vga', 'std',
> +                         '-device', 'ati-vga,model=rv100')
> +        self.vm.launch()
> +
> +        wait_for_console_pattern(self, 'Video: Drawing the logo ...')
> +        self.log.info('VM launched, waiting for logo on display')
> +        time.sleep(2)
> +        wait_for_console_pattern(self, 'CONSOLE_SIZE')
> +        self.vm.command('human-monitor-command', command_line='stop')
> +        self.vm.command('human-monitor-command',
> +                        command_line='screendump %s' % screenshot_path)
> +
> +        lines = tesseract_ocr(screenshot_path, tesseract_version=4,
> +                              tesseract_args='--dpi 128')
> +        pmon_version = 'PNON2000 for Loongson, Version 1.1.2' # PNON is enough
> +        self.assertIn(pmon_version, lines)
> +
>       @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
>       @skipUnless(os.getenv('RESCUE_YL_PATH'), 'RESCUE_YL_PATH not available')
>       def test_linux_kernel_isa_serial(self):