struct ib_device *ibdev = &hr_dev->ib_dev;
        dma_addr_t trrl_ba;
        dma_addr_t irrl_ba;
-       enum ib_mtu mtu;
+       enum ib_mtu ib_mtu;
        u8 lp_pktn_ini;
        u64 *mtts;
        u8 *dmac;
        u8 *smac;
        u32 port;
+       int mtu;
        int ret;
 
        ret = config_qp_rq_buf(hr_dev, hr_qp, context, qpc_mask);
        roce_set_field(qpc_mask->byte_52_udpspn_dmac, V2_QPC_BYTE_52_DMAC_M,
                       V2_QPC_BYTE_52_DMAC_S, 0);
 
-       mtu = get_mtu(ibqp, attr);
-       hr_qp->path_mtu = mtu;
+       ib_mtu = get_mtu(ibqp, attr);
+       hr_qp->path_mtu = ib_mtu;
+
+       mtu = ib_mtu_enum_to_int(ib_mtu);
+       if (WARN_ON(mtu < 0))
+               return -EINVAL;
 
        if (attr_mask & IB_QP_PATH_MTU) {
                roce_set_field(context->byte_24_mtu_tc, V2_QPC_BYTE_24_MTU_M,
-                              V2_QPC_BYTE_24_MTU_S, mtu);
+                              V2_QPC_BYTE_24_MTU_S, ib_mtu);
                roce_set_field(qpc_mask->byte_24_mtu_tc, V2_QPC_BYTE_24_MTU_M,
                               V2_QPC_BYTE_24_MTU_S, 0);
        }
 
 #define MAX_LP_MSG_LEN 65536
        /* MTU * (2 ^ LP_PKTN_INI) shouldn't be bigger than 64KB */
-       lp_pktn_ini = ilog2(MAX_LP_MSG_LEN / ib_mtu_enum_to_int(mtu));
+       lp_pktn_ini = ilog2(MAX_LP_MSG_LEN / mtu);
 
        roce_set_field(context->byte_56_dqpn_err, V2_QPC_BYTE_56_LP_PKTN_INI_M,
                       V2_QPC_BYTE_56_LP_PKTN_INI_S, lp_pktn_ini);