|
@@ -745,6 +745,8 @@ void *hns_roce_table_find(struct hns_roce_dev *hr_dev,
|
|
|
idx_offset = (obj & (table->num_obj - 1)) % obj_per_chunk;
|
|
idx_offset = (obj & (table->num_obj - 1)) % obj_per_chunk;
|
|
|
dma_offset = offset = idx_offset * table->obj_size;
|
|
dma_offset = offset = idx_offset * table->obj_size;
|
|
|
} else {
|
|
} else {
|
|
|
|
|
+ u32 seg_size = 64; /* 8 bytes per BA and 8 BA per segment */
|
|
|
|
|
+
|
|
|
hns_roce_calc_hem_mhop(hr_dev, table, &mhop_obj, &mhop);
|
|
hns_roce_calc_hem_mhop(hr_dev, table, &mhop_obj, &mhop);
|
|
|
/* mtt mhop */
|
|
/* mtt mhop */
|
|
|
i = mhop.l0_idx;
|
|
i = mhop.l0_idx;
|
|
@@ -756,8 +758,8 @@ void *hns_roce_table_find(struct hns_roce_dev *hr_dev,
|
|
|
hem_idx = i;
|
|
hem_idx = i;
|
|
|
|
|
|
|
|
hem = table->hem[hem_idx];
|
|
hem = table->hem[hem_idx];
|
|
|
- dma_offset = offset = (obj & (table->num_obj - 1)) *
|
|
|
|
|
- table->obj_size % mhop.bt_chunk_size;
|
|
|
|
|
|
|
+ dma_offset = offset = (obj & (table->num_obj - 1)) * seg_size %
|
|
|
|
|
+ mhop.bt_chunk_size;
|
|
|
if (mhop.hop_num == 2)
|
|
if (mhop.hop_num == 2)
|
|
|
dma_offset = offset = 0;
|
|
dma_offset = offset = 0;
|
|
|
}
|
|
}
|