Subject: kern/20710: pciide is broken on SiS745
To: None <>
From: None <>
List: netbsd-bugs
Date: 03/15/2003 19:15:51
>Number:         20710
>Category:       kern
>Synopsis:       pciide is broken SiS745
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Mar 15 02:16:01 PST 2003
>Originator:     IWAMOTO Toshihiro
>Release:        NetBSD 1.6P
System: NetBSD 1.6P NetBSD 1.6P (PEPPER) #128: Sat Mar 15 15:42:12 JST 2003 i386
Architecture: i386
Machine: i386
	Recent change in pciide broke DMA support of SiS745 chipset.

	pciide0 at pci0 dev 2 function 5Silicon Integrated System 745 IDE controller (rev. 0x01)
	pciide0: bus-master DMA support presentpci_mem_find: void region
	, but unused (couldn't map registers)
	pciide0: primary channel wired to compatibility mode

	Boot with a current kernel.
	pa shouldn't be overwritten at least on SiS745 systems,
	because doing this would change pa to the attach arg of
	PCI host bridge, which isn't a IDE device.

	As I'm not sure how this patch affects other chipsets,
	I'm sending this PR instead of just committing.

Index: pciide.c
RCS file: /cvsroot/src/sys/dev/pci/pciide.c,v
retrieving revision 1.182
diff -u -r1.182 pciide.c
--- pciide.c	2003/03/14 22:46:05	1.182
+++ pciide.c	2003/03/15 10:01:15
@@ -3233,7 +3233,7 @@
 	if (pciide_chipen(sc, pa) == 0)
 	printf("Silicon Integrated System ");
-	pci_find_device(pa, sis_hostbr_match);
+	pci_find_device(NULL, sis_hostbr_match);
 	if (sis_hostbr_type_match) {
 		if (sis_hostbr_type_match->type == SIS_TYPE_SOUTH) {
 			pciide_pci_write(sc->sc_pc, sc->sc_tag, SIS_REG_57,
@@ -3247,7 +3247,7 @@
 				sc->sc_wdcdev.UDMA_cap =
 			} else {
-				if (pci_find_device(pa, sis_south_match)) {
+				if (pci_find_device(NULL, sis_south_match)) {
 					sc->sis_type = SIS_TYPE_133OLD;
 					sc->sc_wdcdev.UDMA_cap =