Lines Matching refs:jzdma
182 static inline uint32_t jz4780_dma_chn_readl(struct jz4780_dma_dev *jzdma, in jz4780_dma_chn_readl() argument
185 return readl(jzdma->chn_base + reg + JZ_DMA_REG_CHAN(chn)); in jz4780_dma_chn_readl()
188 static inline void jz4780_dma_chn_writel(struct jz4780_dma_dev *jzdma, in jz4780_dma_chn_writel() argument
191 writel(val, jzdma->chn_base + reg + JZ_DMA_REG_CHAN(chn)); in jz4780_dma_chn_writel()
194 static inline uint32_t jz4780_dma_ctrl_readl(struct jz4780_dma_dev *jzdma, in jz4780_dma_ctrl_readl() argument
197 return readl(jzdma->ctrl_base + reg); in jz4780_dma_ctrl_readl()
200 static inline void jz4780_dma_ctrl_writel(struct jz4780_dma_dev *jzdma, in jz4780_dma_ctrl_writel() argument
203 writel(val, jzdma->ctrl_base + reg); in jz4780_dma_ctrl_writel()
206 static inline void jz4780_dma_chan_enable(struct jz4780_dma_dev *jzdma, in jz4780_dma_chan_enable() argument
209 if (jzdma->soc_data->flags & JZ_SOC_DATA_PER_CHAN_PM) { in jz4780_dma_chan_enable()
212 if (jzdma->soc_data->flags & JZ_SOC_DATA_NO_DCKES_DCKEC) in jz4780_dma_chan_enable()
217 jz4780_dma_ctrl_writel(jzdma, reg, BIT(chn)); in jz4780_dma_chan_enable()
221 static inline void jz4780_dma_chan_disable(struct jz4780_dma_dev *jzdma, in jz4780_dma_chan_disable() argument
224 if ((jzdma->soc_data->flags & JZ_SOC_DATA_PER_CHAN_PM) && in jz4780_dma_chan_disable()
225 !(jzdma->soc_data->flags & JZ_SOC_DATA_NO_DCKES_DCKEC)) in jz4780_dma_chan_disable()
226 jz4780_dma_ctrl_writel(jzdma, JZ_DMA_REG_DCKEC, BIT(chn)); in jz4780_dma_chan_disable()
266 struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan); in jz4780_dma_transfer_size() local
278 else if (ord > jzdma->soc_data->transfer_ord_max) in jz4780_dma_transfer_size()
279 ord = jzdma->soc_data->transfer_ord_max; in jz4780_dma_transfer_size()
359 struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan); in jz4780_dma_prep_slave_sg() local
381 !(jzdma->soc_data->flags & JZ_SOC_DATA_BREAK_LINKS)) { in jz4780_dma_prep_slave_sg()
480 struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan); in jz4780_dma_begin() local
524 jz4780_dma_chan_enable(jzdma, jzchan->id); in jz4780_dma_begin()
527 jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DCS, 0); in jz4780_dma_begin()
530 jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DRT, in jz4780_dma_begin()
539 jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DTC, in jz4780_dma_begin()
545 jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DDA, desc_phys); in jz4780_dma_begin()
546 jz4780_dma_ctrl_writel(jzdma, JZ_DMA_REG_DDRS, BIT(jzchan->id)); in jz4780_dma_begin()
549 jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DCS, in jz4780_dma_begin()
569 struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan); in jz4780_dma_terminate_all() local
576 jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DCS, 0); in jz4780_dma_terminate_all()
582 jz4780_dma_chan_disable(jzdma, jzchan->id); in jz4780_dma_terminate_all()
595 struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan); in jz4780_dma_synchronize() local
598 jz4780_dma_chan_disable(jzdma, jzchan->id); in jz4780_dma_synchronize()
619 struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan); in jz4780_dma_desc_residue() local
627 count += jz4780_dma_chn_readl(jzdma, jzchan->id, in jz4780_dma_desc_residue()
668 static bool jz4780_dma_chan_irq(struct jz4780_dma_dev *jzdma, in jz4780_dma_chan_irq() argument
671 const unsigned int soc_flags = jzdma->soc_data->flags; in jz4780_dma_chan_irq()
678 dcs = jz4780_dma_chn_readl(jzdma, jzchan->id, JZ_DMA_REG_DCS); in jz4780_dma_chan_irq()
679 jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DCS, 0); in jz4780_dma_chan_irq()
710 jz4780_dma_chn_writel(jzdma, jzchan->id, in jz4780_dma_chan_irq()
727 struct jz4780_dma_dev *jzdma = data; in jz4780_dma_irq_handler() local
728 unsigned int nb_channels = jzdma->soc_data->nb_channels; in jz4780_dma_irq_handler()
733 pending = jz4780_dma_ctrl_readl(jzdma, JZ_DMA_REG_DIRQP); in jz4780_dma_irq_handler()
736 if (jz4780_dma_chan_irq(jzdma, &jzdma->chan[i])) in jz4780_dma_irq_handler()
741 dmac = jz4780_dma_ctrl_readl(jzdma, JZ_DMA_REG_DMAC); in jz4780_dma_irq_handler()
743 jz4780_dma_ctrl_writel(jzdma, JZ_DMA_REG_DMAC, dmac); in jz4780_dma_irq_handler()
746 jz4780_dma_ctrl_writel(jzdma, JZ_DMA_REG_DIRQP, pending); in jz4780_dma_irq_handler()
780 struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan); in jz4780_dma_filter_fn() local
787 } else if (jzdma->chan_reserved & BIT(jzchan->id)) { in jz4780_dma_filter_fn()
799 struct jz4780_dma_dev *jzdma = ofdma->of_dma_data; in jz4780_of_dma_xlate() local
800 dma_cap_mask_t mask = jzdma->dma_device.cap_mask; in jz4780_of_dma_xlate()
810 if (data.channel >= jzdma->soc_data->nb_channels) { in jz4780_of_dma_xlate()
811 dev_err(jzdma->dma_device.dev, in jz4780_of_dma_xlate()
818 if (!(jzdma->chan_reserved & BIT(data.channel))) { in jz4780_of_dma_xlate()
819 dev_err(jzdma->dma_device.dev, in jz4780_of_dma_xlate()
825 jzdma->chan[data.channel].transfer_type = data.transfer_type; in jz4780_of_dma_xlate()
828 &jzdma->chan[data.channel].vchan.chan); in jz4780_of_dma_xlate()
839 struct jz4780_dma_dev *jzdma; in jz4780_dma_probe() local
854 jzdma = devm_kzalloc(dev, struct_size(jzdma, chan, in jz4780_dma_probe()
856 if (!jzdma) in jz4780_dma_probe()
859 jzdma->soc_data = soc_data; in jz4780_dma_probe()
860 platform_set_drvdata(pdev, jzdma); in jz4780_dma_probe()
862 jzdma->chn_base = devm_platform_ioremap_resource(pdev, 0); in jz4780_dma_probe()
863 if (IS_ERR(jzdma->chn_base)) in jz4780_dma_probe()
864 return PTR_ERR(jzdma->chn_base); in jz4780_dma_probe()
868 jzdma->ctrl_base = devm_ioremap_resource(dev, res); in jz4780_dma_probe()
869 if (IS_ERR(jzdma->ctrl_base)) in jz4780_dma_probe()
870 return PTR_ERR(jzdma->ctrl_base); in jz4780_dma_probe()
877 jzdma->ctrl_base = jzdma->chn_base + JZ4780_DMA_CTRL_OFFSET; in jz4780_dma_probe()
883 jzdma->clk = devm_clk_get(dev, NULL); in jz4780_dma_probe()
884 if (IS_ERR(jzdma->clk)) { in jz4780_dma_probe()
886 ret = PTR_ERR(jzdma->clk); in jz4780_dma_probe()
890 clk_prepare_enable(jzdma->clk); in jz4780_dma_probe()
894 0, &jzdma->chan_reserved); in jz4780_dma_probe()
896 dd = &jzdma->dma_device; in jz4780_dma_probe()
924 jz4780_dma_ctrl_writel(jzdma, JZ_DMA_REG_DMAC, JZ_DMA_DMAC_DMAE | in jz4780_dma_probe()
928 jz4780_dma_ctrl_writel(jzdma, JZ_DMA_REG_DMACP, 0); in jz4780_dma_probe()
933 jzchan = &jzdma->chan[i]; in jz4780_dma_probe()
944 jzdma->irq = ret; in jz4780_dma_probe()
946 ret = request_irq(jzdma->irq, jz4780_dma_irq_handler, 0, dev_name(dev), in jz4780_dma_probe()
947 jzdma); in jz4780_dma_probe()
949 dev_err(dev, "failed to request IRQ %u!\n", jzdma->irq); in jz4780_dma_probe()
961 jzdma); in jz4780_dma_probe()
971 free_irq(jzdma->irq, jzdma); in jz4780_dma_probe()
974 clk_disable_unprepare(jzdma->clk); in jz4780_dma_probe()
980 struct jz4780_dma_dev *jzdma = platform_get_drvdata(pdev); in jz4780_dma_remove() local
985 clk_disable_unprepare(jzdma->clk); in jz4780_dma_remove()
986 free_irq(jzdma->irq, jzdma); in jz4780_dma_remove()
988 for (i = 0; i < jzdma->soc_data->nb_channels; i++) in jz4780_dma_remove()
989 tasklet_kill(&jzdma->chan[i].vchan.task); in jz4780_dma_remove()