Jump to content

Catalina VM unable to reboot


DI2edd
 Share

2 posts in this topic

Recommended Posts

Hi,

 

I'm writing from a Catalina QEMU/KVM VM which, I must say, works pretty damn well besides the fact that rebooting just doesn't work. But first, a bit of background:

I'm using OpenCore 0.5.5 through DuetPkg because I'm forced on SeaBIOS (legacy boot) because of legacy IGD passthrough (OVMF doesn't support the semi-hack that's needed for it to function), and that works well enough; I switched from Clover because it didn't allow me to use the "host" cpu model on QEMU, which OpenCore did, and so far so good.

 

The problem is that, whenever i attempt a reboot, the screen would just turn black and thats's it. I can even see that every 30 seconds it polls the battery's status through ACPI (I modified QEMU for that and left some debugging printfs).

On the other hand, shutting down works as expected. One thing I noticed is that, on shutdown, I can see the last line of verbose output on the screen is "CPU_HALTED", whereas on reboot I don't get that (don't even know if that's to be expected).

 

The point is that I'm not even sure this is a bootloader issue, because I booted a Fedora live ISO through OpenCore, and that rebooted with no problems, but at the same time I remember that with Clover I didn't have such an issue. Perhaps it was one of Clover's "Fixes" that is not automatic with OpenCore?

 

Anyway, I attached my config.plist.

 

Thank you.

config.plist

Link to comment
Share on other sites

Ok, uhmm, it's been only a couple of hours later but I solved it. Here's how for future reference.

 

So apparently MacOs only supports rebooting through the FADT's reset register. Now, every modern computer should have one, because that comes with ACPI revision 2, which is ancient enough.

Now, remember I told you that I'm stuck with SeaBIOS because of legacy IGD passthrough? Well, that's not the only restriction that it implies; in fact, to passthrough the integrated graphics device you have to use QEMU's i440fx's chipset (super very old) instead of the (albeit also quite old at this point) Q35 one.

 

Well, it turns out that, despite numerous attempts, to this day, QEMU 4.2 only supports the reset register with Q35. Luckily, fixing that was very easy (just remember to also raise the ACPI revision from 1 to 3, otherwise it won't have any effect).

 

And just like that, resetting works.

 

Still, not sure if I'm just misinterpreting, but what's the point of FadtEnableReset, then? I toggled it and it still did nothing. Maybe it didn't change the ACPI revision? If that's the case, then I wouldn't think it's super useful.

Link to comment
Share on other sites

 Share

×
×
  • Create New...