Mercurial > illumos > illumos-gate
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;