On Wed, Jan 08, 2014 at 06:39:25PM -0500, Gabriel L. Somlo wrote: > On Wed, Jan 08, 2014 at 11:13:54PM +0100, Paolo Bonzini wrote: > > Have you played with the HPET device? It would be nice to have Mac OS X > > support in QEMU 2.0. > > I remember telling you that the HPET needed an extra ACPI patch > (enclosed again below for reference) to work with OS X, and that > this patch conflicts with XP. > > In the mean time, after some tinkering, it turns out that Q35 works > fine without the patch. On PIIX, xnu crashes during boot with a "no > HPET found" panic unless the patch is applied. > > At this point, I'm tempted to just write off PIIX + OS X and declare > Q35 as the only "supported" machine type, to keep things simple and > avoid complicating the HPET ACPI code with if/then/else logic that > depends on the return value of SMC._STA(), etc. > > Let me know what you all think. > > Thanks, > --Gabriel
I still see reports of a bunch of issues with ahci so q35 is less stable at this point I think. I was hoping we can figure out a configuration that makes os x work without hurting xp *and* without just rudely detecting os x through the SMC._STA hack. > P.S. Another OS X issue is getting e1000 to "link up" (but in an earlier > conversation it was decided that guest-specific hacks belong in the BIOS > rather than in QEMU, so I still have a "todo" item to figure out where > to put that patch, and how :) > > ############################################################################### > # Modify DSDT entry for HPET: conditionally insert "IRQNoFlags() {2, 8}" into > # _CRS method only if an AppleSMC chip is present and enabled (otherwise, this > # will cause WinXP to BSOD). > # NOTE: not needed with q35, but necessary on piix !!! > ############################################################################### > diff --git a/hw/i386/acpi-dsdt-hpet.dsl b/hw/i386/acpi-dsdt-hpet.dsl > index dfde174..2a0158a 100644 > --- a/hw/i386/acpi-dsdt-hpet.dsl > +++ b/hw/i386/acpi-dsdt-hpet.dsl > @@ -38,14 +38,23 @@ Scope(\_SB) { > } > Return (0x0F) > } > - Name(_CRS, ResourceTemplate() { > -#if 0 /* This makes WinXP BSOD for not yet figured reasons. */ > - IRQNoFlags() {2, 8} > -#endif > + Name(RESP, ResourceTemplate() { > Memory32Fixed(ReadOnly, > 0xFED00000, // Address Base > 0x00000400, // Address Length > ) > }) > + Name(RESI, ResourceTemplate() { > + IRQNoFlags() {2, 8} > + }) > + Method(_CRS, 0) { > + Store(\_SB.PCI0.ISA.SMC._STA, Local0) > + If (LEqual(Local0, 0x0B)) { // AppleSMC present, add IRQ > + ConcatenateResTemplate(RESP, RESI, Local1) > + Return (Local1) > + } else { > + Return (RESP) > + } > + } > } > }