Perhaps the link went down very quickly and then was established again by the time the threaded IRQ handler gets to run. Your code seems to do an if + else if. Without knowing how the events work for your platforms, I would guess that it should also be possible to have multiple events set. In you code, if both LINK UP and hot reset/link down are set, I would assume that you driver will not do the right thing. Perhaps you want to swap the order? So that link down is handled first, and then link up is handled. (If you convert to "if + if "instead of "if + else if" that is.) Kind regards, Niklas