5.2 ata driver doesn't detect VIA 8237 IDE controller

Mikael Hubsch nisse at hubsch.org
Fri Jan 2 13:43:58 PST 2004

Bought a new Athlon motherboard with a KT400A + VT8237 chipset.
A RELENG_5_2 built at Dec 29, says that atapci0 is a
"GENERIC ATA controller" that only handles UDMA33.
boot -v output can be found at http://hubsch.org/freebsd/boot52_2.txt.

ata-chipset.c have code that should recognize the VT8237 but it seems that
the wrong chipid (0x3149) is used. According to the first url below, that
chipid is for the standalone SATA card VT6420. VIA have released patches
to have Linux recognize the VT8237 that uses chipid 0x3227 (url2 below).
This chipid is also found on my motherboard.


These is yet another problem to have FreeBSD recognize my IDE controller.
The code in ata-chipset.c requires that the ISA bridge have the
same slot id as the VIA IDE controler (0x0571). This is not the case on
my motherboard. As shown in the boot -v output the ide controller is
at slot 15 and the isa bridge is at slot 17.

The patch below works for me, but is not directly committable.
I had to bypass the logic in ata_find_chip() by using -99 as the slot id
(as the bridge slot id is higher than the ide controller's).
I don't know the original reason to have the slot id tests in there ...

Index: ata-chipset.c
RCS file: /d2/FreeBSD-cvs/src/sys/dev/ata/ata-chipset.c,v
retrieving revision
diff -u -r1.48.2.1 ata-chipset.c
--- ata-chipset.c	18 Dec 2003 21:39:38 -0000
+++ ata-chipset.c	2 Jan 2004 21:36:17 -0000
@@ -2124,12 +2124,12 @@
      { ATA_VIA8237,   0x00, VIA133, 0x00,   ATA_UDMA6, "VIA 8237" },
      { 0, 0, 0, 0, 0, 0 }};
     static struct ata_chip_id new_ids[] =
-    {{ ATA_VIA8237,   0x00, 0x00,   0x00,   ATA_SA150, "VIA 8237" },
+    {{ ATA_VIA6420,   0x00, 0x00,   0x00,   ATA_SA150, "VIA 6420" },
      { 0, 0, 0, 0, 0, 0 }};
     char buffer[64];

     if (pci_get_devid(dev) == ATA_VIA82C571) {
-	if (!(idx = ata_find_chip(dev, ids, pci_get_slot(dev))))
+	if (!(idx = ata_find_chip(dev, ids, -99)))
 	    return ENXIO;
     else {
Index: ata-pci.h
RCS file: /d2/FreeBSD-cvs/src/sys/dev/ata/ata-pci.h,v
retrieving revision
diff -u -r1.19.2.1 ata-pci.h
--- ata-pci.h	18 Dec 2003 21:39:38 -0000
+++ ata-pci.h	2 Jan 2004 21:36:17 -0000
@@ -211,6 +211,7 @@
 #define ATA_SIS964_1		0x01801039

 #define ATA_VIA_ID		0x1106
+#define ATA_VIA6420		0x31491106
 #define ATA_VIA82C571		0x05711106
 #define ATA_VIA82C586		0x05861106
 #define ATA_VIA82C596		0x05961106
@@ -220,7 +221,7 @@
 #define ATA_VIA8233A		0x31471106
 #define ATA_VIA8233C		0x31091106
 #define ATA_VIA8235		0x31771106
-#define ATA_VIA8237		0x31491106
+#define ATA_VIA8237		0x32271106
 #define ATA_VIA8361		0x31121106
 #define ATA_VIA8363		0x03051106
 #define ATA_VIA8371		0x03911106

 Mikael Hubsch

More information about the freebsd-current mailing list