Compaq R3000z ACPI fix

Jung-uk Kim jkim at niksun.com
Wed Jan 19 19:14:43 PST 2005


Hi,

I finally found some time and made ACPI working on Compaq R3000z.  You 
need to fix kernel and DSDT.  The kernel hack is for FreeBSD/amd64.  
Similar hack should work with FreeBSD/i386 but I haven't tested.

To enable the hack, you need to set 'hw.acpi.skip_timer_override=1' 
from loader or loader.conf.

Yes, I stole the idea from Linux. ;-)

http://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/patches/test/2.6.5/20040422223905-nforce2_timer.patch

I only tested with the following options:

options	SMP
device	atpic

The DSDT fix is against BIOS version F.33.  To override DSDT, please 
read:

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/acpi-debug.html

Enjoy,

Jung-uk Kim
-------------- next part --------------
--- src/sys/amd64/acpica/madt.c.orig	Thu Jun 10 17:30:08 2004
+++ src/sys/amd64/acpica/madt.c	Wed Jan 19 21:49:50 2005
@@ -595,6 +595,14 @@
 	enum intr_trigger trig;
 	enum intr_polarity pol;
 	char buf[64];
+	int skip_timer_override;
+
+	if (getenv_int("hw.acpi.skip_timer_override", &skip_timer_override) &&
+	    intr->Source == 0 && intr->Interrupt == 2) {
+		if (bootverbose)
+			printf("MADT: skipping timer override.\n");
+		return;
+	}
 
 	if (bootverbose)
 		printf("MADT: intr override: source %u, irq %u\n",
-------------- next part --------------
--- r3000z.asl	Wed Jan 19 21:53:10 2005
+++ r3000z-fixed.asl	Wed Jan 19 21:19:20 2005
@@ -161,6 +161,7 @@
         {
             Notify (\_SB.PWRB, 0x02)
         }
+	Return(Package(0x02){0x00, 0x00})
     }
 
     Scope (\_PR)
@@ -201,9 +202,10 @@
 
     Scope (\_SB)
     {
+/*
         Device (WMID)
         {
-            Name (_HID, "*pnp0c14")
+            Name (_HID, "PNP0C14")
             Name (_UID, 0x00)
             Name (_WDG, Buffer (0x14)
             {
@@ -254,6 +256,7 @@
                 }
             }
         }
+*/
 
         Scope (\_SB)
         {
@@ -1865,7 +1868,7 @@
                     }
 
                     OperationRegion (ERAM, EmbeddedControl, 0x00, 0xFF)
-                    Field (ERAM, AnyAcc, Lock, Preserve)
+                    Field (ERAM, ByteAcc, Lock, Preserve)
                     {
                         Offset (0x60), 
                         SMPR,   8, 
@@ -2094,7 +2097,7 @@
                     }
 
                     OperationRegion (ECRM, EmbeddedControl, 0x00, 0xFF)
-                    Field (ECRM, AnyAcc, Lock, Preserve)
+                    Field (ECRM, ByteAcc, Lock, Preserve)
                     {
                         Offset (0x94), 
                         ERIB,   16, 
@@ -2328,7 +2331,7 @@
                         IO (Decode16, 0x0010, 0x0010, 0x01, 0x10)
                         IO (Decode16, 0x0022, 0x0022, 0x01, 0x1E)
                         IO (Decode16, 0x0044, 0x0044, 0x01, 0x1C)
-                        IO (Decode16, 0x0062, 0x0062, 0x01, 0x02)
+                     /* IO (Decode16, 0x0062, 0x0062, 0x01, 0x02) */
                         IO (Decode16, 0x0065, 0x0065, 0x01, 0x0B)
                         IO (Decode16, 0x0072, 0x0072, 0x01, 0x02)
                         IO (Decode16, 0x0074, 0x0074, 0x01, 0x0C)
@@ -3209,7 +3212,8 @@
                                 IRQNoFlags () {3,4,5,11}
                                 DMA (Compatibility, BusMaster, Transfer16) {1,3,6}
                             }
-                            /*** Missing EndDependentFunctions descriptor */                        })
+                            EndDependentFn()
+			})
                         Method (_SRS, 1, NotSerialized)
                         {
                             CreateByteField (Arg0, 0x02, IOLO)
@@ -3633,6 +3637,7 @@
                                 \_SB.PCI0.LPC0.PHSS (0x01)
                             }
                         }
+			Return (Package(0x02){0x00,0x00})
                     }
 
                     Method (STBL, 1, NotSerialized)


More information about the freebsd-amd64 mailing list