return is_mbpf_alu(meta) && mbpf_op(meta) == BPF_DIV;
 }
 
+static inline bool is_mbpf_helper_call(const struct nfp_insn_meta *meta)
+{
+       struct bpf_insn insn = meta->insn;
+
+       return insn.code == (BPF_JMP | BPF_CALL) &&
+               insn.src_reg != BPF_PSEUDO_CALL;
+}
+
 /**
  * struct nfp_bpf_subprog_info - nfp BPF sub-program (a.k.a. function) info
  * @stack_depth:       maximum stack depth used by this sub-program
 
 }
 
 static int
-nfp_bpf_check_call(struct nfp_prog *nfp_prog, struct bpf_verifier_env *env,
-                  struct nfp_insn_meta *meta)
+nfp_bpf_check_helper_call(struct nfp_prog *nfp_prog,
+                         struct bpf_verifier_env *env,
+                         struct nfp_insn_meta *meta)
 {
        const struct bpf_reg_state *reg1 = cur_regs(env) + BPF_REG_1;
        const struct bpf_reg_state *reg2 = cur_regs(env) + BPF_REG_2;
                return -EINVAL;
        }
 
-       if (meta->insn.code == (BPF_JMP | BPF_CALL))
-               return nfp_bpf_check_call(nfp_prog, env, meta);
+       if (is_mbpf_helper_call(meta))
+               return nfp_bpf_check_helper_call(nfp_prog, env, meta);
        if (meta->insn.code == (BPF_JMP | BPF_EXIT))
                return nfp_bpf_check_exit(nfp_prog, env);