int hclge_query_bd_num_cmd_send(struct hclge_dev *hdev, struct hclge_desc *desc)
 {
-       /*prepare 4 commands to query DFX BD number*/
-       hclge_cmd_setup_basic_desc(&desc[0], HCLGE_OPC_DFX_BD_NUM, true);
-       desc[0].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
-       hclge_cmd_setup_basic_desc(&desc[1], HCLGE_OPC_DFX_BD_NUM, true);
-       desc[1].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
-       hclge_cmd_setup_basic_desc(&desc[2], HCLGE_OPC_DFX_BD_NUM, true);
-       desc[2].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
-       hclge_cmd_setup_basic_desc(&desc[3], HCLGE_OPC_DFX_BD_NUM, true);
+       int i;
+
+       /* initialize command BD except the last one */
+       for (i = 0; i < HCLGE_GET_DFX_REG_TYPE_CNT - 1; i++) {
+               hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_DFX_BD_NUM,
+                                          true);
+               desc[i].flag |= cpu_to_le16(HCLGE_CMD_FLAG_NEXT);
+       }
+
+       /* initialize the last command BD */
+       hclge_cmd_setup_basic_desc(&desc[i], HCLGE_OPC_DFX_BD_NUM, true);
 
-       return hclge_cmd_send(&hdev->hw, desc, 4);
+       return hclge_cmd_send(&hdev->hw, desc, HCLGE_GET_DFX_REG_TYPE_CNT);
 }
 
 static int hclge_get_dfx_reg_bd_num(struct hclge_dev *hdev,