pata_hpt37x: fix HPT370 DMA timeouts
The libata driver has copied the code from the IDE driver which caused a post 2.4.18 regression on many HPT370[A] chips -- DMA stopped to work completely, only causing timeouts. Now remove hpt370_bmdma_start() for good... Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
Родитель
79b42babba
Коммит
265b7215ae
|
@ -8,7 +8,7 @@
|
||||||
* Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org>
|
* Copyright (C) 1999-2003 Andre Hedrick <andre@linux-ide.org>
|
||||||
* Portions Copyright (C) 2001 Sun Microsystems, Inc.
|
* Portions Copyright (C) 2001 Sun Microsystems, Inc.
|
||||||
* Portions Copyright (C) 2003 Red Hat Inc
|
* Portions Copyright (C) 2003 Red Hat Inc
|
||||||
* Portions Copyright (C) 2005-2007 MontaVista Software, Inc.
|
* Portions Copyright (C) 2005-2009 MontaVista Software, Inc.
|
||||||
*
|
*
|
||||||
* TODO
|
* TODO
|
||||||
* Look into engine reset on timeout errors. Should not be required.
|
* Look into engine reset on timeout errors. Should not be required.
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
#include <linux/libata.h>
|
#include <linux/libata.h>
|
||||||
|
|
||||||
#define DRV_NAME "pata_hpt37x"
|
#define DRV_NAME "pata_hpt37x"
|
||||||
#define DRV_VERSION "0.6.11"
|
#define DRV_VERSION "0.6.12"
|
||||||
|
|
||||||
struct hpt_clock {
|
struct hpt_clock {
|
||||||
u8 xfer_speed;
|
u8 xfer_speed;
|
||||||
|
@ -444,23 +444,6 @@ static void hpt370_set_dmamode(struct ata_port *ap, struct ata_device *adev)
|
||||||
pci_write_config_dword(pdev, addr1, reg | mode);
|
pci_write_config_dword(pdev, addr1, reg | mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* hpt370_bmdma_start - DMA engine begin
|
|
||||||
* @qc: ATA command
|
|
||||||
*
|
|
||||||
* The 370 and 370A want us to reset the DMA engine each time we
|
|
||||||
* use it. The 372 and later are fine.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void hpt370_bmdma_start(struct ata_queued_cmd *qc)
|
|
||||||
{
|
|
||||||
struct ata_port *ap = qc->ap;
|
|
||||||
struct pci_dev *pdev = to_pci_dev(ap->host->dev);
|
|
||||||
pci_write_config_byte(pdev, 0x50 + 4 * ap->port_no, 0x37);
|
|
||||||
udelay(10);
|
|
||||||
ata_bmdma_start(qc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hpt370_bmdma_end - DMA engine stop
|
* hpt370_bmdma_end - DMA engine stop
|
||||||
* @qc: ATA command
|
* @qc: ATA command
|
||||||
|
@ -598,7 +581,6 @@ static struct scsi_host_template hpt37x_sht = {
|
||||||
static struct ata_port_operations hpt370_port_ops = {
|
static struct ata_port_operations hpt370_port_ops = {
|
||||||
.inherits = &ata_bmdma_port_ops,
|
.inherits = &ata_bmdma_port_ops,
|
||||||
|
|
||||||
.bmdma_start = hpt370_bmdma_start,
|
|
||||||
.bmdma_stop = hpt370_bmdma_stop,
|
.bmdma_stop = hpt370_bmdma_stop,
|
||||||
|
|
||||||
.mode_filter = hpt370_filter,
|
.mode_filter = hpt370_filter,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче