svn commit: r200655 - head/sys/dev/ata/chipsets
Alexander Motin
mav at FreeBSD.org
Thu Dec 17 23:42:10 UTC 2009
Author: mav
Date: Thu Dec 17 23:42:09 2009
New Revision: 200655
URL: http://svn.freebsd.org/changeset/base/200655
Log:
Serverworks OSB4 has no 0x4a (piomode) register, do not touch it.
Also OSB4 has some problems with UDMA transfers, limit it to WDMA2.
Modified:
head/sys/dev/ata/chipsets/ata-serverworks.c
Modified: head/sys/dev/ata/chipsets/ata-serverworks.c
==============================================================================
--- head/sys/dev/ata/chipsets/ata-serverworks.c Thu Dec 17 23:11:16 2009 (r200654)
+++ head/sys/dev/ata/chipsets/ata-serverworks.c Thu Dec 17 23:42:09 2009 (r200655)
@@ -80,7 +80,7 @@ ata_serverworks_probe(device_t dev)
{
struct ata_pci_controller *ctlr = device_get_softc(dev);
static struct ata_chip_id ids[] =
- {{ ATA_ROSB4, 0x00, SWKS_33, 0, ATA_UDMA2, "ROSB4" },
+ {{ ATA_ROSB4, 0x00, SWKS_33, 0, ATA_WDMA2, "ROSB4" },
{ ATA_CSB5, 0x92, SWKS_100, 0, ATA_UDMA5, "CSB5" },
{ ATA_CSB5, 0x00, SWKS_66, 0, ATA_UDMA4, "CSB5" },
{ ATA_CSB6, 0x00, SWKS_100, 0, ATA_UDMA5, "CSB6" },
@@ -388,10 +388,12 @@ ata_serverworks_setmode(device_t dev, in
piomode = mode;
}
/* Set PIO mode and timings, calculated above. */
- pci_write_config(parent, 0x4a,
+ if (ctlr->chip->cfg1 != SWKS_33) {
+ pci_write_config(parent, 0x4a,
(pci_read_config(parent, 0x4a, 2) &
~(0xf << (devno << 2))) |
((piomode - ATA_PIO0) << (devno<<2)),2);
+ }
pci_write_config(parent, 0x40,
(pci_read_config(parent, 0x40, 4) &
~(0xff << offset)) |
More information about the svn-src-head
mailing list