Re: R: R: R: [PULL 0/3] ppc-for-6.1 queue 20210713

2021-07-20 Thread BALATON Zoltan

On Tue, 20 Jul 2021, luigi burdo wrote:

i have same issue with kvm with only qemu-system-ppc -M pegasos2 -bios 
pegasos2.rom --enable-kvm


Yes, OK as it already fails during the firmware then other options may not 
matter now only that you're using kvm and pegasos2 ROM.



and with this command line that work great on my PC (without kvm of course)

qemu-system-ppc -M pegasos2 -bios pegasos2.rom -device 
ati-vga,romfile="" -display sdl -rtc base=localtime -drive 
if=none,id=hd,file=/home/gigi/peggy2,format=raw -device 
ide-hd,drive=hd,bus=ide.0 -drive 
if=none,id=cd,file=/home/gigi/Chrysalis_3.15.iso -device 
ide-cd,drive=cd,bus=ide.0 -device AC97 -m 1024 -netdev user,id=mynet0 
-device sungem,netdev=mynet0 -serial stdio --enable-kvm


The above command should be OK but I wonder if -device AC97 works? (I 
haven't tried it but this AC97 device is emulating an AC97 audio which is 
part of an Intel chipset and pegasos2 has one that is part of VIA VT8231 
that I think has different register mappings so a driver expecting VIA 
AC97 may not work with Intel one unless it somehow detects that; in other 
words if sound is not working you can drop -device AC97 and instead look 
at implementing hw/audio/via-ac97.c similar to hw/audio/ac97.c but maching 
VIA VT8231 docs for registers, that should make sound work; other options 
may be usb-audio which does not work with mac99 but did not try with 
pegasos2 or passing through a real USB or PCI audio device). The other 
option is -netdev user,id=mynet0 -device sungem,netdev=mynet0 which I 
think is stating the default as user networking is the default so you 
could shorten it to just -device sungem with the same result (or several 
other network devices are available as sungem is usually appears on Mac or 
Sun machines not as PCI card but if it works then that does not matter). 
Using the long form may only make sense if you want something else than 
user, like tap when you need a -netdev option to enable that instead of 
user. These are just some comments to simplify the command line, not 
relevant to the problem why it's not working.



about:

So does it stop here or do you get to the firmware ok prompt?

never, with kvm enable no ok promt, without kvm enabled everything work ok (on 
G5 and PC).
with kvm enabled the seriel stdio log stop and because of this i check dmesg 
where there i found this never ending looping message:

[ 3634.418495] kvmppc_exit_pr_progint: emulation at 700 failed (0700)
[ 3634.418525] Couldn't emulate instruction 0x0700 (op 0 xop 896)
[ 3634.418551] Couldn't emulate instruction 0x0700 (op 0 xop 896)
[ 3634.418577] Couldn't emulate instruction 0x0700 (op 0 xop 896)
[ 3634.418603] Couldn't emulate instr...


Yes, this happens because it gets an unexpected Program Exception trying 
to execute something in the ROM that raises this exception which then 
jumps to 0x700 but there's no handler there which then results in another 
Program Exception due to trying to execute garbage at 0x700 which then 
repeats endlessly. The real problem is why we get here, that is the first 
exception and what opcode caused that. So should find a way to find that 
out. I'm not sure what works with KVM (TCG just logs the invalid 
instruction with -d guest_errors but KVM runs the code on real CPU so that 
will take the exception. If there's no kvm log before the above line and 
-d int or enabling some kvm traces does not help either than we may need 
to attach a gdb and break on 0x700 then get a backtrace to find the 
address it's coming from and see what's there. There's some docs here: 
https://qemu-project.gitlab.io/qemu/system/gdb.html but basically add -s 
-S to the command line, then QEMU won't start running but wait for gdb to 
connect. From another window start gdb and type 'target remote 
localhost:1234' which should then attach to the guest in QEMU. Then you 
can examine the VM from gdb or debug it. E.g. set breakpint: b *0x700, 
start vm: c (for continue), then when you get a breakpoint hit you may be 
able to get more info with bt (for backtrace) or info registers. The only 
difference from debugging a normal program is that you won't have the 
executable so no symbols so you have to write addresses as *0x 
otherwise it complains about unknown symbol as it tries to interpret it as 
a function or variable name. (If you do this on a machine that's another 
architecture like running qemu-system-ppc on x86_64 host then you need a 
cross-gdb that supports the guest arch but here we're debugging KVM VM on 
same arch host so the host gdb should work.)



Apart from that you could also try what happens with the sc 1 calls that

is used but VOF when you use -kernel boot.img instead of -bios

i will test kvm with VOF too and report

I think to build last linux kernel just because mine last is 5.04, and im  just 
courious if somethig was fixed in last kernel for not make you creazy for 
notiing 


You can try. Running the latest kernel is useful if 

R: R: R: [PULL 0/3] ppc-for-6.1 queue 20210713

2021-07-20 Thread luigi burdo
Hi Zoltan,
i have same issue with kvm with only qemu-system-ppc -M pegasos2 -bios 
pegasos2.rom --enable-kvm
and with this command line that work great on my PC (without kvm of course)

qemu-system-ppc -M pegasos2 -bios pegasos2.rom -device ati-vga,romfile="" 
-display sdl  -rtc base=localtime -drive 
if=none,id=hd,file=/home/gigi/peggy2,format=raw -device 
ide-hd,drive=hd,bus=ide.0  -drive 
if=none,id=cd,file=/home/gigi/Chrysalis_3.15.iso -device 
ide-cd,drive=cd,bus=ide.0  -device AC97  -m 1024  -netdev user,id=mynet0 
-device sungem,netdev=mynet0 -serial stdio --enable-kvm


about:
>So does it stop here or do you get to the firmware ok prompt?
never, with kvm enable no ok promt, without kvm enabled everything work ok (on 
G5 and PC).
with kvm enabled the seriel stdio log stop and because of this i check dmesg 
where there i found this never ending looping message:
> [ 3634.418495] kvmppc_exit_pr_progint: emulation at 700 failed (0700)
> [ 3634.418525] Couldn't emulate instruction 0x0700 (op 0 xop 896)
> [ 3634.418551] Couldn't emulate instruction 0x0700 (op 0 xop 896)
> [ 3634.418577] Couldn't emulate instruction 0x0700 (op 0 xop 896)
> [ 3634.418603] Couldn't emulate instr...

>Apart from that you could also try what happens with the sc 1 calls that
is used but VOF when you use -kernel boot.img instead of -bios

i will test kvm with VOF too and report

I think to build last linux kernel just because mine last is 5.04, and im  just 
courious if somethig was fixed in last kernel for not make you creazy for 
notiing 

Ciao
Lugii

Da: BALATON Zoltan 
Inviato: martedì 20 luglio 2021 16:02
A: luigi burdo 
Cc: qemu-...@nongnu.org ; qemu-devel@nongnu.org 

Oggetto: Re: R: R: [PULL 0/3] ppc-for-6.1 queue 20210713

Hello,

On Tue, 20 Jul 2021, luigi burdo wrote:
> i was able to build on my quad qemu, a ram bank was die and make me the issue 
> with gcc..
> this is what happening if i run pegasos 2 with --enable-kvm.

OK. Can you also show the full command so we know what options you used?

> via_superio_cfg: unimplemented register 0xf2
> via_superio_cfg: unimplemented register 0xf4
> via_superio_cfg: unimplemented register 0xf6
> via_superio_cfg: unimplemented register 0xf7
> via_superio_cfg: unimplemented register 0xf4
> via_superio_cfg: unimplemented register 0xf2
> PegasosII Boot Strap (c) 2002-2003 bplan GmbH
> Running on CPU PVR:000C0209
> Enable L1 ICache...Done.
> mv64361_write: Unimplemented register write 0x108 = 0
> Reading W83194 :   FAILED.
> Setting Front Side Bus to 133MHz...FAILED.
> Invalid access at addr 0xFE000E43, size 1, region '(null)', reason: rejected

So this shows that what I've seen on emulated KVM (running QEMU in a PPC
Linux guest running on qemu-system-ppc64 -M mac99) does not match what
real hardware does so that could be a bug in emulated KVM. As shown at the
end of this message:

https://lists.nongnu.org/archive/html/qemu-ppc/2021-06/msg00146.html

I did not get the Invalid access warning but instead got endless kvm exits
with the NIP not incrementing past the instruction doing this invalid
access so probably there's a problem with handling invalid access with
emulated KVM PR but I don't know where to look for that problem or how to
fix it. It could also be a bug in guest kernel or QEMU, I'm not sure. Hope
somebody with more knowledge about PPC KVM could give some hints.
Aparently this is not a problem on real machine where it works as expected
(the Invalid address is because we don't emulate this device but it's not
needed and it boots without it and we get the same warnings with TCG).

> Invalid access at addr 0xFE000E44, size 1, region '(null)', reason: rejected
> Invalid access at addr 0xFE000E41, size 1, region '(null)', reason: rejected
> Invalid access at addr 0xFE000E42, size 1, region '(null)', reason: rejected
> Invalid access at addr 0xFE000E40, size 1, region '(null)', reason: rejected
> Configuring DDR...mv64361_write: Unimplemented register write 0x1494 = 291
[...]
> Releasing IDE reset ...Done.
> Configuring Legacy Devices
> Initializing KBD...Invalid access at addr 0xFE0003F0, size 1, region 
> '(null)', reason: rejected
>Done.
> via_superio_cfg: unimplemented register 0xf6
> via_superio_cfg: unimplemented register 0xf7
> via_superio_cfg: unimplemented register 0xf2
> Invalid access at addr 0xFE84, size 1, region '(null)', reason: rejected
> Invalid access at addr 0xFE85, size 1, region '(null)', reason: rejected
> Invalid access at addr 0xFE86, size 1, region '(null)', reason: rejected
> Invalid access at addr 0xFE88, size 1, region