I'm currently debugging a weird issue where the PC appears to be
attempting to S3 suspend prematurely in acpi_enter_sleep_state().

The PC is a Sony Vaio PCG-SRX51P/B notebook (Intel 850MHz, 384MB, kernel
2.6.20-16) with Ubuntu 7.04 Feisty 32-bit with CONFIG_ACPI_DEBUG.

I added some additional debug messages to acpi_enter_sleep_state() and
find that after the 1st write to "PM1B (SLP_TYP data)" but before
writing "PM1A (SLP_TYP + SLP_EN)" the PC appears to suspend prematurely,
and then instantly comes back with "Back to C!".

It doesn't seem to fail via the ACPI_FAILURE()... return_ACPI_STATUS()
logic as far as I can tell.

Here's the log entries:

kernel: [  328.044000]  hwsleep-0285 [03] enter_sleep_state     :
Entering sleep state [S3]
kernel: [  328.044000]  hwsleep-0308 [03] enter_sleep_state     :
Writing PM1A (SLP_TYP data) 1401
kernel: [  328.044000]  hwsleep-0319 [03] enter_sleep_state     :
Writing PM1B (SLP_TYP data) 1401
kernel: [  328.044000]  hwsleep-0326 [03] enter_sleep_state     : Just
written PM1B (SLP_TYP data). status=0x0
kernel: [  328.044000] Back to C!

Any ideas?

TJ.

-----drivers/acpi/hardware/hwsleep.c::acpi_enter_sleep_state()----
        /* Write #1: fill in SLP_TYP data */
 
#ifdef DEBUG_RESUME
 ACPI_DEBUG_PRINT((ACPI_DB_INIT, "Writing PM1A (SLP_TYP data) %x\n",
PM1Acontrol));
#endif

        status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
                                        ACPI_REGISTER_PM1A_CONTROL,
                                        PM1Acontrol);
        if (ACPI_FAILURE(status)) {
                return_ACPI_STATUS(status);
        }

#ifdef DEBUG_RESUME
 ACPI_DEBUG_PRINT((ACPI_DB_INIT, "Writing PM1B (SLP_TYP data) %x\n",
PM1Bcontrol));
#endif

  status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
                                        ACPI_REGISTER_PM1B_CONTROL,
                                        PM1Bcontrol);
#ifdef DEBUG_RESUME
 ACPI_DEBUG_PRINT((ACPI_DB_INIT, "Just written PM1B (SLP_TYP data).
status=0x%x\n", status));
#endif
        if (ACPI_FAILURE(status)) {
#ifdef DEBUG_RESUME
 ACPI_DEBUG_PRINT((ACPI_DB_INIT, "Failed writing PM1B (SLP_TYP data).
status=0x%x\n", status));
#endif

                return_ACPI_STATUS(status);
        }

        /* Insert SLP_ENABLE bit */

        PM1Acontrol |= sleep_enable_reg_info->access_bit_mask;
        PM1Bcontrol |= sleep_enable_reg_info->access_bit_mask;

        /* Write #2: SLP_TYP + SLP_EN */
#ifdef DEBUG_RESUME
 ACPI_DEBUG_PRINT((ACPI_DB_INIT, "About to flush CPU cache\n"));
#endif

        ACPI_FLUSH_CPU_CACHE();

#ifdef DEBUG_RESUME
 ACPI_DEBUG_PRINT((ACPI_DB_INIT, "Writing PM1A (SLP_TYP + SLP_EN) %x\n",
PM1Acontrol));
#endif
 
        status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
                                        ACPI_REGISTER_PM1A_CONTROL,
                                        PM1Acontrol);
        if (ACPI_FAILURE(status)) {
                return_ACPI_STATUS(status);
        }

#ifdef DEBUG_RESUME
 ACPI_DEBUG_PRINT((ACPI_DB_INIT, "Writing PM1B (SLP_TYP + SLP_EN) %x\n",
PM1Bcontrol));
#endif
 
        status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK,
                                        ACPI_REGISTER_PM1B_CONTROL,
                                        PM1Bcontrol);
        if (ACPI_FAILURE(status)) {
                return_ACPI_STATUS(status);
        }

#ifdef DEBUG_RESUME
 ACPI_DEBUG_PRINT((ACPI_DB_INIT, "Just done sleep S3\n"));
#endif


-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to