In u-boot> dhcp
offer <-
request ->
no ack!
discover, offer, request, loop...
While the same board can run dhcp client without problem in Linux.
It turns out that the problem is on dhcp server: some dhcp servers will ignore too fast request.
I found this fix to u-boot:
Just put a short delay (50~100ms) between offer and request.