| From b5acc3628898baa63658bc4125f9525f9b3dd4f3 Mon Sep 17 00:00:00 2001 |
| From: Niklas Cassel <cassel@kernel.org> |
| Date: Thu, 12 Jun 2025 16:17:51 +0200 |
| Subject: ata: ahci: Disallow LPM for ASUSPRO-D840SA motherboard |
| |
| From: Niklas Cassel <cassel@kernel.org> |
| |
| commit b5acc3628898baa63658bc4125f9525f9b3dd4f3 upstream. |
| |
| A user has bisected a regression which causes graphical corruptions on his |
| screen to commit 7627a0edef54 ("ata: ahci: Drop low power policy board |
| type"). |
| |
| Simply reverting commit 7627a0edef54 ("ata: ahci: Drop low power policy |
| board type") makes the graphical corruptions on his screen to go away. |
| (Note: there are no visible messages in dmesg that indicates a problem |
| with AHCI.) |
| |
| The user also reports that the problem occurs regardless if there is an |
| HDD or an SSD connected via AHCI, so the problem is not device related. |
| |
| The devices also work fine on other motherboards, so it seems specific to |
| the ASUSPRO-D840SA motherboard. |
| |
| While enabling low power modes for AHCI is not supposed to affect |
| completely unrelated hardware, like a graphics card, it does however |
| allow the system to enter deeper PC-states, which could expose ACPI issues |
| that were previously not visible (because the system never entered these |
| lower power states before). |
| |
| There are previous examples where enabling LPM exposed serious BIOS/ACPI |
| bugs, see e.g. commit 240630e61870 ("ahci: Disable LPM on Lenovo 50 series |
| laptops with a too old BIOS"). |
| |
| Since there hasn't been any BIOS update in years for the ASUSPRO-D840SA |
| motherboard, disable LPM for this board, in order to avoid entering lower |
| PC-states, which triggers graphical corruptions. |
| |
| Cc: stable@vger.kernel.org |
| Reported-by: Andy Yang <andyybtc79@gmail.com> |
| Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220111 |
| Fixes: 7627a0edef54 ("ata: ahci: Drop low power policy board type") |
| Reviewed-by: Damien Le Moal <dlemoal@kernel.org> |
| Reviewed-by: Hans de Goede <hansg@kernel.org> |
| Link: https://lore.kernel.org/r/20250612141750.2108342-2-cassel@kernel.org |
| Signed-off-by: Niklas Cassel <cassel@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/ata/ahci.c | 19 ++++++++++++++++++- |
| 1 file changed, 18 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/ata/ahci.c |
| +++ b/drivers/ata/ahci.c |
| @@ -1410,8 +1410,15 @@ static bool ahci_broken_suspend(struct p |
| |
| static bool ahci_broken_lpm(struct pci_dev *pdev) |
| { |
| + /* |
| + * Platforms with LPM problems. |
| + * If driver_data is NULL, there is no existing BIOS version with |
| + * functioning LPM. |
| + * If driver_data is non-NULL, then driver_data contains the DMI BIOS |
| + * build date of the first BIOS version with functioning LPM (i.e. older |
| + * BIOS versions have broken LPM). |
| + */ |
| static const struct dmi_system_id sysids[] = { |
| - /* Various Lenovo 50 series have LPM issues with older BIOSen */ |
| { |
| .matches = { |
| DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), |
| @@ -1446,6 +1453,13 @@ static bool ahci_broken_lpm(struct pci_d |
| */ |
| .driver_data = "20180310", /* 2.35 */ |
| }, |
| + { |
| + .matches = { |
| + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), |
| + DMI_MATCH(DMI_PRODUCT_VERSION, "ASUSPRO D840MB_M840SA"), |
| + }, |
| + /* 320 is broken, there is no known good version yet. */ |
| + }, |
| { } /* terminate list */ |
| }; |
| const struct dmi_system_id *dmi = dmi_first_match(sysids); |
| @@ -1455,6 +1469,9 @@ static bool ahci_broken_lpm(struct pci_d |
| if (!dmi) |
| return false; |
| |
| + if (!dmi->driver_data) |
| + return true; |
| + |
| dmi_get_date(DMI_BIOS_DATE, &year, &month, &date); |
| snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date); |
| |