Realtek eth isn't detected in Intel DG31PR mobo

Pyun YongHyeon pyunyh at gmail.com
Tue Oct 9 20:35:06 PDT 2007


On Wed, Oct 10, 2007 at 04:46:50AM +0300, Abdullah Ibn Hamad Al-Marri wrote:
 > Hello Guys,
 > 
 > Maybe this is in HEAD? I'm not sure.
 > 
 > intel says "Gigabit (10/100/1000 Mbits/sec) LAN subsystem using the
 > Realtek* RTL8111-GR Gigabit Ethernet Controller"
 > 
 > Copyright (c) 1992-2007 The FreeBSD Project.
 > Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
 >         The Regents of the University of California. All rights reserved.
 > FreeBSD is a registered trademark of The FreeBSD Foundation.
 > FreeBSD 6.2-STABLE #0: Sat Sep  8 03:21:29 AST 2007
 >     root at web:/usr/obj/usr/src/sys/WEB
 > Timecounter "i8254" frequency 1193182 Hz quality 0
 > CPU: Intel(R) Core(TM)2 Duo CPU     E6750  @ 2.66GHz (2666.62-MHz 686-class CPU)
 >   Origin = "GenuineIntel"  Id = 0x6fb  Stepping = 11
 >   Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
 >   Features2=0xe3fd<SSE3,RSVD2,MON,DS_CPL,VMX,<b6>,EST,TM2,<b9>,CX16,<b14>,<b15>>
 >   AMD Features=0x20100000<NX,LM>
 >   AMD Features2=0x1<LAHF>
 >   Cores per package: 2
 > real memory  = 3210739712 (3062 MB)
 > avail memory = 3143385088 (2997 MB)
 > ACPI APIC Table: <INTEL DG31PR>
 > FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs
 >  cpu0 (BSP): APIC ID:  0
 >  cpu1 (AP): APIC ID:  1
 > ioapic0 <Version 2.0> irqs 0-23 on motherboard
 > acpi0: <INTEL> on motherboard
 > acpi_hpet0: <High Precision Event Timer> iomem 0xfed00000-0xfed003ff on acpi0
 > Timecounter "HPET" frequency 14318180 Hz quality 2000
 > acpi0: Power Button (fixed)
 > Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000
 > acpi_timer0: <24-bit timer at 3.579545MHz> port 0x408-0x40b on acpi0
 > cpu0: <ACPI CPU> on acpi0
 > cpu1: <ACPI CPU> on acpi0
 > pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
 > pci0: <ACPI PCI bus> on pcib0
 > pcib1: <ACPI PCI-PCI bridge> irq 16 at device 1.0 on pci0
 > pci1: <ACPI PCI bus> on pcib1
 > pci0: <display, VGA> at device 2.0 (no driver attached)
 > pcib2: <ACPI PCI-PCI bridge> irq 16 at device 28.0 on pci0
 > pci2: <ACPI PCI bus> on pcib2
 > pcib3: <ACPI PCI-PCI bridge> irq 17 at device 28.1 on pci0
 > pci3: <ACPI PCI bus> on pcib3
 > rl0: <Realtek RTL8168B PCI-E Gigabit Ethernet Adapter> port
 > 0xc000-0xc0ff mem 0xd0020000-0xd0020fff irq 17 at device 0.0 on pci3
 > rl0: [GIANT-LOCKED]
 > version:1.73
 > rl0: Ethernet address: 00:19:d1:a7:a4:72
 > rl0: Ethernet address: 00:19:d1:a7:a4:72
 > pcib4: <ACPI PCI-PCI bridge> at device 30.0 on pci0
 > pci4: <ACPI PCI bus> on pcib4
 > isab0: <PCI-ISA bridge> at device 31.0 on pci0
 > isa0: <ISA bus> on isab0
 > atapci0: <Intel ICH7 SATA300 controller> port
 > 0xd060-0xd067,0xd050-0xd053,0xd040-0xd047,0xd030-0xd033,0xd020-0xd02f
 > irq 17 at device 31.2 on pci0
 > ata2: <ATA channel 0> on atapci0
 > ata3: <ATA channel 1> on atapci0
 > pci0: <serial bus, SMBus> at device 31.3 (no driver attached)
 > acpi_button0: <Sleep Button> on acpi0
 > acpi_button1: <Power Button> on acpi0
 > atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
 > atkbd0: <AT Keyboard> irq 1 on atkbdc0
 > atkbd0: [GIANT-LOCKED]
 > ata0 at port 0x1f0-0x1f7,0x3f6 irq 14 on isa0
 > ata1 at port 0x170-0x177,0x376 irq 15 on isa0
 > sc0: <System console> at flags 0x100 on isa0
 > sc0: VGA <16 virtual consoles, flags=0x300>
 > vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
 > Timecounters tick every 1.000 msec
 > ipfw2 initialized, divert loadable, rule-based forwarding disabled,
 > default to accept, logging limited to 10000 packets/entry by default
 > ad4: 238475MB <WDC WD2500KS-00MJB0 02.01C03> at ata2-master SATA150
 > ad6: 238475MB <WDC WD2500KS-00MJB0 02.01C03> at ata3-master SATA150
 > SMP: AP CPU #1 Launched!
 > Trying to mount root from ufs:/dev/ad4s1a
 > 
 > rl0 at pci3:0:0:   class=0x020000 card=0xd6088086 chip=0x816810ec rev=0x01 hdr=0x00
 >     vendor     = 'Realtek Semiconductor'
 >     class      = network
 >     subclass   = ethernet
 > 
 > So I used Realtek driver to get it working.
 > 
 > =================================================================================
 > =  Realtek 8139C/8139C+/8169S/8169SB/8169SC/8168B/8101E Driver for
 > FreeBSD v4.x/5.x/6.0                     =
 > =================================================================================
 > 
 > shouldn't be re0 instead of rl0?
 > 
 > Could someone please look into it, Pyun?

