On Sun, Mar 29, 2026 at 9:04 AM Jonathan Gray <[email protected]> wrote:
>
> The isa bridge to udma mapping part seems fine.
>
> The matching of the RAID id I'd leave out, as no other VIA RAID
> ids are matched.
OK, I removed VT8237S RAID mode ID from the patch.
>
> Did you test VT8251/VT8261 on OpenBSD? The Linux code suggests those
> need different channel handling.
>
Yes, I have tested VT8251 on OpenBSD.
At least in a way, that driver attaches drives in all ports
successfully, sets correct speed, and drives are accessible.
I am aware of slave port handling in Linux (and I think FreeBSD too),
but I am not fully aware how relevant it is to pciide driver and what
behaviour it can trigger.
I have tested VT8261 with SATA disks only. My current motherboard
doesn't have IDE ports (I had one in the past, but it is currently
broken unfortunately).
However, VT8261 IDE controller shares same 0x0571 as previous
southbridges, so I don't expect anything unusual.
The only thing I have noticed on VT8251 in NetBSD, not to write to a
certain registers to SATA controllers which are used to setup UDMA in
PATA case, but OpenBSD uses sata_setup_channel(), thus this problem
wasn't present here.
Regards,
Andrius V
diff --git a/sys/dev/pci/pcidevs b/sys/dev/pci/pcidevs
index d4ee23d6ca3..cb8a37cfb6b 100644
--- a/sys/dev/pci/pcidevs
+++ b/sys/dev/pci/pcidevs
@@ -9950,6 +9950,7 @@ product VIATECH VT8653_PCI 0x3101 VT8653 PCI
product VIATECH VT6202 0x3104 VT6202 USB
product VIATECH VT6105 0x3106 VT6105 RhineIII
product VIATECH UNICHROME 0x3108 S3 Unichrome PRO IGP
+product VIATECH VT8233C_ISA 0x3109 VT8233C ISA
product VIATECH VT8361_PCI 0x3112 VT8361 PCI
product VIATECH VT8101_PPB 0x3113 VT8101 VPX-64
product VIATECH VT8375 0x3116 VT8375 PCI
@@ -9999,6 +10000,7 @@ product VIATECH CHROME9_HC 0x3371 Chrome9 HC IGP
product VIATECH VT8237S_ISA 0x3372 VT8237S ISA
product VIATECH VT8237A_PPB_1 0x337a VT8237A
product VIATECH VT8237A_PPB_2 0x337b VT8237A
+product VIATECH VT8261_ISA 0x3402 VT8261 ISA
product VIATECH VX900_DRAM 0x3410 VX900 DRAM
product VIATECH VL80X_XHCI 0x3432 VL80x xHCI
product VIATECH VL805_XHCI 0x3483 VL805 xHCI
@@ -10018,6 +10020,7 @@ product VIATECH VX800_4 0x4353 VX800 Host
product VIATECH P4M900_4 0x4364 P4M900 Host
product VIATECH VX900_1 0x4410 VX900 Host
product VIATECH K8T890_IOAPIC 0x5238 K8T890 IOAPIC
+product VIATECH VT8251_SATA_2 0x5287 VT8251 SATA
product VIATECH PT894_IOAPIC 0x5308 PT894 IOAPIC
product VIATECH CX700_IDE 0x5324 CX700 IDE
product VIATECH P4M890_IOAPIC 0x5327 P4M890 IOAPIC
@@ -10066,6 +10069,7 @@ product VIATECH VT82C597AGP 0x8597 VT82C597 AGP
product VIATECH VT82C598AGP 0x8598 VT82C598 AGP
product VIATECH VT82C601 0x8601 VT82C601 AGP
product VIATECH VT8605_AGP 0x8605 VT8605 AGP
+product VIATECH VT8261_SATA 0x9000 VT8261 SATA
product VIATECH VX900_IDE 0x9001 VX900 IDE
product VIATECH HDA_1 0x9170 HD Audio
product VIATECH VX800_SDMMC 0x9530 VX800 SD/MMC
diff --git a/sys/dev/pci/pciide.c b/sys/dev/pci/pciide.c
index fc925a8f7cb..2b5925aacf0 100644
--- a/sys/dev/pci/pciide.c
+++ b/sys/dev/pci/pciide.c
@@ -811,6 +811,14 @@ const struct pciide_product_desc pciide_via_products[] = {
{ PCI_PRODUCT_VIATECH_VT8251_SATA, /* VIA VT8251 SATA */
0,
sata_chip_map
+ },
+ { PCI_PRODUCT_VIATECH_VT8251_SATA_2, /* VIA VT8251(CE) SATA */
+ 0,
+ sata_chip_map
+ },
+ { PCI_PRODUCT_VIATECH_VT8261_SATA, /* VIA VT8261 SATA */
+ 0,
+ sata_chip_map
}
};
@@ -3511,12 +3519,17 @@ apollo_chip_map(struct pciide_softc *sc, struct pci_attach_args *pa)
break;
case PCI_PRODUCT_VIATECH_VT8231_ISA:
case PCI_PRODUCT_VIATECH_VT8233_ISA:
+ case PCI_PRODUCT_VIATECH_VT8233C_ISA:
printf(": ATA100");
sc->sc_wdcdev.UDMA_cap = 5;
break;
case PCI_PRODUCT_VIATECH_VT8233A_ISA:
case PCI_PRODUCT_VIATECH_VT8235_ISA:
case PCI_PRODUCT_VIATECH_VT8237_ISA:
+ case PCI_PRODUCT_VIATECH_VT8237A_ISA:
+ case PCI_PRODUCT_VIATECH_VT8237S_ISA:
+ case PCI_PRODUCT_VIATECH_VT8251_ISA:
+ case PCI_PRODUCT_VIATECH_VT8261_ISA:
printf(": ATA133");
sc->sc_wdcdev.UDMA_cap = 6;
break;