On Friday 20 November 2015 14:52:03 Peter Ujfalusi wrote:
For legacy the filter function is pretty much needed to handle the differences between the platforms as not all of them does the filtering in a same way. So the first type of map would be feasible IMHO.
It certainly makes the transition to a map table much easier.
And the aim anyway is to convert everything to DT, right?
We won't be able to do that. Some architectures (avr32 and sh for instance) use the dmaengine API but will likely never support DT. On ARM, at least sa1100 is in the same category, probably also ep93xx and portions of pxa, omap1 and davinci.
int dmam_register_platform_map(struct device *dev, dma_filter_fn filter, struct dma_chan_map *map) { struct dma_map_list *list = kmalloc(sizeof(*list), GFP_KERNEL);
if (!list) return -ENOMEM; list->dev = dev; list->filter = filter; list->map = map; mutex_lock(&dma_map_mutex); list_add(&dma_map_list, &list->node); mutex_unlock(&dma_map_mutex);
}
Now we can completely remove the dependency on the filter function definition from platform code and slave drivers.
Sounds feasible for OMAP and daVinci and for others as well. I think I would go with this if someone asks my opinion
Ok.
The core change to add the new API + the dma_map support should be pretty straight forward. It can live alongside with the old API and we can phase out the users of the old one. The legacy support would need more time since we need to modify the arch codes and the corresponding DMA drivers to get the map registered, but after that the remaining drivers can be converted to use the new API.
Right. It's not urgent and as long as we agree on the overall approach, we can always do the platform support first and wait for the following merge window before moving over the slave drivers.
Arnd