Today I continued my investigation why the NIC doesn't set the link changed bit in the hw status register.
Had my last exam today which, combined with driving to/from Vienna, took quite an amount of time, so fewer work was done today. Still no luck in tracking down the issue.
I tried a suggestion from Stefan today and used the same coalesce settings the old etherboot driver used. Still no luck in getting a link changed indication from the card though. Turns out we didn't set the appropriate bit in the MAC_EVENT register and after setting this bit the hw status changes after a link change event. However, the bits that are set in the hw status register don't match the datasheet and the definitions in tg3.h. If we assume the value is big endian we see the bits UPDATED, LINK_CHANGE and ERROR set, but I can't see the linux driver swapping anything from/to big endian. The test NIC also occasionally sets a bit that should be reserved according to the datasheet. I can't find a datasheet for that exact card on Broadcoms website, and it could be a bit that is used in later card revisions. Also added some code to dump the error registers to see if anything could be wrong.
The NIC still doesn't transmit any packets when instructed to do so. Tried tracking down this issue today. Didn't have much luck today, only pushed code with slightly more verbose debugging output.
Continued debugging the packet transmit issue. Made sure we do the same the linux and legacy etherboot driver do and couldn't find any relevant differences yet. More datasheet reading to understand the relevant parts of the hardware better.