re(4) problem

Pyun YongHyeon pyunyh at gmail.com
Mon Mar 10 03:53:24 PDT 2008


On Mon, Mar 10, 2008 at 09:39:36AM +0100, Daniel Gerzo wrote:
 > Hello Pyun,
 > 
 > Monday, March 10, 2008, 2:55:26 AM, you wrote:
 > 
 > > On Sat, Mar 08, 2008 at 05:07:10PM +0100, Daniel Gerzo wrote:
 >  >> Hello,
 >  >> 
 >  >> Saturday, March 8, 2008, 12:11:03 AM, has been written:
 >  >> 
 >  >> > Hello Pyun,
 >  >> 
 >  >> > Friday, March 7, 2008, 5:38:15 AM, you wrote:
 >  >> 
 >  >> >> I guess your issue is not related with bus_dma fixes but improper
 >  >> >> handling of link state. Try attached patch and let me know how it
 >  >> >> goes.
 >  >> 
 >  >> > The attached patch didn't help, the box is again in the same status.
 >  >> > Can I provide you with some more detailed debugging info, or do you
 >  >> > have some other ideas what could be fixed?
 >  >> 
 >  >> > I could probably manage a remote access to that box, but no remote
 >  >> > console is available, and I don't know exactly how to trigger this
 >  >> > scenario, but I think it depends on the amount of traffic being sent
 >  >> > over the device.
 >  >> 
 >  >> If I won't hear from anybody in next 24 hours, I will have to replace
 >  >> the network device in this box, in order to get it running properly.
 >  >> 
 >  >> However, I don't consider this step as a right solution and I would
 >  >> rather better like to have it fixed in the driver.
 >  >> 
 > 
 > > Yes, I'd like to.
 > > By any chance, does the system have more than 4GB memory?
 > 
 > Well it does have exactly 4GB. Attached, I am sending you the output
 > of dmesg, pciconf and dmidecode utilities.
 > 
 > The machine has been rebooted yesterday, but I haven't replaced (well
 > re(4) is an onboard interface so better term would be disabled) the
 > given NIC, but at the moment, it works fine. I suppose it will stop
 > working in next 24 hours...
 > 

Since you're using MSI, would you try attached patch?
Sorry, I don't have PCIe based hardware and RealTek's datasheet for
PCIe variants is too poor to get useful information.

-- 
Regards,
Pyun YongHyeon
-------------- next part --------------
--- sys/dev/re/if_re.c.orig	2008-03-03 13:15:07.000000000 +0900
+++ sys/dev/re/if_re.c	2008-03-10 19:42:50.000000000 +0900
@@ -991,7 +991,7 @@
 	 * Allocate the parent bus DMA tag appropriate for PCI.
 	 */
 	error = bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0,
-	    BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL,
+	    BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
 	    BUS_SPACE_MAXSIZE_32BIT, 0, BUS_SPACE_MAXSIZE_32BIT, 0,
 	    NULL, NULL, &sc->rl_parent_tag);
 	if (error) {
@@ -1141,6 +1141,7 @@
 	u_int16_t		re_did = 0;
 	int			error = 0, rid, i;
 	int			msic, reg;
+	uint8_t			cfg;
 
 	sc = device_get_softc(dev);
 	sc->rl_dev = dev;
@@ -1182,6 +1183,13 @@
 			} else
 				pci_release_msi(dev);
 		}
+		if (sc->rl_msi != 0) {
+			/* Enable config register write. */
+			CSR_WRITE_1(sc, RL_EECMD, RL_EE_MODE);
+			cfg = CSR_READ_1(sc, RL_CFG2);
+			CSR_WRITE_1(sc, RL_CFG2, cfg | RL_CFG2_MSI);
+			CSR_WRITE_1(sc, RL_EECMD, 0);
+		}
 	}
 
 	/* Allocate interrupt */
@@ -2410,6 +2418,7 @@
 	struct ifnet		*ifp = sc->rl_ifp;
 	struct mii_data		*mii;
 	u_int32_t		rxcfg = 0;
+	uint16_t		cfg;
 	union {
 		uint32_t align_dummy;
 		u_char eaddr[ETHER_ADDR_LEN];
@@ -2429,9 +2438,13 @@
 	 * RX checksum offload. We must configure the C+ register
 	 * before all others.
 	 */
-	CSR_WRITE_2(sc, RL_CPLUS_CMD, RL_CPLUSCMD_RXENB|
-	    RL_CPLUSCMD_TXENB|RL_CPLUSCMD_PCI_MRW|
-	    RL_CPLUSCMD_VLANSTRIP|RL_CPLUSCMD_RXCSUM_ENB);
+	cfg = RL_CPLUSCMD_PCI_MRW;
+	if ((ifp->if_capenable & IFCAP_RXCSUM) != 0)
+		cfg |= RL_CPLUSCMD_RXCSUM_ENB;
+	if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0)
+		cfg |= RL_CPLUSCMD_VLANSTRIP;
+	CSR_WRITE_2(sc, RL_CPLUS_CMD,
+	    cfg | RL_CPLUSCMD_RXENB | RL_CPLUSCMD_TXENB);
 
 	/*
 	 * Init our MAC address.  Even though the chipset
--- sys/pci/if_rlreg.h.orig	2008-03-03 12:41:06.000000000 +0900
+++ sys/pci/if_rlreg.h	2008-03-10 19:36:43.000000000 +0900
@@ -382,6 +382,7 @@
 #define	RL_CFG2_PCI66MHZ	0x01
 #define	RL_CFG2_PCI64BIT	0x08
 #define	RL_CFG2_AUXPWR		0x10
+#define	RL_CFG2_MSI		0x20
 
 /*
  * Config 3 register


More information about the freebsd-current mailing list