[SeaBIOS] [PATCH 3/3] acpi: revert d9f5cdbdf (DSDT: Fix HPET _CRS Method)
Alexander Graf
agraf at suse.de
Thu Dec 6 18:10:46 CET 2012
On 06.12.2012, at 17:36, Gabriel L. Somlo wrote:
> 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...
You should be able to poke fw_cfg in the _STA method. The machine file could search its bus on init (or on machine create notify) and populate a fw_cfg variable to indicate whether it found an applesmc.
Alex
More information about the SeaBIOS
mailing list