Re: Pressing the power button causes the device to freeze completely

From: Rafael J. Wysocki

Date: Mon Apr 27 2026 - 16:31:53 EST


On Monday, April 27, 2026 10:12:33 PM CEST Evgeny Sagatov wrote:
> dmesg | grep "frequency scaling"
> [ 8.552380] acpi_cpufreq: CPU0: Using I/O space for frequency scaling
> [ 8.552386] acpi_cpufreq: CPU0: frequency scaling I/O port number: 2176
> [ 8.552478] acpi_cpufreq: CPU1: Using I/O space for frequency scaling
> [ 8.552480] acpi_cpufreq: CPU1: frequency scaling I/O port number: 2176
> [ 8.552584] acpi_cpufreq: CPU2: Using I/O space for frequency scaling
> [ 8.552586] acpi_cpufreq: CPU2: frequency scaling I/O port number: 2176
> [ 8.552668] acpi_cpufreq: CPU3: Using I/O space for frequency scaling
> [ 8.552670] acpi_cpufreq: CPU3: frequency scaling I/O port number: 2176
>
> Messages that appear when I press the power button:
> apr 27 23:07:33 srv kernel: ACPI power button event
> apr 27 23:07:33 srv kernel: ACPI event status register ID: 3

Of course it's a power button, so the register ID is 3 and the register
is PM1. Sorry for missing that previously.

Please apply the slightly update patch below (which replaces the previous
one) and send the messages printed to the log after booting the new
kernel and pressing the power button.

---
drivers/acpi/acpica/evevent.c | 8 ++++++++
drivers/cpufreq/acpi-cpufreq.c | 8 ++++++--
drivers/cpufreq/cpufreq.c | 1 +
3 files changed, 15 insertions(+), 2 deletions(-)

--- a/drivers/acpi/acpica/evevent.c
+++ b/drivers/acpi/acpica/evevent.c
@@ -243,6 +243,14 @@ static u32 acpi_ev_fixed_event_dispatch(
(void)acpi_write_bit_register(acpi_gbl_fixed_event_info[event].
status_register_id, ACPI_CLEAR_STATUS);

+ if (event == ACPI_EVENT_POWER_BUTTON) {
+ pr_info("ACPI power button event\n");
+ pr_info("ACPI event status I/O port number: %llu\n",
+ acpi_gbl_xpm1a_status.address);
+
+ return (ACPI_INTERRUPT_HANDLED);
+ }
+
/*
* Make sure that a handler exists. If not, report an error
* and disable the event to prevent further interrupts.
--- a/drivers/cpufreq/acpi-cpufreq.c
+++ b/drivers/cpufreq/acpi-cpufreq.c
@@ -479,8 +479,8 @@ static unsigned int acpi_cpufreq_fast_sw
return next_freq;
}

- data->cpu_freq_write(&perf->control_register,
- perf->states[next_perf_state].control);
+ /*data->cpu_freq_write(&perf->control_register,
+ perf->states[next_perf_state].control);*/
perf->state = next_perf_state;
return next_freq;
}
@@ -887,9 +887,13 @@ static int acpi_cpufreq_cpu_init(struct
* unknown and not detectable via IO ports.
*/
policy->cur = acpi_cpufreq_guess_freq(data, policy->cpu);
+ pr_info("CPU%u: Using I/O space for frequency scaling\n", cpu);
+ pr_info("CPU%u: frequency scaling I/O port number: %llu\n", cpu,
+ perf->control_register.address);
break;
case ACPI_ADR_SPACE_FIXED_HARDWARE:
acpi_cpufreq_driver.get = get_cur_freq_on_cpu;
+ pr_info("CPU%u: Using FFH for frequency scaling\n", cpu);
break;
default:
break;
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -473,6 +473,7 @@ void cpufreq_enable_fast_switch(struct c
if (cpufreq_fast_switch_count >= 0) {
cpufreq_fast_switch_count++;
policy->fast_switch_enabled = true;
+ pr_info("CPU%u: Fast frequency switching enabled\n", policy->cpu);
} else {
pr_warn("CPU%u: Fast frequency switching not enabled\n",
policy->cpu);