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

From: Evgeny Sagatov

Date: Mon Apr 27 2026 - 17:50:16 EST


apr 28 00:48:34 srv kernel: ACPI power button event
apr 28 00:48:34 srv kernel: ACPI event status I/O port number: 1024

пн, 27 апр. 2026 г. в 23:31, Rafael J. Wysocki <rafael@xxxxxxxxxx>:
>
> 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);
>
>
>