Re: pciide(4): identify more VIA IDE/SATA controllers by ISA bus and PCI IDs

Jonathan Gray <[email protected]>
Newsgroups gmane.os.openbsd.bugs
Message-ID <[email protected]>
On Mon, Mar 30, 2026 at 12:20:27AM +0300, Andrius V wrote:
> 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

thanks, committed

> 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;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.