From owner-freebsd-current Mon Sep 9 18:25:56 2002 Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 864B437B400 for ; Mon, 9 Sep 2002 18:25:39 -0700 (PDT) Received: from oahu.WURLDLINK.NET (oahu.WURLDLINK.NET [216.235.52.1]) by mx1.FreeBSD.org (Postfix) with ESMTP id E181143E6A for ; Mon, 9 Sep 2002 18:25:37 -0700 (PDT) (envelope-from vince@oahu.WURLDLINK.NET) Received: from localhost (vince@localhost) by oahu.WURLDLINK.NET (8.11.3/8.11.3) with ESMTP id g8A1P8l33879; Mon, 9 Sep 2002 15:25:08 -1000 (HST) (envelope-from vince@oahu.WURLDLINK.NET) Date: Mon, 9 Sep 2002 15:25:08 -1000 (HST) From: Vincent Poy To: Martin Blapp Cc: current@FreeBSD.ORG Subject: Re: Uncommitted dc0 fixes ... In-Reply-To: <20020905210537.Q31964-100000@levais.imp.ch> Message-ID: <20020909130911.U2914-100000@oahu.WURLDLINK.NET> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG On Thu, 5 Sep 2002, Martin Blapp wrote: > > When I tried these patches manually handpatching on 08182002 JP > > SNAPSHOT, it took away the error messages like you had mentioned except > > I can ping everything except for the gateway. Also, no other protocols > > would work at all so it seems like something else broke. I took out > > the following and it still made no difference. > > http://www.FreeBSD.org/cgi/query-pr.cgi?pr=misc/32699 > > Can you please test each patch and see which one is responsable ? > > Martin Hi Martin and everyone, I finally updated to the latest -CURRENT last night after pulling the HD from my IBM ThinkPad 770Z and putting it in a loaner Dell Inspiron 8200 P4m-1.7Ghz as I couldn't get the fans to turn on and it keeps shutting off due to overheating. I have both a Siemens/Efficient Networks SpeedStream SS1012 and a SMC Networks SMC8036TX which seems to be identical cards physically as it has the same design and same label printing information layout. As far as testing each patch, here goes: 1) dc driver uses wrong case to read MAC from eeprom. http://www.FreeBSD.org/cgi/query-pr.cgi?pr=kern/35482 This one seems to break data sending/receiving as the only thing that works is pinging and that's only on the alias/secondary IP and not the primary IP network which is completely unpingable. * $FreeBSD: src/sys/pci/if_dcreg.h,v 1.25 2002/05/06 10:55:42 iwasaki Exp *** /usr/temp/if_dcreg.h Mon May 6 03:55:42 2002 --- /usr/src/sys/pci/if_dcreg.h Mon Sep 9 15:14:08 2002 *************** *** 78,83 **** --- 78,84 ---- #define DC_TYPE_PNIC 0xA /* 82c168/82c169 PNIC I */ #define DC_TYPE_XIRCOM 0xB /* Xircom X3201 */ #define DC_TYPE_CONEXANT 0xC /* Conexant LANfinity RS7112 */ + #define DC_TYPE_EN5152B 0xD /* Accton EN5251B. Clone of ADMtek 983B? */ #define DC_IS_MACRONIX(x) \ (x->dc_type == DC_TYPE_98713 || \ *************** *** 86,91 **** --- 87,93 ---- #define DC_IS_ADMTEK(x) \ (x->dc_type == DC_TYPE_AL981 || \ + x->dc_type == DC_TYPE_EN5152B || \ x->dc_type == DC_TYPE_AN985) #define DC_IS_INTEL(x) (x->dc_type == DC_TYPE_21143) *************** *** 890,895 **** --- 892,904 ---- */ #define DC_DEVICEID_EN1217 0x1217 #define DC_DEVICEID_EN2242 0x1216 + #define DC_DEVICEID_EN5251B 0x1216 + + /* + * The Accton EN5251B is sold as the Siemens Speedstream SS1020. + * The EN5251B seems to be a clone of the ADMtek 983 or 983B + */ + #define DC_REVISION_EN5251B 0x11 /* ASSUMING that EN2242's revision differs */ /* * Xircom vendor ID * $FreeBSD: src/sys/pci/if_dc.c,v 1.77 2002/09/04 18:14:17 markm Exp $ *** /usr/temp/if_dc.c Wed Sep 4 11:14:17 2002 --- /usr/src/sys/pci/if_dc.c Mon Sep 9 15:22:09 2002 *************** *** 186,191 **** --- 186,193 ---- "Accton EN1217 10/100BaseTX" }, { DC_VENDORID_ACCTON, DC_DEVICEID_EN2242, "Accton EN2242 MiniPCI 10/100BaseTX" }, + { DC_VENDORID_ACCTON, DC_DEVICEID_EN5251B, + "Siemens SpeedStream SS1020 10/100BaseTX" }, { DC_VENDORID_XIRCOM, DC_DEVICEID_X3201, "Xircom X3201 10/100BaseTX" }, { DC_VENDORID_ABOCOM, DC_DEVICEID_FE2500, *************** *** 1579,1584 **** --- 1581,1589 ---- if (t->dc_did == DC_DEVICEID_DM9102 && rev >= DC_REVISION_DM9102A) t++; + if (t->dc_did == DC_DEVICEID_EN2242 && + rev >= DC_REVISION_EN5251B) + t++; return(t); } t++; *************** *** 1917,1925 **** sc->dc_flags |= DC_TX_ADMTEK_WAR; sc->dc_pmode = DC_PMODE_MII; break; case DC_DEVICEID_AN985: case DC_DEVICEID_FE2500: - case DC_DEVICEID_EN2242: sc->dc_type = DC_TYPE_AN985; sc->dc_flags |= DC_TX_USE_TX_INTR; sc->dc_flags |= DC_TX_ADMTEK_WAR; --- 1922,1939 ---- sc->dc_flags |= DC_TX_ADMTEK_WAR; sc->dc_pmode = DC_PMODE_MII; break; + case DC_DEVICEID_EN2242: /* and DC_DEVICEID_EN5251B: */ + if (revision < DC_REVISION_EN5251B) { + sc->dc_type = DC_TYPE_AN985; + } else { + sc->dc_type = DC_TYPE_EN5152B; + } + sc->dc_flags |= DC_TX_USE_TX_INTR; + sc->dc_flags |= DC_TX_ADMTEK_WAR; + sc->dc_pmode = DC_PMODE_MII; + break; case DC_DEVICEID_AN985: case DC_DEVICEID_FE2500: sc->dc_type = DC_TYPE_AN985; sc->dc_flags |= DC_TX_USE_TX_INTR; sc->dc_flags |= DC_TX_ADMTEK_WAR; *************** *** 2056,2061 **** --- 2070,2076 ---- break; case DC_TYPE_AL981: case DC_TYPE_AN985: + case DC_TYPE_EN5152B: dc_read_eeprom(sc, (caddr_t)&eaddr, DC_AL_EE_NODEADDR, 3, 0); break; case DC_TYPE_CONEXANT: dmesg output is as follows: cardbus1: Expecting link target, got 0x59 cardbus1: Resource not specified in CIS: id=10, size=100 cardbus1: Resource not specified in CIS: id=14, size=400 dc0: port 0x1000-0x10ff mem 0xf4002000 -0xf40023ff irq 11 at device 0.0 on cardbus1 dc0: Ethernet address: 85:84:33:a0:00:80 miibus1: on dc0 ukphy1: on miibus1 ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto /usr/src/sys/vm/uma_core.c:1332: could sleep with "dc0" locked from /usr/src/sys /pci/if_dc.c:623 /usr/src/sys/vm/uma_core.c:1332: could sleep with "dc0" locked from /usr/src/sys /pci/if_dc.c:623 /usr/src/sys/vm/uma_core.c:1332: could sleep with "dc0" locked from /usr/src/sys /pci/if_dc.c:623 versus before the patch as follows: cardbus1: Expecting link target, got 0x59 cardbus1: Resource not specified in CIS: id=10, size=100 cardbus1: Resource not specified in CIS: id=14, size=400 dc0: port 0x1000-0x10ff mem 0xf4002000-0xf4 0023ff irq 11 at device 0.0 on cardbus1 dc0: Ethernet address: 00:04:e2:2e:c3:4e miibus1: on dc0 ukphy1: on miibus1 ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto /usr/src/sys/vm/uma_core.c:1332: could sleep with "dc0" locked from /usr/src/sys /pci/if_dc.c:621 /usr/src/sys/vm/uma_core.c:1332: could sleep with "dc0" locked from /usr/src/sys /pci/if_dc.c:621 /usr/src/sys/vm/uma_core.c:1332: could sleep with "dc0" locked from /usr/src/sys /pci/if_dc.c:621 Seems to identify everything as a Siemens SpeedStream SS1020. 2) Tulip ether card EN2242 (if_dc.c) use wrong multicast table This one works as far as I can tell. I don't have a IPv6 network to test. http://www.FreeBSD.org/cgi/query-pr.cgi?pr=misc/32699 * $FreeBSD: src/sys/pci/if_dc.c,v 1.77 2002/09/04 18:14:17 markm Exp $ *** /usr/temp/if_dc.c Wed Sep 4 11:14:17 2002 --- /usr/src/sys/pci/if_dc.c Mon Sep 9 16:28:55 2002 *************** *** 1168,1174 **** TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { if (ifma->ifma_addr->sa_family != AF_LINK) continue; ! h = dc_crc_be(LLADDR((struct sockaddr_dl *)ifma->ifma_addr)); if (h < 32) hashes[0] |= (1 << h); else --- 1168,1178 ---- TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { if (ifma->ifma_addr->sa_family != AF_LINK) continue; ! if (DC_IS_CENTAUR(sc)) ! h = dc_crc_le(sc, ! LLADDR((struct sockaddr_dl *)ifma->ifma_addr)); ! else ! h = dc_crc_be(LLADDR((struct sockaddr_dl *)ifma->ifma_addr)); if (h < 32) hashes[0] |= (1 << h); else *************** *** 1921,1926 **** --- 1925,1931 ---- case DC_DEVICEID_FE2500: case DC_DEVICEID_EN2242: sc->dc_type = DC_TYPE_AN985; + sc->dc_flags |= DC_64BIT_HASH; sc->dc_flags |= DC_TX_USE_TX_INTR; sc->dc_flags |= DC_TX_ADMTEK_WAR; sc->dc_pmode = DC_PMODE_MII; 3) ADMtek AN98x, enable automatically TX underrun recovery This works and works combined with 2 above. http://www.FreeBSD.org/cgi/query-pr.cgi?pr=34236 * $FreeBSD: src/sys/pci/if_dcreg.h,v 1.25 2002/05/06 10:55:42 iwasaki Exp $ *** /usr/temp/if_dcreg.h Mon May 6 03:55:42 2002 --- /usr/src/sys/pci/if_dcreg.h Mon Sep 9 17:08:14 2002 *************** *** 526,531 **** --- 526,532 ---- * ADMtek specific registers and constants for the AL981 and AN985. * The AN985 doesn't use the magic PHY registers. */ + #define DC_AL_CR 0x88 /* Command register */ #define DC_AL_PAR0 0xA4 /* station address */ #define DC_AL_PAR1 0xA8 /* station address */ #define DC_AL_MAR0 0xAC /* multicast hash filter */ *************** *** 540,545 **** --- 541,547 ---- #define DC_ADMTEK_PHYADDR 0x1 #define DC_AL_EE_NODEADDR 4 + #define DC_AL_CR_ATUR 0x00000001 /* Enable automatically TX underrun recovery */ /* End of ADMtek specific registers */ /* * $FreeBSD: src/sys/pci/if_dc.c,v 1.77 2002/09/04 18:14:17 markm Exp $ *** /usr/temp/if_dc.c Wed Sep 4 11:14:17 2002 --- /usr/src/sys/pci/if_dc.c Mon Sep 9 17:11:42 2002 *************** *** 1482,1487 **** --- 1486,1494 ---- } } + if (DC_IS_ADMTEK(sc)) + DC_SETBIT(sc, DC_AL_CR, DC_AL_CR_ATUR); + if ((media & IFM_GMASK) == IFM_FDX) { DC_SETBIT(sc, DC_NETCFG, DC_NETCFG_FULLDUPLEX); if (sc->dc_pmode == DC_PMODE_SYM && DC_IS_PNIC(sc)) 4) Martin's patch... This one works standalone and with 2 and 3 above. It seems to have increase ftp transfer rates too from 8600Kbytes/sec to 10577Kbytes/sec. Ofcourse, for some odd reason, if the ftp was done from a Windows XP Pro machine, it's only 6722KBytes/sec. * $FreeBSD: src/sys/pci/if_dc.c,v 1.77 2002/09/04 18:14:17 markm Exp $ *** /usr/temp/if_dc.c Wed Sep 4 11:14:17 2002 --- /usr/src/sys/pci/if_dc.c Mon Sep 9 17:55:22 2002 *************** *** 1363,1379 **** restart = 1; DC_CLRBIT(sc, DC_NETCFG, (DC_NETCFG_TX_ON|DC_NETCFG_RX_ON)); ! for (i = 0; i < DC_TIMEOUT; i++) { ! isr = CSR_READ_4(sc, DC_ISR); ! if (isr & DC_ISR_TX_IDLE && ! (isr & DC_ISR_RX_STATE) == DC_RXSTATE_STOPPED) ! break; ! DELAY(10); } - - if (i == DC_TIMEOUT) - printf("dc%d: failed to force tx and " - "rx to idle state\n", sc->dc_unit); } if (IFM_SUBTYPE(media) == IFM_100_TX) { --- 1367,1386 ---- restart = 1; DC_CLRBIT(sc, DC_NETCFG, (DC_NETCFG_TX_ON|DC_NETCFG_RX_ON)); ! if (DC_IS_INTEL(sc)) { ! for (i = 0; i < DC_TIMEOUT; i++) { ! isr = CSR_READ_4(sc, DC_ISR); ! if (isr & DC_ISR_TX_IDLE && ! (isr & DC_ISR_RX_STATE) ! == DC_RXSTATE_STOPPED) ! break; ! DELAY(10); ! } ! if (i == DC_TIMEOUT) { ! printf("dc%d: failed to force tx and " ! "rx to idle state\n", sc->dc_unit); ! } } } if (IFM_SUBTYPE(media) == IFM_100_TX) { Cheers, Vince - vince@WURLDLINK.NET - Vice President ________ __ ____ Unix Networking Operations - FreeBSD-Real Unix for Free / / / / | / |[__ ] WurldLink Corporation / / / / | / | __] ] San Francisco - Honolulu - Hong Kong / / / / / |/ / | __] ] HongKong Stars/Gravis UltraSound Mailing Lists Admin /_/_/_/_/|___/|_|[____] Almighty1@IRC - oahu.DAL.NET Hawaii's DALnet IRC Network Server Admin To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message