|
@@ -2718,6 +2718,30 @@ static bool ahci_sb600_enable_64bit(struct pci_dev *pdev)
|
|
|
},
|
|
|
.driver_data = "20071026", /* yyyymmdd */
|
|
|
},
|
|
|
+ /*
|
|
|
+ * All BIOS versions for the MSI K9A2 Platinum (MS-7376)
|
|
|
+ * support 64bit DMA.
|
|
|
+ *
|
|
|
+ * BIOS versions earlier than 1.5 had the Manufacturer DMI
|
|
|
+ * fields as "MICRO-STAR INTERANTIONAL CO.,LTD".
|
|
|
+ * This spelling mistake was fixed in BIOS version 1.5, so
|
|
|
+ * 1.5 and later have the Manufacturer as
|
|
|
+ * "MICRO-STAR INTERNATIONAL CO.,LTD".
|
|
|
+ * So try to match on DMI_BOARD_VENDOR of "MICRO-STAR INTER".
|
|
|
+ *
|
|
|
+ * BIOS versions earlier than 1.9 had a Board Product Name
|
|
|
+ * DMI field of "MS-7376". This was changed to be
|
|
|
+ * "K9A2 Platinum (MS-7376)" in version 1.9, but we can still
|
|
|
+ * match on DMI_BOARD_NAME of "MS-7376".
|
|
|
+ */
|
|
|
+ {
|
|
|
+ .ident = "MSI K9A2 Platinum",
|
|
|
+ .matches = {
|
|
|
+ DMI_MATCH(DMI_BOARD_VENDOR,
|
|
|
+ "MICRO-STAR INTER"),
|
|
|
+ DMI_MATCH(DMI_BOARD_NAME, "MS-7376"),
|
|
|
+ },
|
|
|
+ },
|
|
|
{ }
|
|
|
};
|
|
|
const struct dmi_system_id *match;
|
|
@@ -2729,18 +2753,24 @@ static bool ahci_sb600_enable_64bit(struct pci_dev *pdev)
|
|
|
!match)
|
|
|
return false;
|
|
|
|
|
|
+ if (!match->driver_data)
|
|
|
+ goto enable_64bit;
|
|
|
+
|
|
|
dmi_get_date(DMI_BIOS_DATE, &year, &month, &date);
|
|
|
snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date);
|
|
|
|
|
|
- if (strcmp(buf, match->driver_data) >= 0) {
|
|
|
- dev_printk(KERN_WARNING, &pdev->dev, "%s: enabling 64bit DMA\n",
|
|
|
- match->ident);
|
|
|
- return true;
|
|
|
- } else {
|
|
|
+ if (strcmp(buf, match->driver_data) >= 0)
|
|
|
+ goto enable_64bit;
|
|
|
+ else {
|
|
|
dev_printk(KERN_WARNING, &pdev->dev, "%s: BIOS too old, "
|
|
|
"forcing 32bit DMA, update BIOS\n", match->ident);
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
+enable_64bit:
|
|
|
+ dev_printk(KERN_WARNING, &pdev->dev, "%s: enabling 64bit DMA\n",
|
|
|
+ match->ident);
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
static bool ahci_broken_system_poweroff(struct pci_dev *pdev)
|