Lines Matching refs:shdev

74 	struct sh_dmae_device *shdev = to_sh_dev(sh_dc);  in channel_clear()  local
75 const struct sh_dmae_channel *chan_pdata = shdev->pdata->channel + in channel_clear()
77 u32 val = shdev->pdata->chclr_bitwise ? 1 << chan_pdata->chclr_bit : 0; in channel_clear()
79 __raw_writel(val, shdev->chan_reg + chan_pdata->chclr_offset); in channel_clear()
92 static u16 dmaor_read(struct sh_dmae_device *shdev) in dmaor_read() argument
94 void __iomem *addr = shdev->chan_reg + DMAOR; in dmaor_read()
96 if (shdev->pdata->dmaor_is_32bit) in dmaor_read()
102 static void dmaor_write(struct sh_dmae_device *shdev, u16 data) in dmaor_write() argument
104 void __iomem *addr = shdev->chan_reg + DMAOR; in dmaor_write()
106 if (shdev->pdata->dmaor_is_32bit) in dmaor_write()
114 struct sh_dmae_device *shdev = to_sh_dev(sh_dc); in chcr_write() local
116 __raw_writel(data, sh_dc->base + shdev->chcr_offset); in chcr_write()
121 struct sh_dmae_device *shdev = to_sh_dev(sh_dc); in chcr_read() local
123 return __raw_readl(sh_dc->base + shdev->chcr_offset); in chcr_read()
131 static void sh_dmae_ctl_stop(struct sh_dmae_device *shdev) in sh_dmae_ctl_stop() argument
138 dmaor = dmaor_read(shdev); in sh_dmae_ctl_stop()
139 dmaor_write(shdev, dmaor & ~(DMAOR_NMIF | DMAOR_AE | DMAOR_DME)); in sh_dmae_ctl_stop()
144 static int sh_dmae_rst(struct sh_dmae_device *shdev) in sh_dmae_rst() argument
151 dmaor = dmaor_read(shdev) & ~(DMAOR_NMIF | DMAOR_AE | DMAOR_DME); in sh_dmae_rst()
153 if (shdev->pdata->chclr_present) { in sh_dmae_rst()
155 for (i = 0; i < shdev->pdata->channel_num; i++) { in sh_dmae_rst()
156 struct sh_dmae_chan *sh_chan = shdev->chan[i]; in sh_dmae_rst()
162 dmaor_write(shdev, dmaor | shdev->pdata->dmaor_init); in sh_dmae_rst()
164 dmaor = dmaor_read(shdev); in sh_dmae_rst()
169 dev_warn(shdev->shdma_dev.dma_dev.dev, "Can't initialize DMAOR.\n"); in sh_dmae_rst()
172 if (shdev->pdata->dmaor_init & ~dmaor) in sh_dmae_rst()
173 dev_warn(shdev->shdma_dev.dma_dev.dev, in sh_dmae_rst()
175 dmaor, shdev->pdata->dmaor_init); in sh_dmae_rst()
191 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in calc_xmit_shift() local
192 const struct sh_dmae_pdata *pdata = shdev->pdata; in calc_xmit_shift()
204 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in log2size_to_chcr() local
205 const struct sh_dmae_pdata *pdata = shdev->pdata; in log2size_to_chcr()
228 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_start() local
231 if (shdev->pdata->needs_tend_set) in dmae_start()
234 chcr |= CHCR_DE | shdev->chcr_ie_bit; in dmae_start()
263 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_set_dmars() local
264 const struct sh_dmae_pdata *pdata = shdev->pdata; in dmae_set_dmars()
266 void __iomem *addr = shdev->dmars; in dmae_set_dmars()
277 addr = shdev->chan_reg; in dmae_set_dmars()
332 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_find_slave() local
333 const struct sh_dmae_pdata *pdata = shdev->pdata; in dmae_find_slave()
374 struct sh_dmae_device *shdev = to_sh_dev(sh_chan); in dmae_halt() local
377 chcr &= ~(CHCR_DE | CHCR_TE | shdev->chcr_ie_bit); in dmae_halt()
431 static bool sh_dmae_reset(struct sh_dmae_device *shdev) in sh_dmae_reset() argument
436 sh_dmae_ctl_stop(shdev); in sh_dmae_reset()
439 ret = shdma_reset(&shdev->shdma_dev); in sh_dmae_reset()
441 sh_dmae_rst(shdev); in sh_dmae_reset()
449 struct sh_dmae_device *shdev = data; in sh_dmae_err() local
451 if (!(dmaor_read(shdev) & DMAOR_AE)) in sh_dmae_err()
454 sh_dmae_reset(shdev); in sh_dmae_err()
475 static bool sh_dmae_nmi_notify(struct sh_dmae_device *shdev) in sh_dmae_nmi_notify() argument
478 if ((dmaor_read(shdev) & DMAOR_NMIF) == 0) in sh_dmae_nmi_notify()
481 return sh_dmae_reset(shdev); in sh_dmae_nmi_notify()
487 struct sh_dmae_device *shdev; in sh_dmae_nmi_handler() local
501 list_for_each_entry_rcu(shdev, &sh_dmae_devices, node) { in sh_dmae_nmi_handler()
507 triggered = sh_dmae_nmi_notify(shdev); in sh_dmae_nmi_handler()
523 static int sh_dmae_chan_probe(struct sh_dmae_device *shdev, int id, in sh_dmae_chan_probe() argument
526 const struct sh_dmae_channel *chan_pdata = &shdev->pdata->channel[id]; in sh_dmae_chan_probe()
527 struct shdma_dev *sdev = &shdev->shdma_dev; in sh_dmae_chan_probe()
546 sh_chan->base = shdev->chan_reg + chan_pdata->offset; in sh_dmae_chan_probe()
564 shdev->chan[id] = sh_chan; in sh_dmae_chan_probe()
573 static void sh_dmae_chan_remove(struct sh_dmae_device *shdev) in sh_dmae_chan_remove() argument
578 shdma_for_each_chan(schan, &shdev->shdma_dev, i) { in sh_dmae_chan_remove()
588 struct sh_dmae_device *shdev = dev_get_drvdata(dev); in sh_dmae_runtime_suspend() local
590 sh_dmae_ctl_stop(shdev); in sh_dmae_runtime_suspend()
596 struct sh_dmae_device *shdev = dev_get_drvdata(dev); in sh_dmae_runtime_resume() local
598 return sh_dmae_rst(shdev); in sh_dmae_runtime_resume()
605 struct sh_dmae_device *shdev = dev_get_drvdata(dev); in sh_dmae_suspend() local
607 sh_dmae_ctl_stop(shdev); in sh_dmae_suspend()
613 struct sh_dmae_device *shdev = dev_get_drvdata(dev); in sh_dmae_resume() local
616 ret = sh_dmae_rst(shdev); in sh_dmae_resume()
620 for (i = 0; i < shdev->pdata->channel_num; i++) { in sh_dmae_resume()
621 struct sh_dmae_chan *sh_chan = shdev->chan[i]; in sh_dmae_resume()
697 struct sh_dmae_device *shdev; in sh_dmae_probe() local
733 shdev = devm_kzalloc(&pdev->dev, sizeof(struct sh_dmae_device), in sh_dmae_probe()
735 if (!shdev) { in sh_dmae_probe()
740 dma_dev = &shdev->shdma_dev.dma_dev; in sh_dmae_probe()
742 shdev->chan_reg = devm_ioremap_resource(&pdev->dev, chan); in sh_dmae_probe()
743 if (IS_ERR(shdev->chan_reg)) in sh_dmae_probe()
744 return PTR_ERR(shdev->chan_reg); in sh_dmae_probe()
746 shdev->dmars = devm_ioremap_resource(&pdev->dev, dmars); in sh_dmae_probe()
747 if (IS_ERR(shdev->dmars)) in sh_dmae_probe()
748 return PTR_ERR(shdev->dmars); in sh_dmae_probe()
764 shdev->shdma_dev.ops = &sh_dmae_shdma_ops; in sh_dmae_probe()
765 shdev->shdma_dev.desc_size = sizeof(struct sh_dmae_desc); in sh_dmae_probe()
766 err = shdma_init(&pdev->dev, &shdev->shdma_dev, in sh_dmae_probe()
772 shdev->pdata = pdata; in sh_dmae_probe()
775 shdev->chcr_offset = pdata->chcr_offset; in sh_dmae_probe()
777 shdev->chcr_offset = CHCR; in sh_dmae_probe()
780 shdev->chcr_ie_bit = pdata->chcr_ie_bit; in sh_dmae_probe()
782 shdev->chcr_ie_bit = CHCR_IE; in sh_dmae_probe()
784 platform_set_drvdata(pdev, shdev); in sh_dmae_probe()
792 list_add_tail_rcu(&shdev->node, &sh_dmae_devices); in sh_dmae_probe()
796 err = sh_dmae_rst(shdev); in sh_dmae_probe()
815 "DMAC Address Error", shdev); in sh_dmae_probe()
868 err = sh_dmae_chan_probe(shdev, i, chan_irq[i], chan_flag[i]); in sh_dmae_probe()
880 err = dma_async_device_register(&shdev->shdma_dev.dma_dev); in sh_dmae_probe()
890 sh_dmae_chan_remove(shdev); in sh_dmae_probe()
897 list_del_rcu(&shdev->node); in sh_dmae_probe()
903 shdma_cleanup(&shdev->shdma_dev); in sh_dmae_probe()
912 struct sh_dmae_device *shdev = platform_get_drvdata(pdev); in sh_dmae_remove() local
913 struct dma_device *dma_dev = &shdev->shdma_dev.dma_dev; in sh_dmae_remove()
918 list_del_rcu(&shdev->node); in sh_dmae_remove()
923 sh_dmae_chan_remove(shdev); in sh_dmae_remove()
924 shdma_cleanup(&shdev->shdma_dev); in sh_dmae_remove()