• Home
  • Raw
  • Download

Lines Matching refs:tx_chn

105 		bool tx_chn)  in of_k3_udma_glue_parse_chn()  argument
135 if (tx_chn && !(thread_id & K3_PSIL_DST_THREAD_ID_OFFSET)) { in of_k3_udma_glue_parse_chn()
140 if (!tx_chn && (thread_id & K3_PSIL_DST_THREAD_ID_OFFSET)) { in of_k3_udma_glue_parse_chn()
158 if (tx_chn) in of_k3_udma_glue_parse_chn()
170 static void k3_udma_glue_dump_tx_chn(struct k3_udma_glue_tx_channel *tx_chn) in k3_udma_glue_dump_tx_chn() argument
172 struct device *dev = tx_chn->common.dev; in k3_udma_glue_dump_tx_chn()
178 tx_chn->udma_tchan_id, in k3_udma_glue_dump_tx_chn()
179 tx_chn->common.src_thread, in k3_udma_glue_dump_tx_chn()
180 tx_chn->common.dst_thread); in k3_udma_glue_dump_tx_chn()
202 static int k3_udma_glue_cfg_tx_chn(struct k3_udma_glue_tx_channel *tx_chn) in k3_udma_glue_cfg_tx_chn() argument
204 const struct udma_tisci_rm *tisci_rm = tx_chn->common.tisci_rm; in k3_udma_glue_cfg_tx_chn()
218 req.index = tx_chn->udma_tchan_id; in k3_udma_glue_cfg_tx_chn()
219 if (tx_chn->tx_pause_on_err) in k3_udma_glue_cfg_tx_chn()
221 if (tx_chn->tx_filt_einfo) in k3_udma_glue_cfg_tx_chn()
223 if (tx_chn->tx_filt_pswords) in k3_udma_glue_cfg_tx_chn()
226 if (tx_chn->tx_supr_tdpkt) in k3_udma_glue_cfg_tx_chn()
228 req.tx_fetch_size = tx_chn->common.hdesc_size >> 2; in k3_udma_glue_cfg_tx_chn()
229 req.txcq_qnum = k3_ringacc_get_ring_id(tx_chn->ringtxcq); in k3_udma_glue_cfg_tx_chn()
230 req.tx_atype = tx_chn->common.atype; in k3_udma_glue_cfg_tx_chn()
238 struct k3_udma_glue_tx_channel *tx_chn; in k3_udma_glue_request_tx_chn() local
241 tx_chn = devm_kzalloc(dev, sizeof(*tx_chn), GFP_KERNEL); in k3_udma_glue_request_tx_chn()
242 if (!tx_chn) in k3_udma_glue_request_tx_chn()
245 tx_chn->common.dev = dev; in k3_udma_glue_request_tx_chn()
246 tx_chn->common.swdata_size = cfg->swdata_size; in k3_udma_glue_request_tx_chn()
247 tx_chn->tx_pause_on_err = cfg->tx_pause_on_err; in k3_udma_glue_request_tx_chn()
248 tx_chn->tx_filt_einfo = cfg->tx_filt_einfo; in k3_udma_glue_request_tx_chn()
249 tx_chn->tx_filt_pswords = cfg->tx_filt_pswords; in k3_udma_glue_request_tx_chn()
250 tx_chn->tx_supr_tdpkt = cfg->tx_supr_tdpkt; in k3_udma_glue_request_tx_chn()
254 &tx_chn->common, true); in k3_udma_glue_request_tx_chn()
258 tx_chn->common.hdesc_size = cppi5_hdesc_calc_size(tx_chn->common.epib, in k3_udma_glue_request_tx_chn()
259 tx_chn->common.psdata_size, in k3_udma_glue_request_tx_chn()
260 tx_chn->common.swdata_size); in k3_udma_glue_request_tx_chn()
263 tx_chn->udma_tchanx = xudma_tchan_get(tx_chn->common.udmax, -1); in k3_udma_glue_request_tx_chn()
264 if (IS_ERR(tx_chn->udma_tchanx)) { in k3_udma_glue_request_tx_chn()
265 ret = PTR_ERR(tx_chn->udma_tchanx); in k3_udma_glue_request_tx_chn()
269 tx_chn->udma_tchan_id = xudma_tchan_get_id(tx_chn->udma_tchanx); in k3_udma_glue_request_tx_chn()
271 atomic_set(&tx_chn->free_pkts, cfg->txcq_cfg.size); in k3_udma_glue_request_tx_chn()
274 ret = k3_ringacc_request_rings_pair(tx_chn->common.ringacc, in k3_udma_glue_request_tx_chn()
275 tx_chn->udma_tchan_id, -1, in k3_udma_glue_request_tx_chn()
276 &tx_chn->ringtx, in k3_udma_glue_request_tx_chn()
277 &tx_chn->ringtxcq); in k3_udma_glue_request_tx_chn()
283 ret = k3_ringacc_ring_cfg(tx_chn->ringtx, &cfg->tx_cfg); in k3_udma_glue_request_tx_chn()
289 ret = k3_ringacc_ring_cfg(tx_chn->ringtxcq, &cfg->txcq_cfg); in k3_udma_glue_request_tx_chn()
296 tx_chn->common.src_thread = in k3_udma_glue_request_tx_chn()
297 xudma_dev_get_psil_base(tx_chn->common.udmax) + in k3_udma_glue_request_tx_chn()
298 tx_chn->udma_tchan_id; in k3_udma_glue_request_tx_chn()
300 ret = k3_udma_glue_cfg_tx_chn(tx_chn); in k3_udma_glue_request_tx_chn()
306 ret = xudma_navss_psil_pair(tx_chn->common.udmax, in k3_udma_glue_request_tx_chn()
307 tx_chn->common.src_thread, in k3_udma_glue_request_tx_chn()
308 tx_chn->common.dst_thread); in k3_udma_glue_request_tx_chn()
314 tx_chn->psil_paired = true; in k3_udma_glue_request_tx_chn()
317 k3_udma_glue_disable_tx_chn(tx_chn); in k3_udma_glue_request_tx_chn()
319 k3_udma_glue_dump_tx_chn(tx_chn); in k3_udma_glue_request_tx_chn()
321 return tx_chn; in k3_udma_glue_request_tx_chn()
324 k3_udma_glue_release_tx_chn(tx_chn); in k3_udma_glue_request_tx_chn()
329 void k3_udma_glue_release_tx_chn(struct k3_udma_glue_tx_channel *tx_chn) in k3_udma_glue_release_tx_chn() argument
331 if (tx_chn->psil_paired) { in k3_udma_glue_release_tx_chn()
332 xudma_navss_psil_unpair(tx_chn->common.udmax, in k3_udma_glue_release_tx_chn()
333 tx_chn->common.src_thread, in k3_udma_glue_release_tx_chn()
334 tx_chn->common.dst_thread); in k3_udma_glue_release_tx_chn()
335 tx_chn->psil_paired = false; in k3_udma_glue_release_tx_chn()
338 if (!IS_ERR_OR_NULL(tx_chn->udma_tchanx)) in k3_udma_glue_release_tx_chn()
339 xudma_tchan_put(tx_chn->common.udmax, in k3_udma_glue_release_tx_chn()
340 tx_chn->udma_tchanx); in k3_udma_glue_release_tx_chn()
342 if (tx_chn->ringtxcq) in k3_udma_glue_release_tx_chn()
343 k3_ringacc_ring_free(tx_chn->ringtxcq); in k3_udma_glue_release_tx_chn()
345 if (tx_chn->ringtx) in k3_udma_glue_release_tx_chn()
346 k3_ringacc_ring_free(tx_chn->ringtx); in k3_udma_glue_release_tx_chn()
350 int k3_udma_glue_push_tx_chn(struct k3_udma_glue_tx_channel *tx_chn, in k3_udma_glue_push_tx_chn() argument
356 if (!atomic_add_unless(&tx_chn->free_pkts, -1, 0)) in k3_udma_glue_push_tx_chn()
359 ringtxcq_id = k3_ringacc_get_ring_id(tx_chn->ringtxcq); in k3_udma_glue_push_tx_chn()
362 return k3_ringacc_ring_push(tx_chn->ringtx, &desc_dma); in k3_udma_glue_push_tx_chn()
366 int k3_udma_glue_pop_tx_chn(struct k3_udma_glue_tx_channel *tx_chn, in k3_udma_glue_pop_tx_chn() argument
371 ret = k3_ringacc_ring_pop(tx_chn->ringtxcq, desc_dma); in k3_udma_glue_pop_tx_chn()
373 atomic_inc(&tx_chn->free_pkts); in k3_udma_glue_pop_tx_chn()
379 int k3_udma_glue_enable_tx_chn(struct k3_udma_glue_tx_channel *tx_chn) in k3_udma_glue_enable_tx_chn() argument
381 xudma_tchanrt_write(tx_chn->udma_tchanx, UDMA_CHAN_RT_PEER_RT_EN_REG, in k3_udma_glue_enable_tx_chn()
384 xudma_tchanrt_write(tx_chn->udma_tchanx, UDMA_CHAN_RT_CTL_REG, in k3_udma_glue_enable_tx_chn()
387 k3_udma_glue_dump_tx_rt_chn(tx_chn, "txchn en"); in k3_udma_glue_enable_tx_chn()
392 void k3_udma_glue_disable_tx_chn(struct k3_udma_glue_tx_channel *tx_chn) in k3_udma_glue_disable_tx_chn() argument
394 k3_udma_glue_dump_tx_rt_chn(tx_chn, "txchn dis1"); in k3_udma_glue_disable_tx_chn()
396 xudma_tchanrt_write(tx_chn->udma_tchanx, UDMA_CHAN_RT_CTL_REG, 0); in k3_udma_glue_disable_tx_chn()
398 xudma_tchanrt_write(tx_chn->udma_tchanx, in k3_udma_glue_disable_tx_chn()
400 k3_udma_glue_dump_tx_rt_chn(tx_chn, "txchn dis2"); in k3_udma_glue_disable_tx_chn()
404 void k3_udma_glue_tdown_tx_chn(struct k3_udma_glue_tx_channel *tx_chn, in k3_udma_glue_tdown_tx_chn() argument
410 k3_udma_glue_dump_tx_rt_chn(tx_chn, "txchn tdown1"); in k3_udma_glue_tdown_tx_chn()
412 xudma_tchanrt_write(tx_chn->udma_tchanx, UDMA_CHAN_RT_CTL_REG, in k3_udma_glue_tdown_tx_chn()
415 val = xudma_tchanrt_read(tx_chn->udma_tchanx, UDMA_CHAN_RT_CTL_REG); in k3_udma_glue_tdown_tx_chn()
418 val = xudma_tchanrt_read(tx_chn->udma_tchanx, in k3_udma_glue_tdown_tx_chn()
422 dev_err(tx_chn->common.dev, "TX tdown timeout\n"); in k3_udma_glue_tdown_tx_chn()
428 val = xudma_tchanrt_read(tx_chn->udma_tchanx, in k3_udma_glue_tdown_tx_chn()
431 dev_err(tx_chn->common.dev, "TX tdown peer not stopped\n"); in k3_udma_glue_tdown_tx_chn()
432 k3_udma_glue_dump_tx_rt_chn(tx_chn, "txchn tdown2"); in k3_udma_glue_tdown_tx_chn()
436 void k3_udma_glue_reset_tx_chn(struct k3_udma_glue_tx_channel *tx_chn, in k3_udma_glue_reset_tx_chn() argument
444 if (tx_chn->ringtxcq) in k3_udma_glue_reset_tx_chn()
445 k3_ringacc_ring_reset(tx_chn->ringtxcq); in k3_udma_glue_reset_tx_chn()
454 occ_tx = k3_ringacc_ring_get_occ(tx_chn->ringtx); in k3_udma_glue_reset_tx_chn()
455 dev_dbg(tx_chn->common.dev, "TX reset occ_tx %u\n", occ_tx); in k3_udma_glue_reset_tx_chn()
458 ret = k3_ringacc_ring_pop(tx_chn->ringtx, &desc_dma); in k3_udma_glue_reset_tx_chn()
460 dev_err(tx_chn->common.dev, "TX reset pop %d\n", ret); in k3_udma_glue_reset_tx_chn()
466 k3_ringacc_ring_reset_dma(tx_chn->ringtx, occ_tx); in k3_udma_glue_reset_tx_chn()
470 u32 k3_udma_glue_tx_get_hdesc_size(struct k3_udma_glue_tx_channel *tx_chn) in k3_udma_glue_tx_get_hdesc_size() argument
472 return tx_chn->common.hdesc_size; in k3_udma_glue_tx_get_hdesc_size()
476 u32 k3_udma_glue_tx_get_txcq_id(struct k3_udma_glue_tx_channel *tx_chn) in k3_udma_glue_tx_get_txcq_id() argument
478 return k3_ringacc_get_ring_id(tx_chn->ringtxcq); in k3_udma_glue_tx_get_txcq_id()
482 int k3_udma_glue_tx_get_irq(struct k3_udma_glue_tx_channel *tx_chn) in k3_udma_glue_tx_get_irq() argument
484 tx_chn->virq = k3_ringacc_get_ring_irq_num(tx_chn->ringtxcq); in k3_udma_glue_tx_get_irq()
486 return tx_chn->virq; in k3_udma_glue_tx_get_irq()