Lines Matching refs:sh_chan

152 			struct sh_dmae_chan *sh_chan = shdev->chan[i];  in sh_dmae_rst()  local
153 if (sh_chan) in sh_dmae_rst()
154 channel_clear(sh_chan); in sh_dmae_rst()
175 static bool dmae_is_busy(struct sh_dmae_chan *sh_chan) in dmae_is_busy() argument
177 u32 chcr = chcr_read(sh_chan); in dmae_is_busy()
185 static unsigned int calc_xmit_shift(struct sh_dmae_chan *sh_chan, u32 chcr) in calc_xmit_shift() argument
187 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in calc_xmit_shift()
198 static u32 log2size_to_chcr(struct sh_dmae_chan *sh_chan, int l2size) in log2size_to_chcr() argument
200 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in log2size_to_chcr()
215 static void dmae_set_reg(struct sh_dmae_chan *sh_chan, struct sh_dmae_regs *hw) in dmae_set_reg() argument
217 sh_dmae_writel(sh_chan, hw->sar, SAR); in dmae_set_reg()
218 sh_dmae_writel(sh_chan, hw->dar, DAR); in dmae_set_reg()
219 sh_dmae_writel(sh_chan, hw->tcr >> sh_chan->xmit_shift, TCR); in dmae_set_reg()
222 static void dmae_start(struct sh_dmae_chan *sh_chan) in dmae_start() argument
224 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_start()
225 u32 chcr = chcr_read(sh_chan); in dmae_start()
228 sh_dmae_writel(sh_chan, 0xFFFFFFFF, TEND); in dmae_start()
231 chcr_write(sh_chan, chcr & ~CHCR_TE); in dmae_start()
234 static void dmae_init(struct sh_dmae_chan *sh_chan) in dmae_init() argument
239 u32 chcr = DM_INC | SM_INC | RS_AUTO | log2size_to_chcr(sh_chan, in dmae_init()
241 sh_chan->xmit_shift = calc_xmit_shift(sh_chan, chcr); in dmae_init()
242 chcr_write(sh_chan, chcr); in dmae_init()
245 static int dmae_set_chcr(struct sh_dmae_chan *sh_chan, u32 val) in dmae_set_chcr() argument
248 if (dmae_is_busy(sh_chan)) in dmae_set_chcr()
251 sh_chan->xmit_shift = calc_xmit_shift(sh_chan, val); in dmae_set_chcr()
252 chcr_write(sh_chan, val); in dmae_set_chcr()
257 static int dmae_set_dmars(struct sh_dmae_chan *sh_chan, u16 val) in dmae_set_dmars() argument
259 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_set_dmars()
261 const struct sh_dmae_channel *chan_pdata = &pdata->channel[sh_chan->shdma_chan.id]; in dmae_set_dmars()
265 if (dmae_is_busy(sh_chan)) in dmae_set_dmars()
285 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_start_xfer() local
289 dev_dbg(sh_chan->shdma_chan.dev, "Queue #%d to %d: %u@%x -> %x\n", in sh_dmae_start_xfer()
290 sdesc->async_tx.cookie, sh_chan->shdma_chan.id, in sh_dmae_start_xfer()
293 dmae_set_reg(sh_chan, &sh_desc->hw); in sh_dmae_start_xfer()
294 dmae_start(sh_chan); in sh_dmae_start_xfer()
299 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_channel_busy() local
301 return dmae_is_busy(sh_chan); in sh_dmae_channel_busy()
307 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_setup_xfer() local
312 sh_chan->config; in sh_dmae_setup_xfer()
314 dmae_set_dmars(sh_chan, cfg->mid_rid); in sh_dmae_setup_xfer()
315 dmae_set_chcr(sh_chan, cfg->chcr); in sh_dmae_setup_xfer()
317 dmae_init(sh_chan); in sh_dmae_setup_xfer()
326 struct sh_dmae_chan *sh_chan, int match) in dmae_find_slave() argument
328 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_find_slave()
333 if (!sh_chan->shdma_chan.dev->of_node) { in dmae_find_slave()
343 sh_chan->shdma_chan.slave_id = i; in dmae_find_slave()
354 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_set_slave() local
356 const struct sh_dmae_slave_config *cfg = dmae_find_slave(sh_chan, slave_id); in sh_dmae_set_slave()
361 sh_chan->config = cfg; in sh_dmae_set_slave()
362 sh_chan->slave_addr = slave_addr ? : cfg->addr; in sh_dmae_set_slave()
368 static void dmae_halt(struct sh_dmae_chan *sh_chan) in dmae_halt() argument
370 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_halt()
371 u32 chcr = chcr_read(sh_chan); in dmae_halt()
374 chcr_write(sh_chan, chcr); in dmae_halt()
396 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_halt() local
398 dmae_halt(sh_chan); in sh_dmae_halt()
403 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_chan_irq() local
406 if (!(chcr_read(sh_chan) & CHCR_TE)) in sh_dmae_chan_irq()
410 dmae_halt(sh_chan); in sh_dmae_chan_irq()
418 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_get_partial() local
423 (sh_dmae_readl(sh_chan, TCR) << sh_chan->xmit_shift); in sh_dmae_get_partial()
456 struct sh_dmae_chan *sh_chan = container_of(schan, in sh_dmae_desc_completed() local
460 u32 sar_buf = sh_dmae_readl(sh_chan, SAR); in sh_dmae_desc_completed()
461 u32 dar_buf = sh_dmae_readl(sh_chan, DAR); in sh_dmae_desc_completed()
523 struct sh_dmae_chan *sh_chan; in sh_dmae_chan_probe() local
527 sh_chan = devm_kzalloc(sdev->dma_dev.dev, sizeof(struct sh_dmae_chan), in sh_dmae_chan_probe()
529 if (!sh_chan) in sh_dmae_chan_probe()
532 schan = &sh_chan->shdma_chan; in sh_dmae_chan_probe()
537 sh_chan->base = shdev->chan_reg + chan_pdata->offset; in sh_dmae_chan_probe()
541 snprintf(sh_chan->dev_id, sizeof(sh_chan->dev_id), in sh_dmae_chan_probe()
544 snprintf(sh_chan->dev_id, sizeof(sh_chan->dev_id), in sh_dmae_chan_probe()
547 err = shdma_request_irq(schan, irq, flags, sh_chan->dev_id); in sh_dmae_chan_probe()
555 shdev->chan[id] = sh_chan; in sh_dmae_chan_probe()
612 struct sh_dmae_chan *sh_chan = shdev->chan[i]; in sh_dmae_resume() local
614 if (!sh_chan->shdma_chan.desc_num) in sh_dmae_resume()
617 if (sh_chan->shdma_chan.slave_id >= 0) { in sh_dmae_resume()
618 const struct sh_dmae_slave_config *cfg = sh_chan->config; in sh_dmae_resume()
619 dmae_set_dmars(sh_chan, cfg->mid_rid); in sh_dmae_resume()
620 dmae_set_chcr(sh_chan, cfg->chcr); in sh_dmae_resume()
622 dmae_init(sh_chan); in sh_dmae_resume()
638 struct sh_dmae_chan *sh_chan = container_of(schan, in sh_dmae_slave_addr() local
646 return sh_chan->slave_addr; in sh_dmae_slave_addr()