JMicron JMC250 jme interface not receiving

I posted this to the freebsd-hardware list yesterday. I hope you'll forgive me for cross-posting here for a broader audience.

I'm asking for help getting a JMicron JMC250 network interface working under FreeBSD. It appears that the jme() driver is not functioning correctly on this hardware. The machine is an Asus Eee Box B202 with a JMicron JMC250 Ethernet chip on the motherboard. I'm running the 8.0-RELEASE Generic kernel. The machine boots fine, recognizing the interface as jme0, but I can't connect to any hosts on the network. When I ping the router or another host on the subnet, I see the packet lights flash on the router, but I get no ping responses. The arp() cache remains empty.

I know that it's not a hardware problem, because the machine can connect to the network fine under Windows XP, using the same NIC, cable and router port. Under FreeBSD I can assign an IP address, take the interface down and up, and can see the link light on the router turn off and on again when the interface comes up, but I can't ping any hosts.

When I ping the EeeBox from another host the EeeBox MAC address is added to the other hosts' arp() cache, but no ping response packets are received. On the EeeBox the arp() cache remains empty. Perhaps the EeeBox can transmit packets, but somehow not receive?

I have tried booting with MSI and MSI-X disabled (in loader.conf: hw.jme.msi_disable="1", hw.jme.msix_disable="1"). The interface came up without MSI, but I was still unable to connect to any hosts. I tried disabling the following interface options using ifconfig(), also without result: -rxcsum, -txcsum, -tso, -wol, -vlanhwtag.

Code:
# pciconf -vlbc
...
jme0@pci0:1:0:0:    class=0x020000 card=0x839c1043 chip=0x0250197b rev=0x11 hdr=0x00
    vendor     = 'JMicron Technology Corp.'
    class      = network
    subclass   = ethernet
    bar   [10] = type Memory, range 32, base 0xfbefc000, size 16384, enabled
    bar   [18] = type I/O Port, range 32, base 0xec80, size 128, enabled
    bar   [1c] = type I/O Port, range 32, base 0xe800, size 256, enabled
    cap 01[68] = powerspec 3  supports D0 D3  current D0
    cap 10[50] = PCI-Express 1 legacy endpoint max data 128(128) link x1(x1)
    cap 11[40] = MSI-X supports 8 messages in map 0x10 enabled
    cap 05[70] = MSI supports 8 messages, 64 bit, vector masks

Code:
# ifconfig jme0

jme0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC>
    ether e0:cb:4e:08:37:f5
    inet 10.25.2.49 netmask 0xffffff00 broadcast 10.25.2.255
    media: Ethernet autoselect (100baseTX <full-duplex>)
    status: active

Code:
# netstat -nr

Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
10.25.2.0/24       link#1             U           0       15   jme0
10.25.2.49         link#1             UHS         0        0    lo0
127.0.0.1          link#2             UH          0        4    lo0

Code:
# arp -a

Code:
# ping 10.25.2.1

PING 10.25.2.1 (10.25.2.1): 56 data bytes
ping: sendto: Host is down
ping: sendto: Host is down
ping: sendto: Host is down
ping: sendto: Host is down
^C
--- 10.25.2.1 ping statistics ---
9 packets transmitted, 0 packets received, 100.0% packet loss

Code:
# uname -a

FreeBSD  8.0-RELEASE FreeBSD 8.0-RELEASE #0: Sat Nov 21 15:48:17 UTC 2009 [email]root@almeida.cse.buffalo.edu[/email]:/usr/obj/usr/src/sys/GENERIC  i386


Code:
# dmesg

Copyright (c) 1992-2009 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 8.0-RELEASE #0: Sat Nov 21 15:48:17 UTC 2009
    [email]root@almeida.cse.buffalo.edu[/email]:/usr/obj/usr/src/sys/GENERIC
Timecounter "i8254" frequency 1193182 Hz quality 0
CPU: Intel(R) Atom(TM) CPU N270   @ 1.60GHz (1608.02-MHz 686-class CPU)
  Origin = "GenuineIntel"  Id = 0x106c2  Stepping = 2
  Features=0xbfe9fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
  Features2=0x40c39d<SSE3,DTES64,MON,DS_CPL,EST,TM2,SSSE3,xTPR,PDCM,<b22>>
  AMD Features=0x100000<NX>
  AMD Features2=0x1<LAHF>
  TSC: P-state invariant
