On 19-07-21, 10:25, Biju Das wrote: > +struct rz_dmac_chan { > + struct virt_dma_chan vc; > + void __iomem *ch_base; > + void __iomem *ch_cmn_base; > + unsigned int index; > + int irq; > + struct rz_dmac_desc *desc; > + int descs_allocated; > + > + enum dma_slave_buswidth src_word_size; > + enum dma_slave_buswidth dst_word_size; > + dma_addr_t src_per_address; > + dma_addr_t dst_per_address; > + > + u32 chcfg; > + u32 chctrl; > + int mid_rid; > + > + struct list_head ld_free; > + struct list_head ld_queue; > + struct list_head ld_active; > + > + struct { > + struct rz_lmdesc *base; > + struct rz_lmdesc *head; > + struct rz_lmdesc *tail; > + int valid; > + dma_addr_t base_dma; > + } lmdesc; should this be not part of rz_dmac_desc than channel? > +static int rz_dmac_config(struct dma_chan *chan, > + struct dma_slave_config *config) > +{ > + struct rz_dmac_chan *channel = to_rz_dmac_chan(chan); > + u32 *ch_cfg; > + > + channel->src_per_address = config->src_addr; > + channel->src_word_size = config->src_addr_width; > + channel->dst_per_address = config->dst_addr; > + channel->dst_word_size = config->dst_addr_width; > + > + if (config->peripheral_config) { > + ch_cfg = config->peripheral_config; > + channel->chcfg = *ch_cfg; > + } can you explain what this the ch_cfg here and what does it represent? -- ~Vinod