Hello!
I'm using the resizer on a DM368 to create multiple frame buffers from the same input buffer. I'm operating in single shot mode and resizing YUV422 buffers to YUV420SP. So there are multiple IOCTLs to the resizer in very short time like in this pseudo-code:
ioctl(resizer_fd, RSZ_S_CONFIG, &rsz_chan_config_first);
ioctl(resizer_fd, RSZ_RESIZE, &rsz_first);
ioctl(resizer_fd, RSZ_S_CONFIG, &rsz_chan_config_second);
ioctl(resizer_fd, RSZ_RESIZE, &rsz_second);
Now sometimes the second RSZ_RESIZE deadlocks. After some investigation I found that the call blocks in "imp_common_start" when doing "wait_for_completion_interruptible". Changing this to "wait_for_completion_interruptible_timeout" and checking the INTSTAT register in the case of a timeout I see that the RSZ_INT_DMA is never raised. So it seems the DMA for some reason died and there's no error handling.
Changing the CLK_DIV ratio changes the probability of the deadlock. With 10/20 it deadlocks nearly every time. With 10/30 it deadlocks every 100 frames or so. With 10/40 I could not observe a deadlock within some 1000 frames - which does not mean that it will not happen in the future.
Is there any way to find the "correct" maximum values for the CLK_DIV M/N?
Regards,
Andreas.