hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
....@@ -239,7 +239,7 @@
239239 break;
240240 }
241241
242
- /*Ctrl field, ctrl set type: sig, solic, imm, fence */
242
+ /* Ctrl field, ctrl set type: sig, solic, imm, fence */
243243 /* SO wait for conforming application scenarios */
244244 ctrl->flag |= (wr->send_flags & IB_SEND_SIGNALED ?
245245 cpu_to_le32(HNS_ROCE_WQE_CQ_NOTIFY) : 0) |
....@@ -300,7 +300,7 @@
300300 }
301301 ctrl->flag |= cpu_to_le32(HNS_ROCE_WQE_INLINE);
302302 } else {
303
- /*sqe num is two */
303
+ /* sqe num is two */
304304 for (i = 0; i < wr->num_sge; i++)
305305 set_data_seg(dseg + i, wr->sg_list + i);
306306
....@@ -448,6 +448,82 @@
448448 roce_set_bit(tmp, ROCEE_GLB_CFG_ROCEE_DB_OTH_MODE_S, odb_mode);
449449 val = le32_to_cpu(tmp);
450450 roce_write(hr_dev, ROCEE_GLB_CFG_REG, val);
451
+}
452
+
453
+static int hns_roce_v1_set_hem(struct hns_roce_dev *hr_dev,
454
+ struct hns_roce_hem_table *table, int obj,
455
+ int step_idx)
456
+{
457
+ spinlock_t *lock = &hr_dev->bt_cmd_lock;
458
+ struct device *dev = hr_dev->dev;
459
+ struct hns_roce_hem_iter iter;
460
+ void __iomem *bt_cmd;
461
+ __le32 bt_cmd_val[2];
462
+ __le32 bt_cmd_h = 0;
463
+ unsigned long flags;
464
+ __le32 bt_cmd_l;
465
+ int ret = 0;
466
+ u64 bt_ba;
467
+ long end;
468
+
469
+ /* Find the HEM(Hardware Entry Memory) entry */
470
+ unsigned long i = (obj & (table->num_obj - 1)) /
471
+ (table->table_chunk_size / table->obj_size);
472
+
473
+ switch (table->type) {
474
+ case HEM_TYPE_QPC:
475
+ case HEM_TYPE_MTPT:
476
+ case HEM_TYPE_CQC:
477
+ case HEM_TYPE_SRQC:
478
+ roce_set_field(bt_cmd_h, ROCEE_BT_CMD_H_ROCEE_BT_CMD_MDF_M,
479
+ ROCEE_BT_CMD_H_ROCEE_BT_CMD_MDF_S, table->type);
480
+ break;
481
+ default:
482
+ return ret;
483
+ }
484
+
485
+ roce_set_field(bt_cmd_h, ROCEE_BT_CMD_H_ROCEE_BT_CMD_IN_MDF_M,
486
+ ROCEE_BT_CMD_H_ROCEE_BT_CMD_IN_MDF_S, obj);
487
+ roce_set_bit(bt_cmd_h, ROCEE_BT_CMD_H_ROCEE_BT_CMD_S, 0);
488
+ roce_set_bit(bt_cmd_h, ROCEE_BT_CMD_H_ROCEE_BT_CMD_HW_SYNS_S, 1);
489
+
490
+ /* Currently iter only a chunk */
491
+ for (hns_roce_hem_first(table->hem[i], &iter);
492
+ !hns_roce_hem_last(&iter); hns_roce_hem_next(&iter)) {
493
+ bt_ba = hns_roce_hem_addr(&iter) >> HNS_HW_PAGE_SHIFT;
494
+
495
+ spin_lock_irqsave(lock, flags);
496
+
497
+ bt_cmd = hr_dev->reg_base + ROCEE_BT_CMD_H_REG;
498
+
499
+ end = HW_SYNC_TIMEOUT_MSECS;
500
+ while (end > 0) {
501
+ if (!(readl(bt_cmd) >> BT_CMD_SYNC_SHIFT))
502
+ break;
503
+
504
+ mdelay(HW_SYNC_SLEEP_TIME_INTERVAL);
505
+ end -= HW_SYNC_SLEEP_TIME_INTERVAL;
506
+ }
507
+
508
+ if (end <= 0) {
509
+ dev_err(dev, "Write bt_cmd err,hw_sync is not zero.\n");
510
+ spin_unlock_irqrestore(lock, flags);
511
+ return -EBUSY;
512
+ }
513
+
514
+ bt_cmd_l = cpu_to_le32(bt_ba);
515
+ roce_set_field(bt_cmd_h, ROCEE_BT_CMD_H_ROCEE_BT_CMD_BA_H_M,
516
+ ROCEE_BT_CMD_H_ROCEE_BT_CMD_BA_H_S,
517
+ upper_32_bits(bt_ba));
518
+
519
+ bt_cmd_val[0] = bt_cmd_l;
520
+ bt_cmd_val[1] = bt_cmd_h;
521
+ hns_roce_write64_k(bt_cmd_val,
522
+ hr_dev->reg_base + ROCEE_BT_CMD_L_REG);
523
+ spin_unlock_irqrestore(lock, flags);
524
+ }
525
+
526
+ return ret;
451527 }
452528
453529 static void hns_roce_set_db_ext_mode(struct hns_roce_dev *hr_dev, u32 sdb_mode,
....@@ -1165,7 +1241,7 @@
11651241 }
11661242 raq->e_raq_buf->map = addr;
11671243
1168
- /* Configure raq extended address. 48bit 4K align*/
1244
+ /* Configure raq extended address. 48bit 4K align */
11691245 roce_write(hr_dev, ROCEE_EXT_RAQ_REG, raq->e_raq_buf->map >> 12);
11701246
11711247 /* Configure raq_shift */
....@@ -2062,11 +2138,6 @@
20622138 CQ_CONTEXT_CQC_BYTE_32_CQ_CONS_IDX_S, 0);
20632139 }
20642140
2065
-static int hns_roce_v1_modify_cq(struct ib_cq *cq, u16 cq_count, u16 cq_period)
2066
-{
2067
- return -EOPNOTSUPP;
2068
-}
2069
-
20702141 static int hns_roce_v1_req_notify_cq(struct ib_cq *ibcq,
20712142 enum ib_cq_notify_flags flags)
20722143 {
....@@ -2765,7 +2836,6 @@
27652836 roce_set_field(context->qpc_bytes_16,
27662837 QP_CONTEXT_QPC_BYTES_16_QP_NUM_M,
27672838 QP_CONTEXT_QPC_BYTES_16_QP_NUM_S, hr_qp->qpn);
2768
-
27692839 } else if (cur_state == IB_QPS_INIT && new_state == IB_QPS_INIT) {
27702840 roce_set_field(context->qpc_bytes_4,
27712841 QP_CONTEXT_QPC_BYTES_4_TRANSPORT_SERVICE_TYPE_M,
....@@ -3798,7 +3868,6 @@
37983868 int event_type;
37993869
38003870 while ((aeqe = next_aeqe_sw_v1(eq))) {
3801
-
38023871 /* Make sure we read the AEQ entry after we have checked the
38033872 * ownership bit
38043873 */
....@@ -3903,7 +3972,6 @@
39033972 u32 cqn;
39043973
39053974 while ((ceqe = next_ceqe_sw_v1(eq))) {
3906
-
39073975 /* Make sure we read CEQ entry after we have checked the
39083976 * ownership bit
39093977 */
....@@ -4347,7 +4415,6 @@
43474415
43484416 static const struct ib_device_ops hns_roce_v1_dev_ops = {
43494417 .destroy_qp = hns_roce_v1_destroy_qp,
4350
- .modify_cq = hns_roce_v1_modify_cq,
43514418 .poll_cq = hns_roce_v1_poll_cq,
43524419 .post_recv = hns_roce_v1_post_recv,
43534420 .post_send = hns_roce_v1_post_send,
....@@ -4367,7 +4434,7 @@
43674434 .set_mtu = hns_roce_v1_set_mtu,
43684435 .write_mtpt = hns_roce_v1_write_mtpt,
43694436 .write_cqc = hns_roce_v1_write_cqc,
4370
- .modify_cq = hns_roce_v1_modify_cq,
4437
+ .set_hem = hns_roce_v1_set_hem,
43714438 .clear_hem = hns_roce_v1_clear_hem,
43724439 .modify_qp = hns_roce_v1_modify_qp,
43734440 .query_qp = hns_roce_v1_query_qp,