apologies if this has been discussed before, my googling and mailing list searching has been fruitless. i've been slowly working on migrating my linux installation on a dual opteron box (MSI K8D 'Master' mobo, dual 244's & 4gig installed) to 64-bitness. the msi board has 2 broadcom 5704a6's on-board (on a pci-x path, 100mhz, 64bit). obviously, until i ran 2.4.21-rc7 (thanks!) i was unable to get the 5704's to work at all, but once i had patched the kernel up i encountered no problems...until i built a new 2.4.21-rc7 kernel (through iterations, a fresh 2.4.20 untar and re-patch) with an x86_64 cross compiler (gcc-3.2.3). with the x86_64 kernel, the tg3 driver is able to see the two cards on booting (code is not loaded as a module), but at no time can it ever seem to complete auto-detection (or, with the 'ethtool' tweaking, nor can it seem to evident a link when the proper configuration (1g/full) is given to it). obviously, i have no net. but only when running the 64-bit kernel, the kernel built for i686 works just fine. currently i'm trying to debug this on 2.4.21, and still no luck. all other aspects of the system operate normally...but i have yet to put the system under my usual stress tests since they use network i/o as part of it, so that may yet be an illusion. i tried putting some extra printk's in the tg3 driver, to try and figure out where in autosensing it was failing. having very little understanding of how any of this works, unfortunately, means that only thing i've learned is that tg3_setup_copper_phy is called twice after ifconfigging it up, and both times it fails to detect link (i put printk's at every single 'current_link_up = x' line, so it doesn't seem to detect either link or the lack thereof). when i did my 'ethtool' tweaking, it would only be called once. looking at /proc/interrupts, the irq for the tg3 (29) seems to be getting about 10 interrupts per second...and no i don't have that much network traffic going on (maybe 1 broadcast per 40 seconds or so). i have no reason to suspect the cross compiler of badness...every local application i've built with it operates just fine. i spent a great deal of time combing over the tg3 driver looking for obvious 32/64 bit errors. but, the driver seems to be extremely well written in this regard...int is only used to type match external functions. the interrupts suggest that the device is trying to tell the driver about the link state, but somehow the driver is never getting around to servicing the interrupt (or services it, and misses the point). i will continue to investigate this on my own, as poor as my ability to do so is, but if anyone has this working or even has advice as to where to start, i would appreciate any input. -- David W. Hankins "If you don't do it right the first time, Network Engineer you'll just have to do it again." -- Jack T. Hankins
Attachment:
pgp00057.pgp
Description: PGP signature