Patchwork Pavilion dv6 AHCI Suspend Patch

login
register
mail settings
Submitter Edward Lee
Date March 13, 2010, 7:09 p.m.
Message ID <1268507391.3585.4.camel@fish-laptop>
Download mbox | patch
Permalink /patch/47729/
State Awaiting Upstream
Headers show

Comments

Edward Lee - March 13, 2010, 7:09 p.m.
Upstream patch from Tejun Heo that fixes LP#529477.  Filed against
Lucid/2.6.32-16 kernel upstream.
Chase Douglas - March 15, 2010, 12:19 a.m.
On Sat, Mar 13, 2010 at 3:09 PM, Edward Lee <tigerfishdaisy@gmail.com> wrote:
> Upstream patch from Tejun Heo that fixes LP#529477.  Filed against
> Lucid/2.6.32-16 kernel upstream.

FYI, I've triaged this bug and will monitor it as the fix is handled
upstream. Details are in the bug report.

-- Chase

Patch

diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c

index 6bd930b..9e122ea 100644

--- a/drivers/ata/ahci.c

+++ b/drivers/ata/ahci.c

@@ -3022,6 +3022,14 @@  static bool ahci_broken_suspend(struct pci_dev *pdev)

 		 * On HP dv[4-6] and HDX18 with earlier BIOSen, link
 		 * to the harddisk doesn't become online after
 		 * resuming from STR.  Warn and fail suspend.
+		 *

+		 * http://bugzilla.kernel.org/show_bug.cgi?id=12276

+		 *

+		 * Use dates instead of versions to match as HP is

+		 * apparently recycling both product and version

+		 * strings.

+		 *

+		 * http://bugzilla.kernel.org/show_bug.cgi?id=15462

 		 */
 		{
 			.ident = "dv4",
@@ -3030,7 +3038,7 @@  static bool ahci_broken_suspend(struct pci_dev *pdev)

 				DMI_MATCH(DMI_PRODUCT_NAME,
 					  "HP Pavilion dv4 Notebook PC"),
 			},
-			.driver_data = "F.30", /* cutoff BIOS version */

+			.driver_data = "20090105",	/* F.30 */

 		},
 		{
 			.ident = "dv5",
@@ -3039,7 +3047,7 @@  static bool ahci_broken_suspend(struct pci_dev *pdev)

 				DMI_MATCH(DMI_PRODUCT_NAME,
 					  "HP Pavilion dv5 Notebook PC"),
 			},
-			.driver_data = "F.16", /* cutoff BIOS version */

+			.driver_data = "20090506",	/* F.16 */

 		},
 		{
 			.ident = "dv6",
@@ -3048,7 +3056,7 @@  static bool ahci_broken_suspend(struct pci_dev *pdev)

 				DMI_MATCH(DMI_PRODUCT_NAME,
 					  "HP Pavilion dv6 Notebook PC"),
 			},
-			.driver_data = "F.21",	/* cutoff BIOS version */

+			.driver_data = "20090423",	/* F.21 */

 		},
 		{
 			.ident = "HDX18",
@@ -3057,7 +3065,7 @@  static bool ahci_broken_suspend(struct pci_dev *pdev)

 				DMI_MATCH(DMI_PRODUCT_NAME,
 					  "HP HDX18 Notebook PC"),
 			},
-			.driver_data = "F.23",	/* cutoff BIOS version */

+			.driver_data = "20090430",	/* F.23 */

 		},
 		/*
 		 * Acer eMachines G725 has the same problem.  BIOS
@@ -3065,6 +3073,8 @@  static bool ahci_broken_suspend(struct pci_dev *pdev)

 		 * work.  Inbetween, there are V1.06, V2.06 and V3.03
 		 * that we don't have much idea about.  For now,
 		 * blacklist anything older than V3.04.
+		 *

+		 * http://bugzilla.kernel.org/show_bug.cgi?id=15104

 		 */
 		{
 			.ident = "G725",
@@ -3072,19 +3082,21 @@  static bool ahci_broken_suspend(struct pci_dev *pdev)

 				DMI_MATCH(DMI_SYS_VENDOR, "eMachines"),
 				DMI_MATCH(DMI_PRODUCT_NAME, "eMachines G725"),
 			},
-			.driver_data = "V3.04",	/* cutoff BIOS version */

+			.driver_data = "20091216",	/* V3.04 */

 		},
 		{ }	/* terminate list */
 	};
 	const struct dmi_system_id *dmi = dmi_first_match(sysids);
-	const char *ver;

+	int year, month, date;

+	char buf[9];

 
 	if (!dmi || pdev->bus->number || pdev->devfn != PCI_DEVFN(0x1f, 2))
 		return false;
 
-	ver = dmi_get_system_info(DMI_BIOS_VERSION);

+	dmi_get_date(DMI_BIOS_DATE, &year, &month, &date);

+	snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date);

 
-	return !ver || strcmp(ver, dmi->driver_data) < 0;

+	return strcmp(buf, dmi->driver_data) < 0;

 }
 
 static bool ahci_broken_online(struct pci_dev *pdev)