Lines Matching refs:sh_chan
156 struct sh_dmae_chan *sh_chan = shdev->chan[i]; in sh_dmae_rst() local
157 if (sh_chan) in sh_dmae_rst()
158 channel_clear(sh_chan); in sh_dmae_rst()
179 static bool dmae_is_busy(struct sh_dmae_chan *sh_chan) in dmae_is_busy() argument
181 u32 chcr = chcr_read(sh_chan); in dmae_is_busy()
189 static unsigned int calc_xmit_shift(struct sh_dmae_chan *sh_chan, u32 chcr) in calc_xmit_shift() argument
191 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in calc_xmit_shift()
202 static u32 log2size_to_chcr(struct sh_dmae_chan *sh_chan, int l2size) in log2size_to_chcr() argument
204 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in log2size_to_chcr()
219 static void dmae_set_reg(struct sh_dmae_chan *sh_chan, struct sh_dmae_regs *hw) in dmae_set_reg() argument
221 sh_dmae_writel(sh_chan, hw->sar, SAR); in dmae_set_reg()
222 sh_dmae_writel(sh_chan, hw->dar, DAR); in dmae_set_reg()
223 sh_dmae_writel(sh_chan, hw->tcr >> sh_chan->xmit_shift, TCR); in dmae_set_reg()
226 static void dmae_start(struct sh_dmae_chan *sh_chan) in dmae_start() argument
228 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_start()
229 u32 chcr = chcr_read(sh_chan); in dmae_start()
232 sh_dmae_writel(sh_chan, 0xFFFFFFFF, TEND); in dmae_start()
235 chcr_write(sh_chan, chcr & ~CHCR_TE); in dmae_start()
238 static void dmae_init(struct sh_dmae_chan *sh_chan) in dmae_init() argument
243 u32 chcr = DM_INC | SM_INC | RS_AUTO | log2size_to_chcr(sh_chan, in dmae_init()
245 sh_chan->xmit_shift = calc_xmit_shift(sh_chan, chcr); in dmae_init()
246 chcr_write(sh_chan, chcr); in dmae_init()
249 static int dmae_set_chcr(struct sh_dmae_chan *sh_chan, u32 val) in dmae_set_chcr() argument
252 if (dmae_is_busy(sh_chan)) in dmae_set_chcr()
255 sh_chan->xmit_shift = calc_xmit_shift(sh_chan, val); in dmae_set_chcr()
256 chcr_write(sh_chan, val); in dmae_set_chcr()
261 static int dmae_set_dmars(struct sh_dmae_chan *sh_chan, u16 val) in dmae_set_dmars() argument
263 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_set_dmars()
265 const struct sh_dmae_channel *chan_pdata = &pdata->channel[sh_chan->shdma_chan.id]; in dmae_set_dmars()
269 if (dmae_is_busy(sh_chan)) in dmae_set_dmars()
289 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_start_xfer() local
293 dev_dbg(sh_chan->shdma_chan.dev, "Queue #%d to %d: %u@%x -> %x\n", in sh_dmae_start_xfer()
294 sdesc->async_tx.cookie, sh_chan->shdma_chan.id, in sh_dmae_start_xfer()
297 dmae_set_reg(sh_chan, &sh_desc->hw); in sh_dmae_start_xfer()
298 dmae_start(sh_chan); in sh_dmae_start_xfer()
303 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_channel_busy() local
305 return dmae_is_busy(sh_chan); in sh_dmae_channel_busy()
311 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_setup_xfer() local
316 sh_chan->config; in sh_dmae_setup_xfer()
318 dmae_set_dmars(sh_chan, cfg->mid_rid); in sh_dmae_setup_xfer()
319 dmae_set_chcr(sh_chan, cfg->chcr); in sh_dmae_setup_xfer()
321 dmae_init(sh_chan); in sh_dmae_setup_xfer()
330 struct sh_dmae_chan *sh_chan, int match) in dmae_find_slave() argument
332 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_find_slave()
337 if (!sh_chan->shdma_chan.dev->of_node) { in dmae_find_slave()
347 sh_chan->shdma_chan.slave_id = i; in dmae_find_slave()
358 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_set_slave() local
360 const struct sh_dmae_slave_config *cfg = dmae_find_slave(sh_chan, slave_id); in sh_dmae_set_slave()
365 sh_chan->config = cfg; in sh_dmae_set_slave()
366 sh_chan->slave_addr = slave_addr ? : cfg->addr; in sh_dmae_set_slave()
372 static void dmae_halt(struct sh_dmae_chan *sh_chan) in dmae_halt() argument
374 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_halt()
375 u32 chcr = chcr_read(sh_chan); in dmae_halt()
378 chcr_write(sh_chan, chcr); in dmae_halt()
400 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_halt() local
402 dmae_halt(sh_chan); in sh_dmae_halt()
407 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_chan_irq() local
410 if (!(chcr_read(sh_chan) & CHCR_TE)) in sh_dmae_chan_irq()
414 dmae_halt(sh_chan); in sh_dmae_chan_irq()
422 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_get_partial() local
427 (sh_dmae_readl(sh_chan, TCR) << sh_chan->xmit_shift); in sh_dmae_get_partial()
462 struct sh_dmae_chan *sh_chan = container_of(schan, in sh_dmae_desc_completed() local
466 u32 sar_buf = sh_dmae_readl(sh_chan, SAR); in sh_dmae_desc_completed()
467 u32 dar_buf = sh_dmae_readl(sh_chan, DAR); in sh_dmae_desc_completed()
529 struct sh_dmae_chan *sh_chan; in sh_dmae_chan_probe() local
533 sh_chan = devm_kzalloc(sdev->dma_dev.dev, sizeof(struct sh_dmae_chan), in sh_dmae_chan_probe()
535 if (!sh_chan) { in sh_dmae_chan_probe()
541 schan = &sh_chan->shdma_chan; in sh_dmae_chan_probe()
546 sh_chan->base = shdev->chan_reg + chan_pdata->offset; in sh_dmae_chan_probe()
550 snprintf(sh_chan->dev_id, sizeof(sh_chan->dev_id), in sh_dmae_chan_probe()
553 snprintf(sh_chan->dev_id, sizeof(sh_chan->dev_id), in sh_dmae_chan_probe()
556 err = shdma_request_irq(schan, irq, flags, sh_chan->dev_id); in sh_dmae_chan_probe()
564 shdev->chan[id] = sh_chan; in sh_dmae_chan_probe()
621 struct sh_dmae_chan *sh_chan = shdev->chan[i]; in sh_dmae_resume() local
623 if (!sh_chan->shdma_chan.desc_num) in sh_dmae_resume()
626 if (sh_chan->shdma_chan.slave_id >= 0) { in sh_dmae_resume()
627 const struct sh_dmae_slave_config *cfg = sh_chan->config; in sh_dmae_resume()
628 dmae_set_dmars(sh_chan, cfg->mid_rid); in sh_dmae_resume()
629 dmae_set_chcr(sh_chan, cfg->chcr); in sh_dmae_resume()
631 dmae_init(sh_chan); in sh_dmae_resume()
647 struct sh_dmae_chan *sh_chan = container_of(schan, in sh_dmae_slave_addr() local
655 return sh_chan->slave_addr; in sh_dmae_slave_addr()