[SeaBIOS] os x boot broken by commit 11948748495841bd54721b250d68c7b3cb0475ef
Gabriel L. Somlo
gsomlo at gmail.com
Thu Nov 21 23:02:07 CET 2013
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() {
More information about the SeaBIOS
mailing list