Hi, i've been slowly looking at bringing dma for some of the lesser sunxis, and have reached the point where i'm unsure what to do next beyond testing the functionality w/spreading SoC-specific hacks "for testing"..
now even if i will manage to shove it partly under _bus_dma_tag, it will not be usable w/o a hack/special-casing either, so that lead to looking at implementing ofw_dmac, which i can't finish because i can't decide on it's interface, i mean there's too many completely new pieces to me in the puzzle after all, o and the naming; ofw_dma or ofw_dmac? can't pick. DT-binding properties for the generic dma-controller did seem simple, and in my case the Allwinner A10 DMA Controller follows those, but w/o knowing better continuing would likely be waste of my time:) currently i have something like this in sys/dev/ofw/ofw_dmac.h: struct dma_controller { int dc_node; /* * Pointer to struct x_bus_space_tag, containing * another _cookie to struct x_softc of our parent. */ void *dc_cookie; /* claim/disown channel|w/e controller specific */ void (*dc_claim)(void *. uint32_t *, int); /* dc_cookie, &cells[1], disown:0|claim:1 */ LIST_ENTRY(dma_controller) dc_list; uint32_t dc_phandle; uint32_t dc_cells; #ifdef notyet uint32_t dc_channels; uint32_t dc_requests; #endif }; void dmac_register(struct dma_controller *); /* * does return the number of entries in the "dmas" property, * and the bus_dma_tag_t for client to use. */ int dmac_register_client(int, bus_dma_tag_t *); void dmac_claim(int, const char *); void dmac_claim_idx(int, int); void dmac_disown(int, const char *); void dmac_disown_idx(int, int); for clients that'd be quite simple to use to get more specific bus_dma_tag than given in fdt_attach_args, so ie. in drivers used across different dma controllers, im hoping above might work w/clients calling _register_client unconditionally? or? any input more than welcome:) -Artturi