Lines Matching refs:shdev

70 	struct sh_dmae_device *shdev = to_sh_dev(sh_dc);  in channel_clear()  local
71 const struct sh_dmae_channel *chan_pdata = shdev->pdata->channel + in channel_clear()
73 u32 val = shdev->pdata->chclr_bitwise ? 1 << chan_pdata->chclr_bit : 0; in channel_clear()
75 __raw_writel(val, shdev->chan_reg + chan_pdata->chclr_offset); in channel_clear()
88 static u16 dmaor_read(struct sh_dmae_device *shdev) in dmaor_read() argument
90 void __iomem *addr = shdev->chan_reg + DMAOR; in dmaor_read()
92 if (shdev->pdata->dmaor_is_32bit) in dmaor_read()
98 static void dmaor_write(struct sh_dmae_device *shdev, u16 data) in dmaor_write() argument
100 void __iomem *addr = shdev->chan_reg + DMAOR; in dmaor_write()
102 if (shdev->pdata->dmaor_is_32bit) in dmaor_write()
110 struct sh_dmae_device *shdev = to_sh_dev(sh_dc); in chcr_write() local
112 __raw_writel(data, sh_dc->base + shdev->chcr_offset); in chcr_write()
117 struct sh_dmae_device *shdev = to_sh_dev(sh_dc); in chcr_read() local
119 return __raw_readl(sh_dc->base + shdev->chcr_offset); in chcr_read()
127 static void sh_dmae_ctl_stop(struct sh_dmae_device *shdev) in sh_dmae_ctl_stop() argument
134 dmaor = dmaor_read(shdev); in sh_dmae_ctl_stop()
135 dmaor_write(shdev, dmaor & ~(DMAOR_NMIF | DMAOR_AE | DMAOR_DME)); in sh_dmae_ctl_stop()
140 static int sh_dmae_rst(struct sh_dmae_device *shdev) in sh_dmae_rst() argument
147 dmaor = dmaor_read(shdev) & ~(DMAOR_NMIF | DMAOR_AE | DMAOR_DME); in sh_dmae_rst()
149 if (shdev->pdata->chclr_present) { in sh_dmae_rst()
151 for (i = 0; i < shdev->pdata->channel_num; i++) { in sh_dmae_rst()
152 struct sh_dmae_chan *sh_chan = shdev->chan[i]; in sh_dmae_rst()
158 dmaor_write(shdev, dmaor | shdev->pdata->dmaor_init); in sh_dmae_rst()
160 dmaor = dmaor_read(shdev); in sh_dmae_rst()
165 dev_warn(shdev->shdma_dev.dma_dev.dev, "Can't initialize DMAOR.\n"); in sh_dmae_rst()
168 if (shdev->pdata->dmaor_init & ~dmaor) in sh_dmae_rst()
169 dev_warn(shdev->shdma_dev.dma_dev.dev, in sh_dmae_rst()
171 dmaor, shdev->pdata->dmaor_init); in sh_dmae_rst()
187 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in calc_xmit_shift() local
188 const struct sh_dmae_pdata *pdata = shdev->pdata; in calc_xmit_shift()
200 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in log2size_to_chcr() local
201 const struct sh_dmae_pdata *pdata = shdev->pdata; in log2size_to_chcr()
224 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_start() local
227 if (shdev->pdata->needs_tend_set) in dmae_start()
230 chcr |= CHCR_DE | shdev->chcr_ie_bit; in dmae_start()
259 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_set_dmars() local
260 const struct sh_dmae_pdata *pdata = shdev->pdata; in dmae_set_dmars()
262 void __iomem *addr = shdev->dmars; in dmae_set_dmars()
273 addr = shdev->chan_reg; in dmae_set_dmars()
328 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_find_slave() local
329 const struct sh_dmae_pdata *pdata = shdev->pdata; in dmae_find_slave()
370 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_halt() local
373 chcr &= ~(CHCR_DE | CHCR_TE | shdev->chcr_ie_bit); in dmae_halt()
427 static bool sh_dmae_reset(struct sh_dmae_device *shdev) in sh_dmae_reset() argument
432 sh_dmae_ctl_stop(shdev); in sh_dmae_reset()
435 ret = shdma_reset(&shdev->shdma_dev); in sh_dmae_reset()
437 sh_dmae_rst(shdev); in sh_dmae_reset()
444 struct sh_dmae_device *shdev = data; in sh_dmae_err() local
446 if (!(dmaor_read(shdev) & DMAOR_AE)) in sh_dmae_err()
449 sh_dmae_reset(shdev); in sh_dmae_err()
469 static bool sh_dmae_nmi_notify(struct sh_dmae_device *shdev) in sh_dmae_nmi_notify() argument
472 if ((dmaor_read(shdev) & DMAOR_NMIF) == 0) in sh_dmae_nmi_notify()
475 return sh_dmae_reset(shdev); in sh_dmae_nmi_notify()
481 struct sh_dmae_device *shdev; in sh_dmae_nmi_handler() local
495 list_for_each_entry_rcu(shdev, &sh_dmae_devices, node) { in sh_dmae_nmi_handler()
501 triggered = sh_dmae_nmi_notify(shdev); in sh_dmae_nmi_handler()
517 static int sh_dmae_chan_probe(struct sh_dmae_device *shdev, int id, in sh_dmae_chan_probe() argument
520 const struct sh_dmae_channel *chan_pdata = &shdev->pdata->channel[id]; in sh_dmae_chan_probe()
521 struct shdma_dev *sdev = &shdev->shdma_dev; in sh_dmae_chan_probe()
537 sh_chan->base = shdev->chan_reg + chan_pdata->offset; in sh_dmae_chan_probe()
555 shdev->chan[id] = sh_chan; in sh_dmae_chan_probe()
564 static void sh_dmae_chan_remove(struct sh_dmae_device *shdev) in sh_dmae_chan_remove() argument
569 shdma_for_each_chan(schan, &shdev->shdma_dev, i) { in sh_dmae_chan_remove()
579 struct sh_dmae_device *shdev = dev_get_drvdata(dev); in sh_dmae_runtime_suspend() local
581 sh_dmae_ctl_stop(shdev); in sh_dmae_runtime_suspend()
587 struct sh_dmae_device *shdev = dev_get_drvdata(dev); in sh_dmae_runtime_resume() local
589 return sh_dmae_rst(shdev); in sh_dmae_runtime_resume()
596 struct sh_dmae_device *shdev = dev_get_drvdata(dev); in sh_dmae_suspend() local
598 sh_dmae_ctl_stop(shdev); in sh_dmae_suspend()
604 struct sh_dmae_device *shdev = dev_get_drvdata(dev); in sh_dmae_resume() local
607 ret = sh_dmae_rst(shdev); in sh_dmae_resume()
611 for (i = 0; i < shdev->pdata->channel_num; i++) { in sh_dmae_resume()
612 struct sh_dmae_chan *sh_chan = shdev->chan[i]; in sh_dmae_resume()
679 struct sh_dmae_device *shdev; in sh_dmae_probe() local
715 shdev = devm_kzalloc(&pdev->dev, sizeof(struct sh_dmae_device), in sh_dmae_probe()
717 if (!shdev) in sh_dmae_probe()
720 dma_dev = &shdev->shdma_dev.dma_dev; in sh_dmae_probe()
722 shdev->chan_reg = devm_ioremap_resource(&pdev->dev, chan); in sh_dmae_probe()
723 if (IS_ERR(shdev->chan_reg)) in sh_dmae_probe()
724 return PTR_ERR(shdev->chan_reg); in sh_dmae_probe()
726 shdev->dmars = devm_ioremap_resource(&pdev->dev, dmars); in sh_dmae_probe()
727 if (IS_ERR(shdev->dmars)) in sh_dmae_probe()
728 return PTR_ERR(shdev->dmars); in sh_dmae_probe()
744 shdev->shdma_dev.ops = &sh_dmae_shdma_ops; in sh_dmae_probe()
745 shdev->shdma_dev.desc_size = sizeof(struct sh_dmae_desc); in sh_dmae_probe()
746 err = shdma_init(&pdev->dev, &shdev->shdma_dev, in sh_dmae_probe()
752 shdev->pdata = pdata; in sh_dmae_probe()
755 shdev->chcr_offset = pdata->chcr_offset; in sh_dmae_probe()
757 shdev->chcr_offset = CHCR; in sh_dmae_probe()
760 shdev->chcr_ie_bit = pdata->chcr_ie_bit; in sh_dmae_probe()
762 shdev->chcr_ie_bit = CHCR_IE; in sh_dmae_probe()
764 platform_set_drvdata(pdev, shdev); in sh_dmae_probe()
772 list_add_tail_rcu(&shdev->node, &sh_dmae_devices); in sh_dmae_probe()
776 err = sh_dmae_rst(shdev); in sh_dmae_probe()
795 irqflags, "DMAC Address Error", shdev); in sh_dmae_probe()
847 err = sh_dmae_chan_probe(shdev, i, chan_irq[i], chan_flag[i]); in sh_dmae_probe()
859 err = dma_async_device_register(&shdev->shdma_dev.dma_dev); in sh_dmae_probe()
869 sh_dmae_chan_remove(shdev); in sh_dmae_probe()
874 list_del_rcu(&shdev->node); in sh_dmae_probe()
880 shdma_cleanup(&shdev->shdma_dev); in sh_dmae_probe()
889 struct sh_dmae_device *shdev = platform_get_drvdata(pdev); in sh_dmae_remove() local
890 struct dma_device *dma_dev = &shdev->shdma_dev.dma_dev; in sh_dmae_remove()
895 list_del_rcu(&shdev->node); in sh_dmae_remove()
900 sh_dmae_chan_remove(shdev); in sh_dmae_remove()
901 shdma_cleanup(&shdev->shdma_dev); in sh_dmae_remove()