[PATCH V2 2/3] RDMA/hns: Update the IRRL table chunk size in hip08

2017-10-18 Thread Wei Hu (Xavier)
As the increase of the IRRL specification in hip08, the IRRL table
chunk size needs to be updated.
This patch updates the IRRL table chunk size to 256k for hip08.

Signed-off-by: Wei Hu (Xavier) 
Signed-off-by: Shaobo Xu 
Signed-off-by: Lijun Ou 
---
Patch V2: Address comments by Leon:
https://lkml.org/lkml/2017/10/1/2

Patch V1: Initial Submit
---
 drivers/infiniband/hw/hns/hns_roce_device.h |  2 ++
 drivers/infiniband/hw/hns/hns_roce_hem.c| 29 +
 drivers/infiniband/hw/hns/hns_roce_hw_v1.c  |  1 +
 drivers/infiniband/hw/hns/hns_roce_hw_v1.h  |  2 ++
 drivers/infiniband/hw/hns/hns_roce_hw_v2.c  |  1 +
 drivers/infiniband/hw/hns/hns_roce_hw_v2.h  |  2 ++
 6 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/drivers/infiniband/hw/hns/hns_roce_device.h 
b/drivers/infiniband/hw/hns/hns_roce_device.h
index 9353400..adf7a70 100644
--- a/drivers/infiniband/hw/hns/hns_roce_device.h
+++ b/drivers/infiniband/hw/hns/hns_roce_device.h
@@ -236,6 +236,7 @@ struct hns_roce_hem_table {
unsigned long   num_obj;
/*Single obj size */
unsigned long   obj_size;
+   unsigned long   table_chunk_size;
int lowmem;
struct mutexmutex;
struct hns_roce_hem **hem;
@@ -565,6 +566,7 @@ struct hns_roce_caps {
u32 cqe_ba_pg_sz;
u32 cqe_buf_pg_sz;
u32 cqe_hop_num;
+   u32 chunk_sz;   /* chunk size in non multihop mode*/
 };
 
 struct hns_roce_hw {
diff --git a/drivers/infiniband/hw/hns/hns_roce_hem.c 
b/drivers/infiniband/hw/hns/hns_roce_hem.c
index 8388ae2..576eb3b 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hem.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hem.c
@@ -36,9 +36,6 @@
 #include "hns_roce_hem.h"
 #include "hns_roce_common.h"
 
-#define HNS_ROCE_HEM_ALLOC_SIZE(1 << 17)
-#define HNS_ROCE_TABLE_CHUNK_SIZE  (1 << 17)
-
 #define DMA_ADDR_T_SHIFT   12
 #define BT_BA_SHIFT32
 
@@ -296,7 +293,7 @@ static int hns_roce_set_hem(struct hns_roce_dev *hr_dev,
 
/* Find the HEM(Hardware Entry Memory) entry */
unsigned long i = (obj & (table->num_obj - 1)) /
- (HNS_ROCE_TABLE_CHUNK_SIZE / table->obj_size);
+ (table->table_chunk_size / table->obj_size);
 
switch (table->type) {
case HEM_TYPE_QPC:
@@ -541,7 +538,7 @@ int hns_roce_table_get(struct hns_roce_dev *hr_dev,
if (hns_roce_check_whether_mhop(hr_dev, table->type))
return hns_roce_table_mhop_get(hr_dev, table, obj);
 
-   i = (obj & (table->num_obj - 1)) / (HNS_ROCE_TABLE_CHUNK_SIZE /
+   i = (obj & (table->num_obj - 1)) / (table->table_chunk_size /
 table->obj_size);
 
mutex_lock(>mutex);
@@ -552,8 +549,8 @@ int hns_roce_table_get(struct hns_roce_dev *hr_dev,
}
 
table->hem[i] = hns_roce_alloc_hem(hr_dev,
-  HNS_ROCE_TABLE_CHUNK_SIZE >> PAGE_SHIFT,
-  HNS_ROCE_HEM_ALLOC_SIZE,
+  table->table_chunk_size >> PAGE_SHIFT,
+  table->table_chunk_size,
   (table->lowmem ? GFP_KERNEL :
GFP_HIGHUSER) | __GFP_NOWARN);
if (!table->hem[i]) {
@@ -702,7 +699,7 @@ void hns_roce_table_put(struct hns_roce_dev *hr_dev,
}
 
i = (obj & (table->num_obj - 1)) /
-   (HNS_ROCE_TABLE_CHUNK_SIZE / table->obj_size);
+   (table->table_chunk_size / table->obj_size);
 
mutex_lock(>mutex);
 
@@ -739,8 +736,8 @@ void *hns_roce_table_find(struct hns_roce_dev *hr_dev,
 
if (!hns_roce_check_whether_mhop(hr_dev, table->type)) {
idx = (obj & (table->num_obj - 1)) * table->obj_size;
-   hem = table->hem[idx / HNS_ROCE_TABLE_CHUNK_SIZE];
-   dma_offset = offset = idx % HNS_ROCE_TABLE_CHUNK_SIZE;
+   hem = table->hem[idx / table->table_chunk_size];
+   dma_offset = offset = idx % table->table_chunk_size;
} else {
hns_roce_calc_hem_mhop(hr_dev, table, _obj, );
/* mtt mhop */
@@ -791,7 +788,7 @@ int hns_roce_table_get_range(struct hns_roce_dev *hr_dev,
 unsigned long start, unsigned long end)
 {
struct hns_roce_hem_mhop mhop;
-   unsigned long inc = HNS_ROCE_TABLE_CHUNK_SIZE / table->obj_size;
+   unsigned long inc = table->table_chunk_size / table->obj_size;
unsigned long i;
int ret;
 
@@ -822,7 +819,7 @@ void hns_roce_table_put_range(struct hns_roce_dev *hr_dev,
  unsigned long start, unsigned long end)
 {
struct hns_roce_hem_mhop mhop;
-   unsigned long inc = HNS_ROCE_TABLE_CHUNK_SIZE / 

[PATCH V2 2/3] RDMA/hns: Update the IRRL table chunk size in hip08

2017-10-18 Thread Wei Hu (Xavier)
As the increase of the IRRL specification in hip08, the IRRL table
chunk size needs to be updated.
This patch updates the IRRL table chunk size to 256k for hip08.

Signed-off-by: Wei Hu (Xavier) 
Signed-off-by: Shaobo Xu 
Signed-off-by: Lijun Ou 
---
Patch V2: Address comments by Leon:
https://lkml.org/lkml/2017/10/1/2

Patch V1: Initial Submit
---
 drivers/infiniband/hw/hns/hns_roce_device.h |  2 ++
 drivers/infiniband/hw/hns/hns_roce_hem.c| 29 +
 drivers/infiniband/hw/hns/hns_roce_hw_v1.c  |  1 +
 drivers/infiniband/hw/hns/hns_roce_hw_v1.h  |  2 ++
 drivers/infiniband/hw/hns/hns_roce_hw_v2.c  |  1 +
 drivers/infiniband/hw/hns/hns_roce_hw_v2.h  |  2 ++
 6 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/drivers/infiniband/hw/hns/hns_roce_device.h 
b/drivers/infiniband/hw/hns/hns_roce_device.h
index 9353400..adf7a70 100644
--- a/drivers/infiniband/hw/hns/hns_roce_device.h
+++ b/drivers/infiniband/hw/hns/hns_roce_device.h
@@ -236,6 +236,7 @@ struct hns_roce_hem_table {
unsigned long   num_obj;
/*Single obj size */
unsigned long   obj_size;
+   unsigned long   table_chunk_size;
int lowmem;
struct mutexmutex;
struct hns_roce_hem **hem;
@@ -565,6 +566,7 @@ struct hns_roce_caps {
u32 cqe_ba_pg_sz;
u32 cqe_buf_pg_sz;
u32 cqe_hop_num;
+   u32 chunk_sz;   /* chunk size in non multihop mode*/
 };
 
 struct hns_roce_hw {
diff --git a/drivers/infiniband/hw/hns/hns_roce_hem.c 
b/drivers/infiniband/hw/hns/hns_roce_hem.c
index 8388ae2..576eb3b 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hem.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hem.c
@@ -36,9 +36,6 @@
 #include "hns_roce_hem.h"
 #include "hns_roce_common.h"
 
-#define HNS_ROCE_HEM_ALLOC_SIZE(1 << 17)
-#define HNS_ROCE_TABLE_CHUNK_SIZE  (1 << 17)
-
 #define DMA_ADDR_T_SHIFT   12
 #define BT_BA_SHIFT32
 
@@ -296,7 +293,7 @@ static int hns_roce_set_hem(struct hns_roce_dev *hr_dev,
 
/* Find the HEM(Hardware Entry Memory) entry */
unsigned long i = (obj & (table->num_obj - 1)) /
- (HNS_ROCE_TABLE_CHUNK_SIZE / table->obj_size);
+ (table->table_chunk_size / table->obj_size);
 
switch (table->type) {
case HEM_TYPE_QPC:
@@ -541,7 +538,7 @@ int hns_roce_table_get(struct hns_roce_dev *hr_dev,
if (hns_roce_check_whether_mhop(hr_dev, table->type))
return hns_roce_table_mhop_get(hr_dev, table, obj);
 
-   i = (obj & (table->num_obj - 1)) / (HNS_ROCE_TABLE_CHUNK_SIZE /
+   i = (obj & (table->num_obj - 1)) / (table->table_chunk_size /
 table->obj_size);
 
mutex_lock(>mutex);
@@ -552,8 +549,8 @@ int hns_roce_table_get(struct hns_roce_dev *hr_dev,
}
 
table->hem[i] = hns_roce_alloc_hem(hr_dev,
-  HNS_ROCE_TABLE_CHUNK_SIZE >> PAGE_SHIFT,
-  HNS_ROCE_HEM_ALLOC_SIZE,
+  table->table_chunk_size >> PAGE_SHIFT,
+  table->table_chunk_size,
   (table->lowmem ? GFP_KERNEL :
GFP_HIGHUSER) | __GFP_NOWARN);
if (!table->hem[i]) {
@@ -702,7 +699,7 @@ void hns_roce_table_put(struct hns_roce_dev *hr_dev,
}
 
i = (obj & (table->num_obj - 1)) /
-   (HNS_ROCE_TABLE_CHUNK_SIZE / table->obj_size);
+   (table->table_chunk_size / table->obj_size);
 
mutex_lock(>mutex);
 
@@ -739,8 +736,8 @@ void *hns_roce_table_find(struct hns_roce_dev *hr_dev,
 
if (!hns_roce_check_whether_mhop(hr_dev, table->type)) {
idx = (obj & (table->num_obj - 1)) * table->obj_size;
-   hem = table->hem[idx / HNS_ROCE_TABLE_CHUNK_SIZE];
-   dma_offset = offset = idx % HNS_ROCE_TABLE_CHUNK_SIZE;
+   hem = table->hem[idx / table->table_chunk_size];
+   dma_offset = offset = idx % table->table_chunk_size;
} else {
hns_roce_calc_hem_mhop(hr_dev, table, _obj, );
/* mtt mhop */
@@ -791,7 +788,7 @@ int hns_roce_table_get_range(struct hns_roce_dev *hr_dev,
 unsigned long start, unsigned long end)
 {
struct hns_roce_hem_mhop mhop;
-   unsigned long inc = HNS_ROCE_TABLE_CHUNK_SIZE / table->obj_size;
+   unsigned long inc = table->table_chunk_size / table->obj_size;
unsigned long i;
int ret;
 
@@ -822,7 +819,7 @@ void hns_roce_table_put_range(struct hns_roce_dev *hr_dev,
  unsigned long start, unsigned long end)
 {
struct hns_roce_hem_mhop mhop;
-   unsigned long inc = HNS_ROCE_TABLE_CHUNK_SIZE / table->obj_size;
+   unsigned long inc = table->table_chunk_size /