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