Lines Matching full:mbox

117 	struct mbox *mbox = &pf->mbox;  in otx2_flr_handler()  local
123 mutex_lock(&mbox->lock); in otx2_flr_handler()
124 req = otx2_mbox_alloc_msg_vf_flr(mbox); in otx2_flr_handler()
126 mutex_unlock(&mbox->lock); in otx2_flr_handler()
132 if (!otx2_sync_mbox_msg(&pf->mbox)) { in otx2_flr_handler()
142 mutex_unlock(&mbox->lock); in otx2_flr_handler()
295 static void otx2_queue_work(struct mbox *mw, struct workqueue_struct *mbox_wq, in otx2_queue_work()
299 struct otx2_mbox *mbox; in otx2_queue_work() local
308 mbox = &mw->mbox; in otx2_queue_work()
309 mdev = &mbox->dev[i]; in otx2_queue_work()
311 otx2_sync_mbox_bbuf(mbox, i); in otx2_queue_work()
312 hdr = mdev->mbase + mbox->rx_start; in otx2_queue_work()
316 * pf->mbox.num_msgs holds the data for use in pfaf_mbox_handler in otx2_queue_work()
317 * pf>mbox.up_num_msgs holds the data for use in in otx2_queue_work()
324 memset(mbox->hwbase + mbox->rx_start, 0, in otx2_queue_work()
331 mbox = &mw->mbox_up; in otx2_queue_work()
332 mdev = &mbox->dev[i]; in otx2_queue_work()
334 otx2_sync_mbox_bbuf(mbox, i); in otx2_queue_work()
335 hdr = mdev->mbase + mbox->rx_start; in otx2_queue_work()
340 memset(mbox->hwbase + mbox->rx_start, 0, in otx2_queue_work()
356 /* Msgs are already copied, trigger VF's mbox irq */ in otx2_forward_msg_pfvf()
362 /* Restore VF's mbox bounce buffer region address */ in otx2_forward_msg_pfvf()
373 struct mbox *dst_mbox; in otx2_forward_vf_mbox_msgs()
378 * that explicit copying of VF's msgs to PF=>AF mbox region in otx2_forward_vf_mbox_msgs()
379 * and AF=>PF responses to VF's mbox region can be avoided. in otx2_forward_vf_mbox_msgs()
385 dst_mbox = &pf->mbox; in otx2_forward_vf_mbox_msgs()
386 dst_size = dst_mbox->mbox.tx_size - in otx2_forward_vf_mbox_msgs()
392 dst_mdev = &dst_mbox->mbox.dev[0]; in otx2_forward_vf_mbox_msgs()
394 mutex_lock(&pf->mbox.lock); in otx2_forward_vf_mbox_msgs()
408 dst_mdev->mbase = pf->mbox.bbuf_base; in otx2_forward_vf_mbox_msgs()
409 mutex_unlock(&pf->mbox.lock); in otx2_forward_vf_mbox_msgs()
417 dst_mbox->mbox.rx_start); in otx2_forward_vf_mbox_msgs()
420 otx2_forward_msg_pfvf(dst_mdev, &pf->mbox_pfvf[0].mbox, in otx2_forward_vf_mbox_msgs()
421 pf->mbox.bbuf_base, vf); in otx2_forward_vf_mbox_msgs()
422 mutex_unlock(&pf->mbox.lock); in otx2_forward_vf_mbox_msgs()
452 &pf->mbox.mbox_up, in otx2_forward_vf_mbox_msgs()
466 struct otx2_mbox *mbox; in otx2_pfvf_mbox_handler() local
467 struct mbox *vf_mbox; in otx2_pfvf_mbox_handler()
470 vf_mbox = container_of(work, struct mbox, mbox_wrk); in otx2_pfvf_mbox_handler()
474 mbox = &pf->mbox_pfvf[0].mbox; in otx2_pfvf_mbox_handler()
475 mdev = &mbox->dev[vf_idx]; in otx2_pfvf_mbox_handler()
476 req_hdr = (struct mbox_hdr *)(mdev->mbase + mbox->rx_start); in otx2_pfvf_mbox_handler()
481 msg = (struct mbox_msghdr *)(mdev->mbase + mbox->rx_start + in otx2_pfvf_mbox_handler()
492 err = otx2_forward_vf_mbox_msgs(pf, mbox, MBOX_DIR_PFAF, vf_idx, in otx2_pfvf_mbox_handler()
499 otx2_reply_invalid_msg(mbox, vf_idx, 0, msg->id); in otx2_pfvf_mbox_handler()
500 otx2_mbox_msg_send(mbox, vf_idx); in otx2_pfvf_mbox_handler()
505 struct mbox *vf_mbox = container_of(work, struct mbox, mbox_up_wrk); in otx2_pfvf_mbox_up_handler()
511 struct otx2_mbox *mbox; in otx2_pfvf_mbox_up_handler() local
514 mbox = &pf->mbox_pfvf[0].mbox_up; in otx2_pfvf_mbox_up_handler()
515 mdev = &mbox->dev[vf_idx]; in otx2_pfvf_mbox_up_handler()
517 rsp_hdr = (struct mbox_hdr *)(mdev->mbase + mbox->rx_start); in otx2_pfvf_mbox_up_handler()
518 offset = mbox->rx_start + ALIGN(sizeof(*rsp_hdr), MBOX_MSG_ALIGN); in otx2_pfvf_mbox_up_handler()
525 "Mbox msg with unknown ID 0x%x\n", msg->id); in otx2_pfvf_mbox_up_handler()
531 "Mbox msg with wrong signature %x, ID 0x%x\n", in otx2_pfvf_mbox_up_handler()
542 "Mbox msg response has err %d, ID 0x%x\n", in otx2_pfvf_mbox_up_handler()
548 offset = mbox->rx_start + msg->next_msgoff; in otx2_pfvf_mbox_up_handler()
550 __otx2_mbox_reset(mbox, 0); in otx2_pfvf_mbox_up_handler()
559 struct mbox *mbox; in otx2_pfvf_mbox_intr_handler() local
562 mbox = pf->mbox_pfvf; in otx2_pfvf_mbox_intr_handler()
567 otx2_queue_work(mbox, pf->mbox_pfvf_wq, 64, vfs, intr, in otx2_pfvf_mbox_intr_handler()
570 trace_otx2_msg_interrupt(mbox->mbox.pdev, "VF(s) to PF", intr); in otx2_pfvf_mbox_intr_handler()
577 otx2_queue_work(mbox, pf->mbox_pfvf_wq, 0, vfs, intr, TYPE_PFVF); in otx2_pfvf_mbox_intr_handler()
580 trace_otx2_msg_interrupt(mbox->mbox.pdev, "VF(s) to PF", intr); in otx2_pfvf_mbox_intr_handler()
588 struct mbox *mbox; in otx2_pfvf_mbox_init() local
596 sizeof(struct mbox), GFP_KERNEL); in otx2_pfvf_mbox_init()
621 mbox = &pf->mbox_pfvf[0]; in otx2_pfvf_mbox_init()
622 err = otx2_mbox_init(&mbox->mbox, hwbase, pf->pdev, pf->reg_base, in otx2_pfvf_mbox_init()
627 err = otx2_mbox_init(&mbox->mbox_up, hwbase, pf->pdev, pf->reg_base, in otx2_pfvf_mbox_init()
633 mbox->pfvf = pf; in otx2_pfvf_mbox_init()
634 INIT_WORK(&mbox->mbox_wrk, otx2_pfvf_mbox_handler); in otx2_pfvf_mbox_init()
635 INIT_WORK(&mbox->mbox_up_wrk, otx2_pfvf_mbox_up_handler); in otx2_pfvf_mbox_init()
636 mbox++; in otx2_pfvf_mbox_init()
651 struct mbox *mbox = &pf->mbox_pfvf[0]; in otx2_pfvf_mbox_destroy() local
653 if (!mbox) in otx2_pfvf_mbox_destroy()
661 if (mbox->mbox.hwbase) in otx2_pfvf_mbox_destroy()
662 iounmap(mbox->mbox.hwbase); in otx2_pfvf_mbox_destroy()
664 otx2_mbox_destroy(&mbox->mbox); in otx2_pfvf_mbox_destroy()
753 "Mbox msg with unknown ID 0x%x\n", msg->id); in otx2_process_pfaf_mbox_msg()
759 "Mbox msg with wrong signature %x, ID 0x%x\n", in otx2_process_pfaf_mbox_msg()
809 "Mbox msg response has err %d, ID 0x%x\n", in otx2_process_pfaf_mbox_msg()
820 struct otx2_mbox *mbox; in otx2_pfaf_mbox_handler() local
821 struct mbox *af_mbox; in otx2_pfaf_mbox_handler()
825 af_mbox = container_of(work, struct mbox, mbox_wrk); in otx2_pfaf_mbox_handler()
826 mbox = &af_mbox->mbox; in otx2_pfaf_mbox_handler()
827 mdev = &mbox->dev[0]; in otx2_pfaf_mbox_handler()
828 rsp_hdr = (struct mbox_hdr *)(mdev->mbase + mbox->rx_start); in otx2_pfaf_mbox_handler()
830 offset = mbox->rx_start + ALIGN(sizeof(*rsp_hdr), MBOX_MSG_ALIGN); in otx2_pfaf_mbox_handler()
836 offset = mbox->rx_start + msg->next_msgoff; in otx2_pfaf_mbox_handler()
838 __otx2_mbox_reset(mbox, 0); in otx2_pfaf_mbox_handler()
903 otx2_reply_invalid_msg(&pf->mbox.mbox_up, 0, 0, req->id); in otx2_process_mbox_msg_up()
914 &pf->mbox.mbox_up, 0, \ in otx2_process_mbox_msg_up()
933 otx2_reply_invalid_msg(&pf->mbox.mbox_up, 0, 0, req->id); in otx2_process_mbox_msg_up()
941 struct mbox *af_mbox = container_of(work, struct mbox, mbox_up_wrk); in otx2_pfaf_mbox_up_handler()
942 struct otx2_mbox *mbox = &af_mbox->mbox_up; in otx2_pfaf_mbox_up_handler() local
943 struct otx2_mbox_dev *mdev = &mbox->dev[0]; in otx2_pfaf_mbox_up_handler()
949 rsp_hdr = (struct mbox_hdr *)(mdev->mbase + mbox->rx_start); in otx2_pfaf_mbox_up_handler()
951 offset = mbox->rx_start + ALIGN(sizeof(*rsp_hdr), MBOX_MSG_ALIGN); in otx2_pfaf_mbox_up_handler()
960 offset = mbox->rx_start + msg->next_msgoff; in otx2_pfaf_mbox_up_handler()
963 otx2_forward_vf_mbox_msgs(pf, &pf->mbox.mbox_up, in otx2_pfaf_mbox_up_handler()
969 otx2_mbox_msg_send(mbox, 0); in otx2_pfaf_mbox_up_handler()
975 struct mbox *mbox; in otx2_pfaf_mbox_intr_handler() local
980 mbox = &pf->mbox; in otx2_pfaf_mbox_intr_handler()
982 trace_otx2_msg_interrupt(mbox->mbox.pdev, "AF to PF", BIT_ULL(0)); in otx2_pfaf_mbox_intr_handler()
984 otx2_queue_work(mbox, pf->mbox_wq, 0, 1, 1, TYPE_PFAF); in otx2_pfaf_mbox_intr_handler()
1007 snprintf(irq_name, NAME_SIZE, "RVUPFAF Mbox"); in otx2_register_mbox_intr()
1012 "RVUPF: IRQ registration failed for PFAF mbox irq\n"); in otx2_register_mbox_intr()
1026 req = otx2_mbox_alloc_msg_ready(&pf->mbox); in otx2_register_mbox_intr()
1031 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_register_mbox_intr()
1044 struct mbox *mbox = &pf->mbox; in otx2_pfaf_mbox_destroy() local
1051 if (mbox->mbox.hwbase) in otx2_pfaf_mbox_destroy()
1052 iounmap((void __iomem *)mbox->mbox.hwbase); in otx2_pfaf_mbox_destroy()
1054 otx2_mbox_destroy(&mbox->mbox); in otx2_pfaf_mbox_destroy()
1055 otx2_mbox_destroy(&mbox->mbox_up); in otx2_pfaf_mbox_destroy()
1060 struct mbox *mbox = &pf->mbox; in otx2_pfaf_mbox_init() local
1064 mbox->pfvf = pf; in otx2_pfaf_mbox_init()
1082 err = otx2_mbox_init(&mbox->mbox, hwbase, pf->pdev, pf->reg_base, in otx2_pfaf_mbox_init()
1087 err = otx2_mbox_init(&mbox->mbox_up, hwbase, pf->pdev, pf->reg_base, in otx2_pfaf_mbox_init()
1092 err = otx2_mbox_bbuf_init(mbox, pf->pdev); in otx2_pfaf_mbox_init()
1096 INIT_WORK(&mbox->mbox_wrk, otx2_pfaf_mbox_handler); in otx2_pfaf_mbox_init()
1097 INIT_WORK(&mbox->mbox_up_wrk, otx2_pfaf_mbox_up_handler); in otx2_pfaf_mbox_init()
1098 mutex_init(&mbox->lock); in otx2_pfaf_mbox_init()
1111 mutex_lock(&pf->mbox.lock); in otx2_cgx_config_linkevents()
1113 msg = otx2_mbox_alloc_msg_cgx_start_linkevents(&pf->mbox); in otx2_cgx_config_linkevents()
1115 msg = otx2_mbox_alloc_msg_cgx_stop_linkevents(&pf->mbox); in otx2_cgx_config_linkevents()
1118 mutex_unlock(&pf->mbox.lock); in otx2_cgx_config_linkevents()
1122 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_cgx_config_linkevents()
1123 mutex_unlock(&pf->mbox.lock); in otx2_cgx_config_linkevents()
1137 mutex_lock(&pf->mbox.lock); in otx2_cgx_config_loopback()
1139 msg = otx2_mbox_alloc_msg_cgx_intlbk_enable(&pf->mbox); in otx2_cgx_config_loopback()
1141 msg = otx2_mbox_alloc_msg_cgx_intlbk_disable(&pf->mbox); in otx2_cgx_config_loopback()
1144 mutex_unlock(&pf->mbox.lock); in otx2_cgx_config_loopback()
1148 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_cgx_config_loopback()
1149 mutex_unlock(&pf->mbox.lock); in otx2_cgx_config_loopback()
1304 * TODO: But we are in irq context. How to call mbox functions which does sleep in otx2_q_intr_handler()
1384 otx2_ctx_disable(&pf->mbox, NIX_AQ_CTYPE_CQ, false); in otx2_free_cq_res()
1398 otx2_ctx_disable(&pf->mbox, NIX_AQ_CTYPE_SQ, false); in otx2_free_sq_res()
1444 struct mbox *mbox = &pf->mbox; in otx2_init_hw_resources() local
1462 mutex_lock(&mbox->lock); in otx2_init_hw_resources()
1480 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1486 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1492 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1500 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1508 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1515 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1524 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1530 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1536 otx2_ctx_disable(mbox, NIX_AQ_CTYPE_RQ, false); in otx2_init_hw_resources()
1543 otx2_ctx_disable(mbox, NPA_AQ_CTYPE_POOL, true); in otx2_init_hw_resources()
1544 otx2_ctx_disable(mbox, NPA_AQ_CTYPE_AURA, true); in otx2_init_hw_resources()
1547 mutex_lock(&mbox->lock); in otx2_init_hw_resources()
1548 free_req = otx2_mbox_alloc_msg_nix_lf_free(mbox); in otx2_init_hw_resources()
1551 if (otx2_sync_mbox_msg(mbox)) in otx2_init_hw_resources()
1556 req = otx2_mbox_alloc_msg_npa_lf_free(mbox); in otx2_init_hw_resources()
1558 if (otx2_sync_mbox_msg(mbox)) in otx2_init_hw_resources()
1562 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1570 struct mbox *mbox = &pf->mbox; in otx2_free_hw_resources() local
1590 mutex_lock(&mbox->lock); in otx2_free_hw_resources()
1594 mutex_unlock(&mbox->lock); in otx2_free_hw_resources()
1597 otx2_ctx_disable(mbox, NIX_AQ_CTYPE_RQ, false); in otx2_free_hw_resources()
1626 mutex_lock(&mbox->lock); in otx2_free_hw_resources()
1628 free_req = otx2_mbox_alloc_msg_nix_lf_free(mbox); in otx2_free_hw_resources()
1633 if (otx2_sync_mbox_msg(mbox)) in otx2_free_hw_resources()
1636 mutex_unlock(&mbox->lock); in otx2_free_hw_resources()
1639 otx2_ctx_disable(mbox, NPA_AQ_CTYPE_POOL, true); in otx2_free_hw_resources()
1640 otx2_ctx_disable(mbox, NPA_AQ_CTYPE_AURA, true); in otx2_free_hw_resources()
1643 mutex_lock(&mbox->lock); in otx2_free_hw_resources()
1645 req = otx2_mbox_alloc_msg_npa_lf_free(mbox); in otx2_free_hw_resources()
1647 if (otx2_sync_mbox_msg(mbox)) in otx2_free_hw_resources()
1650 mutex_unlock(&mbox->lock); in otx2_free_hw_resources()
1686 mutex_lock(&pf->mbox.lock); in otx2_do_set_rx_mode()
1687 req = otx2_mbox_alloc_msg_nix_set_rx_mode(&pf->mbox); in otx2_do_set_rx_mode()
1689 mutex_unlock(&pf->mbox.lock); in otx2_do_set_rx_mode()
1703 otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_rx_mode()
1704 mutex_unlock(&pf->mbox.lock); in otx2_do_set_rx_mode()
1905 /* If a mbox communication error happens at this point then interface in otx2_open()
2180 mutex_lock(&pfvf->mbox.lock); in otx2_config_hw_rx_tstamp()
2182 req = otx2_mbox_alloc_msg_cgx_ptp_rx_enable(&pfvf->mbox); in otx2_config_hw_rx_tstamp()
2184 req = otx2_mbox_alloc_msg_cgx_ptp_rx_disable(&pfvf->mbox); in otx2_config_hw_rx_tstamp()
2186 mutex_unlock(&pfvf->mbox.lock); in otx2_config_hw_rx_tstamp()
2190 err = otx2_sync_mbox_msg(&pfvf->mbox); in otx2_config_hw_rx_tstamp()
2192 mutex_unlock(&pfvf->mbox.lock); in otx2_config_hw_rx_tstamp()
2196 mutex_unlock(&pfvf->mbox.lock); in otx2_config_hw_rx_tstamp()
2212 mutex_lock(&pfvf->mbox.lock); in otx2_config_hw_tx_tstamp()
2214 req = otx2_mbox_alloc_msg_nix_lf_ptp_tx_enable(&pfvf->mbox); in otx2_config_hw_tx_tstamp()
2216 req = otx2_mbox_alloc_msg_nix_lf_ptp_tx_disable(&pfvf->mbox); in otx2_config_hw_tx_tstamp()
2218 mutex_unlock(&pfvf->mbox.lock); in otx2_config_hw_tx_tstamp()
2222 err = otx2_sync_mbox_msg(&pfvf->mbox); in otx2_config_hw_tx_tstamp()
2224 mutex_unlock(&pfvf->mbox.lock); in otx2_config_hw_tx_tstamp()
2228 mutex_unlock(&pfvf->mbox.lock); in otx2_config_hw_tx_tstamp()
2323 mutex_lock(&pf->mbox.lock); in otx2_do_set_vf_mac()
2324 req = otx2_mbox_alloc_msg_npc_install_flow(&pf->mbox); in otx2_do_set_vf_mac()
2340 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_vf_mac()
2342 mutex_unlock(&pf->mbox.lock); in otx2_do_set_vf_mac()
2390 mutex_lock(&pf->mbox.lock); in otx2_do_set_vf_vlan()
2394 vtag_req = otx2_mbox_alloc_msg_nix_vtag_cfg(&pf->mbox); in otx2_do_set_vf_vlan()
2403 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_vf_vlan()
2410 del_req = otx2_mbox_alloc_msg_npc_delete_flow(&pf->mbox); in otx2_do_set_vf_vlan()
2418 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_vf_vlan()
2423 del_req = otx2_mbox_alloc_msg_npc_delete_flow(&pf->mbox); in otx2_do_set_vf_vlan()
2431 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_vf_vlan()
2437 req = otx2_mbox_alloc_msg_npc_install_flow(&pf->mbox); in otx2_do_set_vf_vlan()
2458 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_vf_vlan()
2463 vtag_req = otx2_mbox_alloc_msg_nix_vtag_cfg(&pf->mbox); in otx2_do_set_vf_vlan()
2475 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_vf_vlan()
2480 (&pf->mbox.mbox, 0, &vtag_req->hdr); in otx2_do_set_vf_vlan()
2487 req = otx2_mbox_alloc_msg_npc_install_flow(&pf->mbox); in otx2_do_set_vf_vlan()
2505 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_vf_vlan()
2508 mutex_unlock(&pf->mbox.lock); in otx2_do_set_vf_vlan()
2671 mutex_lock(&pf->mbox.lock); in otx2_set_vf_permissions()
2672 req = otx2_mbox_alloc_msg_set_vf_perm(&pf->mbox); in otx2_set_vf_permissions()
2687 rc = otx2_sync_mbox_msg(&pf->mbox); in otx2_set_vf_permissions()
2689 mutex_unlock(&pf->mbox.lock); in otx2_set_vf_permissions()
3070 otx2_detach_resources(&pf->mbox); in otx2_probe()
3227 otx2_detach_resources(&pf->mbox); in otx2_remove()