.. | .. |
---|
239 | 239 | break; |
---|
240 | 240 | } |
---|
241 | 241 | |
---|
242 | | - /*Ctrl field, ctrl set type: sig, solic, imm, fence */ |
---|
| 242 | + /* Ctrl field, ctrl set type: sig, solic, imm, fence */ |
---|
243 | 243 | /* SO wait for conforming application scenarios */ |
---|
244 | 244 | ctrl->flag |= (wr->send_flags & IB_SEND_SIGNALED ? |
---|
245 | 245 | cpu_to_le32(HNS_ROCE_WQE_CQ_NOTIFY) : 0) | |
---|
.. | .. |
---|
300 | 300 | } |
---|
301 | 301 | ctrl->flag |= cpu_to_le32(HNS_ROCE_WQE_INLINE); |
---|
302 | 302 | } else { |
---|
303 | | - /*sqe num is two */ |
---|
| 303 | + /* sqe num is two */ |
---|
304 | 304 | for (i = 0; i < wr->num_sge; i++) |
---|
305 | 305 | set_data_seg(dseg + i, wr->sg_list + i); |
---|
306 | 306 | |
---|
.. | .. |
---|
448 | 448 | roce_set_bit(tmp, ROCEE_GLB_CFG_ROCEE_DB_OTH_MODE_S, odb_mode); |
---|
449 | 449 | val = le32_to_cpu(tmp); |
---|
450 | 450 | 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; |
---|
451 | 527 | } |
---|
452 | 528 | |
---|
453 | 529 | static void hns_roce_set_db_ext_mode(struct hns_roce_dev *hr_dev, u32 sdb_mode, |
---|
.. | .. |
---|
1165 | 1241 | } |
---|
1166 | 1242 | raq->e_raq_buf->map = addr; |
---|
1167 | 1243 | |
---|
1168 | | - /* Configure raq extended address. 48bit 4K align*/ |
---|
| 1244 | + /* Configure raq extended address. 48bit 4K align */ |
---|
1169 | 1245 | roce_write(hr_dev, ROCEE_EXT_RAQ_REG, raq->e_raq_buf->map >> 12); |
---|
1170 | 1246 | |
---|
1171 | 1247 | /* Configure raq_shift */ |
---|
.. | .. |
---|
2062 | 2138 | CQ_CONTEXT_CQC_BYTE_32_CQ_CONS_IDX_S, 0); |
---|
2063 | 2139 | } |
---|
2064 | 2140 | |
---|
2065 | | -static int hns_roce_v1_modify_cq(struct ib_cq *cq, u16 cq_count, u16 cq_period) |
---|
2066 | | -{ |
---|
2067 | | - return -EOPNOTSUPP; |
---|
2068 | | -} |
---|
2069 | | - |
---|
2070 | 2141 | static int hns_roce_v1_req_notify_cq(struct ib_cq *ibcq, |
---|
2071 | 2142 | enum ib_cq_notify_flags flags) |
---|
2072 | 2143 | { |
---|
.. | .. |
---|
2765 | 2836 | roce_set_field(context->qpc_bytes_16, |
---|
2766 | 2837 | QP_CONTEXT_QPC_BYTES_16_QP_NUM_M, |
---|
2767 | 2838 | QP_CONTEXT_QPC_BYTES_16_QP_NUM_S, hr_qp->qpn); |
---|
2768 | | - |
---|
2769 | 2839 | } else if (cur_state == IB_QPS_INIT && new_state == IB_QPS_INIT) { |
---|
2770 | 2840 | roce_set_field(context->qpc_bytes_4, |
---|
2771 | 2841 | QP_CONTEXT_QPC_BYTES_4_TRANSPORT_SERVICE_TYPE_M, |
---|
.. | .. |
---|
3798 | 3868 | int event_type; |
---|
3799 | 3869 | |
---|
3800 | 3870 | while ((aeqe = next_aeqe_sw_v1(eq))) { |
---|
3801 | | - |
---|
3802 | 3871 | /* Make sure we read the AEQ entry after we have checked the |
---|
3803 | 3872 | * ownership bit |
---|
3804 | 3873 | */ |
---|
.. | .. |
---|
3903 | 3972 | u32 cqn; |
---|
3904 | 3973 | |
---|
3905 | 3974 | while ((ceqe = next_ceqe_sw_v1(eq))) { |
---|
3906 | | - |
---|
3907 | 3975 | /* Make sure we read CEQ entry after we have checked the |
---|
3908 | 3976 | * ownership bit |
---|
3909 | 3977 | */ |
---|
.. | .. |
---|
4347 | 4415 | |
---|
4348 | 4416 | static const struct ib_device_ops hns_roce_v1_dev_ops = { |
---|
4349 | 4417 | .destroy_qp = hns_roce_v1_destroy_qp, |
---|
4350 | | - .modify_cq = hns_roce_v1_modify_cq, |
---|
4351 | 4418 | .poll_cq = hns_roce_v1_poll_cq, |
---|
4352 | 4419 | .post_recv = hns_roce_v1_post_recv, |
---|
4353 | 4420 | .post_send = hns_roce_v1_post_send, |
---|
.. | .. |
---|
4367 | 4434 | .set_mtu = hns_roce_v1_set_mtu, |
---|
4368 | 4435 | .write_mtpt = hns_roce_v1_write_mtpt, |
---|
4369 | 4436 | .write_cqc = hns_roce_v1_write_cqc, |
---|
4370 | | - .modify_cq = hns_roce_v1_modify_cq, |
---|
| 4437 | + .set_hem = hns_roce_v1_set_hem, |
---|
4371 | 4438 | .clear_hem = hns_roce_v1_clear_hem, |
---|
4372 | 4439 | .modify_qp = hns_roce_v1_modify_qp, |
---|
4373 | 4440 | .query_qp = hns_roce_v1_query_qp, |
---|