On 02/08/2017 17:36, Måns Rullgård wrote: > Mason wrote: > >> Looking at the tango-specific integration, I note this nugget: >> >> 1.5.4 Stopping & Starting the DMA >> >> This feature has been added to allow the software to stop and start >> the DMA without any issues. >> >> Procedure: >> 1- STOP: >> 2- Stop RX core; >> 3- Set OWN bit of all descriptor of the chain to 1; >> 4- Stop DMA by writing dma_stop bit to 1 in RX_DMA_Stop register >> 5- Wait around 100 clock cycles. >> >> The pending packets are held until the system will re-start. >> >> RE-START: >> 1- Clear dma_stop bit (note that if at the time of stopping the DMA, >> the next packet in the FIFO was an UDP packet, when clearing dma_stop, >> this packet will directly start being written in the DRAM since UDP >> packets are not controlled by the descriptor mechanism); >> 2- Program a new chain of descriptor; >> 3- Re-enable DMA (rx_ctrl register) >> >> rx_dma_stop: >> Software control to stop the Rx DMA. >> A write to this bit with "1" will gracefully stop the Rx DMA by after >> transferring the current packet. If more packets are pending they will >> be held until the software clears this bit. >> >> Hmmm, what do you think? This looks promising... > > This is only available in the more recent Sigma versions. Although it > is nicer, I didn't think it was worth the trouble to support both > methods since the older method should work on all chips.
Well, from my perspective, the older method does not work on newer chips :-) The "new" method is available on the SMP8670 onward (released Jan 2011). I might try implementing it for "sigma,smp8734-ethernet" boards. Regards.