Getting "RuntimeError: DMA channel not started" occasionally

You are looking in the right area, but you need to check the DMADecErr which is =1. Err_Irq is just the interrupt telling you that there is an error.

MM2S_DMASR = Register(Halted=1, Idle=0, SGIncld=0, DMAIntErr=0, DMASlvErr=0, DMADecErr=1, SGIntErr=0, SGSlvErr=0, SGDecErr=0, IOC_Irq=1, Dly_Irq=0, Err_Irq=1, IRQThresholdSts=0, IRQDelaySts=0),

I think you are already doing this, but posting this link as it may be useful for anyone else who finds this post.
You can check the documentation for the IP to understand the Status Register information that is reported.
https://docs.xilinx.com/r/en-US/pg021_axi_dma/Register-Space in particular the Status Register section.

DMAIntErr:

DMA Decode Error. This error occurs if the address request points to an invalid address.

Your source address is:
MM2S_SA = Register(Source_Address=1966104576)
In hex: 0x75306000

Did you use allocate to create your memory buffer, and did you pass the buffer correctly to the DMA?

https://discuss.pynq.io/t/tutorial-pynq-dma-part-2-using-the-dma-from-pynq/3134

You can check your input_buffer.physical_address (rename input_buffer to the name you can your buffer) is the same as the value passed to the DMA.

If this doesn’t resolve your problem, you would need to post more info about your design - your Python code, and your block diagram woudl be a good start.

Cathal