static u8 i40iw_derive_hw_ird_setting(u16 cm_ird)
 {
        u8 encoded_ird_size;
-       u8 pof2_cm_ird = 1;
-
-       /* round-off to next powerof2 */
-       while (pof2_cm_ird < cm_ird)
-               pof2_cm_ird *= 2;
 
        /* ird_size field is encoded in qp_ctx */
-       switch (pof2_cm_ird) {
+       switch (cm_ird ? roundup_pow_of_two(cm_ird) : 0) {
        case I40IW_HW_IRD_SETTING_64:
                encoded_ird_size = 3;
                break;
 
        struct i40iw_virt_mem virt_mem;
        u32 i, mem_size;
        u32 qpwantedoriginal, qpwanted, mrwanted, pblewanted;
-       u32 powerof2;
        u64 sd_needed;
        u32 loop_count = 0;
 
                if ((loop_count > 1000) ||
                    ((!(loop_count % 10)) &&
                    (qpwanted > qpwantedoriginal * 2 / 3))) {
-                       if (qpwanted > FPM_MULTIPLIER) {
-                               qpwanted -= FPM_MULTIPLIER;
-                               powerof2 = 1;
-                               while (powerof2 < qpwanted)
-                                       powerof2 *= 2;
-                               powerof2 /= 2;
-                               qpwanted = powerof2;
-                       } else {
-                               qpwanted /= 2;
-                       }
+                       if (qpwanted > FPM_MULTIPLIER)
+                               qpwanted = roundup_pow_of_two(qpwanted -
+                                                             FPM_MULTIPLIER);
+                       qpwanted >>= 1;
                }
                if (mrwanted > FPM_MULTIPLIER * 10)
                        mrwanted -= FPM_MULTIPLIER * 10;
 
        return ret_code;
 }
 
-/**
- * i40iw_qp_roundup - return round up QP WQ depth
- * @wqdepth: WQ depth in quantas to round up
- */
-static int i40iw_qp_round_up(u32 wqdepth)
-{
-       int scount = 1;
-
-       for (wqdepth--; scount <= 16; scount *= 2)
-               wqdepth |= wqdepth >> scount;
-
-       return ++wqdepth;
-}
-
 /**
  * i40iw_get_wqe_shift - get shift count for maximum wqe size
  * @sge: Maximum Scatter Gather Elements wqe
  */
 enum i40iw_status_code i40iw_get_sqdepth(u32 sq_size, u8 shift, u32 *sqdepth)
 {
-       *sqdepth = i40iw_qp_round_up((sq_size << shift) + I40IW_SQ_RSVD);
+       *sqdepth = roundup_pow_of_two((sq_size << shift) + I40IW_SQ_RSVD);
 
        if (*sqdepth < (I40IW_QP_SW_MIN_WQSIZE << shift))
                *sqdepth = I40IW_QP_SW_MIN_WQSIZE << shift;
  */
 enum i40iw_status_code i40iw_get_rqdepth(u32 rq_size, u8 shift, u32 *rqdepth)
 {
-       *rqdepth = i40iw_qp_round_up((rq_size << shift) + I40IW_RQ_RSVD);
+       *rqdepth = roundup_pow_of_two((rq_size << shift) + I40IW_RQ_RSVD);
 
        if (*rqdepth < (I40IW_QP_SW_MIN_WQSIZE << shift))
                *rqdepth = I40IW_QP_SW_MIN_WQSIZE << shift;