linear_cannon has quit [Read error: Connection reset by peer]
linearcannon has joined #litex
linearcannon has quit [Read error: Connection reset by peer]
linear_cannon has joined #litex
linear_cannon has quit [Ping timeout: 256 seconds]
linear_cannon has joined #litex
linear_cannon has quit [Ping timeout: 256 seconds]
linear_cannon has joined #litex
Degi_ has joined #litex
Degi has quit [Ping timeout: 272 seconds]
Degi_ is now known as Degi
cr1901 has quit [Quit: Leaving]
cr1901 has joined #litex
indy has quit [Ping timeout: 272 seconds]
<_florent_>
tnt: The current gateware/software architecture and loop mode, the FPGA is indeed imposing the speed of the transfers (on a pre-allocated circular buffer) and software synchronize to it. (so have to handle underflow/overflow when not able to keep up). It should not be too complicated to operate differently, but this is what is currently used for the dma loopback test.
<_florent_>
tnt: I'm going to look at the DMA RX_DELAY issue you saw, I added it to be able to compensate for unknown initial delay in the loopback chain (when doing a loopback over the RFIC for example), but I've mostly been testing it on a specific configuration and will do more tests with others
indy has joined #litex
FabM has joined #litex
FabM has quit [Changing host]
FabM has joined #litex
<tnt>
_florent_: yeah, I think just using the programmable mode and re-submit descriptors when the user space reads the current buffer would work. I didn't check the hardware side, but I assume if it has no descriptors, it just stops transfers until it has one.
<tnt>
The RX_DELAY could very well just be that the host PC is too slow and the dropped buffers prevent it from syncing. The host test machine is a relatively weak i3-10105 and gen3 4x full bandwidth is quite fast.
<_florent_>
tnt: When using loop mode, you first fill all the descriptors in the table and the core will just loop on it, but it's indeed perfectly possible to use the disable loop mode. In this case, the DMA will just execute the full table and stop after that. You'll also get an IRQ for each executed descriptor.
<_florent_>
tnt: Not sure indeed an i
<_florent_>
tnt: Not sure indeed an i3 will be able to keep up with the gen3 x4 full bandwidth