From: Hans de Goede <hdegoede@redhat.com>
To: Niklas Cassel <cassel@kernel.org>, Damien Le Moal <dlemoal@kernel.org>
Cc: kernel-dev@rsta79.anonaddy.me,
Mika Westerberg <mika.westerberg@linux.intel.com>,
linux-ide@vger.kernel.org,
Mario Limonciello <mario.limonciello@amd.com>
Subject: Re: [PATCH 1/2] ata: ahci: Refactor ahci_broken_lpm()
Date: Mon, 9 Jun 2025 16:57:48 +0200 [thread overview]
Message-ID: <0dd6308d-304f-4677-be0b-4d3b04e6d8f7@redhat.com> (raw)
In-Reply-To: <6ea509c8-b38d-4941-8a29-c1117ff3dd5b@redhat.com>
Hi,
On 9-Jun-25 4:49 PM, Hans de Goede wrote:
> Hi Niklas,
>
> On 9-Jun-25 3:45 PM, Niklas Cassel wrote:
>> Currently, the match table in ahci_broken_lpm() contains DMI BIOS dates
>> of BIOSes that are known to be working.
>>
>> Having a list of known to be working versions is usually the wrong way to
>> do things (as this list could theoretically be infinite).
>>
>> Refactor this match table to contain DMI BIOS dates of BIOSes that are
>> known to not be working, such that this list can be extended with BIOS
>> versions (for other boards) that are known to not be working, where there
>> is no good BIOS version (because all released versions are broken).
>>
>> Signed-off-by: Niklas Cassel <cassel@kernel.org>
>> ---
>> drivers/ata/ahci.c | 34 ++++++++++++++++++++++++----------
>> 1 file changed, 24 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
>> index 163ac909bd06..a6ce172fa928 100644
>> --- a/drivers/ata/ahci.c
>> +++ b/drivers/ata/ahci.c
>> @@ -1411,27 +1411,39 @@ static bool ahci_broken_suspend(struct pci_dev *pdev)
>> static bool ahci_broken_lpm(struct pci_dev *pdev)
>> {
>> static const struct dmi_system_id sysids[] = {
>> - /* Various Lenovo 50 series have LPM issues with older BIOSen */
>> + /* Table contains DMI BIOS dates of BIOSes with broken LPM. */
>> {
>> .matches = {
>> DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
>> DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X250"),
>> },
>> - .driver_data = "20180406", /* 1.31 */
>> + /*
>> + * 1.31, released 20180406, has working LPM, mark any
>> + * DMI BIOS date before that as broken.
>> + */
>
> Note the DMI_BIOS_DATE field is the data the BIOS was build, I would avoid
> the word "released" here since release-notes doucments often contain different
> dates then the actual build date (e.g. see below).
>
>> + .driver_data = "20180405",
>> },
>> {
>> .matches = {
>> DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
>> DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L450"),
>> },
>> - .driver_data = "20180420", /* 1.28 */
>> + /*
>> + * 1.28, released 20180420, has working LPM, mark any
>> + * DMI BIOS date before that as broken.
>> + */
>> + .driver_data = "20180419",
>> },
>> {
>> .matches = {
>> DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
>> DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T450s"),
>> },
>> - .driver_data = "20180315", /* 1.33 */
>> + /*
>> + * 1.33, released 20180315, has working LPM, mark any
>> + * DMI BIOS date before that as broken.
>> + */
>> + .driver_data = "20180314",
>> },
>> {
>> .matches = {
>> @@ -1439,12 +1451,14 @@ static bool ahci_broken_lpm(struct pci_dev *pdev)
>> DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W541"),
>> },
>> /*
>> - * Note date based on release notes, 2.35 has been
>> - * reported to be good, but I've been unable to get
>> - * a hold of the reporter to get the DMI BIOS date.
>> - * TODO: fix this.
>> + * Note: according to release notes, version 2.35 has
>> + * working LPM, but we do not have the DMI BIOS date for
>> + * this version, so the date, 20180310, is based on the
>> + * release notes. Mark any DMI BIOS date before that as
>> + * broken.
>> + * TODO: find with date with DMI BIOS date.
>> */
>> - .driver_data = "20180310", /* 2.35 */
>> + .driver_data = "20180309",
>
> This reminds me that I did eventually got the actual BIOS date from
> the reporter. After some digging I managed to find the email.
>
> The first known working BIOS has a BIOS build date of 04/09/2018 so that
> would become "20180409" before your patch / "20180408" after your patch.
>
> I guess you may want to add a prep patch before the rest of this
> series before this patch to make things a bit cleaner.
Quick followup on this, the original "20180310" was picked to be
one day older then the release-date (which is always after
the build-date) of the known broken 2.34 version.
Here are the release-dates from the release-notes:
https://download.lenovo.com/pccbbs/mobiles/gnuj39us.txt
2.42 (GNUJ39US) 2.42 (GNET94WW) 1.15 (GMHT30WW) 01 2021/06/10
2.41 (GNUJ38US) 2.41 (GNET93WW) 1.15 (GMHT30WW) 01 2020/05/11
2.40 (GNUJ37US) 2.40 (GNET92WW) 1.15 (GMHT30WW) 01 2019/09/12
2.39 (GNUJ36US) 2.39 (GNET91WW) 1.14 (GMHT29WW) 01 2019/06/05
2.38 (GNUJ35US) 2.38 (GNET90WW) 1.14 (GMHT29WW) 01 2019/03/29
2.37 (GNUJ34US) 2.37 (GNET89WW) 1.14 (GMHT29WW) 01 2018/11/30
2.36 (GNUJ33US) 2.36 (GNET88WW) 1.14 (GMHT29WW) 01 2018/06/21
2.35 (GNUJ32US) 2.35 (GNET87WW) 1.14 (GMHT29WW) 01 2018/04/16
2.34 (GNUJ31US) 2.34 (GNET86WW) 1.14 (GMHT29WW) 01 2018/03/09
2.33 (GNUJ30US) 2.33 (GNET85WW) 1.14 (GMHT29WW) 01 2017/12/20
2.32 (GNUJ29US) 2.32 (GNET84WW) 1.14 (GMHT29WW) 01 2017/09/21
2.31 (GNUJ28US) 2.31 (GNET83WW) 1.14 (GMHT29WW) 01 2017/05/11
2.30 (GNUJ27US) 2.30 (GNET82WW) 1.14 (GMHT29WW) 01 2017/04/07
As you can see the known working 2.35 was released at 2018/04/16
so just a few days after its build date of 2018/04/09 .
Regards,
Hans
>> },
>> { } /* terminate list */
>> };
>> @@ -1458,7 +1472,7 @@ static bool ahci_broken_lpm(struct pci_dev *pdev)
>> dmi_get_date(DMI_BIOS_DATE, &year, &month, &date);
>> snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date);
>>
>> - return strcmp(buf, dmi->driver_data) < 0;
>> + return strcmp(buf, dmi->driver_data) <= 0;
>> }
>>
>> static bool ahci_broken_online(struct pci_dev *pdev)
>
next prev parent reply other threads:[~2025-06-09 14:57 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-09 13:45 [PATCH 1/2] ata: ahci: Refactor ahci_broken_lpm() Niklas Cassel
2025-06-09 13:45 ` [PATCH 2/2] ata: ahci: Disallow LPM for ASUSPRO-D840SA motherboard Niklas Cassel
2025-06-09 14:50 ` Hans de Goede
2025-06-09 14:49 ` [PATCH 1/2] ata: ahci: Refactor ahci_broken_lpm() Hans de Goede
2025-06-09 14:57 ` Hans de Goede [this message]
2025-06-09 15:43 ` Niklas Cassel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0dd6308d-304f-4677-be0b-4d3b04e6d8f7@redhat.com \
--to=hdegoede@redhat.com \
--cc=cassel@kernel.org \
--cc=dlemoal@kernel.org \
--cc=kernel-dev@rsta79.anonaddy.me \
--cc=linux-ide@vger.kernel.org \
--cc=mario.limonciello@amd.com \
--cc=mika.westerberg@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).