module_param_cb(uacce_mode, &hpre_uacce_mode_ops, &uacce_mode, 0444);
 MODULE_PARM_DESC(uacce_mode, UACCE_MODE_DESC);
 
+static bool pf_q_num_flag;
 static int pf_q_num_set(const char *val, const struct kernel_param *kp)
 {
+       pf_q_num_flag = true;
+
        return q_num_set(val, kp, PCI_DEVICE_ID_HUAWEI_HPRE_PF);
 }
 
                qm->qp_num = pf_q_num;
                qm->debug.curr_qm_qp_num = pf_q_num;
                qm->qm_list = &hpre_devices;
+               if (pf_q_num_flag)
+                       set_bit(QM_MODULE_PARAM, &qm->misc_ctl);
        }
 
        ret = hisi_qm_init(qm);
 
 #define WAIT_PERIOD                    20
 #define REMOVE_WAIT_DELAY              10
 
-#define QM_DRIVER_REMOVING             0
-#define QM_RST_SCHED                   1
 #define QM_QOS_PARAM_NUM               2
 #define QM_QOS_MAX_VAL                 1000
 #define QM_QOS_RATE                    100
        mutex_init(&qm->mailbox_lock);
        init_rwsem(&qm->qps_lock);
        qm->qp_in_used = 0;
-       qm->misc_ctl = false;
        if (test_bit(QM_SUPPORT_RPM, &qm->caps)) {
                if (!acpi_device_power_manageable(ACPI_COMPANION(&pdev->dev)))
                        dev_info(&pdev->dev, "_PS0 and _PR0 are not defined");
 
 static int qm_get_qp_num(struct hisi_qm *qm)
 {
+       struct device *dev = &qm->pdev->dev;
        bool is_db_isolation;
 
        /* VF's qp_num assigned by PF in v2, and VF can get qp_num by vft. */
        qm->max_qp_num = hisi_qm_get_hw_info(qm, qm_basic_info,
                                             QM_FUNC_MAX_QP_CAP, is_db_isolation);
 
-       /* check if qp number is valid */
-       if (qm->qp_num > qm->max_qp_num) {
-               dev_err(&qm->pdev->dev, "qp num(%u) is more than max qp num(%u)!\n",
+       if (qm->qp_num <= qm->max_qp_num)
+               return 0;
+
+       if (test_bit(QM_MODULE_PARAM, &qm->misc_ctl)) {
+               /* Check whether the set qp number is valid */
+               dev_err(dev, "qp num(%u) is more than max qp num(%u)!\n",
                        qm->qp_num, qm->max_qp_num);
                return -EINVAL;
        }
 
+       dev_info(dev, "Default qp num(%u) is too big, reset it to Function's max qp num(%u)!\n",
+                qm->qp_num, qm->max_qp_num);
+       qm->qp_num = qm->max_qp_num;
+       qm->debug.curr_qm_qp_num = qm->qp_num;
+
        return 0;
 }
 
 
 #define QM_COMMON_H
 
 #define QM_DBG_READ_LEN                256
-#define QM_RESETTING           2
 
 struct qm_cqe {
        __le32 rsvd0;
 
 }
 DEFINE_SHOW_ATTRIBUTE(sec_diff_regs);
 
+static bool pf_q_num_flag;
 static int sec_pf_q_num_set(const char *val, const struct kernel_param *kp)
 {
+       pf_q_num_flag = true;
+
        return q_num_set(val, kp, PCI_DEVICE_ID_HUAWEI_SEC_PF);
 }
 
                qm->qp_num = pf_q_num;
                qm->debug.curr_qm_qp_num = pf_q_num;
                qm->qm_list = &sec_devices;
+               if (pf_q_num_flag)
+                       set_bit(QM_MODULE_PARAM, &qm->misc_ctl);
        } else if (qm->fun_type == QM_HW_VF && qm->ver == QM_HW_V1) {
                /*
                 * have no way to get qm configure in VM in v1 hardware,
 
 module_param_cb(uacce_mode, &zip_uacce_mode_ops, &uacce_mode, 0444);
 MODULE_PARM_DESC(uacce_mode, UACCE_MODE_DESC);
 
+static bool pf_q_num_flag;
 static int pf_q_num_set(const char *val, const struct kernel_param *kp)
 {
+       pf_q_num_flag = true;
+
        return q_num_set(val, kp, PCI_DEVICE_ID_HUAWEI_ZIP_PF);
 }
 
                qm->qp_num = pf_q_num;
                qm->debug.curr_qm_qp_num = pf_q_num;
                qm->qm_list = &zip_devices;
+               if (pf_q_num_flag)
+                       set_bit(QM_MODULE_PARAM, &qm->misc_ctl);
        } else if (qm->fun_type == QM_HW_VF && qm->ver == QM_HW_V1) {
                /*
                 * have no way to get qm configure in VM in v1 hardware,
 
        QM_NOT_READY,
 };
 
+enum qm_misc_ctl_bits {
+       QM_DRIVER_REMOVING = 0x0,
+       QM_RST_SCHED,
+       QM_RESETTING,
+       QM_MODULE_PARAM,
+};
+
 enum qm_cap_bits {
        QM_SUPPORT_DB_ISOLATION = 0x0,
        QM_SUPPORT_FUNC_QOS,