qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] os x boot broken by commit 11948748495841bd54721b250d68


From: Gabriel L. Somlo
Subject: Re: [Qemu-devel] os x boot broken by commit 11948748495841bd54721b250d68c7b3cb0475ef
Date: Thu, 21 Nov 2013 17:02:07 -0500
User-agent: Mutt/1.5.21 (2010-09-15)

Added qemu-devel, since that is where this stuff belongs now. Everyone
else, sorry for the dupe...

On Thu, Nov 21, 2013 at 07:14:27PM +0100, Paolo Bonzini wrote:
> Can you remind us about your DSDT modifications?  It should be possible
> to patch the HPET and applesmc bits appropriately from QEMU (or to move
> them from the DSDT to an SSDT that is built entirely in QEMU).
> 
> It actually isn't impossible that Mac OS X would boot just fine with 1.8...

My current DSDT patch (against QEMU) is enclosed below. The HPET
basically needs "IRQNoFlags() {2, 8}", which causes XP to bluescreen.

So, I've made it conditional on the SMC STA method returning success
(0x0B).

The SMC node's STA method returns 0x0B unconditionally on real
hardware. So I was planning on figuring out what's easier in the
context of the most recent QEMU code base:

        1. dynamically generating (during qemu runtime initialization)
         a DSDT entry for SMC with hardcoded 0x0B STA method, whenever
        "--device isa-applesmc" is present on the qemu command line

or

        2. writing a static (compile-time) SMC node but with a slightly
        smarter _STA method, which returns 0x0B when "--device isa-applesmc"
        was given on the cmdline, or which returns 0x00 in the absence
        of "--device isa-applesmc".

Either 1. or 2. could be used with HPET -- I can make inclusion of
IRQNoFlags dependent on either the success or on the presence of
SMC._STA() :)

Let me know what you think.

Thanks,
--Gabriel

###############################################################################
# Modify DSDT entry for HPET: conditionally insert "IRQNoFlags() {2, 8}" into
# _CRS method only if an AppleSMC DSDT node is also present and enabled (it
# otherwise causes WinXP to BSOD).
###############################################################################
diff --git a/hw/i386/acpi-dsdt-hpet.dsl b/hw/i386/acpi-dsdt-hpet.dsl
index dfde174..205cf05 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)
+            }
+        }
     }
 }
###############################################################################
# Add DSDT entry for AppleSMC;
# TODO: find a way to make the _STA method return 0x0b only if QEMU command
# line contains "-device isa-applesmc", and 0x00 otherwise!
###############################################################################
diff --git a/hw/i386/acpi-dsdt-isa.dsl b/hw/i386/acpi-dsdt-isa.dsl
index 89caa16..b7a27bb 100644
--- a/hw/i386/acpi-dsdt-isa.dsl
+++ b/hw/i386/acpi-dsdt-isa.dsl
@@ -16,6 +16,28 @@
 /* Common legacy ISA style devices. */
 Scope(\_SB.PCI0.ISA) {
 
+    Device (SMC) {
+        Name(_HID, EisaId("APP0001"))
+        OperationRegion(SMC, SystemIO, 0x0300, 0x20)
+        Field(SMC, ByteAcc, NoLock, Preserve) {
+            Offset(0x04),
+            CMDP, 8,
+        }
+        Method(_STA, 0) {
+//            Store(0x10, CMDP)    // APPLESMC_READ_CMD
+//            Store(CMDP, Local0)
+//            If (LEqual(Local0, 0x0c)) {
+                Return (0x0B)
+//            } Else {
+//                Return (0x00)
+//            }
+        }
+        Name (_CRS, ResourceTemplate () {
+            IO (Decode16, 0x0300, 0x0300, 0x01, 0x20)
+            IRQNoFlags() { 6 }
+        })
+    }
+
     Device(RTC) {
         Name(_HID, EisaId("PNP0B00"))
         Name(_CRS, ResourceTemplate() {



reply via email to

[Prev in Thread] Current Thread [Next in Thread]