Hi Robin,
On Thu, Sep 13, 2018 at 12:12 PM Robin Murphy robin.murphy@arm.com wrote:
On 13/09/18 10:00, Geert Uytterhoeven wrote: [...]
The main issue is that if of_dma_find_controller() fails, a DMA slave driver cannot distinguish between dmac not yet probed successfully, and dmac driver not present.
...which is in fact the exact same problem that the IOMMU code has - might it make sense to give of_dma_request_slave_channel() similar (optional?) driver_deferred_probe_check_state() logic, i.e. "if my DMAC driver's not shown up by this point, assume it's not built-in and go on without it". Of course it is somewhat easier for IOMMU drivers as there's zero chance of those popping up as modules later on.
It may solve the issue in some cases. But only if the dmac is reprobed before the DMA slave driver, which is not guaranteed.
BTW, it seems e.g. i2c and serial suffer from the same problem, and fall back to PIO. However, these drivers try to obtain the DMA channel when used, not during probe, so they start using DMA after the dmac has been probed successfully.
Gr{oetje,eeting}s,
Geert