Try attached patch.
I've touched rl(4) too because rl(4) should not attach to
unsupported hardwares.

-- 
Regards,
Pyun YongHyeon
-------------- next part --------------
Index: if_re.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/re/if_re.c,v
retrieving revision 1.95
diff -u -r1.95 if_re.c
--- if_re.c	14 Aug 2007 02:00:04 -0000	1.95
+++ if_re.c	10 Oct 2007 02:54:15 -0000
@@ -180,6 +180,8 @@
 		"RealTek 8168/8111B PCIe Gigabit Ethernet" },
 	{ RT_VENDORID, RT_DEVICEID_8168, RL_HWREV_8168_SPIN2,
 		"RealTek 8168/8111B PCIe Gigabit Ethernet" },
+	{ RT_VENDORID, RT_DEVICEID_8168, RL_HWREV_8168_SPIN3,
+		"RealTek 8168/8111B PCIe Gigabit Ethernet" },
 	{ RT_VENDORID, RT_DEVICEID_8169, RL_HWREV_8169,
 		"RealTek 8169 Gigabit Ethernet" },
 	{ RT_VENDORID, RT_DEVICEID_8169, RL_HWREV_8169S,
@@ -221,6 +223,7 @@
 	{ RL_HWREV_8100E, RL_8169, "8100E"},
 	{ RL_HWREV_8101E, RL_8169, "8101E"},
 	{ RL_HWREV_8168_SPIN2, RL_8169, "8168"},
+	{ RL_HWREV_8168_SPIN3, RL_8169, "8168"},
 	{ 0, 0, NULL }
 };
 
@@ -676,14 +679,19 @@
 	 */
 
 	hwrev = CSR_READ_4(sc, RL_TXCFG) & RL_TXCFG_HWREV;
