Commit 93a3d05f authored by Michal Kalderon's avatar Michal Kalderon Committed by Jason Gunthorpe

RDMA/qedr: Add kernel capability flags for dpm enabled mode

HW/FW support two types of latency enhancement features.  Until now
user-space implemented only edpm (enhanced dpm).  We add kernel capability
flags to differentiate between current FW in kernel that supports both
ldpm and edpm.  Since edpm is not yet supported for iWARP we add different
flags for iWARP + RoCE.  We also fix bad practice of defining sizes in
rdma-core and pass initialization to kernel, for forward compatibility.

The capability flags are added for backward-forward compatibility between
kernel and rdma-core for qedr.

Before this change there was a field called dpm_enabled which could hold
either 0 or 1 value, this indicated whether RoCE edpm was enabled or
not. We modified this field to be dpm_flags, and bit 1 still holds the
same meaning of RoCE edpm being enabled or not.

Link: https://lore.kernel.org/r/20191121112957.25162-1-michal.kalderon@marvell.comSigned-off-by: default avatarMichal Kalderon <michal.kalderon@marvell.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent fd698849
...@@ -312,7 +312,18 @@ int qedr_alloc_ucontext(struct ib_ucontext *uctx, struct ib_udata *udata) ...@@ -312,7 +312,18 @@ int qedr_alloc_ucontext(struct ib_ucontext *uctx, struct ib_udata *udata)
} }
ctx->db_mmap_entry = &entry->rdma_entry; ctx->db_mmap_entry = &entry->rdma_entry;
uresp.dpm_enabled = dev->user_dpm_enabled; if (!dev->user_dpm_enabled)
uresp.dpm_flags = 0;
else if (rdma_protocol_iwarp(&dev->ibdev, 1))
uresp.dpm_flags = QEDR_DPM_TYPE_IWARP_LEGACY;
else
uresp.dpm_flags = QEDR_DPM_TYPE_ROCE_ENHANCED |
QEDR_DPM_TYPE_ROCE_LEGACY;
uresp.dpm_flags |= QEDR_DPM_SIZES_SET;
uresp.ldpm_limit_size = QEDR_LDPM_MAX_SIZE;
uresp.edpm_trans_size = QEDR_EDPM_TRANS_SIZE;
uresp.wids_enabled = 1; uresp.wids_enabled = 1;
uresp.wid_count = oparams.wid_count; uresp.wid_count = oparams.wid_count;
uresp.db_pa = rdma_user_mmap_get_offset(ctx->db_mmap_entry); uresp.db_pa = rdma_user_mmap_get_offset(ctx->db_mmap_entry);
......
...@@ -48,6 +48,18 @@ struct qedr_alloc_ucontext_req { ...@@ -48,6 +48,18 @@ struct qedr_alloc_ucontext_req {
__u32 reserved; __u32 reserved;
}; };
#define QEDR_LDPM_MAX_SIZE (8192)
#define QEDR_EDPM_TRANS_SIZE (64)
enum qedr_rdma_dpm_type {
QEDR_DPM_TYPE_NONE = 0,
QEDR_DPM_TYPE_ROCE_ENHANCED = 1 << 0,
QEDR_DPM_TYPE_ROCE_LEGACY = 1 << 1,
QEDR_DPM_TYPE_IWARP_LEGACY = 1 << 2,
QEDR_DPM_TYPE_RESERVED = 1 << 3,
QEDR_DPM_SIZES_SET = 1 << 4,
};
struct qedr_alloc_ucontext_resp { struct qedr_alloc_ucontext_resp {
__aligned_u64 db_pa; __aligned_u64 db_pa;
__u32 db_size; __u32 db_size;
...@@ -59,10 +71,12 @@ struct qedr_alloc_ucontext_resp { ...@@ -59,10 +71,12 @@ struct qedr_alloc_ucontext_resp {
__u32 sges_per_recv_wr; __u32 sges_per_recv_wr;
__u32 sges_per_srq_wr; __u32 sges_per_srq_wr;
__u32 max_cqes; __u32 max_cqes;
__u8 dpm_enabled; __u8 dpm_flags;
__u8 wids_enabled; __u8 wids_enabled;
__u16 wid_count; __u16 wid_count;
__u32 reserved; __u16 ldpm_limit_size;
__u8 edpm_trans_size;
__u8 reserved;
}; };
struct qedr_alloc_pd_ureq { struct qedr_alloc_pd_ureq {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment