Well, it has been busy around here..

Anyhow, I think this is an overly pessimistic change, I've not seen nor heard about problems with the 63K transfer size on anything but the HT1000 based machines. It seems that all serverworks chips are bugridden in some way or another, just avoid :) On the MIO change, the original docs I got from serverworks states that PCI id to not support MIO mode and be for compat/legacy setups, so this might produce some hickups if thats true. However their docs are often as flawed as their silicon so, guess this is up to the board/BIOS producer to decide.

-Søren

On 17Oct, 2008, at 18:03 , John Baldwin wrote:

Author: jhb
Date: Fri Oct 17 16:03:37 2008
New Revision: 183981
URL: http://svn.freebsd.org/changeset/base/183981

Log:
- For chipsets that can't do 64k transfers, fall back to 32k transfers (still a power of 2) rather than 63k transfers. Even with 63k transfers some machines (such as Dell SC1435's) were experiencing chronic data
   corruption.
- Use the MIO method to talk to the Serverworks HT1000_S1 SATA controller
   like all the other SATA controllers rather than the compat PATA
   method.  This lets the controller see all 4 SATA ports and also
   matches the behavior of the Linux driver.

 Silence from:  sos
 MFC after:     3 days

Modified:
 head/sys/dev/ata/chipsets/ata-cyrix.c
 head/sys/dev/ata/chipsets/ata-marvell.c
 head/sys/dev/ata/chipsets/ata-national.c
 head/sys/dev/ata/chipsets/ata-serverworks.c

Modified: head/sys/dev/ata/chipsets/ata-cyrix.c
= = = = = = = = ====================================================================== --- head/sys/dev/ata/chipsets/ata-cyrix.c Fri Oct 17 15:11:12 2008 (r183980) +++ head/sys/dev/ata/chipsets/ata-cyrix.c Fri Oct 17 16:03:37 2008 (r183981)
@@ -109,7 +109,7 @@ ata_cyrix_setmode(device_t dev, int mode
        /* dont try to set the mode if we dont have the resource */
        if (ctlr->r_res1) {
            ch->dma.alignment = 16;
-           ch->dma.max_iosize = 126 * DEV_BSIZE;
+           ch->dma.max_iosize = 64 * DEV_BSIZE;

            if (mode >= ATA_UDMA0) {
                ATA_OUTL(ch->r_io[ATA_BMCMD_PORT].res,

Modified: head/sys/dev/ata/chipsets/ata-marvell.c
= = = = = = = = ====================================================================== --- head/sys/dev/ata/chipsets/ata-marvell.c Fri Oct 17 15:11:12 2008 (r183980) +++ head/sys/dev/ata/chipsets/ata-marvell.c Fri Oct 17 16:03:37 2008 (r183981)
@@ -536,7 +536,7 @@ ata_marvell_edma_dmainit(device_t dev)
        ch->dma.max_address = BUS_SPACE_MAXADDR;

    /* chip does not reliably do 64K DMA transfers */
-    ch->dma.max_iosize = 126 * DEV_BSIZE;
+    ch->dma.max_iosize = 64 * DEV_BSIZE;
}

ATA_DECLARE_DRIVER(ata_marvell);

Modified: head/sys/dev/ata/chipsets/ata-national.c
= = = = = = = = ====================================================================== --- head/sys/dev/ata/chipsets/ata-national.c Fri Oct 17 15:11:12 2008 (r183980) +++ head/sys/dev/ata/chipsets/ata-national.c Fri Oct 17 16:03:37 2008 (r183981)
@@ -101,7 +101,7 @@ ata_national_setmode(device_t dev, int m
    int error;

    ch->dma.alignment = 16;
-    ch->dma.max_iosize = 126 * DEV_BSIZE;
+    ch->dma.max_iosize = 64 * DEV_BSIZE;

    mode = ata_limit_mode(dev, mode, ATA_UDMA2);


Modified: head/sys/dev/ata/chipsets/ata-serverworks.c
= = = = = = = = ====================================================================== --- head/sys/dev/ata/chipsets/ata-serverworks.c Fri Oct 17 15:11:12 2008 (r183980) +++ head/sys/dev/ata/chipsets/ata-serverworks.c Fri Oct 17 16:03:37 2008 (r183981)
@@ -79,7 +79,7 @@ ata_serverworks_probe(device_t dev)
     { ATA_CSB6,      0x00, SWKS_100, 0, ATA_UDMA5, "CSB6" },
     { ATA_CSB6_1,    0x00, SWKS_66,  0, ATA_UDMA4, "CSB6" },
     { ATA_HT1000,    0x00, SWKS_100, 0, ATA_UDMA5, "HT1000" },
-     { ATA_HT1000_S1, 0x00, SWKS_100, 4, ATA_SA150, "HT1000" },
+     { ATA_HT1000_S1, 0x00, SWKS_MIO, 4, ATA_SA150, "HT1000" },
     { ATA_HT1000_S2, 0x00, SWKS_MIO, 4, ATA_SA150, "HT1000" },
     { ATA_K2,        0x00, SWKS_MIO, 4, ATA_SA150, "K2" },
     { ATA_FRODO4,    0x00, SWKS_MIO, 4, ATA_SA150, "Frodo4" },
@@ -184,7 +184,7 @@ ata_serverworks_allocate(device_t dev)
    ch->hw.tf_write = ata_serverworks_tf_write;

    /* chip does not reliably do 64K DMA transfers */
-    ch->dma.max_iosize = 126 * DEV_BSIZE;
+    ch->dma.max_iosize = 64 * DEV_BSIZE;

    return 0;
}


-Søren






_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to