Lines Matching refs:rvu

32 static void npc_mcam_free_all_entries(struct rvu *rvu, struct npc_mcam *mcam,
34 static void npc_mcam_free_all_counters(struct rvu *rvu, struct npc_mcam *mcam,
47 bool is_npc_interface_valid(struct rvu *rvu, u8 intf) in is_npc_interface_valid() argument
49 struct rvu_hwinfo *hw = rvu->hw; in is_npc_interface_valid()
54 int rvu_npc_get_tx_nibble_cfg(struct rvu *rvu, u64 nibble_ena) in rvu_npc_get_tx_nibble_cfg() argument
59 if (is_rvu_96xx_B0(rvu)) in rvu_npc_get_tx_nibble_cfg()
64 static int npc_mcam_verify_pf_func(struct rvu *rvu, in npc_mcam_verify_pf_func() argument
86 void rvu_npc_set_pkind(struct rvu *rvu, int pkind, struct rvu_pfvf *pfvf) in rvu_npc_set_pkind() argument
91 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_npc_set_pkind()
97 rvu_write64(rvu, blkaddr, NPC_AF_PKINDX_CPI_DEFX(pkind, 0), val); in rvu_npc_set_pkind()
100 int rvu_npc_get_pkind(struct rvu *rvu, u16 pf) in rvu_npc_get_pkind() argument
102 struct npc_pkind *pkind = &rvu->hw->pkind; in rvu_npc_get_pkind()
116 int npc_config_ts_kpuaction(struct rvu *rvu, int pf, u16 pcifunc, bool enable) in npc_config_ts_kpuaction() argument
121 pkind = rvu_npc_get_pkind(rvu, pf); in npc_config_ts_kpuaction()
123 dev_err(rvu->dev, "%s: pkind not mapped\n", __func__); in npc_config_ts_kpuaction()
127 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, pcifunc); in npc_config_ts_kpuaction()
129 dev_err(rvu->dev, "%s: NPC block not implemented\n", __func__); in npc_config_ts_kpuaction()
133 val = rvu_read64(rvu, blkaddr, NPC_AF_PKINDX_ACTION0(pkind)); in npc_config_ts_kpuaction()
139 rvu_write64(rvu, blkaddr, NPC_AF_PKINDX_ACTION0(pkind), val); in npc_config_ts_kpuaction()
148 struct rvu *rvu = hw->rvu; in npc_get_ucast_mcam_index() local
153 pfvf = rvu_get_pfvf(rvu, pcifunc); in npc_get_ucast_mcam_index()
157 blkaddr = rvu_get_next_nix_blkaddr(rvu, blkaddr); in npc_get_ucast_mcam_index()
161 block = &rvu->hw->block[blkaddr]; in npc_get_ucast_mcam_index()
163 blkaddr = rvu_get_next_nix_blkaddr(rvu, blkaddr); in npc_get_ucast_mcam_index()
205 bool is_mcam_entry_enabled(struct rvu *rvu, struct npc_mcam *mcam, in is_mcam_entry_enabled() argument
212 cfg = rvu_read64(rvu, blkaddr, NPC_AF_MCAMEX_BANKX_CFG(index, bank)); in is_mcam_entry_enabled()
216 void npc_enable_mcam_entry(struct rvu *rvu, struct npc_mcam *mcam, in npc_enable_mcam_entry() argument
224 rvu_write64(rvu, blkaddr, in npc_enable_mcam_entry()
230 static void npc_clear_mcam_entry(struct rvu *rvu, struct npc_mcam *mcam, in npc_clear_mcam_entry() argument
238 rvu_write64(rvu, blkaddr, in npc_clear_mcam_entry()
240 rvu_write64(rvu, blkaddr, in npc_clear_mcam_entry()
243 rvu_write64(rvu, blkaddr, in npc_clear_mcam_entry()
245 rvu_write64(rvu, blkaddr, in npc_clear_mcam_entry()
248 rvu_write64(rvu, blkaddr, in npc_clear_mcam_entry()
250 rvu_write64(rvu, blkaddr, in npc_clear_mcam_entry()
386 static u64 npc_get_default_entry_action(struct rvu *rvu, struct npc_mcam *mcam, in npc_get_default_entry_action() argument
392 nix_get_nixlf(rvu, pf_func, &nixlf, NULL); in npc_get_default_entry_action()
398 return rvu_read64(rvu, blkaddr, in npc_get_default_entry_action()
402 static void npc_fixup_vf_rule(struct rvu *rvu, struct npc_mcam *mcam, in npc_fixup_vf_rule() argument
420 pfvf = rvu_get_pfvf(rvu, target_func); in npc_fixup_vf_rule()
424 if (!(is_nixlf_attached(rvu, target_func) && in npc_fixup_vf_rule()
435 rx_action = npc_get_default_entry_action(rvu, mcam, blkaddr, in npc_fixup_vf_rule()
441 static void npc_config_mcam_entry(struct rvu *rvu, struct npc_mcam *mcam, in npc_config_mcam_entry() argument
456 npc_enable_mcam_entry(rvu, mcam, blkaddr, actindex, false); in npc_config_mcam_entry()
459 npc_clear_mcam_entry(rvu, mcam, blkaddr, actindex); in npc_config_mcam_entry()
478 rvu_write64(rvu, blkaddr, in npc_config_mcam_entry()
481 rvu_write64(rvu, blkaddr, in npc_config_mcam_entry()
487 rvu_write64(rvu, blkaddr, in npc_config_mcam_entry()
489 rvu_write64(rvu, blkaddr, in npc_config_mcam_entry()
493 rvu_write64(rvu, blkaddr, in npc_config_mcam_entry()
495 rvu_write64(rvu, blkaddr, in npc_config_mcam_entry()
501 npc_fixup_vf_rule(rvu, mcam, blkaddr, actindex, entry, &enable); in npc_config_mcam_entry()
504 rvu_write64(rvu, blkaddr, in npc_config_mcam_entry()
508 rvu_write64(rvu, blkaddr, NPC_AF_MCAMEX_BANKX_TAG_ACT(index, actbank), in npc_config_mcam_entry()
513 npc_enable_mcam_entry(rvu, mcam, blkaddr, actindex, true); in npc_config_mcam_entry()
516 void npc_read_mcam_entry(struct rvu *rvu, struct npc_mcam *mcam, in npc_read_mcam_entry() argument
528 cam1 = rvu_read64(rvu, blkaddr, in npc_read_mcam_entry()
530 cam0 = rvu_read64(rvu, blkaddr, in npc_read_mcam_entry()
534 cam1 = rvu_read64(rvu, blkaddr, in npc_read_mcam_entry()
536 cam0 = rvu_read64(rvu, blkaddr, in npc_read_mcam_entry()
541 entry->action = rvu_read64(rvu, blkaddr, in npc_read_mcam_entry()
544 rvu_read64(rvu, blkaddr, in npc_read_mcam_entry()
546 *intf = rvu_read64(rvu, blkaddr, in npc_read_mcam_entry()
548 *ena = rvu_read64(rvu, blkaddr, in npc_read_mcam_entry()
552 static void npc_copy_mcam_entry(struct rvu *rvu, struct npc_mcam *mcam, in npc_copy_mcam_entry() argument
568 cfg = rvu_read64(rvu, blkaddr, sreg + (i * 8)); in npc_copy_mcam_entry()
569 rvu_write64(rvu, blkaddr, dreg + (i * 8), cfg); in npc_copy_mcam_entry()
574 cfg = rvu_read64(rvu, blkaddr, in npc_copy_mcam_entry()
576 rvu_write64(rvu, blkaddr, in npc_copy_mcam_entry()
580 cfg = rvu_read64(rvu, blkaddr, in npc_copy_mcam_entry()
582 rvu_write64(rvu, blkaddr, in npc_copy_mcam_entry()
586 cfg = rvu_read64(rvu, blkaddr, in npc_copy_mcam_entry()
588 rvu_write64(rvu, blkaddr, in npc_copy_mcam_entry()
592 static u64 npc_get_mcam_action(struct rvu *rvu, struct npc_mcam *mcam, in npc_get_mcam_action() argument
598 return rvu_read64(rvu, blkaddr, in npc_get_mcam_action()
602 void rvu_npc_install_ucast_entry(struct rvu *rvu, u16 pcifunc, in rvu_npc_install_ucast_entry() argument
605 struct rvu_pfvf *pfvf = rvu_get_pfvf(rvu, pcifunc); in rvu_npc_install_ucast_entry()
608 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_install_ucast_entry()
616 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_npc_install_ucast_entry()
623 if (!npc_is_feature_supported(rvu, BIT_ULL(NPC_DMAC), pfvf->nix_rx_intf)) in rvu_npc_install_ucast_entry()
632 if (is_mcam_entry_enabled(rvu, mcam, blkaddr, index)) { in rvu_npc_install_ucast_entry()
633 *(u64 *)&action = npc_get_mcam_action(rvu, mcam, in rvu_npc_install_ucast_entry()
654 rvu_mbox_handler_npc_install_flow(rvu, &req, &rsp); in rvu_npc_install_ucast_entry()
657 void rvu_npc_install_promisc_entry(struct rvu *rvu, u16 pcifunc, in rvu_npc_install_promisc_entry() argument
660 struct rvu_pfvf *pfvf = rvu_get_pfvf(rvu, pcifunc); in rvu_npc_install_promisc_entry()
663 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_install_promisc_entry()
664 struct rvu_hwinfo *hw = rvu->hw; in rvu_npc_install_promisc_entry()
669 if (!hw->cap.nix_rx_multicast && is_cgx_vf(rvu, pcifunc)) in rvu_npc_install_promisc_entry()
672 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_npc_install_promisc_entry()
679 if (is_cgx_vf(rvu, pcifunc)) in rvu_npc_install_promisc_entry()
689 if (is_mcam_entry_enabled(rvu, mcam, blkaddr, ucast_idx)) in rvu_npc_install_promisc_entry()
690 *(u64 *)&action = npc_get_mcam_action(rvu, mcam, in rvu_npc_install_promisc_entry()
700 is_pf_cgxmapped(rvu, rvu_get_pf(pcifunc))) { in rvu_npc_install_promisc_entry()
703 pfvf = rvu_get_pfvf(rvu, pcifunc & ~RVU_PFVF_FUNC_MASK); in rvu_npc_install_promisc_entry()
712 if (!is_rvu_otx2(rvu)) { in rvu_npc_install_promisc_entry()
720 dev_err(rvu->dev, in rvu_npc_install_promisc_entry()
739 rvu_mbox_handler_npc_install_flow(rvu, &req, &rsp); in rvu_npc_install_promisc_entry()
742 void rvu_npc_enable_promisc_entry(struct rvu *rvu, u16 pcifunc, in rvu_npc_enable_promisc_entry() argument
745 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_enable_promisc_entry()
748 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_npc_enable_promisc_entry()
757 npc_enable_mcam_entry(rvu, mcam, blkaddr, index, enable); in rvu_npc_enable_promisc_entry()
760 void rvu_npc_install_bcast_match_entry(struct rvu *rvu, u16 pcifunc, in rvu_npc_install_bcast_match_entry() argument
766 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_install_bcast_match_entry()
767 struct rvu_hwinfo *hw = rvu->hw; in rvu_npc_install_bcast_match_entry()
770 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_npc_install_bcast_match_entry()
786 pfvf = rvu_get_pfvf(rvu, pcifunc); in rvu_npc_install_bcast_match_entry()
791 if (!npc_is_feature_supported(rvu, BIT_ULL(NPC_DMAC), pfvf->nix_rx_intf) && in rvu_npc_install_bcast_match_entry()
792 !npc_is_feature_supported(rvu, BIT_ULL(NPC_LXMB), pfvf->nix_rx_intf)) in rvu_npc_install_bcast_match_entry()
819 rvu_mbox_handler_npc_install_flow(rvu, &req, &rsp); in rvu_npc_install_bcast_match_entry()
822 void rvu_npc_enable_bcast_entry(struct rvu *rvu, u16 pcifunc, int nixlf, in rvu_npc_enable_bcast_entry() argument
825 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_enable_bcast_entry()
828 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_npc_enable_bcast_entry()
837 npc_enable_mcam_entry(rvu, mcam, blkaddr, index, enable); in rvu_npc_enable_bcast_entry()
840 void rvu_npc_install_allmulti_entry(struct rvu *rvu, u16 pcifunc, int nixlf, in rvu_npc_install_allmulti_entry() argument
845 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_install_allmulti_entry()
846 struct rvu_hwinfo *hw = rvu->hw; in rvu_npc_install_allmulti_entry()
857 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_npc_install_allmulti_entry()
864 pfvf = rvu_get_pfvf(rvu, pcifunc); in rvu_npc_install_allmulti_entry()
869 if (!npc_is_feature_supported(rvu, BIT_ULL(NPC_DMAC), pfvf->nix_rx_intf) && in rvu_npc_install_allmulti_entry()
870 !npc_is_feature_supported(rvu, BIT_ULL(NPC_LXMB), pfvf->nix_rx_intf)) in rvu_npc_install_allmulti_entry()
881 if (is_mcam_entry_enabled(rvu, mcam, blkaddr, ucast_idx)) in rvu_npc_install_allmulti_entry()
882 *(u64 *)&action = npc_get_mcam_action(rvu, mcam, in rvu_npc_install_allmulti_entry()
908 if (!is_rvu_otx2(rvu)) in rvu_npc_install_allmulti_entry()
923 rvu_mbox_handler_npc_install_flow(rvu, &req, &rsp); in rvu_npc_install_allmulti_entry()
926 void rvu_npc_enable_allmulti_entry(struct rvu *rvu, u16 pcifunc, int nixlf, in rvu_npc_enable_allmulti_entry() argument
929 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_enable_allmulti_entry()
932 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_npc_enable_allmulti_entry()
941 npc_enable_mcam_entry(rvu, mcam, blkaddr, index, enable); in rvu_npc_enable_allmulti_entry()
944 static void npc_update_vf_flow_entry(struct rvu *rvu, struct npc_mcam *mcam, in npc_update_vf_flow_entry() argument
970 enable = is_mcam_entry_enabled(rvu, mcam, blkaddr, in npc_update_vf_flow_entry()
973 npc_enable_mcam_entry(rvu, mcam, blkaddr, actindex, in npc_update_vf_flow_entry()
976 rvu_write64(rvu, blkaddr, in npc_update_vf_flow_entry()
980 npc_enable_mcam_entry(rvu, mcam, blkaddr, in npc_update_vf_flow_entry()
987 void rvu_npc_update_flowkey_alg_idx(struct rvu *rvu, u16 pcifunc, int nixlf, in rvu_npc_update_flowkey_alg_idx() argument
990 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_update_flowkey_alg_idx()
991 struct rvu_hwinfo *hw = rvu->hw; in rvu_npc_update_flowkey_alg_idx()
996 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_npc_update_flowkey_alg_idx()
1017 *(u64 *)&action = rvu_read64(rvu, blkaddr, in rvu_npc_update_flowkey_alg_idx()
1028 rvu_write64(rvu, blkaddr, in rvu_npc_update_flowkey_alg_idx()
1033 npc_update_vf_flow_entry(rvu, mcam, blkaddr, pcifunc, in rvu_npc_update_flowkey_alg_idx()
1037 pfvf = rvu_get_pfvf(rvu, pcifunc); in rvu_npc_update_flowkey_alg_idx()
1048 is_mcam_entry_enabled(rvu, mcam, blkaddr, index)) { in rvu_npc_update_flowkey_alg_idx()
1052 rvu_write64(rvu, blkaddr, in rvu_npc_update_flowkey_alg_idx()
1058 void npc_enadis_default_mce_entry(struct rvu *rvu, u16 pcifunc, in npc_enadis_default_mce_entry() argument
1061 struct npc_mcam *mcam = &rvu->hw->mcam; in npc_enadis_default_mce_entry()
1062 struct rvu_hwinfo *hw = rvu->hw; in npc_enadis_default_mce_entry()
1067 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in npc_enadis_default_mce_entry()
1076 npc_enable_mcam_entry(rvu, mcam, blkaddr, index, enable); in npc_enadis_default_mce_entry()
1081 pfvf = rvu_get_pfvf(rvu, pcifunc & ~RVU_PFVF_FUNC_MASK); in npc_enadis_default_mce_entry()
1086 nix_get_mce_list(rvu, pcifunc, type, &mce_list, &mce_idx); in npc_enadis_default_mce_entry()
1088 nix_update_mce_list(rvu, pcifunc, mce_list, in npc_enadis_default_mce_entry()
1091 npc_enable_mcam_entry(rvu, mcam, blkaddr, index, enable); in npc_enadis_default_mce_entry()
1094 static void npc_enadis_default_entries(struct rvu *rvu, u16 pcifunc, in npc_enadis_default_entries() argument
1097 struct npc_mcam *mcam = &rvu->hw->mcam; in npc_enadis_default_entries()
1100 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in npc_enadis_default_entries()
1107 npc_enable_mcam_entry(rvu, mcam, blkaddr, index, enable); in npc_enadis_default_entries()
1112 if ((pcifunc & RVU_PFVF_FUNC_MASK) && !rvu->hw->cap.nix_rx_multicast) in npc_enadis_default_entries()
1116 npc_enadis_default_mce_entry(rvu, pcifunc, nixlf, in npc_enadis_default_entries()
1120 void rvu_npc_disable_default_entries(struct rvu *rvu, u16 pcifunc, int nixlf) in rvu_npc_disable_default_entries() argument
1125 npc_enadis_default_entries(rvu, pcifunc, nixlf, false); in rvu_npc_disable_default_entries()
1128 npc_enadis_default_mce_entry(rvu, pcifunc, nixlf, in rvu_npc_disable_default_entries()
1130 npc_enadis_default_mce_entry(rvu, pcifunc, nixlf, in rvu_npc_disable_default_entries()
1134 bool rvu_npc_enable_mcam_by_entry_index(struct rvu *rvu, int entry, int intf, bool enable) in rvu_npc_enable_mcam_by_entry_index() argument
1136 int blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_npc_enable_mcam_by_entry_index()
1137 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_enable_mcam_by_entry_index()
1152 npc_enable_mcam_entry(rvu, mcam, blkaddr, in rvu_npc_enable_mcam_by_entry_index()
1162 void rvu_npc_enable_default_entries(struct rvu *rvu, u16 pcifunc, int nixlf) in rvu_npc_enable_default_entries() argument
1170 npc_enadis_default_entries(rvu, pcifunc, nixlf, true); in rvu_npc_enable_default_entries()
1173 void rvu_npc_disable_mcam_entries(struct rvu *rvu, u16 pcifunc, int nixlf) in rvu_npc_disable_mcam_entries() argument
1175 struct rvu_pfvf *pfvf = rvu_get_pfvf(rvu, pcifunc); in rvu_npc_disable_mcam_entries()
1176 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_disable_mcam_entries()
1180 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_npc_disable_mcam_entries()
1191 npc_enable_mcam_entry(rvu, mcam, blkaddr, in rvu_npc_disable_mcam_entries()
1205 npc_mcam_disable_flows(rvu, pcifunc); in rvu_npc_disable_mcam_entries()
1207 rvu_npc_disable_default_entries(rvu, pcifunc, nixlf); in rvu_npc_disable_mcam_entries()
1210 void rvu_npc_free_mcam_entries(struct rvu *rvu, u16 pcifunc, int nixlf) in rvu_npc_free_mcam_entries() argument
1212 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_free_mcam_entries()
1216 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_npc_free_mcam_entries()
1223 npc_mcam_free_all_entries(rvu, mcam, blkaddr, pcifunc); in rvu_npc_free_mcam_entries()
1226 npc_mcam_free_all_counters(rvu, mcam, pcifunc); in rvu_npc_free_mcam_entries()
1238 rvu_npc_disable_default_entries(rvu, pcifunc, nixlf); in rvu_npc_free_mcam_entries()
1241 static void npc_program_mkex_rx(struct rvu *rvu, int blkaddr, in npc_program_mkex_rx() argument
1249 rvu_write64(rvu, blkaddr, NPC_AF_INTFX_KEX_CFG(intf), in npc_program_mkex_rx()
1270 static void npc_program_mkex_tx(struct rvu *rvu, int blkaddr, in npc_program_mkex_tx() argument
1278 rvu_write64(rvu, blkaddr, NPC_AF_INTFX_KEX_CFG(intf), in npc_program_mkex_tx()
1299 static void npc_program_mkex_profile(struct rvu *rvu, int blkaddr, in npc_program_mkex_profile() argument
1302 struct rvu_hwinfo *hw = rvu->hw; in npc_program_mkex_profile()
1307 rvu_write64(rvu, blkaddr, NPC_AF_KEX_LDATAX_FLAGS_CFG(ld), in npc_program_mkex_profile()
1311 npc_program_mkex_rx(rvu, blkaddr, mkex, intf); in npc_program_mkex_profile()
1312 npc_program_mkex_tx(rvu, blkaddr, mkex, intf); in npc_program_mkex_profile()
1316 npc_program_mkex_hash(rvu, blkaddr); in npc_program_mkex_profile()
1319 static int npc_fwdb_prfl_img_map(struct rvu *rvu, void __iomem **prfl_img_addr, in npc_fwdb_prfl_img_map() argument
1324 if (!rvu->fwdata) in npc_fwdb_prfl_img_map()
1327 prfl_addr = rvu->fwdata->mcam_addr; in npc_fwdb_prfl_img_map()
1328 prfl_sz = rvu->fwdata->mcam_sz; in npc_fwdb_prfl_img_map()
1345 static void npc_load_mkex_profile(struct rvu *rvu, int blkaddr, in npc_load_mkex_profile() argument
1348 struct device *dev = &rvu->pdev->dev; in npc_load_mkex_profile()
1355 if (rvu->kpu_fwdata_sz || in npc_load_mkex_profile()
1360 ret = npc_fwdb_prfl_img_map(rvu, &mkex_prfl_addr, &prfl_sz); in npc_load_mkex_profile()
1374 if (!is_rvu_96xx_B0(rvu) || in npc_load_mkex_profile()
1376 rvu->kpu.mkex = mcam_kex; in npc_load_mkex_profile()
1386 dev_info(rvu->dev, "Using %s mkex profile\n", rvu->kpu.mkex->name); in npc_load_mkex_profile()
1388 npc_program_mkex_profile(rvu, blkaddr, rvu->kpu.mkex); in npc_load_mkex_profile()
1393 static void npc_config_kpuaction(struct rvu *rvu, int blkaddr, in npc_config_kpuaction() argument
1412 rvu_write64(rvu, blkaddr, reg, *(u64 *)&action1); in npc_config_kpuaction()
1432 rvu_write64(rvu, blkaddr, reg, *(u64 *)&action0); in npc_config_kpuaction()
1435 static void npc_config_kpucam(struct rvu *rvu, int blkaddr, in npc_config_kpucam() argument
1452 rvu_write64(rvu, blkaddr, in npc_config_kpucam()
1454 rvu_write64(rvu, blkaddr, in npc_config_kpucam()
1463 static void npc_program_kpu_profile(struct rvu *rvu, int blkaddr, int kpu, in npc_program_kpu_profile() argument
1470 dev_err(rvu->dev, in npc_program_kpu_profile()
1475 max_entries = rvu->hw->npc_kpu_entries; in npc_program_kpu_profile()
1480 npc_config_kpucam(rvu, blkaddr, in npc_program_kpu_profile()
1486 npc_config_kpuaction(rvu, blkaddr, &profile->action[entry], in npc_program_kpu_profile()
1493 if (!rvu->kpu.custom) in npc_program_kpu_profile()
1495 rvu_write64(rvu, blkaddr, in npc_program_kpu_profile()
1498 rvu_write64(rvu, blkaddr, in npc_program_kpu_profile()
1504 rvu_write64(rvu, blkaddr, NPC_AF_KPUX_CFG(kpu), 0x01); in npc_program_kpu_profile()
1523 static int npc_apply_custom_kpu(struct rvu *rvu, in npc_apply_custom_kpu() argument
1527 struct npc_kpu_profile_fwdata *fw = rvu->kpu_fwdata; in npc_apply_custom_kpu()
1534 if (rvu->kpu_fwdata_sz < hdr_sz) { in npc_apply_custom_kpu()
1535 dev_warn(rvu->dev, "Invalid KPU profile size\n"); in npc_apply_custom_kpu()
1539 dev_warn(rvu->dev, "Invalid KPU profile signature %llx\n", in npc_apply_custom_kpu()
1546 dev_warn(rvu->dev, "Not supported Major version: %d > %d\n", in npc_apply_custom_kpu()
1554 dev_warn(rvu->dev, in npc_apply_custom_kpu()
1566 dev_warn(rvu->dev, "Not enough KPUs: %d > %ld\n", fw->kpus, in npc_apply_custom_kpu()
1580 dev_warn(rvu->dev, in npc_apply_custom_kpu()
1588 if (rvu->kpu_fwdata_sz < hdr_sz + offset) { in npc_apply_custom_kpu()
1589 dev_warn(rvu->dev, in npc_apply_custom_kpu()
1603 static int npc_load_kpu_prfl_img(struct rvu *rvu, void __iomem *prfl_addr, in npc_load_kpu_prfl_img() argument
1612 dev_info(rvu->dev, "Loading KPU profile from firmware db: %s\n", in npc_load_kpu_prfl_img()
1614 rvu->kpu_fwdata = kpu_data; in npc_load_kpu_prfl_img()
1615 rvu->kpu_fwdata_sz = prfl_sz; in npc_load_kpu_prfl_img()
1616 rvu->kpu_prfl_addr = prfl_addr; in npc_load_kpu_prfl_img()
1623 static int npc_fwdb_detect_load_prfl_img(struct rvu *rvu, uint64_t prfl_sz, in npc_fwdb_detect_load_prfl_img() argument
1631 img_data = (struct npc_coalesced_kpu_prfl __force *)rvu->kpu_prfl_addr; in npc_fwdb_detect_load_prfl_img()
1635 rc = npc_load_kpu_prfl_img(rvu, rvu->kpu_prfl_addr, in npc_fwdb_detect_load_prfl_img()
1647 kpu_prfl_addr = (void __iomem *)((uintptr_t)rvu->kpu_prfl_addr + in npc_fwdb_detect_load_prfl_img()
1649 rc = npc_load_kpu_prfl_img(rvu, kpu_prfl_addr, in npc_fwdb_detect_load_prfl_img()
1661 static int npc_load_kpu_profile_fwdb(struct rvu *rvu, const char *kpu_profile) in npc_load_kpu_profile_fwdb() argument
1667 ret = npc_fwdb_prfl_img_map(rvu, &rvu->kpu_prfl_addr, &prfl_sz); in npc_load_kpu_profile_fwdb()
1672 ret = npc_fwdb_detect_load_prfl_img(rvu, prfl_sz, kpu_profile); in npc_load_kpu_profile_fwdb()
1677 if (rvu->kpu_prfl_addr) { in npc_load_kpu_profile_fwdb()
1678 iounmap(rvu->kpu_prfl_addr); in npc_load_kpu_profile_fwdb()
1679 rvu->kpu_prfl_addr = NULL; in npc_load_kpu_profile_fwdb()
1680 rvu->kpu_fwdata_sz = 0; in npc_load_kpu_profile_fwdb()
1681 rvu->kpu_fwdata = NULL; in npc_load_kpu_profile_fwdb()
1688 static void npc_load_kpu_profile(struct rvu *rvu) in npc_load_kpu_profile() argument
1690 struct npc_kpu_profile_adapter *profile = &rvu->kpu; in npc_load_kpu_profile()
1691 const char *kpu_profile = rvu->kpu_pfl_name; in npc_load_kpu_profile()
1706 if (!request_firmware_direct(&fw, kpu_profile, rvu->dev)) { in npc_load_kpu_profile()
1707 dev_info(rvu->dev, "Loading KPU profile from firmware: %s\n", in npc_load_kpu_profile()
1709 rvu->kpu_fwdata = kzalloc(fw->size, GFP_KERNEL); in npc_load_kpu_profile()
1710 if (rvu->kpu_fwdata) { in npc_load_kpu_profile()
1711 memcpy(rvu->kpu_fwdata, fw->data, fw->size); in npc_load_kpu_profile()
1712 rvu->kpu_fwdata_sz = fw->size; in npc_load_kpu_profile()
1721 if (npc_load_kpu_profile_fwdb(rvu, kpu_profile)) in npc_load_kpu_profile()
1726 if (!rvu->kpu_fwdata_sz || npc_apply_custom_kpu(rvu, profile)) { in npc_load_kpu_profile()
1730 if (rvu->kpu_fwdata || rvu->kpu_fwdata_sz) { in npc_load_kpu_profile()
1732 if (rvu->kpu_prfl_addr) { in npc_load_kpu_profile()
1733 iounmap(rvu->kpu_prfl_addr); in npc_load_kpu_profile()
1734 rvu->kpu_prfl_addr = NULL; in npc_load_kpu_profile()
1736 kfree(rvu->kpu_fwdata); in npc_load_kpu_profile()
1738 rvu->kpu_fwdata = NULL; in npc_load_kpu_profile()
1739 rvu->kpu_fwdata_sz = 0; in npc_load_kpu_profile()
1746 dev_warn(rvu->dev, in npc_load_kpu_profile()
1749 kfree(rvu->kpu_fwdata); in npc_load_kpu_profile()
1750 rvu->kpu_fwdata = NULL; in npc_load_kpu_profile()
1754 dev_info(rvu->dev, "Using custom profile '%s', version %d.%d.%d\n", in npc_load_kpu_profile()
1765 static void npc_parser_profile_init(struct rvu *rvu, int blkaddr) in npc_parser_profile_init() argument
1767 struct rvu_hwinfo *hw = rvu->hw; in npc_parser_profile_init()
1772 rvu_write64(rvu, blkaddr, in npc_parser_profile_init()
1774 rvu_write64(rvu, blkaddr, in npc_parser_profile_init()
1776 rvu_write64(rvu, blkaddr, NPC_AF_KPUX_CFG(idx), 0x00); in npc_parser_profile_init()
1780 npc_load_kpu_profile(rvu); in npc_parser_profile_init()
1786 num_pkinds = rvu->kpu.pkinds; in npc_parser_profile_init()
1790 npc_config_kpuaction(rvu, blkaddr, &rvu->kpu.ikpu[idx], 0, idx, true); in npc_parser_profile_init()
1793 num_kpus = rvu->kpu.kpus; in npc_parser_profile_init()
1797 npc_program_kpu_profile(rvu, blkaddr, idx, &rvu->kpu.kpu[idx]); in npc_parser_profile_init()
1800 static int npc_mcam_rsrcs_init(struct rvu *rvu, int blkaddr) in npc_mcam_rsrcs_init() argument
1802 int nixlf_count = rvu_get_nixlf_count(rvu); in npc_mcam_rsrcs_init()
1803 struct npc_mcam *mcam = &rvu->hw->mcam; in npc_mcam_rsrcs_init()
1810 cfg = (rvu_read64(rvu, blkaddr, in npc_mcam_rsrcs_init()
1831 ((rvu->hw->total_pfs - 1) * RSVD_MCAM_ENTRIES_PER_PF); in npc_mcam_rsrcs_init()
1833 dev_warn(rvu->dev, in npc_mcam_rsrcs_init()
1844 mcam->bmap = devm_kcalloc(rvu->dev, BITS_TO_LONGS(mcam->bmap_entries), in npc_mcam_rsrcs_init()
1849 mcam->bmap_reverse = devm_kcalloc(rvu->dev, in npc_mcam_rsrcs_init()
1858 mcam->entry2pfvf_map = devm_kcalloc(rvu->dev, mcam->bmap_entries, in npc_mcam_rsrcs_init()
1882 mcam->cntr2pfvf_map = devm_kcalloc(rvu->dev, mcam->counters.max, in npc_mcam_rsrcs_init()
1890 mcam->entry2cntr_map = devm_kcalloc(rvu->dev, mcam->bmap_entries, in npc_mcam_rsrcs_init()
1895 mcam->cntr_refcnt = devm_kcalloc(rvu->dev, mcam->counters.max, in npc_mcam_rsrcs_init()
1901 mcam->entry2target_pffunc = devm_kcalloc(rvu->dev, mcam->total_entries, in npc_mcam_rsrcs_init()
1923 static void rvu_npc_hw_init(struct rvu *rvu, int blkaddr) in rvu_npc_hw_init() argument
1925 struct npc_pkind *pkind = &rvu->hw->pkind; in rvu_npc_hw_init()
1926 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_hw_init()
1927 struct rvu_hwinfo *hw = rvu->hw; in rvu_npc_hw_init()
1931 npc_const = rvu_read64(rvu, blkaddr, NPC_AF_CONST); in rvu_npc_hw_init()
1932 npc_const1 = rvu_read64(rvu, blkaddr, NPC_AF_CONST1); in rvu_npc_hw_init()
1934 npc_const2 = rvu_read64(rvu, blkaddr, NPC_AF_CONST2); in rvu_npc_hw_init()
1968 static void rvu_npc_setup_interfaces(struct rvu *rvu, int blkaddr) in rvu_npc_setup_interfaces() argument
1970 struct npc_mcam_kex *mkex = rvu->kpu.mkex; in rvu_npc_setup_interfaces()
1971 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_setup_interfaces()
1972 struct rvu_hwinfo *hw = rvu->hw; in rvu_npc_setup_interfaces()
1987 nibble_ena = rvu_npc_get_tx_nibble_cfg(rvu, nibble_ena); in rvu_npc_setup_interfaces()
2000 rvu_write64(rvu, blkaddr, NPC_AF_INTFX_KEX_CFG(intf), in rvu_npc_setup_interfaces()
2007 rvu_write64(rvu, blkaddr, in rvu_npc_setup_interfaces()
2013 rvu_write64(rvu, blkaddr, in rvu_npc_setup_interfaces()
2025 rvu_write64(rvu, blkaddr, NPC_AF_INTFX_KEX_CFG(intf), in rvu_npc_setup_interfaces()
2031 rvu_write64(rvu, blkaddr, in rvu_npc_setup_interfaces()
2037 int rvu_npc_init(struct rvu *rvu) in rvu_npc_init() argument
2039 struct npc_kpu_profile_adapter *kpu = &rvu->kpu; in rvu_npc_init()
2040 struct npc_pkind *pkind = &rvu->hw->pkind; in rvu_npc_init()
2041 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_init()
2044 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_npc_init()
2046 dev_err(rvu->dev, "%s: NPC block not implemented\n", __func__); in rvu_npc_init()
2050 rvu_npc_hw_init(rvu, blkaddr); in rvu_npc_init()
2055 rvu_write64(rvu, blkaddr, in rvu_npc_init()
2068 pkind->pfchan_map = devm_kcalloc(rvu->dev, pkind->rsrc.max, in rvu_npc_init()
2074 npc_parser_profile_init(rvu, blkaddr); in rvu_npc_init()
2077 rvu_write64(rvu, blkaddr, NPC_AF_PCK_DEF_OL2, in rvu_npc_init()
2080 rvu_write64(rvu, blkaddr, NPC_AF_PCK_DEF_OIP4, in rvu_npc_init()
2085 rvu_write64(rvu, blkaddr, NPC_AF_PCK_DEF_IIP4, in rvu_npc_init()
2096 rvu_write64(rvu, blkaddr, NPC_AF_PCK_CFG, in rvu_npc_init()
2097 rvu_read64(rvu, blkaddr, NPC_AF_PCK_CFG) | in rvu_npc_init()
2101 rvu_npc_setup_interfaces(rvu, blkaddr); in rvu_npc_init()
2103 npc_config_secret_key(rvu, blkaddr); in rvu_npc_init()
2105 npc_load_mkex_profile(rvu, blkaddr, rvu->mkex_pfl_name); in rvu_npc_init()
2107 err = npc_mcam_rsrcs_init(rvu, blkaddr); in rvu_npc_init()
2111 err = npc_flow_steering_init(rvu, blkaddr); in rvu_npc_init()
2113 dev_err(rvu->dev, in rvu_npc_init()
2115 npc_load_mkex_profile(rvu, blkaddr, def_pfl_name); in rvu_npc_init()
2121 void rvu_npc_freemem(struct rvu *rvu) in rvu_npc_freemem() argument
2123 struct npc_pkind *pkind = &rvu->hw->pkind; in rvu_npc_freemem()
2124 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_freemem()
2128 if (rvu->kpu_prfl_addr) in rvu_npc_freemem()
2129 iounmap(rvu->kpu_prfl_addr); in rvu_npc_freemem()
2131 kfree(rvu->kpu_fwdata); in rvu_npc_freemem()
2135 void rvu_npc_get_mcam_entry_alloc_info(struct rvu *rvu, u16 pcifunc, in rvu_npc_get_mcam_entry_alloc_info() argument
2139 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_get_mcam_entry_alloc_info()
2148 if (is_mcam_entry_enabled(rvu, mcam, blkaddr, entry)) in rvu_npc_get_mcam_entry_alloc_info()
2154 void rvu_npc_get_mcam_counter_alloc_info(struct rvu *rvu, u16 pcifunc, in rvu_npc_get_mcam_counter_alloc_info() argument
2158 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_npc_get_mcam_counter_alloc_info()
2206 static void npc_map_mcam_entry_and_cntr(struct rvu *rvu, struct npc_mcam *mcam, in npc_map_mcam_entry_and_cntr() argument
2211 struct rvu_hwinfo *hw = rvu->hw; in npc_map_mcam_entry_and_cntr()
2217 rvu_write64(rvu, blkaddr, in npc_map_mcam_entry_and_cntr()
2222 static void npc_unmap_mcam_entry_and_cntr(struct rvu *rvu, in npc_unmap_mcam_entry_and_cntr() argument
2233 rvu_write64(rvu, blkaddr, in npc_unmap_mcam_entry_and_cntr()
2269 static void npc_mcam_free_all_entries(struct rvu *rvu, struct npc_mcam *mcam, in npc_mcam_free_all_entries() argument
2281 npc_enable_mcam_entry(rvu, mcam, blkaddr, index, false); in npc_mcam_free_all_entries()
2286 npc_unmap_mcam_entry_and_cntr(rvu, mcam, in npc_mcam_free_all_entries()
2294 static void npc_mcam_free_all_counters(struct rvu *rvu, struct npc_mcam *mcam, in npc_mcam_free_all_counters() argument
2620 void npc_mcam_rsrcs_reserve(struct rvu *rvu, int blkaddr, int entry_idx) in npc_mcam_rsrcs_reserve() argument
2622 struct npc_mcam *mcam = &rvu->hw->mcam; in npc_mcam_rsrcs_reserve()
2627 int rvu_mbox_handler_npc_mcam_alloc_entry(struct rvu *rvu, in rvu_mbox_handler_npc_mcam_alloc_entry() argument
2631 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_mcam_alloc_entry()
2635 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_mcam_alloc_entry()
2644 dev_err(rvu->dev, "%s: reference entry %d is out of range\n", in rvu_mbox_handler_npc_mcam_alloc_entry()
2661 dev_err(rvu->dev, in rvu_mbox_handler_npc_mcam_alloc_entry()
2668 if (!is_pffunc_af(pcifunc) && !is_nixlf_attached(rvu, pcifunc)) in rvu_mbox_handler_npc_mcam_alloc_entry()
2674 int rvu_mbox_handler_npc_mcam_free_entry(struct rvu *rvu, in rvu_mbox_handler_npc_mcam_free_entry() argument
2678 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_mcam_free_entry()
2683 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_mcam_free_entry()
2688 if (!is_pffunc_af(pcifunc) && !is_nixlf_attached(rvu, pcifunc)) in rvu_mbox_handler_npc_mcam_free_entry()
2703 npc_enable_mcam_entry(rvu, mcam, blkaddr, req->entry, false); in rvu_mbox_handler_npc_mcam_free_entry()
2708 npc_unmap_mcam_entry_and_cntr(rvu, mcam, blkaddr, in rvu_mbox_handler_npc_mcam_free_entry()
2715 npc_mcam_free_all_entries(rvu, mcam, blkaddr, pcifunc); in rvu_mbox_handler_npc_mcam_free_entry()
2721 int rvu_mbox_handler_npc_mcam_read_entry(struct rvu *rvu, in rvu_mbox_handler_npc_mcam_read_entry() argument
2725 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_mcam_read_entry()
2729 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_mcam_read_entry()
2736 npc_read_mcam_entry(rvu, mcam, blkaddr, req->entry, in rvu_mbox_handler_npc_mcam_read_entry()
2745 int rvu_mbox_handler_npc_mcam_write_entry(struct rvu *rvu, in rvu_mbox_handler_npc_mcam_write_entry() argument
2749 struct rvu_pfvf *pfvf = rvu_get_pfvf(rvu, req->hdr.pcifunc); in rvu_mbox_handler_npc_mcam_write_entry()
2750 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_mcam_write_entry()
2755 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_mcam_write_entry()
2770 if (!is_npc_interface_valid(rvu, req->intf)) { in rvu_mbox_handler_npc_mcam_write_entry()
2781 npc_mcam_verify_pf_func(rvu, &req->entry_data, req->intf, pcifunc)) { in rvu_mbox_handler_npc_mcam_write_entry()
2790 npc_config_mcam_entry(rvu, mcam, blkaddr, req->entry, nix_intf, in rvu_mbox_handler_npc_mcam_write_entry()
2794 npc_map_mcam_entry_and_cntr(rvu, mcam, blkaddr, in rvu_mbox_handler_npc_mcam_write_entry()
2803 int rvu_mbox_handler_npc_mcam_ena_entry(struct rvu *rvu, in rvu_mbox_handler_npc_mcam_ena_entry() argument
2807 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_mcam_ena_entry()
2811 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_mcam_ena_entry()
2821 npc_enable_mcam_entry(rvu, mcam, blkaddr, req->entry, true); in rvu_mbox_handler_npc_mcam_ena_entry()
2826 int rvu_mbox_handler_npc_mcam_dis_entry(struct rvu *rvu, in rvu_mbox_handler_npc_mcam_dis_entry() argument
2830 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_mcam_dis_entry()
2834 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_mcam_dis_entry()
2844 npc_enable_mcam_entry(rvu, mcam, blkaddr, req->entry, false); in rvu_mbox_handler_npc_mcam_dis_entry()
2849 int rvu_mbox_handler_npc_mcam_shift_entry(struct rvu *rvu, in rvu_mbox_handler_npc_mcam_shift_entry() argument
2853 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_mcam_shift_entry()
2859 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_mcam_shift_entry()
2889 npc_enable_mcam_entry(rvu, mcam, blkaddr, new_entry, false); in rvu_mbox_handler_npc_mcam_shift_entry()
2892 npc_copy_mcam_entry(rvu, mcam, blkaddr, old_entry, new_entry); in rvu_mbox_handler_npc_mcam_shift_entry()
2897 npc_unmap_mcam_entry_and_cntr(rvu, mcam, blkaddr, in rvu_mbox_handler_npc_mcam_shift_entry()
2899 npc_map_mcam_entry_and_cntr(rvu, mcam, blkaddr, in rvu_mbox_handler_npc_mcam_shift_entry()
2904 npc_enable_mcam_entry(rvu, mcam, blkaddr, new_entry, true); in rvu_mbox_handler_npc_mcam_shift_entry()
2905 npc_enable_mcam_entry(rvu, mcam, blkaddr, old_entry, false); in rvu_mbox_handler_npc_mcam_shift_entry()
2918 int rvu_mbox_handler_npc_mcam_alloc_counter(struct rvu *rvu, in rvu_mbox_handler_npc_mcam_alloc_counter() argument
2922 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_mcam_alloc_counter()
2927 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_mcam_alloc_counter()
2932 if (!is_pffunc_af(pcifunc) && !is_nixlf_attached(rvu, pcifunc)) in rvu_mbox_handler_npc_mcam_alloc_counter()
2982 int rvu_mbox_handler_npc_mcam_free_counter(struct rvu *rvu, in rvu_mbox_handler_npc_mcam_free_counter() argument
2985 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_mcam_free_counter()
2989 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_mcam_free_counter()
3016 npc_unmap_mcam_entry_and_cntr(rvu, mcam, blkaddr, in rvu_mbox_handler_npc_mcam_free_counter()
3024 int rvu_mbox_handler_npc_mcam_unmap_counter(struct rvu *rvu, in rvu_mbox_handler_npc_mcam_unmap_counter() argument
3027 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_mcam_unmap_counter()
3031 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_mcam_unmap_counter()
3045 npc_unmap_mcam_entry_and_cntr(rvu, mcam, blkaddr, in rvu_mbox_handler_npc_mcam_unmap_counter()
3063 npc_unmap_mcam_entry_and_cntr(rvu, mcam, blkaddr, in rvu_mbox_handler_npc_mcam_unmap_counter()
3071 int rvu_mbox_handler_npc_mcam_clear_counter(struct rvu *rvu, in rvu_mbox_handler_npc_mcam_clear_counter() argument
3074 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_mcam_clear_counter()
3077 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_mcam_clear_counter()
3087 rvu_write64(rvu, blkaddr, NPC_AF_MATCH_STATX(req->cntr), 0x00); in rvu_mbox_handler_npc_mcam_clear_counter()
3092 int rvu_mbox_handler_npc_mcam_counter_stats(struct rvu *rvu, in rvu_mbox_handler_npc_mcam_counter_stats() argument
3096 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_mcam_counter_stats()
3099 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_mcam_counter_stats()
3109 rsp->stat = rvu_read64(rvu, blkaddr, NPC_AF_MATCH_STATX(req->cntr)); in rvu_mbox_handler_npc_mcam_counter_stats()
3115 int rvu_mbox_handler_npc_mcam_alloc_and_write_entry(struct rvu *rvu, in rvu_mbox_handler_npc_mcam_alloc_and_write_entry() argument
3119 struct rvu_pfvf *pfvf = rvu_get_pfvf(rvu, req->hdr.pcifunc); in rvu_mbox_handler_npc_mcam_alloc_and_write_entry()
3124 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_mcam_alloc_and_write_entry()
3130 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_mcam_alloc_and_write_entry()
3134 if (!is_npc_interface_valid(rvu, req->intf)) in rvu_mbox_handler_npc_mcam_alloc_and_write_entry()
3137 if (npc_mcam_verify_pf_func(rvu, &req->entry_data, req->intf, in rvu_mbox_handler_npc_mcam_alloc_and_write_entry()
3148 rc = rvu_mbox_handler_npc_mcam_alloc_entry(rvu, in rvu_mbox_handler_npc_mcam_alloc_and_write_entry()
3166 rc = rvu_mbox_handler_npc_mcam_alloc_counter(rvu, &cntr_req, &cntr_rsp); in rvu_mbox_handler_npc_mcam_alloc_and_write_entry()
3186 npc_config_mcam_entry(rvu, mcam, blkaddr, entry, nix_intf, in rvu_mbox_handler_npc_mcam_alloc_and_write_entry()
3190 npc_map_mcam_entry_and_cntr(rvu, mcam, blkaddr, entry, cntr); in rvu_mbox_handler_npc_mcam_alloc_and_write_entry()
3200 rvu_read64(rvu, BLKADDR_NPC, NPC_AF_INTFX_KEX_CFG(intf))
3203 rvu_read64(rvu, BLKADDR_NPC, NPC_AF_KEX_LDATAX_FLAGS_CFG(ld))
3206 rvu_read64(rvu, BLKADDR_NPC, \
3210 rvu_read64(rvu, BLKADDR_NPC, \
3213 int rvu_mbox_handler_npc_get_kex_cfg(struct rvu *rvu, struct msg_req *req, in rvu_mbox_handler_npc_get_kex_cfg() argument
3241 memcpy(rsp->mkex_pfl_name, rvu->mkex_pfl_name, MKEX_NAME_LEN); in rvu_mbox_handler_npc_get_kex_cfg()
3246 npc_set_var_len_offset_pkind(struct rvu *rvu, u16 pcifunc, u64 pkind, in npc_set_var_len_offset_pkind() argument
3263 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, pcifunc); in npc_set_var_len_offset_pkind()
3265 dev_err(rvu->dev, "%s: NPC block not implemented\n", __func__); in npc_set_var_len_offset_pkind()
3268 val = rvu_read64(rvu, blkaddr, NPC_AF_PKINDX_ACTION0(pkind)); in npc_set_var_len_offset_pkind()
3274 rvu_write64(rvu, blkaddr, NPC_AF_PKINDX_ACTION0(pkind), val); in npc_set_var_len_offset_pkind()
3278 int rvu_npc_set_parse_mode(struct rvu *rvu, u16 pcifunc, u64 mode, u8 dir, in rvu_npc_set_parse_mode() argument
3283 struct rvu_pfvf *pfvf = rvu_get_pfvf(rvu, pcifunc); in rvu_npc_set_parse_mode()
3290 rxpkind = rvu_npc_get_pkind(rvu, pf); in rvu_npc_set_parse_mode()
3296 rc = npc_set_var_len_offset_pkind(rvu, pcifunc, pkind, in rvu_npc_set_parse_mode()
3309 if (!is_cgx_config_permitted(rvu, pcifunc)) in rvu_npc_set_parse_mode()
3311 rvu_get_cgx_lmac_id(rvu->pf2cgxlmac_map[pf], &cgx_id, &lmac_id); in rvu_npc_set_parse_mode()
3313 rc = cgx_set_pkind(rvu_cgx_pdata(cgx_id, rvu), lmac_id, in rvu_npc_set_parse_mode()
3321 rc = nix_get_nixlf(rvu, pcifunc, &nixlf, &blkaddr); in rvu_npc_set_parse_mode()
3325 rvu_write64(rvu, blkaddr, NIX_AF_LFX_TX_PARSE_CFG(nixlf), in rvu_npc_set_parse_mode()
3333 int rvu_mbox_handler_npc_set_pkind(struct rvu *rvu, struct npc_set_pkind *req, in rvu_mbox_handler_npc_set_pkind() argument
3336 return rvu_npc_set_parse_mode(rvu, req->hdr.pcifunc, req->mode, in rvu_mbox_handler_npc_set_pkind()
3341 int rvu_mbox_handler_npc_read_base_steer_rule(struct rvu *rvu, in rvu_mbox_handler_npc_read_base_steer_rule() argument
3345 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_read_base_steer_rule()
3351 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_read_base_steer_rule()
3357 pfvf = rvu_get_pfvf(rvu, pcifunc); in rvu_mbox_handler_npc_read_base_steer_rule()
3370 rc = nix_get_nixlf(rvu, pcifunc, &nixlf, NULL); in rvu_mbox_handler_npc_read_base_steer_rule()
3380 npc_read_mcam_entry(rvu, mcam, blkaddr, index, &rsp->entry, &intf, in rvu_mbox_handler_npc_read_base_steer_rule()
3387 int rvu_mbox_handler_npc_mcam_entry_stats(struct rvu *rvu, in rvu_mbox_handler_npc_mcam_entry_stats() argument
3391 struct npc_mcam *mcam = &rvu->hw->mcam; in rvu_mbox_handler_npc_mcam_entry_stats()
3397 blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_NPC, 0); in rvu_mbox_handler_npc_mcam_entry_stats()
3407 regval = rvu_read64(rvu, blkaddr, NPC_AF_MCAMEX_BANKX_STAT_ACT(index, bank)); in rvu_mbox_handler_npc_mcam_entry_stats()
3409 if (!(regval & rvu->hw->npc_stat_ena)) { in rvu_mbox_handler_npc_mcam_entry_stats()
3418 rsp->stat = rvu_read64(rvu, blkaddr, NPC_AF_MATCH_STATX(cntr)); in rvu_mbox_handler_npc_mcam_entry_stats()