Lines Matching refs:sh_chan

151 			struct sh_dmae_chan *sh_chan = shdev->chan[i];  in sh_dmae_rst()  local
152 if (sh_chan) in sh_dmae_rst()
153 channel_clear(sh_chan); in sh_dmae_rst()
174 static bool dmae_is_busy(struct sh_dmae_chan *sh_chan) in dmae_is_busy() argument
176 u32 chcr = chcr_read(sh_chan); in dmae_is_busy()
184 static unsigned int calc_xmit_shift(struct sh_dmae_chan *sh_chan, u32 chcr) in calc_xmit_shift() argument
186 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in calc_xmit_shift()
197 static u32 log2size_to_chcr(struct sh_dmae_chan *sh_chan, int l2size) in log2size_to_chcr() argument
199 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in log2size_to_chcr()
214 static void dmae_set_reg(struct sh_dmae_chan *sh_chan, struct sh_dmae_regs *hw) in dmae_set_reg() argument
216 sh_dmae_writel(sh_chan, hw->sar, SAR); in dmae_set_reg()
217 sh_dmae_writel(sh_chan, hw->dar, DAR); in dmae_set_reg()
218 sh_dmae_writel(sh_chan, hw->tcr >> sh_chan->xmit_shift, TCR); in dmae_set_reg()
221 static void dmae_start(struct sh_dmae_chan *sh_chan) in dmae_start() argument
223 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_start()
224 u32 chcr = chcr_read(sh_chan); in dmae_start()
227 sh_dmae_writel(sh_chan, 0xFFFFFFFF, TEND); in dmae_start()
230 chcr_write(sh_chan, chcr & ~CHCR_TE); in dmae_start()
233 static void dmae_init(struct sh_dmae_chan *sh_chan) in dmae_init() argument
238 u32 chcr = DM_INC | SM_INC | RS_AUTO | log2size_to_chcr(sh_chan, in dmae_init()
240 sh_chan->xmit_shift = calc_xmit_shift(sh_chan, chcr); in dmae_init()
241 chcr_write(sh_chan, chcr); in dmae_init()
244 static int dmae_set_chcr(struct sh_dmae_chan *sh_chan, u32 val) in dmae_set_chcr() argument
247 if (dmae_is_busy(sh_chan)) in dmae_set_chcr()
250 sh_chan->xmit_shift = calc_xmit_shift(sh_chan, val); in dmae_set_chcr()
251 chcr_write(sh_chan, val); in dmae_set_chcr()
256 static int dmae_set_dmars(struct sh_dmae_chan *sh_chan, u16 val) in dmae_set_dmars() argument
258 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_set_dmars()
260 const struct sh_dmae_channel *chan_pdata = &pdata->channel[sh_chan->shdma_chan.id]; in dmae_set_dmars()
264 if (dmae_is_busy(sh_chan)) in dmae_set_dmars()
284 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_start_xfer() local
288 dev_dbg(sh_chan->shdma_chan.dev, "Queue #%d to %d: %u@%x -> %x\n", in sh_dmae_start_xfer()
289 sdesc->async_tx.cookie, sh_chan->shdma_chan.id, in sh_dmae_start_xfer()
292 dmae_set_reg(sh_chan, &sh_desc->hw); in sh_dmae_start_xfer()
293 dmae_start(sh_chan); in sh_dmae_start_xfer()
298 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_channel_busy() local
300 return dmae_is_busy(sh_chan); in sh_dmae_channel_busy()
306 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_setup_xfer() local
311 sh_chan->config; in sh_dmae_setup_xfer()
313 dmae_set_dmars(sh_chan, cfg->mid_rid); in sh_dmae_setup_xfer()
314 dmae_set_chcr(sh_chan, cfg->chcr); in sh_dmae_setup_xfer()
316 dmae_init(sh_chan); in sh_dmae_setup_xfer()
325 struct sh_dmae_chan *sh_chan, int match) in dmae_find_slave() argument
327 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_find_slave()
332 if (!sh_chan->shdma_chan.dev->of_node) { in dmae_find_slave()
342 sh_chan->shdma_chan.slave_id = i; in dmae_find_slave()
353 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_set_slave() local
355 const struct sh_dmae_slave_config *cfg = dmae_find_slave(sh_chan, slave_id); in sh_dmae_set_slave()
360 sh_chan->config = cfg; in sh_dmae_set_slave()
361 sh_chan->slave_addr = slave_addr ? : cfg->addr; in sh_dmae_set_slave()
367 static void dmae_halt(struct sh_dmae_chan *sh_chan) in dmae_halt() argument
369 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_halt()
370 u32 chcr = chcr_read(sh_chan); in dmae_halt()
373 chcr_write(sh_chan, chcr); in dmae_halt()
395 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_halt() local
397 dmae_halt(sh_chan); in sh_dmae_halt()
402 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_chan_irq() local
405 if (!(chcr_read(sh_chan) & CHCR_TE)) in sh_dmae_chan_irq()
409 dmae_halt(sh_chan); in sh_dmae_chan_irq()
417 struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan, in sh_dmae_get_partial() local
422 (sh_dmae_readl(sh_chan, TCR) << sh_chan->xmit_shift); in sh_dmae_get_partial()
455 struct sh_dmae_chan *sh_chan = container_of(schan, in sh_dmae_desc_completed() local
459 u32 sar_buf = sh_dmae_readl(sh_chan, SAR); in sh_dmae_desc_completed()
460 u32 dar_buf = sh_dmae_readl(sh_chan, DAR); in sh_dmae_desc_completed()
522 struct sh_dmae_chan *sh_chan; in sh_dmae_chan_probe() local
526 sh_chan = devm_kzalloc(sdev->dma_dev.dev, sizeof(struct sh_dmae_chan), in sh_dmae_chan_probe()
528 if (!sh_chan) in sh_dmae_chan_probe()
531 schan = &sh_chan->shdma_chan; in sh_dmae_chan_probe()
536 sh_chan->base = shdev->chan_reg + chan_pdata->offset; in sh_dmae_chan_probe()
540 snprintf(sh_chan->dev_id, sizeof(sh_chan->dev_id), in sh_dmae_chan_probe()
543 snprintf(sh_chan->dev_id, sizeof(sh_chan->dev_id), in sh_dmae_chan_probe()
546 err = shdma_request_irq(schan, irq, flags, sh_chan->dev_id); in sh_dmae_chan_probe()
554 shdev->chan[id] = sh_chan; in sh_dmae_chan_probe()
611 struct sh_dmae_chan *sh_chan = shdev->chan[i]; in sh_dmae_resume() local
613 if (!sh_chan->shdma_chan.desc_num) in sh_dmae_resume()
616 if (sh_chan->shdma_chan.slave_id >= 0) { in sh_dmae_resume()
617 const struct sh_dmae_slave_config *cfg = sh_chan->config; in sh_dmae_resume()
618 dmae_set_dmars(sh_chan, cfg->mid_rid); in sh_dmae_resume()
619 dmae_set_chcr(sh_chan, cfg->chcr); in sh_dmae_resume()
621 dmae_init(sh_chan); in sh_dmae_resume()
637 struct sh_dmae_chan *sh_chan = container_of(schan, in sh_dmae_slave_addr() local
645 return sh_chan->slave_addr; in sh_dmae_slave_addr()