I’ve been working on the on and off over the last weeks. This is what I just sent to iPXE dev Michael Brown:
Tried looking at the NIC registers as suggested by NiKiZe in the forums a while back. Added ethtool code to dump registers to iPXE but from my tests it looks like many registers are different on every reboot and I have no idea which registers mean what. For now I don’t think this is getting us anywhere. But I am open to suggestions.
Digging through the tg3*.c code I figured that there might be some auto negotiation issue on the iMac model I have. Curtis did not seem to have that and got that sort of fixed. Now I am seeing the same thing as Curtis, interface comes up and it tries to send packets to wire but fails so. As far as I know Curtis has been onto this together with you on a IRC chat.
On the other lane I have tested the Linux code a fair bit. Tested 4.13.4, early 3.9 and the very first commit that added 57766 NIC support to the Linux kernel. I did test those early versions as I hoped to clarify if the later added binary firmware blob is playing a role or if any commit in the kernel code did fix an issue with Macs. Turns out it’s not from my tests. They all worked like a charm on the iMac that cannot send packets within iPXE.
Hope we’ll find some time to give me some hints on where to dig next.
@Seb-B As well if you have ideas and suggestions on how to diff the tg3 code of iPXE and the Linux kernel to figure out what’s up. I have started to but there seem to be too many minor differences making it really hard to diff. Though I have the feeling that we should be able to solve this soon as Linux kernel is working great.