Lines Matching refs:phy
97 struct mmp_pdma_phy *phy; member
130 struct mmp_pdma_phy *phy; member
143 static void set_desc(struct mmp_pdma_phy *phy, dma_addr_t addr) in set_desc() argument
145 u32 reg = (phy->idx << 4) + DDADR; in set_desc()
147 writel(addr, phy->base + reg); in set_desc()
150 static void enable_chan(struct mmp_pdma_phy *phy) in enable_chan() argument
154 if (!phy->vchan) in enable_chan()
157 reg = DRCMR(phy->vchan->drcmr); in enable_chan()
158 writel(DRCMR_MAPVLD | phy->idx, phy->base + reg); in enable_chan()
160 dalgn = readl(phy->base + DALGN); in enable_chan()
161 if (phy->vchan->byte_align) in enable_chan()
162 dalgn |= 1 << phy->idx; in enable_chan()
164 dalgn &= ~(1 << phy->idx); in enable_chan()
165 writel(dalgn, phy->base + DALGN); in enable_chan()
167 reg = (phy->idx << 2) + DCSR; in enable_chan()
168 writel(readl(phy->base + reg) | DCSR_RUN, phy->base + reg); in enable_chan()
171 static void disable_chan(struct mmp_pdma_phy *phy) in disable_chan() argument
175 if (!phy) in disable_chan()
178 reg = (phy->idx << 2) + DCSR; in disable_chan()
179 writel(readl(phy->base + reg) & ~DCSR_RUN, phy->base + reg); in disable_chan()
182 static int clear_chan_irq(struct mmp_pdma_phy *phy) in clear_chan_irq() argument
185 u32 dint = readl(phy->base + DINT); in clear_chan_irq()
186 u32 reg = (phy->idx << 2) + DCSR; in clear_chan_irq()
188 if (!(dint & BIT(phy->idx))) in clear_chan_irq()
192 dcsr = readl(phy->base + reg); in clear_chan_irq()
193 writel(dcsr, phy->base + reg); in clear_chan_irq()
194 if ((dcsr & DCSR_BUSERR) && (phy->vchan)) in clear_chan_irq()
195 dev_warn(phy->vchan->dev, "DCSR_BUSERR\n"); in clear_chan_irq()
202 struct mmp_pdma_phy *phy = dev_id; in mmp_pdma_chan_handler() local
204 if (clear_chan_irq(phy) != 0) in mmp_pdma_chan_handler()
207 tasklet_schedule(&phy->vchan->tasklet); in mmp_pdma_chan_handler()
214 struct mmp_pdma_phy *phy; in mmp_pdma_int_handler() local
225 phy = &pdev->phy[i]; in mmp_pdma_int_handler()
226 ret = mmp_pdma_chan_handler(irq, phy); in mmp_pdma_int_handler()
242 struct mmp_pdma_phy *phy, *found = NULL; in lookup_phy() local
258 phy = &pdev->phy[i]; in lookup_phy()
259 if (!phy->vchan) { in lookup_phy()
260 phy->vchan = pchan; in lookup_phy()
261 found = phy; in lookup_phy()
278 if (!pchan->phy) in mmp_pdma_free_phy()
283 writel(0, pchan->phy->base + reg); in mmp_pdma_free_phy()
286 pchan->phy->vchan = NULL; in mmp_pdma_free_phy()
287 pchan->phy = NULL; in mmp_pdma_free_phy()
312 if (!chan->phy) { in start_pending_queue()
313 chan->phy = lookup_phy(chan); in start_pending_queue()
314 if (!chan->phy) { in start_pending_queue()
332 set_desc(chan->phy, desc->async_tx.phys); in start_pending_queue()
333 enable_chan(chan->phy); in start_pending_queue()
744 disable_chan(chan->phy); in mmp_pdma_terminate_all()
767 if (!chan->phy) in mmp_pdma_residue()
771 curr = readl(chan->phy->base + DTADR(chan->phy->idx)); in mmp_pdma_residue()
773 curr = readl(chan->phy->base + DSADR(chan->phy->idx)); in mmp_pdma_residue()
942 struct mmp_pdma_phy *phy = &pdev->phy[idx]; in mmp_pdma_chan_init() local
950 phy->idx = idx; in mmp_pdma_chan_init()
951 phy->base = pdev->base; in mmp_pdma_chan_init()
955 IRQF_SHARED, "pdma", phy); in mmp_pdma_chan_init()
1036 pdev->phy = devm_kcalloc(pdev->dev, dma_channels, sizeof(*pdev->phy), in mmp_pdma_probe()
1038 if (pdev->phy == NULL) in mmp_pdma_probe()