mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-20 13:41:30 +00:00
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev: sata_via: Remove redundant device ID for VIA VT8261 drivers/ata/libata: Move dereference after NULL test ahci: Enable SB600 64bit DMA on MSI K9A2 Platinum v2
This commit is contained in:
commit
dc79d2f21a
3 changed files with 41 additions and 9 deletions
|
@ -2718,6 +2718,30 @@ static bool ahci_sb600_enable_64bit(struct pci_dev *pdev)
|
||||||
},
|
},
|
||||||
.driver_data = "20071026", /* yyyymmdd */
|
.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;
|
const struct dmi_system_id *match;
|
||||||
|
@ -2729,18 +2753,24 @@ static bool ahci_sb600_enable_64bit(struct pci_dev *pdev)
|
||||||
!match)
|
!match)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (!match->driver_data)
|
||||||
|
goto enable_64bit;
|
||||||
|
|
||||||
dmi_get_date(DMI_BIOS_DATE, &year, &month, &date);
|
dmi_get_date(DMI_BIOS_DATE, &year, &month, &date);
|
||||||
snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date);
|
snprintf(buf, sizeof(buf), "%04d%02d%02d", year, month, date);
|
||||||
|
|
||||||
if (strcmp(buf, match->driver_data) >= 0) {
|
if (strcmp(buf, match->driver_data) >= 0)
|
||||||
dev_printk(KERN_WARNING, &pdev->dev, "%s: enabling 64bit DMA\n",
|
goto enable_64bit;
|
||||||
match->ident);
|
else {
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
dev_printk(KERN_WARNING, &pdev->dev, "%s: BIOS too old, "
|
dev_printk(KERN_WARNING, &pdev->dev, "%s: BIOS too old, "
|
||||||
"forcing 32bit DMA, update BIOS\n", match->ident);
|
"forcing 32bit DMA, update BIOS\n", match->ident);
|
||||||
return false;
|
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)
|
static bool ahci_broken_system_poweroff(struct pci_dev *pdev)
|
||||||
|
|
|
@ -4919,10 +4919,11 @@ struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev)
|
||||||
*/
|
*/
|
||||||
void ata_qc_free(struct ata_queued_cmd *qc)
|
void ata_qc_free(struct ata_queued_cmd *qc)
|
||||||
{
|
{
|
||||||
struct ata_port *ap = qc->ap;
|
struct ata_port *ap;
|
||||||
unsigned int tag;
|
unsigned int tag;
|
||||||
|
|
||||||
WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */
|
WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */
|
||||||
|
ap = qc->ap;
|
||||||
|
|
||||||
qc->flags = 0;
|
qc->flags = 0;
|
||||||
tag = qc->tag;
|
tag = qc->tag;
|
||||||
|
@ -4934,11 +4935,13 @@ void ata_qc_free(struct ata_queued_cmd *qc)
|
||||||
|
|
||||||
void __ata_qc_complete(struct ata_queued_cmd *qc)
|
void __ata_qc_complete(struct ata_queued_cmd *qc)
|
||||||
{
|
{
|
||||||
struct ata_port *ap = qc->ap;
|
struct ata_port *ap;
|
||||||
struct ata_link *link = qc->dev->link;
|
struct ata_link *link;
|
||||||
|
|
||||||
WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */
|
WARN_ON_ONCE(qc == NULL); /* ata_qc_from_tag _might_ return NULL */
|
||||||
WARN_ON_ONCE(!(qc->flags & ATA_QCFLAG_ACTIVE));
|
WARN_ON_ONCE(!(qc->flags & ATA_QCFLAG_ACTIVE));
|
||||||
|
ap = qc->ap;
|
||||||
|
link = qc->dev->link;
|
||||||
|
|
||||||
if (likely(qc->flags & ATA_QCFLAG_DMAMAP))
|
if (likely(qc->flags & ATA_QCFLAG_DMAMAP))
|
||||||
ata_sg_clean(qc);
|
ata_sg_clean(qc);
|
||||||
|
|
|
@ -93,7 +93,6 @@ static const struct pci_device_id svia_pci_tbl[] = {
|
||||||
{ PCI_VDEVICE(VIA, 0x7372), vt6420 },
|
{ PCI_VDEVICE(VIA, 0x7372), vt6420 },
|
||||||
{ PCI_VDEVICE(VIA, 0x5287), vt8251 }, /* 2 sata chnls (Master/Slave) */
|
{ PCI_VDEVICE(VIA, 0x5287), vt8251 }, /* 2 sata chnls (Master/Slave) */
|
||||||
{ PCI_VDEVICE(VIA, 0x9000), vt8251 },
|
{ PCI_VDEVICE(VIA, 0x9000), vt8251 },
|
||||||
{ PCI_VDEVICE(VIA, 0x9040), vt8251 },
|
|
||||||
|
|
||||||
{ } /* terminate list */
|
{ } /* terminate list */
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue