Lines Matching refs:dpmaif_ctrl

58 static void t7xx_dpmaif_enable_irq(struct dpmaif_ctrl *dpmaif_ctrl)  in t7xx_dpmaif_enable_irq()  argument
63 for (i = 0; i < ARRAY_SIZE(dpmaif_ctrl->isr_para); i++) { in t7xx_dpmaif_enable_irq()
64 isr_para = &dpmaif_ctrl->isr_para[i]; in t7xx_dpmaif_enable_irq()
65 t7xx_pcie_mac_set_int(dpmaif_ctrl->t7xx_dev, isr_para->pcie_int); in t7xx_dpmaif_enable_irq()
69 static void t7xx_dpmaif_disable_irq(struct dpmaif_ctrl *dpmaif_ctrl) in t7xx_dpmaif_disable_irq() argument
74 for (i = 0; i < ARRAY_SIZE(dpmaif_ctrl->isr_para); i++) { in t7xx_dpmaif_disable_irq()
75 isr_para = &dpmaif_ctrl->isr_para[i]; in t7xx_dpmaif_disable_irq()
76 t7xx_pcie_mac_clear_int(dpmaif_ctrl->t7xx_dev, isr_para->pcie_int); in t7xx_dpmaif_disable_irq()
82 struct dpmaif_ctrl *dpmaif_ctrl = isr_para->dpmaif_ctrl; in t7xx_dpmaif_irq_cb() local
84 struct device *dev = dpmaif_ctrl->dev; in t7xx_dpmaif_irq_cb()
89 hw_info = &dpmaif_ctrl->hw_info; in t7xx_dpmaif_irq_cb()
96 t7xx_pcie_mac_clear_int_status(dpmaif_ctrl->t7xx_dev, isr_para->pcie_int); in t7xx_dpmaif_irq_cb()
101 t7xx_dpmaif_irq_tx_done(dpmaif_ctrl, intr_status.intr_queues[i]); in t7xx_dpmaif_irq_cb()
133 t7xx_dpmaif_irq_rx_done(dpmaif_ctrl, intr_status.intr_queues[i]); in t7xx_dpmaif_irq_cb()
146 struct dpmaif_ctrl *dpmaif_ctrl; in t7xx_dpmaif_isr_handler() local
148 dpmaif_ctrl = isr_para->dpmaif_ctrl; in t7xx_dpmaif_isr_handler()
149 if (dpmaif_ctrl->state != DPMAIF_STATE_PWRON) { in t7xx_dpmaif_isr_handler()
150 dev_err(dpmaif_ctrl->dev, "Interrupt received before initializing DPMAIF\n"); in t7xx_dpmaif_isr_handler()
154 t7xx_pcie_mac_clear_int(dpmaif_ctrl->t7xx_dev, isr_para->pcie_int); in t7xx_dpmaif_isr_handler()
162 struct dpmaif_ctrl *dpmaif_ctrl = isr_para->dpmaif_ctrl; in t7xx_dpmaif_isr_thread() local
165 t7xx_pcie_mac_set_int(dpmaif_ctrl->t7xx_dev, isr_para->pcie_int); in t7xx_dpmaif_isr_thread()
169 static void t7xx_dpmaif_isr_parameter_init(struct dpmaif_ctrl *dpmaif_ctrl) in t7xx_dpmaif_isr_parameter_init() argument
174 dpmaif_ctrl->rxq_int_mapping[DPF_RX_QNO0] = DPMAIF_INT; in t7xx_dpmaif_isr_parameter_init()
175 dpmaif_ctrl->rxq_int_mapping[DPF_RX_QNO1] = DPMAIF2_INT; in t7xx_dpmaif_isr_parameter_init()
178 isr_para = &dpmaif_ctrl->isr_para[i]; in t7xx_dpmaif_isr_parameter_init()
179 isr_para->dpmaif_ctrl = dpmaif_ctrl; in t7xx_dpmaif_isr_parameter_init()
181 isr_para->pcie_int = dpmaif_ctrl->rxq_int_mapping[i]; in t7xx_dpmaif_isr_parameter_init()
185 static void t7xx_dpmaif_register_pcie_irq(struct dpmaif_ctrl *dpmaif_ctrl) in t7xx_dpmaif_register_pcie_irq() argument
187 struct t7xx_pci_dev *t7xx_dev = dpmaif_ctrl->t7xx_dev; in t7xx_dpmaif_register_pcie_irq()
192 t7xx_dpmaif_isr_parameter_init(dpmaif_ctrl); in t7xx_dpmaif_register_pcie_irq()
195 isr_para = &dpmaif_ctrl->isr_para[i]; in t7xx_dpmaif_register_pcie_irq()
208 static int t7xx_dpmaif_rxtx_sw_allocs(struct dpmaif_ctrl *dpmaif_ctrl) in t7xx_dpmaif_rxtx_sw_allocs() argument
214 ret = t7xx_dpmaif_bat_alloc(dpmaif_ctrl, &dpmaif_ctrl->bat_req, BAT_TYPE_NORMAL); in t7xx_dpmaif_rxtx_sw_allocs()
216 dev_err(dpmaif_ctrl->dev, "Failed to allocate normal BAT table: %d\n", ret); in t7xx_dpmaif_rxtx_sw_allocs()
220 ret = t7xx_dpmaif_bat_alloc(dpmaif_ctrl, &dpmaif_ctrl->bat_frag, BAT_TYPE_FRAG); in t7xx_dpmaif_rxtx_sw_allocs()
222 dev_err(dpmaif_ctrl->dev, "Failed to allocate frag BAT table: %d\n", ret); in t7xx_dpmaif_rxtx_sw_allocs()
227 rx_q = &dpmaif_ctrl->rxq[rx_idx]; in t7xx_dpmaif_rxtx_sw_allocs()
229 rx_q->dpmaif_ctrl = dpmaif_ctrl; in t7xx_dpmaif_rxtx_sw_allocs()
236 tx_q = &dpmaif_ctrl->txq[tx_idx]; in t7xx_dpmaif_rxtx_sw_allocs()
238 tx_q->dpmaif_ctrl = dpmaif_ctrl; in t7xx_dpmaif_rxtx_sw_allocs()
244 ret = t7xx_dpmaif_tx_thread_init(dpmaif_ctrl); in t7xx_dpmaif_rxtx_sw_allocs()
246 dev_err(dpmaif_ctrl->dev, "Failed to start TX thread\n"); in t7xx_dpmaif_rxtx_sw_allocs()
250 ret = t7xx_dpmaif_bat_rel_wq_alloc(dpmaif_ctrl); in t7xx_dpmaif_rxtx_sw_allocs()
257 t7xx_dpmaif_tx_thread_rel(dpmaif_ctrl); in t7xx_dpmaif_rxtx_sw_allocs()
261 tx_q = &dpmaif_ctrl->txq[i]; in t7xx_dpmaif_rxtx_sw_allocs()
267 rx_q = &dpmaif_ctrl->rxq[i]; in t7xx_dpmaif_rxtx_sw_allocs()
271 t7xx_dpmaif_bat_free(dpmaif_ctrl, &dpmaif_ctrl->bat_frag); in t7xx_dpmaif_rxtx_sw_allocs()
274 t7xx_dpmaif_bat_free(dpmaif_ctrl, &dpmaif_ctrl->bat_req); in t7xx_dpmaif_rxtx_sw_allocs()
279 static void t7xx_dpmaif_sw_release(struct dpmaif_ctrl *dpmaif_ctrl) in t7xx_dpmaif_sw_release() argument
285 t7xx_dpmaif_tx_thread_rel(dpmaif_ctrl); in t7xx_dpmaif_sw_release()
286 t7xx_dpmaif_bat_wq_rel(dpmaif_ctrl); in t7xx_dpmaif_sw_release()
289 tx_q = &dpmaif_ctrl->txq[i]; in t7xx_dpmaif_sw_release()
294 rx_q = &dpmaif_ctrl->rxq[i]; in t7xx_dpmaif_sw_release()
299 static int t7xx_dpmaif_start(struct dpmaif_ctrl *dpmaif_ctrl) in t7xx_dpmaif_start() argument
301 struct dpmaif_hw_info *hw_info = &dpmaif_ctrl->hw_info; in t7xx_dpmaif_start()
308 if (dpmaif_ctrl->state == DPMAIF_STATE_PWRON) in t7xx_dpmaif_start()
314 rxq = &dpmaif_ctrl->rxq[i]; in t7xx_dpmaif_start()
327 bitmap_zero(dpmaif_ctrl->bat_req.bat_bitmap, dpmaif_ctrl->bat_req.bat_size_cnt); in t7xx_dpmaif_start()
328 buf_cnt = dpmaif_ctrl->bat_req.bat_size_cnt - 1; in t7xx_dpmaif_start()
329 ret = t7xx_dpmaif_rx_buf_alloc(dpmaif_ctrl, &dpmaif_ctrl->bat_req, 0, buf_cnt, true); in t7xx_dpmaif_start()
331 dev_err(dpmaif_ctrl->dev, "Failed to allocate RX buffer: %d\n", ret); in t7xx_dpmaif_start()
335 buf_cnt = dpmaif_ctrl->bat_frag.bat_size_cnt - 1; in t7xx_dpmaif_start()
336 ret = t7xx_dpmaif_rx_frag_alloc(dpmaif_ctrl, &dpmaif_ctrl->bat_frag, buf_cnt, true); in t7xx_dpmaif_start()
338 dev_err(dpmaif_ctrl->dev, "Failed to allocate frag RX buffer: %d\n", ret); in t7xx_dpmaif_start()
343 txq = &dpmaif_ctrl->txq[i]; in t7xx_dpmaif_start()
352 dev_err(dpmaif_ctrl->dev, "Failed to initialize DPMAIF HW: %d\n", ret); in t7xx_dpmaif_start()
366 dpmaif_ctrl->state = DPMAIF_STATE_PWRON; in t7xx_dpmaif_start()
367 t7xx_dpmaif_enable_irq(dpmaif_ctrl); in t7xx_dpmaif_start()
368 wake_up(&dpmaif_ctrl->tx_wq); in t7xx_dpmaif_start()
372 t7xx_dpmaif_bat_free(rxq->dpmaif_ctrl, rxq->bat_frag); in t7xx_dpmaif_start()
375 t7xx_dpmaif_bat_free(rxq->dpmaif_ctrl, rxq->bat_req); in t7xx_dpmaif_start()
380 static void t7xx_dpmaif_stop_sw(struct dpmaif_ctrl *dpmaif_ctrl) in t7xx_dpmaif_stop_sw() argument
382 t7xx_dpmaif_tx_stop(dpmaif_ctrl); in t7xx_dpmaif_stop_sw()
383 t7xx_dpmaif_rx_stop(dpmaif_ctrl); in t7xx_dpmaif_stop_sw()
386 static void t7xx_dpmaif_stop_hw(struct dpmaif_ctrl *dpmaif_ctrl) in t7xx_dpmaif_stop_hw() argument
388 t7xx_dpmaif_hw_stop_all_txq(&dpmaif_ctrl->hw_info); in t7xx_dpmaif_stop_hw()
389 t7xx_dpmaif_hw_stop_all_rxq(&dpmaif_ctrl->hw_info); in t7xx_dpmaif_stop_hw()
392 static int t7xx_dpmaif_stop(struct dpmaif_ctrl *dpmaif_ctrl) in t7xx_dpmaif_stop() argument
394 if (!dpmaif_ctrl->dpmaif_sw_init_done) { in t7xx_dpmaif_stop()
395 dev_err(dpmaif_ctrl->dev, "dpmaif SW init fail\n"); in t7xx_dpmaif_stop()
399 if (dpmaif_ctrl->state == DPMAIF_STATE_PWROFF) in t7xx_dpmaif_stop()
402 t7xx_dpmaif_disable_irq(dpmaif_ctrl); in t7xx_dpmaif_stop()
403 dpmaif_ctrl->state = DPMAIF_STATE_PWROFF; in t7xx_dpmaif_stop()
404 t7xx_dpmaif_stop_sw(dpmaif_ctrl); in t7xx_dpmaif_stop()
405 t7xx_dpmaif_tx_clear(dpmaif_ctrl); in t7xx_dpmaif_stop()
406 t7xx_dpmaif_rx_clear(dpmaif_ctrl); in t7xx_dpmaif_stop()
412 struct dpmaif_ctrl *dpmaif_ctrl = param; in t7xx_dpmaif_suspend() local
414 t7xx_dpmaif_tx_stop(dpmaif_ctrl); in t7xx_dpmaif_suspend()
415 t7xx_dpmaif_hw_stop_all_txq(&dpmaif_ctrl->hw_info); in t7xx_dpmaif_suspend()
416 t7xx_dpmaif_hw_stop_all_rxq(&dpmaif_ctrl->hw_info); in t7xx_dpmaif_suspend()
417 t7xx_dpmaif_disable_irq(dpmaif_ctrl); in t7xx_dpmaif_suspend()
418 t7xx_dpmaif_rx_stop(dpmaif_ctrl); in t7xx_dpmaif_suspend()
422 static void t7xx_dpmaif_unmask_dlq_intr(struct dpmaif_ctrl *dpmaif_ctrl) in t7xx_dpmaif_unmask_dlq_intr() argument
427 t7xx_dpmaif_dlq_unmask_rx_done(&dpmaif_ctrl->hw_info, qno); in t7xx_dpmaif_unmask_dlq_intr()
430 static void t7xx_dpmaif_start_txrx_qs(struct dpmaif_ctrl *dpmaif_ctrl) in t7xx_dpmaif_start_txrx_qs() argument
437 txq = &dpmaif_ctrl->txq[que_cnt]; in t7xx_dpmaif_start_txrx_qs()
442 rxq = &dpmaif_ctrl->rxq[que_cnt]; in t7xx_dpmaif_start_txrx_qs()
449 struct dpmaif_ctrl *dpmaif_ctrl = param; in t7xx_dpmaif_resume() local
451 if (!dpmaif_ctrl) in t7xx_dpmaif_resume()
454 t7xx_dpmaif_start_txrx_qs(dpmaif_ctrl); in t7xx_dpmaif_resume()
455 t7xx_dpmaif_enable_irq(dpmaif_ctrl); in t7xx_dpmaif_resume()
456 t7xx_dpmaif_unmask_dlq_intr(dpmaif_ctrl); in t7xx_dpmaif_resume()
457 t7xx_dpmaif_start_hw(&dpmaif_ctrl->hw_info); in t7xx_dpmaif_resume()
458 wake_up(&dpmaif_ctrl->tx_wq); in t7xx_dpmaif_resume()
462 static int t7xx_dpmaif_pm_entity_init(struct dpmaif_ctrl *dpmaif_ctrl) in t7xx_dpmaif_pm_entity_init() argument
464 struct md_pm_entity *dpmaif_pm_entity = &dpmaif_ctrl->dpmaif_pm_entity; in t7xx_dpmaif_pm_entity_init()
473 dpmaif_pm_entity->entity_param = dpmaif_ctrl; in t7xx_dpmaif_pm_entity_init()
475 ret = t7xx_pci_pm_entity_register(dpmaif_ctrl->t7xx_dev, dpmaif_pm_entity); in t7xx_dpmaif_pm_entity_init()
477 dev_err(dpmaif_ctrl->dev, "dpmaif register pm_entity fail\n"); in t7xx_dpmaif_pm_entity_init()
482 static int t7xx_dpmaif_pm_entity_release(struct dpmaif_ctrl *dpmaif_ctrl) in t7xx_dpmaif_pm_entity_release() argument
484 struct md_pm_entity *dpmaif_pm_entity = &dpmaif_ctrl->dpmaif_pm_entity; in t7xx_dpmaif_pm_entity_release()
487 ret = t7xx_pci_pm_entity_unregister(dpmaif_ctrl->t7xx_dev, dpmaif_pm_entity); in t7xx_dpmaif_pm_entity_release()
489 dev_err(dpmaif_ctrl->dev, "dpmaif register pm_entity fail\n"); in t7xx_dpmaif_pm_entity_release()
494 int t7xx_dpmaif_md_state_callback(struct dpmaif_ctrl *dpmaif_ctrl, enum md_state state) in t7xx_dpmaif_md_state_callback() argument
500 ret = t7xx_dpmaif_start(dpmaif_ctrl); in t7xx_dpmaif_md_state_callback()
504 ret = t7xx_dpmaif_stop(dpmaif_ctrl); in t7xx_dpmaif_md_state_callback()
508 ret = t7xx_dpmaif_stop(dpmaif_ctrl); in t7xx_dpmaif_md_state_callback()
512 t7xx_dpmaif_stop_hw(dpmaif_ctrl); in t7xx_dpmaif_md_state_callback()
535 struct dpmaif_ctrl *t7xx_dpmaif_hif_init(struct t7xx_pci_dev *t7xx_dev, in t7xx_dpmaif_hif_init()
539 struct dpmaif_ctrl *dpmaif_ctrl; in t7xx_dpmaif_hif_init() local
545 dpmaif_ctrl = devm_kzalloc(dev, sizeof(*dpmaif_ctrl), GFP_KERNEL); in t7xx_dpmaif_hif_init()
546 if (!dpmaif_ctrl) in t7xx_dpmaif_hif_init()
549 dpmaif_ctrl->t7xx_dev = t7xx_dev; in t7xx_dpmaif_hif_init()
550 dpmaif_ctrl->callbacks = callbacks; in t7xx_dpmaif_hif_init()
551 dpmaif_ctrl->dev = dev; in t7xx_dpmaif_hif_init()
552 dpmaif_ctrl->dpmaif_sw_init_done = false; in t7xx_dpmaif_hif_init()
553 dpmaif_ctrl->hw_info.dev = dev; in t7xx_dpmaif_hif_init()
554 dpmaif_ctrl->hw_info.pcie_base = t7xx_dev->base_addr.pcie_ext_reg_base - in t7xx_dpmaif_hif_init()
557 ret = t7xx_dpmaif_pm_entity_init(dpmaif_ctrl); in t7xx_dpmaif_hif_init()
561 t7xx_dpmaif_register_pcie_irq(dpmaif_ctrl); in t7xx_dpmaif_hif_init()
562 t7xx_dpmaif_disable_irq(dpmaif_ctrl); in t7xx_dpmaif_hif_init()
564 ret = t7xx_dpmaif_rxtx_sw_allocs(dpmaif_ctrl); in t7xx_dpmaif_hif_init()
566 t7xx_dpmaif_pm_entity_release(dpmaif_ctrl); in t7xx_dpmaif_hif_init()
571 dpmaif_ctrl->dpmaif_sw_init_done = true; in t7xx_dpmaif_hif_init()
572 return dpmaif_ctrl; in t7xx_dpmaif_hif_init()
575 void t7xx_dpmaif_hif_exit(struct dpmaif_ctrl *dpmaif_ctrl) in t7xx_dpmaif_hif_exit() argument
577 if (dpmaif_ctrl->dpmaif_sw_init_done) { in t7xx_dpmaif_hif_exit()
578 t7xx_dpmaif_stop(dpmaif_ctrl); in t7xx_dpmaif_hif_exit()
579 t7xx_dpmaif_pm_entity_release(dpmaif_ctrl); in t7xx_dpmaif_hif_exit()
580 t7xx_dpmaif_sw_release(dpmaif_ctrl); in t7xx_dpmaif_hif_exit()
581 dpmaif_ctrl->dpmaif_sw_init_done = false; in t7xx_dpmaif_hif_exit()