Lines Matching defs:sh_chan

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