Lines Matching refs:phy
118 struct pxad_phy *phy; member
145 #define _phy_readl_relaxed(phy, _reg) \ argument
146 readl_relaxed((phy)->base + _reg((phy)->idx))
147 #define phy_readl_relaxed(phy, _reg) \ argument
150 _v = readl_relaxed((phy)->base + _reg((phy)->idx)); \
151 dev_vdbg(&phy->vchan->vc.chan.dev->device, \
156 #define phy_writel(phy, val, _reg) \ argument
158 writel((val), (phy)->base + _reg((phy)->idx)); \
159 dev_vdbg(&phy->vchan->vc.chan.dev->device, \
163 #define phy_writel_relaxed(phy, val, _reg) \ argument
165 writel_relaxed((val), (phy)->base + _reg((phy)->idx)); \
166 dev_vdbg(&phy->vchan->vc.chan.dev->device, \
188 struct pxad_phy *phy = s->private; in dbg_show_requester_chan() local
192 seq_printf(s, "DMA channel %d requester :\n", phy->idx); in dbg_show_requester_chan()
194 drcmr = readl_relaxed(phy->base + pxad_drcmr(i)); in dbg_show_requester_chan()
195 if ((drcmr & DRCMR_CHLNUM) == phy->idx) in dbg_show_requester_chan()
219 struct pxad_phy *phy = s->private; in dbg_show_descriptors() local
225 phys_desc = ddadr = _phy_readl_relaxed(phy, DDADR); in dbg_show_descriptors()
227 seq_printf(s, "DMA channel %d descriptors :\n", phy->idx); in dbg_show_descriptors()
262 struct pxad_phy *phy = s->private; in dbg_show_chan_state() local
269 dcsr = _phy_readl_relaxed(phy, DCSR); in dbg_show_chan_state()
270 dcmd = _phy_readl_relaxed(phy, DCMD); in dbg_show_chan_state()
274 seq_printf(s, "DMA channel %d\n", phy->idx); in dbg_show_chan_state()
276 str_prio[(phy->idx & 0xf) / 4]); in dbg_show_chan_state()
278 _phy_readl_relaxed(phy, DALGN) & BIT(phy->idx) ? in dbg_show_chan_state()
296 seq_printf(s, "\tDSADR = %08x\n", _phy_readl_relaxed(phy, DSADR)); in dbg_show_chan_state()
297 seq_printf(s, "\tDTADR = %08x\n", _phy_readl_relaxed(phy, DTADR)); in dbg_show_chan_state()
298 seq_printf(s, "\tDDADR = %08x\n", _phy_readl_relaxed(phy, DDADR)); in dbg_show_chan_state()
426 struct pxad_phy *phy, *found = NULL; in lookup_phy() local
444 phy = &pdev->phys[i]; in lookup_phy()
445 if (!phy->vchan) { in lookup_phy()
446 phy->vchan = pchan; in lookup_phy()
447 found = phy; in lookup_phy()
473 if (!chan->phy) in pxad_free_phy()
479 writel_relaxed(0, chan->phy->base + reg); in pxad_free_phy()
484 if (chan->phy == &pdev->phys[i]) in pxad_free_phy()
486 chan->phy->vchan = NULL; in pxad_free_phy()
487 chan->phy = NULL; in pxad_free_phy()
494 struct pxad_phy *phy = chan->phy; in is_chan_running() local
496 if (!phy) in is_chan_running()
498 dcsr = phy_readl_relaxed(phy, DCSR); in is_chan_running()
506 BUG_ON(!chan->phy); in is_running_chan_misaligned()
507 dalgn = phy_readl_relaxed(chan->phy, DALGN); in is_running_chan_misaligned()
508 return dalgn & (BIT(chan->phy->idx)); in is_running_chan_misaligned()
511 static void phy_enable(struct pxad_phy *phy, bool misaligned) in phy_enable() argument
516 if (!phy->vchan) in phy_enable()
519 dev_dbg(&phy->vchan->vc.chan.dev->device, in phy_enable()
521 phy, phy->idx, misaligned); in phy_enable()
523 pdev = to_pxad_dev(phy->vchan->vc.chan.device); in phy_enable()
524 if (phy->vchan->drcmr <= pdev->nr_requestors) { in phy_enable()
525 reg = pxad_drcmr(phy->vchan->drcmr); in phy_enable()
526 writel_relaxed(DRCMR_MAPVLD | phy->idx, phy->base + reg); in phy_enable()
529 dalgn = phy_readl_relaxed(phy, DALGN); in phy_enable()
531 dalgn |= BIT(phy->idx); in phy_enable()
533 dalgn &= ~BIT(phy->idx); in phy_enable()
534 phy_writel_relaxed(phy, dalgn, DALGN); in phy_enable()
536 phy_writel(phy, PXA_DCSR_STOPIRQEN | PXA_DCSR_ENDINTR | in phy_enable()
540 static void phy_disable(struct pxad_phy *phy) in phy_disable() argument
544 if (!phy) in phy_disable()
547 dcsr = phy_readl_relaxed(phy, DCSR); in phy_disable()
548 dev_dbg(&phy->vchan->vc.chan.dev->device, in phy_disable()
549 "%s(): phy=%p(%d)\n", __func__, phy, phy->idx); in phy_disable()
550 phy_writel(phy, dcsr & ~PXA_DCSR_RUN & ~PXA_DCSR_STOPIRQEN, DCSR); in phy_disable()
558 if (!chan->phy) { in pxad_launch_chan()
559 chan->phy = lookup_phy(chan); in pxad_launch_chan()
560 if (!chan->phy) { in pxad_launch_chan()
571 phy_writel(chan->phy, desc->first, DDADR); in pxad_launch_chan()
572 phy_enable(chan->phy, chan->misaligned); in pxad_launch_chan()
643 static unsigned int clear_chan_irq(struct pxad_phy *phy) in clear_chan_irq() argument
646 u32 dint = readl(phy->base + DINT); in clear_chan_irq()
648 if (!(dint & BIT(phy->idx))) in clear_chan_irq()
652 dcsr = phy_readl_relaxed(phy, DCSR); in clear_chan_irq()
653 phy_writel(phy, dcsr, DCSR); in clear_chan_irq()
654 if ((dcsr & PXA_DCSR_BUSERR) && (phy->vchan)) in clear_chan_irq()
655 dev_warn(&phy->vchan->vc.chan.dev->device, in clear_chan_irq()
657 __func__, &phy->vchan); in clear_chan_irq()
664 struct pxad_phy *phy = dev_id; in pxad_chan_handler() local
665 struct pxad_chan *chan = phy->vchan; in pxad_chan_handler()
672 dcsr = clear_chan_irq(phy); in pxad_chan_handler()
699 phy_writel_relaxed(phy, dcsr & ~PXA_DCSR_STOPIRQEN, DCSR); in pxad_chan_handler()
718 struct pxad_phy *phy; in pxad_int_handler() local
725 phy = &pdev->phys[i]; in pxad_int_handler()
728 if (pxad_chan_handler(irq, phy) == IRQ_HANDLED) in pxad_int_handler()
1139 struct pxad_phy *phy; in pxad_terminate_all() local
1154 phy = chan->phy; in pxad_terminate_all()
1155 if (phy) { in pxad_terminate_all()
1156 phy_disable(chan->phy); in pxad_terminate_all()
1158 chan->phy = NULL; in pxad_terminate_all()
1160 phy->vchan = NULL; in pxad_terminate_all()
1184 if (!chan->phy) in pxad_residue()
1195 curr = phy_readl_relaxed(chan->phy, DSADR); in pxad_residue()
1197 curr = phy_readl_relaxed(chan->phy, DTADR); in pxad_residue()
1285 struct pxad_phy *phy; in pxad_init_phys() local
1301 phy = &pdev->phys[i]; in pxad_init_phys()
1302 phy->base = pdev->base; in pxad_init_phys()
1303 phy->idx = i; in pxad_init_phys()
1308 IRQF_SHARED, "pxa-dma", phy); in pxad_init_phys()