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()
667 static bool jz4780_dma_chan_irq(struct jz4780_dma_dev *jzdma, in jz4780_dma_chan_irq() argument
670 const unsigned int soc_flags = jzdma->soc_data->flags; in jz4780_dma_chan_irq()
677 dcs = jz4780_dma_chn_readl(jzdma, jzchan->id, JZ_DMA_REG_DCS); in jz4780_dma_chan_irq()
678 jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DCS, 0); in jz4780_dma_chan_irq()
709 jz4780_dma_chn_writel(jzdma, jzchan->id, in jz4780_dma_chan_irq()
726 struct jz4780_dma_dev *jzdma = data; in jz4780_dma_irq_handler() local
727 unsigned int nb_channels = jzdma->soc_data->nb_channels; in jz4780_dma_irq_handler()
732 pending = jz4780_dma_ctrl_readl(jzdma, JZ_DMA_REG_DIRQP); in jz4780_dma_irq_handler()
735 if (jz4780_dma_chan_irq(jzdma, &jzdma->chan[i])) in jz4780_dma_irq_handler()
740 dmac = jz4780_dma_ctrl_readl(jzdma, JZ_DMA_REG_DMAC); in jz4780_dma_irq_handler()
742 jz4780_dma_ctrl_writel(jzdma, JZ_DMA_REG_DMAC, dmac); in jz4780_dma_irq_handler()
745 jz4780_dma_ctrl_writel(jzdma, JZ_DMA_REG_DIRQP, pending); in jz4780_dma_irq_handler()
779 struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan); in jz4780_dma_filter_fn() local
786 } else if (jzdma->chan_reserved & BIT(jzchan->id)) { in jz4780_dma_filter_fn()
798 struct jz4780_dma_dev *jzdma = ofdma->of_dma_data; in jz4780_of_dma_xlate() local
799 dma_cap_mask_t mask = jzdma->dma_device.cap_mask; in jz4780_of_dma_xlate()
809 if (data.channel >= jzdma->soc_data->nb_channels) { in jz4780_of_dma_xlate()
810 dev_err(jzdma->dma_device.dev, in jz4780_of_dma_xlate()
817 if (!(jzdma->chan_reserved & BIT(data.channel))) { in jz4780_of_dma_xlate()
818 dev_err(jzdma->dma_device.dev, in jz4780_of_dma_xlate()
824 jzdma->chan[data.channel].transfer_type = data.transfer_type; in jz4780_of_dma_xlate()
827 &jzdma->chan[data.channel].vchan.chan); in jz4780_of_dma_xlate()
838 struct jz4780_dma_dev *jzdma; in jz4780_dma_probe() local
853 jzdma = devm_kzalloc(dev, struct_size(jzdma, chan, in jz4780_dma_probe()
855 if (!jzdma) in jz4780_dma_probe()
858 jzdma->soc_data = soc_data; in jz4780_dma_probe()
859 platform_set_drvdata(pdev, jzdma); in jz4780_dma_probe()
867 jzdma->chn_base = devm_ioremap_resource(dev, res); in jz4780_dma_probe()
868 if (IS_ERR(jzdma->chn_base)) in jz4780_dma_probe()
869 return PTR_ERR(jzdma->chn_base); in jz4780_dma_probe()
873 jzdma->ctrl_base = devm_ioremap_resource(dev, res); in jz4780_dma_probe()
874 if (IS_ERR(jzdma->ctrl_base)) in jz4780_dma_probe()
875 return PTR_ERR(jzdma->ctrl_base); in jz4780_dma_probe()
882 jzdma->ctrl_base = jzdma->chn_base + JZ4780_DMA_CTRL_OFFSET; in jz4780_dma_probe()
892 jzdma->irq = ret; in jz4780_dma_probe()
894 ret = request_irq(jzdma->irq, jz4780_dma_irq_handler, 0, dev_name(dev), in jz4780_dma_probe()
895 jzdma); in jz4780_dma_probe()
897 dev_err(dev, "failed to request IRQ %u!\n", jzdma->irq); in jz4780_dma_probe()
901 jzdma->clk = devm_clk_get(dev, NULL); in jz4780_dma_probe()
902 if (IS_ERR(jzdma->clk)) { in jz4780_dma_probe()
904 ret = PTR_ERR(jzdma->clk); in jz4780_dma_probe()
908 clk_prepare_enable(jzdma->clk); in jz4780_dma_probe()
912 0, &jzdma->chan_reserved); in jz4780_dma_probe()
914 dd = &jzdma->dma_device; in jz4780_dma_probe()
942 jz4780_dma_ctrl_writel(jzdma, JZ_DMA_REG_DMAC, JZ_DMA_DMAC_DMAE | in jz4780_dma_probe()
946 jz4780_dma_ctrl_writel(jzdma, JZ_DMA_REG_DMACP, 0); in jz4780_dma_probe()
951 jzchan = &jzdma->chan[i]; in jz4780_dma_probe()
966 jzdma); in jz4780_dma_probe()
976 clk_disable_unprepare(jzdma->clk); in jz4780_dma_probe()
979 free_irq(jzdma->irq, jzdma); in jz4780_dma_probe()
985 struct jz4780_dma_dev *jzdma = platform_get_drvdata(pdev); in jz4780_dma_remove() local
990 free_irq(jzdma->irq, jzdma); in jz4780_dma_remove()
992 for (i = 0; i < jzdma->soc_data->nb_channels; i++) in jz4780_dma_remove()
993 tasklet_kill(&jzdma->chan[i].vchan.task); in jz4780_dma_remove()