real memory  = 1073741824 (1024 MB)
avail memory = 1027768320 (980 MB)
ACPI APIC Table: <A_M_I_ OEMAPIC >
FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs
FreeBSD/SMP: 1 package(s) x 1 core(s) x 2 HTT threads
 cpu0 (BSP): APIC ID:  0
 cpu1 (AP/HT): APIC ID:  1
ACPI Warning: Optional field Pm2ControlBlock has zero address or length:        0     820/0 20090521 tbfadt-655
ACPI Warning: Invalid length for Pm2ControlBlock: 0, using default 8 20090521 tbfadt-707
ioapic0: Changing APIC ID to 2
ioapic0 <Version 2.0> irqs 0-23 on motherboard
kbd1 at kbdmux0
acpi0: <A_M_I_ OEMRSDT> on motherboard
acpi0: [ITHREAD]
acpi0: Power Button (fixed)
acpi0: reservation of 0, a0000 (3) failed
acpi0: reservation of 100000, 3f700000 (3) failed
Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000
acpi_timer0: <24-bit timer at 3.579545MHz> port 0x808-0x80b on acpi0
acpi_hpet0: <High Precision Event Timer> iomem 0xfed00000-0xfed003ff on acpi0
Timecounter "HPET" frequency 14318180 Hz quality 900
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
vgapci0: <VGA-compatible display> port 0xdc80-0xdc87 mem 0xfbd00000-0xfbd7ffff,0xd0000000-0xdfffffff,0xfbcc0000-0xfbcfffff irq 16 at device 2.0 
on pci0
agp0: <Intel 945GME SVGA controller> on vgapci0
agp0: detected 7932k stolen memory
agp0: aperture size is 256M
vgapci1: <VGA-compatible display> mem 0xfbd80000-0xfbdfffff at device 2.1 on pci0
pci0: <multimedia, HDA> at device 27.0 (no driver attached)
pcib1: <ACPI PCI-PCI bridge> irq 16 at device 28.0 on pci0
pci3: <ACPI PCI bus> on pcib1
pcib2: <ACPI PCI-PCI bridge> irq 17 at device 28.1 on pci0
pci2: <ACPI PCI bus> on pcib2
pci2: <network> at device 0.0 (no driver attached)
pcib3: <ACPI PCI-PCI bridge> irq 18 at device 28.2 on pci0
pci1: <ACPI PCI bus> on pcib3
jme0: <JMicron Inc, JMC250 Gigabit Ethernet> port 0xec80-0xecff,0xe800-0xe8ff mem 0xfbefc000-0xfbefffff irq 18 at device 0.0 on pci1
jme0: Using 8 MSIX messages.
miibus0: <MII bus> on jme0
jmphy0: <JMP211 10/100/1000 media interface> PHY 1 on miibus0
jmphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
jme0: Ethernet address: e0:cb:4e:08:37:f5
jme0: [FILTER]
jme0: [FILTER]
jme0: [FILTER]
jme0: [FILTER]
jme0: [FILTER]
jme0: [FILTER]
jme0: [FILTER]
jme0: [FILTER]
uhci0: <Intel 82801G (ICH7) USB controller USB-A> port 0xd480-0xd49f irq 23 at device 29.0 on pci0
uhci0: [ITHREAD]
uhci0: LegSup = 0x0f30
usbus0: <Intel 82801G (ICH7) USB controller USB-A> on uhci0
...

Thanks for any assistance,
Oliver
 
Just to confirm I had this identical problem in FreeBSD 10, the adapter was able to acquire an IP address using DHCP, but no other communcation was possible no ping to valid IP on the LAN would work. In my case the adapter also worked fine in Windows XP, and a quick boot into Lubuntu 14.04 fixed it. My box was also an Asus Eee box, although I'm unsure of the exact model.

I suspect that Windows XP leaves the adapter in a state which FreeBSD is not able to manage properly, yet Ubuntu can, and Ubuntu will then leave this in a state which FreeBSD can manage okay. I have heard for example that Windows has its own way to making an adapter ready for a wake on LAN packet each time it shuts down, which has in the past caused me problems in Linux. It could be this or some other similar process.
 
Back
Top