[SeaBIOS] [PATCH 3/3] acpi: revert d9f5cdbdf (DSDT: Fix HPET _CRS Method)
Gabriel L. Somlo
gsomlo at gmail.com
Thu Dec 6 17:36:26 CET 2012
On Thu, Dec 06, 2012 at 10:35:31AM -0500, Kevin O'Connor wrote:
> I just retested, and it's reproducible for me. Keep in mind that
> these last three patches are not on master.
>
> 9600c800ac2a6b34a9993d99e7d3d4f7301e9265 - works
> d9f5cdbdf55d61aef9a1a534d9123ef734427478 - fails
> 7a53595a35fa76c9abb34fd9a73e5661a50aa6d6 (master) - fails
> master + this series 1/2/3 - works
> master + patch 3 - works
>
> As before, if someone submits a fix, I'll use that instead of
> reverting.
I think I might have a fix, but with a caveat :)
I'm also using this on top of SeaBIOS git-master (for OS X):
diff --git a/src/acpi-dsdt-isa.dsl b/src/acpi-dsdt-isa.dsl
index 23761db..daca850 100644
--- a/src/acpi-dsdt-isa.dsl
+++ b/src/acpi-dsdt-isa.dsl
@@ -1,6 +1,24 @@
/* Common legacy ISA style devices. */
Scope(\_SB.PCI0.ISA) {
+ Device (SMC) {
+ Name (_HID, EisaId ("APP0001"))
+ Name (_CID, "smc-napa")
+ Method(_STA, 0) {
+ Return (0x0B)
+ }
+ Name (_CRS, ResourceTemplate () {
+ IO (Decode16,
+ 0x0300, // Range Minimum
+ 0x0300, // Range Maximum
+ 0x01, // Alignment
+ 0x20, // Length
+ )
+ IRQNoFlags ()
+ {6}
+ })
+ }
+
Device(RTC) {
Name(_HID, EisaId("PNP0B00"))
Name(_CRS, ResourceTemplate() {
I haven't submitted it yet because I haven't figured out how to write
a _STA method that didn't have to (unreliably, and, as Alex pointed
out, dangerously) poke at SystemIO port space. However if I do the
following in addition to the SMC above (using Gerd's earlier proposed
RTC _CRS hack as an example):
diff --git a/src/acpi-dsdt-hpet.dsl b/src/acpi-dsdt-hpet.dsl
index d5aa3f1..b6eb995 100644
--- a/src/acpi-dsdt-hpet.dsl
+++ b/src/acpi-dsdt-hpet.dsl
@@ -23,12 +23,23 @@ Scope(\_SB) {
}
Return (0x0F)
}
- Name(_CRS, ResourceTemplate() {
- IRQNoFlags() {2, 8}
+ Name(RESP, ResourceTemplate() {
Memory32Fixed(ReadOnly,
0xFED00000, // Address Base
0x00000400, // Address Length
)
})
+ Name(RESI, ResourceTemplate() {
+ IRQNoFlags() {0, 8}
+ })
+ Method(_CRS, 0) {
+ Store(\_SB.PCI0.ISA.SMC._STA(), Local0)
+ If (LEqual(Local0, 0)) {
+ Return (RESP)
+ } else {
+ ConcatenateResTemplate(RESP, RESI, Local1)
+ Return (Local1)
+ }
+ }
}
}
Windows XP now works fine. If I hardcode the SMC._STA() to return 0
instead, XP still works (OS X obviously does not :)
If I could figure out how to write a reliable _STA method for the SMC,
that would detect whether or not it was supplied as "-device applesmc"
on the qemu command line, I think we might be on to something...
Thanks,
--Gabriel
More information about the SeaBIOS
mailing list