Here's the deal.
I'm using Xilinx's beloved XEmacPs driver to configure the PHY and MAC on my board, then I try to transmit frames in a closed network. I'm using Wireshark to view network activity.
The problem I'm running into is that the internal Tx Buffer Descriptor queue does not seem to increment. I write the base address of the BDs to the gem.tx_qbar register, and I was under the impression that the DMA controller would automatically move to the next descriptor when it was done with the current one (until it reached the BD with the wrap bit set).
I prepare the packet and its associated BD(s), and then set the gem.net_ctrl[start_tx] bit to begin transmission. Wireshark shows several duplicate packets being sent out at once, within about 5 microseconds of each other. Then the Error ISR is called and reports that transmit buffers are not available because it has reached a BD with the used bit set.
The only thing I can think of is that it's not incrementing the TxBD queue pointer. So here's where I need help:
1. Is it software's responsibility to update the gem.tx_qbar register, and constantly write the base address of the TxBD(s) being used?
2. How do I prevent duplicate packets from being sent out in succession? I only need to send 1!
I've read the Technical Reference Manual backwards and forwards several times, and I can't see where I'm going wrong.
Thanks,
Zack