Subject: VIA VT8237A IDE Controller weirdness in pcidevs.h and viaide.c
To: None <current-users@netbsd.org>
From: Nino Dehne <ndehne@gmail.com>
List: current-users
Date: 12/22/2006 03:55:09
Hi,

I recently got this new board, ASRock ALiveSATA2-GLAN with VIA K8T890 CF
and VIA VT8237A chips.

4.0_BETA2 and -current say:

viaide0 at pci0 dev 15 function 1
viaide0: VIA Technologies unknown VIA ATA controller
viaide0: bus-master DMA support present
viaide0: primary channel configured to compatibility mode
viaide0: primary channel interrupting at ioapic0 pin 14 (irq 14)

with the effect that hard disks only use DMA 2 instead of UltraDMA. So I
started digging to see if I could add support for it myself. What I found
was this:

# pcictl pci0 dump -d 15 -f 1
[...]
    Vendor Name: VIA Technologies (0x1106)
    Device Name: VT82C586A IDE Controller (0x0571)
[...]

In pcidevs.h:

#define	PCI_PRODUCT_VIATECH_VT82C586A_IDE 0x0571 /* VT82C586A IDE Controller */

It looks like this PCI ID is occupied by a much older device. Anyway, in
viaide.c:

        case PCI_PRODUCT_VIATECH_VT8237:
            aprint_normal("VT8237 ATA133 controller\n");
            sc->sc_wdcdev.sc_atac.atac_udma_cap = 6;
            break;
        default:
unknown:
            aprint_normal("unknown VIA ATA controller\n");
            sc->sc_wdcdev.sc_atac.atac_udma_cap = 0;
        }

However, grepping for PCI_PRODUCT_VIATECH_VT8237 in pcidevs.h gives us:

#define PCI_PRODUCT_VIATECH_VT8237 0x3227 /* VT8237 (Apollo KT600) PCI-ISA Bridge */

I think there is something wrong with the pcidevs.h file. Why would viaide.c check
for an ISA bridge? Could someone please look at this?

Best regards,

ND