-
-	if (hwrev == RL_HWREV_8100E || hwrev == RL_HWREV_8101E ||
-	    hwrev == RL_HWREV_8168_SPIN1 || hwrev == RL_HWREV_8168_SPIN2) {
+	switch (hwrev) {
+	case RL_HWREV_8100E:
+	case RL_HWREV_8101E:
+	case RL_HWREV_8168_SPIN1:
+	case RL_HWREV_8168_SPIN2:
+	case RL_HWREV_8168_SPIN3:
 		CSR_WRITE_4(sc, RL_MAR0, bswap32(hashes[1]));
 		CSR_WRITE_4(sc, RL_MAR4, bswap32(hashes[0]));
-	} else {
+		break;
+	default:
 		CSR_WRITE_4(sc, RL_MAR0, hashes[0]);
 		CSR_WRITE_4(sc, RL_MAR4, hashes[1]);
+		break;
 	}
 }
 
@@ -1314,6 +1322,7 @@
 			case RL_HWREV_8169_8110SB:
 			case RL_HWREV_8169_8110SC:
 			case RL_HWREV_8168_SPIN2:
+			case RL_HWREV_8168_SPIN3:
 				re_gmii_writereg(dev, 1, 0x1f, 0);
 				re_gmii_writereg(dev, 1, 0x0e, 0);
 				break;
Index: ../../pci/if_rlreg.h
===================================================================
RCS file: /home/ncvs/src/sys/pci/if_rlreg.h,v
retrieving revision 1.67
diff -u -r1.67 if_rlreg.h
--- ../../pci/if_rlreg.h	24 Jul 2007 01:24:03 -0000	1.67
+++ ../../pci/if_rlreg.h	10 Oct 2007 02:54:16 -0000
@@ -156,6 +156,7 @@
 #define RL_HWREV_8100E		0x30800000
 #define RL_HWREV_8101E		0x34000000
 #define RL_HWREV_8168_SPIN2	0x38000000
+#define RL_HWREV_8168_SPIN3	0x38400000
 #define RL_HWREV_8139		0x60000000
 #define RL_HWREV_8139A		0x70000000
 #define RL_HWREV_8139AG		0x70800000
Index: ../../pci/if_rl.c
===================================================================
RCS file: /home/ncvs/src/sys/pci/if_rl.c,v
retrieving revision 1.170
diff -u -r1.170 if_rl.c
--- ../../pci/if_rl.c	24 Jul 2007 01:24:03 -0000	1.170
+++ ../../pci/if_rl.c	10 Oct 2007 02:54:16 -0000
@@ -756,14 +756,31 @@
 			hwrev = CSR_READ_4(sc, RL_TXCFG) & RL_TXCFG_HWREV;
 			bus_release_resource(dev, RL_RES, RL_RID, sc->rl_res);
 
-			/* Don't attach to 8139C+ or 8169/8110 chips. */
-			if (hwrev == RL_HWREV_8139CPLUS ||
-			    (hwrev == RL_HWREV_8169 &&
-			    t->rl_did == RT_DEVICEID_8169) ||
-			    hwrev == RL_HWREV_8169S ||
-			    hwrev == RL_HWREV_8110S) {
+			/*
+			 * Don't attach to 8139C+/8169/8169S/8110S/8168
+			 * 8111/8101E chips.
+			 */
+			switch (hwrev) {
+			case RL_HWREV_8139CPLUS:
+			case RL_HWREV_8110S:
+			case RL_HWREV_8169S:
+			case RL_HWREV_8101:
+			case RL_HWREV_8100:
+			case RL_HWREV_8169_8110SB:
+			case RL_HWREV_8169_8110SC:
+			case RL_HWREV_8168_SPIN1:
+			case RL_HWREV_8100E:
+			case RL_HWREV_8101E:
+			case RL_HWREV_8168_SPIN2:
+			case RL_HWREV_8168_SPIN3:
 				t++;
 				continue;
+			case RL_HWREV_8169:
+				if (t->rl_did == RT_DEVICEID_8169) {
+					t++;
+					continue;
+				}
+				break;
 			}
 
 			device_set_desc(dev, t->rl_name);


More information about the freebsd-stable mailing list