Lines Matching refs:phy

98 	struct mmp_pdma_phy *phy;  member
131 struct mmp_pdma_phy *phy; member
144 static void set_desc(struct mmp_pdma_phy *phy, dma_addr_t addr) in set_desc() argument
146 u32 reg = (phy->idx << 4) + DDADR; in set_desc()
148 writel(addr, phy->base + reg); in set_desc()
151 static void enable_chan(struct mmp_pdma_phy *phy) in enable_chan() argument
155 if (!phy->vchan) in enable_chan()
158 reg = DRCMR(phy->vchan->drcmr); in enable_chan()
159 writel(DRCMR_MAPVLD | phy->idx, phy->base + reg); in enable_chan()
161 dalgn = readl(phy->base + DALGN); in enable_chan()
162 if (phy->vchan->byte_align) in enable_chan()
163 dalgn |= 1 << phy->idx; in enable_chan()
165 dalgn &= ~(1 << phy->idx); in enable_chan()
166 writel(dalgn, phy->base + DALGN); in enable_chan()
168 reg = (phy->idx << 2) + DCSR; in enable_chan()
169 writel(readl(phy->base + reg) | DCSR_RUN, phy->base + reg); in enable_chan()
172 static void disable_chan(struct mmp_pdma_phy *phy) in disable_chan() argument
176 if (!phy) in disable_chan()
179 reg = (phy->idx << 2) + DCSR; in disable_chan()
180 writel(readl(phy->base + reg) & ~DCSR_RUN, phy->base + reg); in disable_chan()
183 static int clear_chan_irq(struct mmp_pdma_phy *phy) in clear_chan_irq() argument
186 u32 dint = readl(phy->base + DINT); in clear_chan_irq()
187 u32 reg = (phy->idx << 2) + DCSR; in clear_chan_irq()
189 if (!(dint & BIT(phy->idx))) in clear_chan_irq()
193 dcsr = readl(phy->base + reg); in clear_chan_irq()
194 writel(dcsr, phy->base + reg); in clear_chan_irq()
195 if ((dcsr & DCSR_BUSERR) && (phy->vchan)) in clear_chan_irq()
196 dev_warn(phy->vchan->dev, "DCSR_BUSERR\n"); in clear_chan_irq()
203 struct mmp_pdma_phy *phy = dev_id; in mmp_pdma_chan_handler() local
205 if (clear_chan_irq(phy) != 0) in mmp_pdma_chan_handler()
208 tasklet_schedule(&phy->vchan->tasklet); in mmp_pdma_chan_handler()
215 struct mmp_pdma_phy *phy; in mmp_pdma_int_handler() local
226 phy = &pdev->phy[i]; in mmp_pdma_int_handler()
227 ret = mmp_pdma_chan_handler(irq, phy); in mmp_pdma_int_handler()
243 struct mmp_pdma_phy *phy, *found = NULL; in lookup_phy() local
259 phy = &pdev->phy[i]; in lookup_phy()
260 if (!phy->vchan) { in lookup_phy()
261 phy->vchan = pchan; in lookup_phy()
262 found = phy; in lookup_phy()
279 if (!pchan->phy) in mmp_pdma_free_phy()
284 writel(0, pchan->phy->base + reg); in mmp_pdma_free_phy()
287 pchan->phy->vchan = NULL; in mmp_pdma_free_phy()
288 pchan->phy = NULL; in mmp_pdma_free_phy()
313 if (!chan->phy) { in start_pending_queue()
314 chan->phy = lookup_phy(chan); in start_pending_queue()
315 if (!chan->phy) { in start_pending_queue()
333 set_desc(chan->phy, desc->async_tx.phys); in start_pending_queue()
334 enable_chan(chan->phy); in start_pending_queue()
745 disable_chan(chan->phy); in mmp_pdma_terminate_all()
768 if (!chan->phy) in mmp_pdma_residue()
772 curr = readl(chan->phy->base + DTADR(chan->phy->idx)); in mmp_pdma_residue()
774 curr = readl(chan->phy->base + DSADR(chan->phy->idx)); in mmp_pdma_residue()
943 struct mmp_pdma_phy *phy = &pdev->phy[idx]; in mmp_pdma_chan_init() local
951 phy->idx = idx; in mmp_pdma_chan_init()
952 phy->base = pdev->base; in mmp_pdma_chan_init()
956 IRQF_SHARED, "pdma", phy); in mmp_pdma_chan_init()
1037 pdev->phy = devm_kcalloc(pdev->dev, dma_channels, sizeof(*pdev->phy), in mmp_pdma_probe()
1039 if (pdev->phy == NULL) in mmp_pdma_probe()