Lines Matching refs:sc
54 #define to_sdev(sc) container_of(sc->shdma_chan.dma_chan.device, \ argument
82 static void sudmac_writel(struct sudmac_chan *sc, u32 data, u32 reg) in sudmac_writel() argument
84 iowrite32(data, sc->base + reg); in sudmac_writel()
87 static u32 sudmac_readl(struct sudmac_chan *sc, u32 reg) in sudmac_readl() argument
89 return ioread32(sc->base + reg); in sudmac_readl()
92 static bool sudmac_is_busy(struct sudmac_chan *sc) in sudmac_is_busy() argument
94 u32 den = sudmac_readl(sc, SUDMAC_CH0DEN + sc->offset); in sudmac_is_busy()
102 static void sudmac_set_reg(struct sudmac_chan *sc, struct sudmac_regs *hw, in sudmac_set_reg() argument
105 sudmac_writel(sc, sc->cfg, SUDMAC_CH0CFG + sc->offset); in sudmac_set_reg()
106 sudmac_writel(sc, hw->base_addr, SUDMAC_CH0BA + sc->offset); in sudmac_set_reg()
107 sudmac_writel(sc, hw->base_byte_count, SUDMAC_CH0BBC + sc->offset); in sudmac_set_reg()
110 static void sudmac_start(struct sudmac_chan *sc) in sudmac_start() argument
112 u32 dintctrl = sudmac_readl(sc, SUDMAC_DINTCTRL); in sudmac_start()
114 sudmac_writel(sc, dintctrl | sc->dint_end_bit, SUDMAC_DINTCTRL); in sudmac_start()
115 sudmac_writel(sc, 1, SUDMAC_CH0DEN + sc->offset); in sudmac_start()
121 struct sudmac_chan *sc = to_chan(schan); in sudmac_start_xfer() local
124 sudmac_set_reg(sc, &sd->hw, sdesc); in sudmac_start_xfer()
125 sudmac_start(sc); in sudmac_start_xfer()
130 struct sudmac_chan *sc = to_chan(schan); in sudmac_channel_busy() local
132 return sudmac_is_busy(sc); in sudmac_channel_busy()
140 struct sudmac_chan *sc, int slave_id) in sudmac_find_slave() argument
142 struct sudmac_device *sdev = to_sdev(sc); in sudmac_find_slave()
157 struct sudmac_chan *sc = to_chan(schan); in sudmac_set_slave() local
158 const struct sudmac_slave_config *cfg = sudmac_find_slave(sc, slave_id); in sudmac_set_slave()
166 static inline void sudmac_dma_halt(struct sudmac_chan *sc) in sudmac_dma_halt() argument
168 u32 dintctrl = sudmac_readl(sc, SUDMAC_DINTCTRL); in sudmac_dma_halt()
170 sudmac_writel(sc, 0, SUDMAC_CH0DEN + sc->offset); in sudmac_dma_halt()
171 sudmac_writel(sc, dintctrl & ~sc->dint_end_bit, SUDMAC_DINTCTRL); in sudmac_dma_halt()
172 sudmac_writel(sc, sc->dint_end_bit, SUDMAC_DINTSTSCLR); in sudmac_dma_halt()
179 struct sudmac_chan *sc = to_chan(schan); in sudmac_desc_setup() local
182 dev_dbg(sc->shdma_chan.dev, "%s: src=%pad, dst=%pad, len=%zu\n", in sudmac_desc_setup()
199 struct sudmac_chan *sc = to_chan(schan); in sudmac_halt() local
201 sudmac_dma_halt(sc); in sudmac_halt()
206 struct sudmac_chan *sc = to_chan(schan); in sudmac_chan_irq() local
207 u32 dintsts = sudmac_readl(sc, SUDMAC_DINTSTS); in sudmac_chan_irq()
209 if (!(dintsts & sc->dint_end_bit)) in sudmac_chan_irq()
213 sudmac_dma_halt(sc); in sudmac_chan_irq()
221 struct sudmac_chan *sc = to_chan(schan); in sudmac_get_partial() local
223 u32 current_byte_count = sudmac_readl(sc, SUDMAC_CH0CBC + sc->offset); in sudmac_get_partial()
231 struct sudmac_chan *sc = to_chan(schan); in sudmac_desc_completed() local
233 u32 current_addr = sudmac_readl(sc, SUDMAC_CH0CA + sc->offset); in sudmac_desc_completed()
243 struct sudmac_chan *sc; in sudmac_chan_probe() local
247 sc = devm_kzalloc(&pdev->dev, sizeof(struct sudmac_chan), GFP_KERNEL); in sudmac_chan_probe()
248 if (!sc) in sudmac_chan_probe()
251 schan = &sc->shdma_chan; in sudmac_chan_probe()
256 sc->base = su_dev->chan_reg; in sudmac_chan_probe()
259 sc->offset = su_dev->pdata->channel->offset; in sudmac_chan_probe()
261 sc->cfg |= SUDMAC_SENDBUFM; in sudmac_chan_probe()
263 sc->cfg |= SUDMAC_RCVENDM; in sudmac_chan_probe()
264 sc->cfg |= (su_dev->pdata->channel->wait << 4) & SUDMAC_LBA_WAIT; in sudmac_chan_probe()
267 sc->dint_end_bit |= SUDMAC_CH0ENDE; in sudmac_chan_probe()
269 sc->dint_end_bit |= SUDMAC_CH1ENDE; in sudmac_chan_probe()
273 snprintf(sc->dev_id, sizeof(sc->dev_id), "sudmac%d.%d", in sudmac_chan_probe()
276 snprintf(sc->dev_id, sizeof(sc->dev_id), "sudmac%d", id); in sudmac_chan_probe()
278 err = shdma_request_irq(schan, irq, flags, sc->dev_id); in sudmac_chan_probe()