KT133A quirks present in FreeBSD [5.3]?

Stefan Haglund stefan.haglund at crystalnorth.com
Sat Mar 26 18:07:42 PST 2005


   I have a private FreeBSD 5.3 file- & webserver sporting an IWill
   KK266-R (KT133A/686B) motherboard, running a Athlon XP 1600+
   (1400MHz). The board has an onboard CMD649 IDE RAID controller, that I
   use as an ordinary IDE controller. This controller handles all four
   disks in the system, other than the boot disk. The NIC is an Intel
   PRO/100 (fxp).
   I have a problem with files uploaded to the server is sometimes
   getting corrupted. I've tried a lot of possible solutions (changing
   PCI slots, BIOS settings, etc) to no avail.
   My question is - is there a quirk fix in FreeBSD for the KT133A
   northbridge, as (AFAIK) there is in Linux?
   Snippet from Linux 2.6.11 - drivers/pci/quirks.c:
   /*
    *    VIA Apollo KT133 needs PCI latency patch
    *    Made according to a windows driver based patch by George E.
   Breese
    *    see PCI Latency Adjust on
   [1]http://www.viahardware.com/download/viatweak.shtm
    *      Also see [2]http://www.au-ja.org/review-kt133a-1-en.phtml for
    *      the info on which Mr Breese based his work.
    *
    *    Updated based on further information from the site and also on
    *    information provided by VIA
    */
   static void __devinit quirk_vialatency(struct pci_dev *dev)
   {
       struct pci_dev *p;
       u8 rev;
       u8 busarb;
       /* Ok we have a potential problem chipset here. Now see if we have
          a buggy southbridge */

       p = pci_get_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686,
   NULL);
       if (p!=NULL) {
           pci_read_config_byte(p, PCI_CLASS_REVISION, &rev);
           /* 0x40 - 0x4f == 686B, 0x10 - 0x2f == 686A; thanks Dan Hollis
   */
           /* Check for buggy part revisions */
           if (rev < 0x40 || rev > 0x42)
               goto exit;
       } else {
           p = pci_get_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8231,
   NULL);
           if (p==NULL)    /* No problem parts */
               goto exit;
           pci_read_config_byte(p, PCI_CLASS_REVISION, &rev);
           /* Check for buggy part revisions */
           if (rev < 0x10 || rev > 0x12)
               goto exit;
       }

       /*
        *    Ok we have the problem. Now set the PCI master grant to
        *    occur every master grant. The apparent bug is that under
   high
        *    PCI load (quite common in Linux of course) you can get data
        *    loss when the CPU is held off the bus for 3 bus master
   requests
        *    This happens to include the IDE controllers....
        *
        *    VIA only apply this fix when an SB Live! is present but
   under
        *    both Linux and Windows this isnt enough, and we have seen
        *    corruption without SB Live! but with things like 3 UDMA IDE
        *    controllers. So we ignore that bit of the VIA
   recommendation..
        */
       pci_read_config_byte(dev, 0x76, &busarb);
       /* Set bit 4 and bi 5 of byte 76 to 0x01
          "Master priority rotation on every PCI master grant */
       busarb &= ~(1<<5);
       busarb |= (1<<4);
       pci_write_config_byte(dev, 0x76, busarb);
       printk(KERN_INFO "Applying VIA southbridge workaround.\n");
   exit:
       pci_dev_put(p);
   }

References

   1. http://www.viahardware.com/download/viatweak.shtm
   2. http://www.au-ja.org/review-kt133a-1-en.phtml


More information about the freebsd-hardware mailing list