From patchwork Sat Apr 19 09:28:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "M. Bergo" X-Patchwork-Id: 882783 Received: from mail-pg1-f182.google.com (mail-pg1-f182.google.com [209.85.215.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 016FE5464E; Sat, 19 Apr 2025 09:28:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745054925; cv=none; b=M3eT4O4XEmOoO6g0XoX25NXakgbCJVGRqeMuby5e+TfNehM47kHJwSrNlRdvByg5euv/GeV8f6RhSevVVklFdMyR6j9ljJonWewWYnJXD2hjxoaQsq1nQHWGNZw0xb5hO8RvPp6edQ3IvjguDOzIjsR5KzOvfQkLP4+6neoUeMo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745054925; c=relaxed/simple; bh=kGIslY6GbjdXxmza/3JUtADkJ/ehjdmYOPMOSj8Rrvk=; h=Message-ID:Date:MIME-Version:Subject:From:To:Cc:References: In-Reply-To:Content-Type; b=CrvsJAQS1ZBgMLzdF0DINcdW2zAZetNaCKywAsXXmdyzswtd79XjQ1opbKLs0F4KahBNtm87Dzc2oRDJRaWzNr1LxxOJigv1mGGoJuGqnT+TeON8GR+NB50uRByfD+x2lzHYruxvDFcklrGUKpIBVmHfqzWuHodOwJmseX97wZ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AVKUh0lB; arc=none smtp.client-ip=209.85.215.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AVKUh0lB" Received: by mail-pg1-f182.google.com with SMTP id 41be03b00d2f7-b061a775ac3so2292999a12.0; Sat, 19 Apr 2025 02:28:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745054922; x=1745659722; darn=vger.kernel.org; h=in-reply-to:autocrypt:content-language:references:cc:to:from :subject:user-agent:mime-version:date:message-id:from:to:cc:subject :date:message-id:reply-to; bh=kGIslY6GbjdXxmza/3JUtADkJ/ehjdmYOPMOSj8Rrvk=; b=AVKUh0lBDJn0hY/MAMwcj2oMpApQdsFkzmhbJk6M7DNN0lzed+/sOTquc2VAycNhFo 8YmG18vQ2Q+Te8f2EULyxjfqNP8KUBu4oFbzV3iE+ns88LWIG2PZqqRA40OMk3mFCrmh o/V/pWYoaLXI3wIITlFYIRgrrmrqmNmcMtnn8U80C5Rr1OOPrL4Y0oT8SNlfGpMg/Vzx xBDni6Wl1IE8qVweyah960t65EtJkSQypEhFIToDxiKfQd6XzknbNZLs6bRwBnKhSyfa W8w4XHPloWezQLvmGoH3Vw1u0Tx7/6m4Miz3+GJwOOELb5+9D05p6bPThxOLYDBmYZWF TQdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745054922; x=1745659722; h=in-reply-to:autocrypt:content-language:references:cc:to:from :subject:user-agent:mime-version:date:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=kGIslY6GbjdXxmza/3JUtADkJ/ehjdmYOPMOSj8Rrvk=; b=dt0FH3gFTkpcYcOtBF1Wt5N3MOux34S1bzyKX0aKnNhGL8DgZdwhPvt27zhtnfNRgq ztgoAVfvqRpRSeoQs/HPDXuCKTdmI1217Nl4GF1S/s/OzFMvEiYvdWp4JZtInqToje+N 372rmlhYTIDt0Lk9S59FhJGAyp6rcEY+T0oFIK2J4pmsNmzYU9bImnPbUkNEV/OdEUyK WNQ65S+nsaY8Pe3yogLcW5cAb7XtyboMckahTlFtRdUNtMXSlbhHHJq3Hem7WC6JmMfe 3wyEp5SsZCY8uPQCc1uEgMgwvV0PD3AFrCbjyHbtOhgRU92ucfX6fp5tzm+y8k4wT7AF Donw== X-Forwarded-Encrypted: i=1; AJvYcCXqP4JJ1tXBJwo5nQLN5IRTUKLPbHWMmbFPf13Q2BhV/56QD+V8rMZxO6bqOGrgQXw7RUdROeplI8zRfM+8vzCuy+EM@vger.kernel.org X-Gm-Message-State: AOJu0YxoV50ljnIRtdOEAEn8Ubkzq7sVnLfnAZ+gLWT1bgnTuLeNiWBi qt1cLUoqjLUcyjSUAWQloktkbwqj84HQWSOi1dcCTddq8h1YAO+Ux4wQDqa3LtU= X-Gm-Gg: ASbGnct+yREogfDsul9/hgz4EEalM6Uuf0XMxjGXu+vuvMYsWgdaMH4qEULNK+f2VLN +fxR9WGWSMuE3shvMj6F6o/hKDV9kMO1tVdd6wkCg9xfs73rRs+7VSBFIcXjo1TfPRfnNi/QBDI qmEadWZ/j4T0TmhZDx+Q/7Oqd9d19GwKMrUAJMVtpwdB9Cv36t85p4StPjmzbji6FOmuPqCaNge ouavc9/JTOr1+fwYZ52jlT/rfkvZXJ786YDUQ025X0ei/g711iQd3K4ImNcCHSH5MfdGJcB5kMY uXbvrKzCDrosEjXBqbB1lUP3l9bXlonhoIeF6piAb3WuQOjd5OlCUP7x++KHFZCKxfmlH0158Gm wO2ns8bS+EApXXx0= X-Google-Smtp-Source: AGHT+IHMeqbicBXhKjM0QznRis2u/x3iYo0ZQt451944EmIQNO5+YhpfsnIw0jy1K8rrvZgbRsICBg== X-Received: by 2002:a17:90b:1f89:b0:2ff:58b8:5c46 with SMTP id 98e67ed59e1d1-3087bb53140mr8626863a91.8.1745054922357; Sat, 19 Apr 2025 02:28:42 -0700 (PDT) Received: from ?IPV6:2804:14d:5cd1:5e16:41cc:81a8:c75a:f6af? ([2804:14d:5cd1:5e16:41cc:81a8:c75a:f6af]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c50fdb805sm29875895ad.216.2025.04.19.02.28.31 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 19 Apr 2025 02:28:33 -0700 (PDT) Message-ID: <445f6320-698f-4d29-8556-665366668e4d@gmail.com> Date: Sat, 19 Apr 2025 06:28:29 -0300 Precedence: bulk X-Mailing-List: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Betterbird (Linux) Subject: [PATCH] ACPI: EC: Fix CPU frequency limitation on AMD platforms after suspend/resume From: "M. Bergo" To: linux-kernel@vger.kernel.org Cc: linux-acpi@vger.kernel.org, platform-driver-x86@vger.kernel.org, mark.pearson@lenovo.com, rafael@kernel.org, lenb@kernel.org References: Content-Language: en-US Autocrypt: addr=marcusbergo@gmail.com; keydata= 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 In-Reply-To: >From 881e57c87b9595c186c2ca7e6d35d0a52c1a10c2 Mon Sep 17 00:00:00 2001 From: Marcus Bergo Date: Sat, 19 Apr 2025 05:19:05 -0300 Subject: [PATCH] ACPI: EC: Fix CPU frequency limitation on AMD platforms after  suspend/resume Several AMD-based laptop models (Lenovo P15v Gen 3, P16v Gen 1, HP EliteBook 845 G10) experience a CPU frequency limitation issue where the processor gets stuck at approximately 544MHz after resuming from suspend when the power cord is unplugged during sleep. This issue makes the systems practically unusable until a full power cycle is performed. The root cause was traced to commit b5539eb5ee70 ("ACPI: EC: Fix acpi_ec_dispatch_gpe()") which restored the behavior of clearing the GPE in acpi_ec_dispatch_gpe() function to prevent GPE storms. While this fix is necessary for most platforms to prevent excessive power consumption during suspend-to-idle, it causes problems on certain AMD platforms by interfering with the EC's ability to properly restore power management settings after resume. This patch implements a targeted workaround that: 1. Adds DMI-based detection for affected AMD platforms 2. Adds a function to check if we're in suspend-to-idle mode 3. Modifies the acpi_ec_dispatch_gpe() function to handle AMD platforms specially:    - For affected AMD platforms during suspend-to-idle, it advances the      transaction without clearing the GPE status bit    - For all other platforms, it maintains the existing behavior of clearing      the GPE status bit Testing was performed on a Lenovo P16v Gen 1 with AMD Ryzen 7 PRO 7840HS and confirmed that: 1. Without the patch, the CPU frequency is limited to 544MHz after the  suspend/unplug/resume sequence 2. With the patch applied, the CPU properly scales up to its maximum frequency    (5.1GHz) after the same sequence 3. No regressions were observed in other EC functionality (battery status,    keyboard backlight, etc.) 4. Multiple suspend/resume cycles with different power states were tested    without issues The patch was also verified not to affect the behavior on Intel-based systems, ensuring that the GPE storm prevention remains effective where needed. Fixes: b5539eb5ee70 ("ACPI: EC: Fix acpi_ec_dispatch_gpe()") Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=218557 Reported-by: Mark Pearson Signed-off-by: Marcus Bergo ---  drivers/acpi/ec.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++-  1 file changed, 65 insertions(+), 1 deletion(-)         return ec->events_in_progress + ec->queries_in_progress > 0;  } +/* List of AMD platforms with CPU frequency issues after suspend/resume */ +static const struct dmi_system_id acpi_ec_amd_freq_quirk[] = { +       { +  .matches = { +    DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), +    DMI_MATCH(DMI_PRODUCT_NAME, "P15v Gen 3"), +               }, +       }, +       { +  .matches = { +    DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), +    DMI_MATCH(DMI_PRODUCT_NAME, "P16v Gen 1"), +               }, +       }, +       { +  .matches = { +    DMI_MATCH(DMI_SYS_VENDOR, "HP"), +    DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook 845 14 inch G10 Notebook PC"), +               }, +       }, +       { }, +}; + +/* Check if we're in suspend-to-idle mode */ +static bool pm_suspend_via_s2idle(void) +{ +#ifdef CONFIG_PM_SLEEP +       return pm_suspend_target_state == PM_SUSPEND_TO_IDLE; +#else +       return false; +#endif +} + +/* Check if the system is an AMD platform with the frequency quirk */ +static bool is_amd_freq_quirk_system(void) +{ +       static int is_quirk_system = -1; + +       if (is_quirk_system == -1) { +               /* Check if it's an AMD CPU */ +               if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD) { +    is_quirk_system = 0; +               } else { +    /* Check if it's in the DMI quirk list */ +    is_quirk_system = dmi_check_system(acpi_ec_amd_freq_quirk) ? 1 : 0; +               } +       } + +       return is_quirk_system == 1; +} + + +  bool acpi_ec_dispatch_gpe(void)  {         bool work_in_progress = false; @@ -2172,7 +2226,17 @@ bool acpi_ec_dispatch_gpe(void)         if (acpi_ec_gpe_status_set(first_ec)) { pm_pr_dbg("ACPI EC GPE status set\n"); -  clear_gpe_and_advance_transaction(first_ec, false); +               /* +                * Special handling for AMD platforms with CPU frequency issues +                * after suspend/resume. On these platforms, we need to advance the +                * transaction but NOT clear the GPE status bit when in suspend-to-idle +                * state to prevent CPU frequency limitation issues. +                */ +               if (is_amd_freq_quirk_system() && pm_suspend_via_s2idle()) { +    advance_transaction(first_ec, false); +               } else { +    clear_gpe_and_advance_transaction(first_ec, false); +               } work_in_progress = acpi_ec_work_in_progress(first_ec);         } diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index 3c5f34892734..f3698f3c100f 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c @@ -29,6 +29,7 @@  #include  #include  #include +#include  #include "internal.h" @@ -2139,6 +2140,59 @@ static bool acpi_ec_work_in_progress(struct acpi_ec *ec)