Re: <SOLEVD> Rocketport uPCI ioaddr mapping failed under FreeBSD-5.3&CURRENT

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Thu, 24 Mar 2005 10:45:42 -0500
On Thursday 24 March 2005 05:08 am, wsk wrote:
> >Can you try this patch below and verify it works?  If so, I'd like to
> > commit it.  Thanks!
> >
> >Index: rp_pci.c
> >===================================================================
> >RCS file: /usr/cvs/src/sys/dev/rp/rp_pci.c,v
> >retrieving revision 1.9
> >diff -u -r1.9 rp_pci.c
> >--- rp_pci.c	21 Jun 2004 13:02:25 -0000	1.9
> >+++ rp_pci.c	23 Mar 2005 19:37:43 -0000
> >_at__at_ -67,6 +67,7 _at__at_
> > #define RP_DEVICE_ID_4J		0x0007
> > #define RP_DEVICE_ID_6M		0x000C
> > #define RP_DEVICE_ID_4M		0x000D
> >+#define RP_DEVICE_ID_UPCI_8O	0x0805
> >
> > /************************************************************************
> >** MUDBAC remapped for PCI
> >_at__at_ -177,7 +178,14 _at__at_
> >
> > 	ctlp->bus_ctlp = NULL;
> >
> >-	ctlp->io_rid[0] = 0x10;
> >+	switch (pci_get_devid(dev)) {
> >+	case RP_DEVICE_ID_UPCI_8O:
> >+		ctlp->io_rid[0] = PCIR_BAR(2);
> >+		break;
> >+	default:
> >+		ctlp->io_rid[0] = PCIR_BAR(0);
> >+		break;
> >+	}
> > 	ctlp->io[0] = bus_alloc_resource_any(dev, SYS_RES_IOPORT,
> > 		&ctlp->io_rid[0], RF_ACTIVE);
> > 	if(ctlp->io[0] == NULL) {
>
>     I've been tested and works failled after patched your diff! here is
> my boot msgs:
> rp0: <RocketPort PCI> port 0xdd80-0xddff,0xde00-0xdeff mem
> 0xfcedff80-0xfcedffff irq 19 at device 10.0 on pci2
> rp0: failed: rid 0x10 is memory, requested 4
> rp0: ioaddr mapping failed for RocketPort(PCI).
> device_attach: rp0 attach returned 6

Oh, I see the bug.  Can you try this patch instead?  It fixes the bug and 
simplifies a few other places in the code:

Index: rp_pci.c
===================================================================
RCS file: /usr/cvs/src/sys/dev/rp/rp_pci.c,v
retrieving revision 1.10
diff -u -r1.10 rp_pci.c
--- rp_pci.c	1 Mar 2005 08:58:04 -0000	1.10
+++ rp_pci.c	24 Mar 2005 15:44:38 -0000
_at__at_ -67,6 +67,7 _at__at_
 #define RP_DEVICE_ID_4J		0x0007
 #define RP_DEVICE_ID_6M		0x000C
 #define RP_DEVICE_ID_4M		0x000D
+#define RP_DEVICE_ID_UPCI_8O	0x0805
 
 /**************************************************************************
   MUDBAC remapped for PCI
_at__at_ -129,7 +130,7 _at__at_
 	char *s;
 
 	s = NULL;
-	if ((pci_get_devid(dev) & 0xffff) == RP_VENDOR_ID)
+	if (pci_get_vendor(dev) == RP_VENDOR_ID)
 		s = "RocketPort PCI";
 
 	if (s != NULL) {
_at__at_ -177,7 +178,14 _at__at_
 
 	ctlp->bus_ctlp = NULL;
 
-	ctlp->io_rid[0] = 0x10;
+	switch (pci_get_device(dev)) {
+	case RP_DEVICE_ID_UPCI_8O:
+		ctlp->io_rid[0] = PCIR_BAR(2);
+		break;
+	default:
+		ctlp->io_rid[0] = PCIR_BAR(0);
+		break;
+	}
 	ctlp->io[0] = bus_alloc_resource_any(dev, SYS_RES_IOPORT,
 		&ctlp->io_rid[0], RF_ACTIVE);
 	if(ctlp->io[0] == NULL) {
_at__at_ -188,7 +196,7 _at__at_
 
 	num_aiops = sPCIInitController(ctlp,
 				       MAX_AIOPS_PER_BOARD, 0,
-				       FREQ_DIS, 0, (pci_get_devid(dev) >> 16) & 0xffff);
+				       FREQ_DIS, 0, pci_get_device(dev));
 
 	num_ports = 0;
 	for(aiop=0; aiop < num_aiops; aiop++) {


-- 
John Baldwin <jhb_at_FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org
Received on Thu Mar 24 2005 - 14:45:41 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:30 UTC