Lines Matching full:mbox
119 struct mbox *mbox = &pf->mbox; in otx2_flr_handler() local
125 mutex_lock(&mbox->lock); in otx2_flr_handler()
126 req = otx2_mbox_alloc_msg_vf_flr(mbox); in otx2_flr_handler()
128 mutex_unlock(&mbox->lock); in otx2_flr_handler()
134 if (!otx2_sync_mbox_msg(&pf->mbox)) { in otx2_flr_handler()
144 mutex_unlock(&mbox->lock); in otx2_flr_handler()
299 void otx2_queue_vf_work(struct mbox *mw, struct workqueue_struct *mbox_wq, in otx2_queue_vf_work()
303 struct otx2_mbox *mbox; in otx2_queue_vf_work() local
312 mbox = &mw->mbox; in otx2_queue_vf_work()
313 mdev = &mbox->dev[i]; in otx2_queue_vf_work()
314 hdr = mdev->mbase + mbox->rx_start; in otx2_queue_vf_work()
328 mbox = &mw->mbox_up; in otx2_queue_vf_work()
329 mdev = &mbox->dev[i]; in otx2_queue_vf_work()
330 hdr = mdev->mbase + mbox->rx_start; in otx2_queue_vf_work()
346 /* Msgs are already copied, trigger VF's mbox irq */ in otx2_forward_msg_pfvf()
354 /* Restore VF's mbox bounce buffer region address */ in otx2_forward_msg_pfvf()
365 struct mbox *dst_mbox; in otx2_forward_vf_mbox_msgs()
370 * that explicit copying of VF's msgs to PF=>AF mbox region in otx2_forward_vf_mbox_msgs()
371 * and AF=>PF responses to VF's mbox region can be avoided. in otx2_forward_vf_mbox_msgs()
377 dst_mbox = &pf->mbox; in otx2_forward_vf_mbox_msgs()
378 dst_size = dst_mbox->mbox.tx_size - in otx2_forward_vf_mbox_msgs()
384 dst_mdev = &dst_mbox->mbox.dev[0]; in otx2_forward_vf_mbox_msgs()
386 mutex_lock(&pf->mbox.lock); in otx2_forward_vf_mbox_msgs()
400 dst_mdev->mbase = pf->mbox.bbuf_base; in otx2_forward_vf_mbox_msgs()
401 mutex_unlock(&pf->mbox.lock); in otx2_forward_vf_mbox_msgs()
409 dst_mbox->mbox.rx_start); in otx2_forward_vf_mbox_msgs()
412 otx2_forward_msg_pfvf(dst_mdev, &pf->mbox_pfvf[0].mbox, in otx2_forward_vf_mbox_msgs()
413 pf->mbox.bbuf_base, vf); in otx2_forward_vf_mbox_msgs()
414 mutex_unlock(&pf->mbox.lock); in otx2_forward_vf_mbox_msgs()
444 &pf->mbox.mbox_up, in otx2_forward_vf_mbox_msgs()
457 struct otx2_mbox *mbox; in otx2_pfvf_mbox_handler() local
458 struct mbox *vf_mbox; in otx2_pfvf_mbox_handler()
461 vf_mbox = container_of(work, struct mbox, mbox_wrk); in otx2_pfvf_mbox_handler()
465 mbox = &pf->mbox_pfvf[0].mbox; in otx2_pfvf_mbox_handler()
466 mdev = &mbox->dev[vf_idx]; in otx2_pfvf_mbox_handler()
474 msg = (struct mbox_msghdr *)(mdev->mbase + mbox->rx_start + in otx2_pfvf_mbox_handler()
485 err = otx2_forward_vf_mbox_msgs(pf, mbox, MBOX_DIR_PFAF, vf_idx, in otx2_pfvf_mbox_handler()
492 otx2_reply_invalid_msg(mbox, vf_idx, 0, msg->id); in otx2_pfvf_mbox_handler()
493 otx2_mbox_msg_send(mbox, vf_idx); in otx2_pfvf_mbox_handler()
498 struct mbox *vf_mbox = container_of(work, struct mbox, mbox_up_wrk); in otx2_pfvf_mbox_up_handler()
503 struct otx2_mbox *mbox; in otx2_pfvf_mbox_up_handler() local
506 mbox = &pf->mbox_pfvf[0].mbox_up; in otx2_pfvf_mbox_up_handler()
507 mdev = &mbox->dev[vf_idx]; in otx2_pfvf_mbox_up_handler()
509 offset = mbox->rx_start + ALIGN(sizeof(struct mbox_hdr), MBOX_MSG_ALIGN); in otx2_pfvf_mbox_up_handler()
519 "Mbox msg with unknown ID 0x%x\n", msg->id); in otx2_pfvf_mbox_up_handler()
525 "Mbox msg with wrong signature %x, ID 0x%x\n", in otx2_pfvf_mbox_up_handler()
537 "Mbox msg response has err %d, ID 0x%x\n", in otx2_pfvf_mbox_up_handler()
543 offset = mbox->rx_start + msg->next_msgoff; in otx2_pfvf_mbox_up_handler()
545 __otx2_mbox_reset(mbox, vf_idx); in otx2_pfvf_mbox_up_handler()
554 struct mbox *mbox; in otx2_pfvf_mbox_intr_handler() local
557 mbox = pf->mbox_pfvf; in otx2_pfvf_mbox_intr_handler()
562 otx2_queue_vf_work(mbox, pf->mbox_pfvf_wq, 64, vfs, intr); in otx2_pfvf_mbox_intr_handler()
564 trace_otx2_msg_interrupt(mbox->mbox.pdev, "VF(s) to PF", intr); in otx2_pfvf_mbox_intr_handler()
571 otx2_queue_vf_work(mbox, pf->mbox_pfvf_wq, 0, vfs, intr); in otx2_pfvf_mbox_intr_handler()
574 trace_otx2_msg_interrupt(mbox->mbox.pdev, "VF(s) to PF", intr); in otx2_pfvf_mbox_intr_handler()
599 struct mbox *mbox; in otx2_pfvf_mbox_init() local
607 sizeof(struct mbox), GFP_KERNEL); in otx2_pfvf_mbox_init()
617 /* For CN20K, PF allocates mbox memory in DRAM and writes PF/VF in otx2_pfvf_mbox_init()
640 mbox = &pf->mbox_pfvf[0]; in otx2_pfvf_mbox_init()
641 err = otx2_mbox_init(&mbox->mbox, hwbase, pf->pdev, pf->reg_base, in otx2_pfvf_mbox_init()
646 err = otx2_mbox_init(&mbox->mbox_up, hwbase, pf->pdev, pf->reg_base, in otx2_pfvf_mbox_init()
652 mbox->pfvf = pf; in otx2_pfvf_mbox_init()
653 INIT_WORK(&mbox->mbox_wrk, otx2_pfvf_mbox_handler); in otx2_pfvf_mbox_init()
654 INIT_WORK(&mbox->mbox_up_wrk, otx2_pfvf_mbox_up_handler); in otx2_pfvf_mbox_init()
655 mbox++; in otx2_pfvf_mbox_init()
670 struct mbox *mbox = &pf->mbox_pfvf[0]; in otx2_pfvf_mbox_destroy() local
672 if (!mbox) in otx2_pfvf_mbox_destroy()
680 if (mbox->mbox.hwbase && !is_cn20k(pf->pdev)) in otx2_pfvf_mbox_destroy()
681 iounmap(mbox->mbox.hwbase); in otx2_pfvf_mbox_destroy()
685 otx2_mbox_destroy(&mbox->mbox); in otx2_pfvf_mbox_destroy()
781 "Mbox msg with unknown ID 0x%x\n", msg->id); in otx2_process_pfaf_mbox_msg()
787 "Mbox msg with wrong signature %x, ID 0x%x\n", in otx2_process_pfaf_mbox_msg()
837 "Mbox msg response has err %d, ID 0x%x\n", in otx2_process_pfaf_mbox_msg()
848 struct otx2_mbox *mbox; in otx2_pfaf_mbox_handler() local
849 struct mbox *af_mbox; in otx2_pfaf_mbox_handler()
854 af_mbox = container_of(work, struct mbox, mbox_wrk); in otx2_pfaf_mbox_handler()
855 mbox = &af_mbox->mbox; in otx2_pfaf_mbox_handler()
856 mdev = &mbox->dev[0]; in otx2_pfaf_mbox_handler()
857 rsp_hdr = (struct mbox_hdr *)(mdev->mbase + mbox->rx_start); in otx2_pfaf_mbox_handler()
860 offset = mbox->rx_start + ALIGN(sizeof(*rsp_hdr), MBOX_MSG_ALIGN); in otx2_pfaf_mbox_handler()
869 offset = mbox->rx_start + msg->next_msgoff; in otx2_pfaf_mbox_handler()
871 __otx2_mbox_reset(mbox, 0); in otx2_pfaf_mbox_handler()
968 otx2_reply_invalid_msg(&pf->mbox.mbox_up, 0, 0, req->id); in otx2_process_mbox_msg_up()
979 &pf->mbox.mbox_up, 0, \ in otx2_process_mbox_msg_up()
999 otx2_reply_invalid_msg(&pf->mbox.mbox_up, 0, 0, req->id); in otx2_process_mbox_msg_up()
1007 struct mbox *af_mbox = container_of(work, struct mbox, mbox_up_wrk); in otx2_pfaf_mbox_up_handler()
1008 struct otx2_mbox *mbox = &af_mbox->mbox_up; in otx2_pfaf_mbox_up_handler() local
1009 struct otx2_mbox_dev *mdev = &mbox->dev[0]; in otx2_pfaf_mbox_up_handler()
1016 rsp_hdr = (struct mbox_hdr *)(mdev->mbase + mbox->rx_start); in otx2_pfaf_mbox_up_handler()
1019 offset = mbox->rx_start + ALIGN(sizeof(*rsp_hdr), MBOX_MSG_ALIGN); in otx2_pfaf_mbox_up_handler()
1031 offset = mbox->rx_start + msg->next_msgoff; in otx2_pfaf_mbox_up_handler()
1035 otx2_forward_vf_mbox_msgs(pf, &pf->mbox.mbox_up, in otx2_pfaf_mbox_up_handler()
1041 otx2_mbox_msg_send(mbox, 0); in otx2_pfaf_mbox_up_handler()
1047 struct mbox *mw = &pf->mbox; in otx2_pfaf_mbox_intr_handler()
1049 struct otx2_mbox *mbox; in otx2_pfaf_mbox_intr_handler() local
1063 mbox = &mw->mbox_up; in otx2_pfaf_mbox_intr_handler()
1064 mdev = &mbox->dev[0]; in otx2_pfaf_mbox_intr_handler()
1065 otx2_sync_mbox_bbuf(mbox, 0); in otx2_pfaf_mbox_intr_handler()
1067 hdr = (struct mbox_hdr *)(mdev->mbase + mbox->rx_start); in otx2_pfaf_mbox_intr_handler()
1082 mbox = &mw->mbox; in otx2_pfaf_mbox_intr_handler()
1083 mdev = &mbox->dev[0]; in otx2_pfaf_mbox_intr_handler()
1084 otx2_sync_mbox_bbuf(mbox, 0); in otx2_pfaf_mbox_intr_handler()
1086 hdr = (struct mbox_hdr *)(mdev->mbase + mbox->rx_start); in otx2_pfaf_mbox_intr_handler()
1128 snprintf(irq_name, NAME_SIZE, "RVUPF%d AFPF Mbox", in otx2_register_mbox_intr()
1137 snprintf(irq_name, NAME_SIZE, "RVUPF%d AFPF Mbox", in otx2_register_mbox_intr()
1146 "RVUPF: IRQ registration failed for PFAF mbox irq\n"); in otx2_register_mbox_intr()
1166 req = otx2_mbox_alloc_msg_ready(&pf->mbox); in otx2_register_mbox_intr()
1171 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_register_mbox_intr()
1184 struct mbox *mbox = &pf->mbox; in otx2_pfaf_mbox_destroy() local
1191 if (mbox->mbox.hwbase && !is_cn20k(pf->pdev)) in otx2_pfaf_mbox_destroy()
1192 iounmap((void __iomem *)mbox->mbox.hwbase); in otx2_pfaf_mbox_destroy()
1194 otx2_mbox_destroy(&mbox->mbox); in otx2_pfaf_mbox_destroy()
1195 otx2_mbox_destroy(&mbox->mbox_up); in otx2_pfaf_mbox_destroy()
1201 struct mbox *mbox = &pf->mbox; in otx2_pfaf_mbox_init() local
1205 mbox->pfvf = pf; in otx2_pfaf_mbox_init()
1211 /* For CN20K, AF allocates mbox memory in DRAM and writes PF in otx2_pfaf_mbox_init()
1231 err = otx2_mbox_init(&mbox->mbox, hwbase, pf->pdev, pf->reg_base, in otx2_pfaf_mbox_init()
1236 err = otx2_mbox_init(&mbox->mbox_up, hwbase, pf->pdev, pf->reg_base, in otx2_pfaf_mbox_init()
1241 err = otx2_mbox_bbuf_init(mbox, pf->pdev); in otx2_pfaf_mbox_init()
1245 INIT_WORK(&mbox->mbox_wrk, otx2_pfaf_mbox_handler); in otx2_pfaf_mbox_init()
1246 INIT_WORK(&mbox->mbox_up_wrk, otx2_pfaf_mbox_up_handler); in otx2_pfaf_mbox_init()
1247 mutex_init(&mbox->lock); in otx2_pfaf_mbox_init()
1260 mutex_lock(&pf->mbox.lock); in otx2_cgx_config_linkevents()
1262 msg = otx2_mbox_alloc_msg_cgx_start_linkevents(&pf->mbox); in otx2_cgx_config_linkevents()
1264 msg = otx2_mbox_alloc_msg_cgx_stop_linkevents(&pf->mbox); in otx2_cgx_config_linkevents()
1267 mutex_unlock(&pf->mbox.lock); in otx2_cgx_config_linkevents()
1271 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_cgx_config_linkevents()
1272 mutex_unlock(&pf->mbox.lock); in otx2_cgx_config_linkevents()
1281 mutex_lock(&pfvf->mbox.lock); in otx2_reset_mac_stats()
1282 req = otx2_mbox_alloc_msg_cgx_stats_rst(&pfvf->mbox); in otx2_reset_mac_stats()
1284 mutex_unlock(&pfvf->mbox.lock); in otx2_reset_mac_stats()
1288 err = otx2_sync_mbox_msg(&pfvf->mbox); in otx2_reset_mac_stats()
1289 mutex_unlock(&pfvf->mbox.lock); in otx2_reset_mac_stats()
1303 mutex_lock(&pf->mbox.lock); in otx2_cgx_config_loopback()
1305 msg = otx2_mbox_alloc_msg_cgx_intlbk_enable(&pf->mbox); in otx2_cgx_config_loopback()
1307 msg = otx2_mbox_alloc_msg_cgx_intlbk_disable(&pf->mbox); in otx2_cgx_config_loopback()
1310 mutex_unlock(&pf->mbox.lock); in otx2_cgx_config_loopback()
1314 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_cgx_config_loopback()
1315 mutex_unlock(&pf->mbox.lock); in otx2_cgx_config_loopback()
1470 * TODO: But we are in irq context. How to call mbox functions which does sleep in otx2_q_intr_handler()
1555 otx2_ctx_disable(&pf->mbox, NIX_AQ_CTYPE_CQ, false); in otx2_free_cq_res()
1569 otx2_ctx_disable(&pf->mbox, NIX_AQ_CTYPE_SQ, false); in otx2_free_sq_res()
1617 struct mbox *mbox = &pf->mbox; in otx2_init_hw_resources() local
1636 mutex_lock(&mbox->lock); in otx2_init_hw_resources()
1657 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1663 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1669 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1677 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1685 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1696 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1706 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1712 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1718 otx2_ctx_disable(mbox, NIX_AQ_CTYPE_RQ, false); in otx2_init_hw_resources()
1725 otx2_ctx_disable(mbox, NPA_AQ_CTYPE_POOL, true); in otx2_init_hw_resources()
1726 otx2_ctx_disable(mbox, NPA_AQ_CTYPE_AURA, true); in otx2_init_hw_resources()
1729 mutex_lock(&mbox->lock); in otx2_init_hw_resources()
1730 free_req = otx2_mbox_alloc_msg_nix_lf_free(mbox); in otx2_init_hw_resources()
1733 if (otx2_sync_mbox_msg(mbox)) in otx2_init_hw_resources()
1738 req = otx2_mbox_alloc_msg_npa_lf_free(mbox); in otx2_init_hw_resources()
1740 if (otx2_sync_mbox_msg(mbox)) in otx2_init_hw_resources()
1744 mutex_unlock(&mbox->lock); in otx2_init_hw_resources()
1753 struct mbox *mbox = &pf->mbox; in otx2_free_hw_resources() local
1772 mutex_lock(&mbox->lock); in otx2_free_hw_resources()
1776 mutex_unlock(&mbox->lock); in otx2_free_hw_resources()
1779 otx2_ctx_disable(mbox, NIX_AQ_CTYPE_RQ, false); in otx2_free_hw_resources()
1802 mutex_lock(&mbox->lock); in otx2_free_hw_resources()
1804 free_req = otx2_mbox_alloc_msg_nix_lf_free(mbox); in otx2_free_hw_resources()
1809 if (otx2_sync_mbox_msg(mbox)) in otx2_free_hw_resources()
1812 mutex_unlock(&mbox->lock); in otx2_free_hw_resources()
1815 otx2_ctx_disable(mbox, NPA_AQ_CTYPE_POOL, true); in otx2_free_hw_resources()
1816 otx2_ctx_disable(mbox, NPA_AQ_CTYPE_AURA, true); in otx2_free_hw_resources()
1819 mutex_lock(&mbox->lock); in otx2_free_hw_resources()
1821 req = otx2_mbox_alloc_msg_npa_lf_free(mbox); in otx2_free_hw_resources()
1823 if (otx2_sync_mbox_msg(mbox)) in otx2_free_hw_resources()
1826 mutex_unlock(&mbox->lock); in otx2_free_hw_resources()
1863 mutex_lock(&pf->mbox.lock); in otx2_do_set_rx_mode()
1864 req = otx2_mbox_alloc_msg_nix_set_rx_mode(&pf->mbox); in otx2_do_set_rx_mode()
1866 mutex_unlock(&pf->mbox.lock); in otx2_do_set_rx_mode()
1880 otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_rx_mode()
1881 mutex_unlock(&pf->mbox.lock); in otx2_do_set_rx_mode()
2121 /* If a mbox communication error happens at this point then interface in otx2_open()
2392 mutex_lock(&pfvf->mbox.lock); in otx2_config_hw_rx_tstamp()
2394 req = otx2_mbox_alloc_msg_cgx_ptp_rx_enable(&pfvf->mbox); in otx2_config_hw_rx_tstamp()
2396 req = otx2_mbox_alloc_msg_cgx_ptp_rx_disable(&pfvf->mbox); in otx2_config_hw_rx_tstamp()
2398 mutex_unlock(&pfvf->mbox.lock); in otx2_config_hw_rx_tstamp()
2402 err = otx2_sync_mbox_msg(&pfvf->mbox); in otx2_config_hw_rx_tstamp()
2404 mutex_unlock(&pfvf->mbox.lock); in otx2_config_hw_rx_tstamp()
2408 mutex_unlock(&pfvf->mbox.lock); in otx2_config_hw_rx_tstamp()
2424 mutex_lock(&pfvf->mbox.lock); in otx2_config_hw_tx_tstamp()
2426 req = otx2_mbox_alloc_msg_nix_lf_ptp_tx_enable(&pfvf->mbox); in otx2_config_hw_tx_tstamp()
2428 req = otx2_mbox_alloc_msg_nix_lf_ptp_tx_disable(&pfvf->mbox); in otx2_config_hw_tx_tstamp()
2430 mutex_unlock(&pfvf->mbox.lock); in otx2_config_hw_tx_tstamp()
2434 err = otx2_sync_mbox_msg(&pfvf->mbox); in otx2_config_hw_tx_tstamp()
2436 mutex_unlock(&pfvf->mbox.lock); in otx2_config_hw_tx_tstamp()
2440 mutex_unlock(&pfvf->mbox.lock); in otx2_config_hw_tx_tstamp()
2535 mutex_lock(&pf->mbox.lock); in otx2_do_set_vf_mac()
2536 req = otx2_mbox_alloc_msg_npc_install_flow(&pf->mbox); in otx2_do_set_vf_mac()
2552 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_vf_mac()
2554 mutex_unlock(&pf->mbox.lock); in otx2_do_set_vf_mac()
2602 mutex_lock(&pf->mbox.lock); in otx2_do_set_vf_vlan()
2606 vtag_req = otx2_mbox_alloc_msg_nix_vtag_cfg(&pf->mbox); in otx2_do_set_vf_vlan()
2615 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_vf_vlan()
2622 del_req = otx2_mbox_alloc_msg_npc_delete_flow(&pf->mbox); in otx2_do_set_vf_vlan()
2630 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_vf_vlan()
2635 del_req = otx2_mbox_alloc_msg_npc_delete_flow(&pf->mbox); in otx2_do_set_vf_vlan()
2643 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_vf_vlan()
2649 req = otx2_mbox_alloc_msg_npc_install_flow(&pf->mbox); in otx2_do_set_vf_vlan()
2670 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_vf_vlan()
2675 vtag_req = otx2_mbox_alloc_msg_nix_vtag_cfg(&pf->mbox); in otx2_do_set_vf_vlan()
2687 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_vf_vlan()
2692 (&pf->mbox.mbox, 0, &vtag_req->hdr); in otx2_do_set_vf_vlan()
2699 req = otx2_mbox_alloc_msg_npc_install_flow(&pf->mbox); in otx2_do_set_vf_vlan()
2717 err = otx2_sync_mbox_msg(&pf->mbox); in otx2_do_set_vf_vlan()
2720 mutex_unlock(&pf->mbox.lock); in otx2_do_set_vf_vlan()
2884 mutex_lock(&pf->mbox.lock); in otx2_set_vf_permissions()
2885 req = otx2_mbox_alloc_msg_set_vf_perm(&pf->mbox); in otx2_set_vf_permissions()
2900 rc = otx2_sync_mbox_msg(&pf->mbox); in otx2_set_vf_permissions()
2902 mutex_unlock(&pf->mbox.lock); in otx2_set_vf_permissions()
3123 otx2_detach_resources(&pf->mbox); in otx2_init_rsrc()
3340 otx2_detach_resources(&pf->mbox); in otx2_probe()
3367 mutex_lock(&pf->mbox.lock); in otx2_vf_link_event_task()
3373 mutex_unlock(&pf->mbox.lock); in otx2_vf_link_event_task()
3381 mutex_unlock(&pf->mbox.lock); in otx2_vf_link_event_task()
3395 mutex_unlock(&pf->mbox.lock); in otx2_vf_link_event_task()
3466 struct mbox *mbox = &pf->mbox; in otx2_ndc_sync() local
3469 mutex_lock(&mbox->lock); in otx2_ndc_sync()
3471 req = otx2_mbox_alloc_msg_ndc_sync_op(mbox); in otx2_ndc_sync()
3473 mutex_unlock(&mbox->lock); in otx2_ndc_sync()
3481 if (!otx2_sync_mbox_msg(mbox)) in otx2_ndc_sync()
3484 mutex_unlock(&mbox->lock); in otx2_ndc_sync()
3537 otx2_detach_resources(&pf->mbox); in otx2_remove()