misc/136876: bge will not resume properly after suspend

Adam K Kirchhoff adamk at voicenet.com
Fri Jul 17 21:00:13 UTC 2009


>Number:         136876
>Category:       misc
>Synopsis:       bge will not resume properly after suspend
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Jul 17 21:00:12 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator:     Adam K Kirchhoff
>Release:        8.0-BETA1
>Organization:
>Environment:
FreeBSD scroll.ashke.com 8.0-BETA1 FreeBSD 8.0-BETA1 #0: Tue Jul 14 09:02:26 EDT 2009     root@:/usr/obj/usr/src/sys/SCROLL  i386

>Description:

When I resume my laptop from suspend, bge0 is no longer usable:

Jul 14 12:35:53 scroll kernel: bge0: PHY write timed out (phy 1, reg 0, val 32768)
Jul 14 12:35:53 scroll kernel: bge0: PHY read timed out (phy 1, reg 0, val 0xffffffff)
Jul 14 12:35:53 scroll kernel: bge0: PHY write timed out (phy 1, reg 24, val 3072)
Jul 14 12:35:53 scroll kernel: bge0: PHY write timed out (phy 1, reg 23, val 10)
Jul 14 12:35:53 scroll kernel: bge0: PHY write timed out (phy 1, reg 21, val 12555)
Jul 14 12:35:53 scroll kernel: bge0: PHY write timed out (phy 1, reg 23, val 8223)
Jul 14 12:35:53 scroll kernel: bge0: PHY write timed out (phy 1, reg 21, val 38150)
Jul 14 12:35:53 scroll kernel: bge0: PHY write timed out (phy 1, reg 23, val 16415)
Jul 14 12:35:53 scroll kernel: bge0: PHY write timed out (phy 1, reg 21, val 5346)
Jul 14 12:35:53 scroll kernel: bge0: PHY write timed out (phy 1, reg 24, val 1024)
Jul 14 12:35:53 scroll kernel: bge0: PHY write timed out (phy 1, reg 24, val 7)

And so on and so forth.

I thought that compiling if_bge as a module, unloading it before suspend, and reloading it after resume, might get this working.   However, doing a "kldload if_bge" after the resume does nothing.  Well, the module gets loaded, but the device doesn't show up.  No errors from kldload, and there is nothing new in dmesg.

Before the suspend, the device shows up as:

bge0 at pci0:2:0:0:        class=0x020000 card=0x01821028 chip=0x167714e4 rev=0x01 hdr=0x00
   vendor     = 'Broadcom Corporation'
   device     = 'NetXtreme Gigabit Ethernet PCI Express (BCM5750A1)'
   class      = network
   subclass   = ethernet

After resuming,  and reloading the module, it's:

none1 at pci0:2:0:0:       class=0x020000 card=0x01821028 chip=0x167714e4 rev=0x01 hdr=0x00
   vendor     = 'Broadcom Corporation'
   device     = 'NetXtreme Gigabit Ethernet PCI Express (BCM5750A1)'
   class      = network
   subclass   = ethernet

Following a suggestion by Paul Mahol, I set the following via sysctl:

hw.pci.do_power_nodriver="3"
hw.pci.do_power_resume="1"

Then I unloaded if_bge, unloaded snd_ich, reloaded snd_ich, suspended, resumed, and loaded if_bge.  In this situation, my entire machine locks up solid after displaying the following output:

bge0: <Broadcom NetXtreme Gigabit Ethernet Controller, unknown ASIC rev. 
0xffff>
mem 0xdfdf0000-0xdfdfffff irq 16 at device 0.0 on pci2

There is no kernel panic, just a complete system hang.
>How-To-Repeat:

Install 8.0-BETA1 on a laptop with bge (specifically, a Dell Latitude D610, but since someone else has reported the same problem, I imagine this is not limited to just that model), then suspend and resume.

>Fix:


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list