changeset 10235:e7fdfb407eae

6860080 acpica: doesn't handle optional PM2 register correctly 6865718 acpica: need low-level prom_printf() for suspend/resume debugging
author Dana Myers <Dana.Myers@Sun.COM>
date Fri, 31 Jul 2009 14:39:12 -0700
parents c4cea2ed5803
children 23107305f797
files usr/src/uts/intel/io/acpica/hardware/hwsleep.c usr/src/uts/intel/io/acpica/osl.c
diffstat 2 files changed, 23 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/intel/io/acpica/hardware/hwsleep.c	Fri Jul 31 13:25:53 2009 -0700
+++ b/usr/src/uts/intel/io/acpica/hardware/hwsleep.c	Fri Jul 31 14:39:12 2009 -0700
@@ -345,10 +345,13 @@
 
     if (SleepState != ACPI_STATE_S5)
     {
-        /* Disable BM arbitration */
-
+	/*
+	 * Disable BM arbitration. This feature is contained within an
+	 * optional register (PM2 Control), so ignore a BAD_ADDRESS
+	 * exception.
+	 */
         Status = AcpiWriteBitRegister (ACPI_BITREG_ARB_DISABLE, 1);
-        if (ACPI_FAILURE (Status))
+	if (ACPI_FAILURE (Status) && (Status != AE_BAD_ADDRESS))
         {
             return_ACPI_STATUS (Status);
         }
@@ -683,10 +686,13 @@
             AcpiGbl_FixedEventInfo[ACPI_EVENT_POWER_BUTTON].StatusRegisterId,
             ACPI_CLEAR_STATUS);
 
-    /* Enable BM arbitration */
-
+    /*
+     * Enable BM arbitration. This feature is contained within an
+     * optional register (PM2 Control), so ignore a BAD_ADDRESS
+     * exception.
+     */
     Status = AcpiWriteBitRegister (ACPI_BITREG_ARB_DISABLE, 0);
-    if (ACPI_FAILURE (Status))
+    if (ACPI_FAILURE (Status) && (Status != AE_BAD_ADDRESS))
     {
         return_ACPI_STATUS (Status);
     }
--- a/usr/src/uts/intel/io/acpica/osl.c	Fri Jul 31 13:25:53 2009 -0700
+++ b/usr/src/uts/intel/io/acpica/osl.c	Fri Jul 31 14:39:12 2009 -0700
@@ -44,6 +44,7 @@
 #include <sys/taskq.h>
 #include <sys/strlog.h>
 #include <sys/note.h>
+#include <sys/promif.h>
 
 #include <sys/acpi/acpi.h>
 #include <sys/acpi/accommon.h>
@@ -1164,12 +1165,20 @@
 		*outp++ = c;
 		if (c == '\n' || --out_remaining == 0) {
 			*outp = '\0';
-			if (acpica_console_out)
+			switch (acpica_console_out) {
+			case 1:
 				printf(acpica_outbuf);
-			else
+				break;
+			case 2:
+				prom_printf(acpica_outbuf);
+				break;
+			case 0:
+			default:
 				(void) strlog(0, 0, 0,
 				    SL_CONSOLE | SL_NOTE | SL_LOGONLY,
 				    acpica_outbuf);
+				break;
+			}
 			acpica_outbuf_offset = 0;
 			outp = acpica_outbuf;
 			out_remaining = ACPICA_OUTBUF_LEN - 1;