RDMA/bnxt_re: Doorbell changes
Update the Doorbell routines to support the latest HW definitions. Use common routine to prepare the Doorbell key. Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com> Link: https://lore.kernel.org/r/1701946060-13931-6-git-send-email-selvin.xavier@broadcom.com Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
parent
6027c20dad
commit
cdae3936b2
@ -47,6 +47,9 @@ extern const struct bnxt_qplib_gid bnxt_qplib_gid_zero;
|
||||
#define CHIP_NUM_58818 0xd818
|
||||
#define CHIP_NUM_57608 0x1760
|
||||
|
||||
#define BNXT_QPLIB_DBR_VALID (0x1UL << 26)
|
||||
#define BNXT_QPLIB_DBR_EPOCH_SHIFT 24
|
||||
#define BNXT_QPLIB_DBR_TOGGLE_SHIFT 25
|
||||
|
||||
struct bnxt_qplib_drv_modes {
|
||||
u8 wqe_mode;
|
||||
@ -200,6 +203,11 @@ enum bnxt_qplib_db_info_flags_mask {
|
||||
BNXT_QPLIB_FLAG_EPOCH_PROD_MASK = 0x2UL,
|
||||
};
|
||||
|
||||
enum bnxt_qplib_db_epoch_flag_shift {
|
||||
BNXT_QPLIB_DB_EPOCH_CONS_SHIFT = BNXT_QPLIB_DBR_EPOCH_SHIFT,
|
||||
BNXT_QPLIB_DB_EPOCH_PROD_SHIFT = (BNXT_QPLIB_DBR_EPOCH_SHIFT - 1),
|
||||
};
|
||||
|
||||
/* Tables */
|
||||
struct bnxt_qplib_pd_tbl {
|
||||
unsigned long *tbl;
|
||||
@ -453,14 +461,27 @@ static inline void bnxt_qplib_ring_db32(struct bnxt_qplib_db_info *info,
|
||||
writel(key, info->db);
|
||||
}
|
||||
|
||||
#define BNXT_QPLIB_INIT_DBHDR(xid, type, indx, toggle) \
|
||||
(((u64)(((xid) & DBC_DBC_XID_MASK) | DBC_DBC_PATH_ROCE | \
|
||||
(type) | BNXT_QPLIB_DBR_VALID) << 32) | (indx) | \
|
||||
(((u32)(toggle)) << (BNXT_QPLIB_DBR_TOGGLE_SHIFT)))
|
||||
|
||||
static inline void bnxt_qplib_ring_db(struct bnxt_qplib_db_info *info,
|
||||
u32 type)
|
||||
{
|
||||
u64 key = 0;
|
||||
u32 indx;
|
||||
u8 toggle = 0;
|
||||
|
||||
key = (info->xid & DBC_DBC_XID_MASK) | DBC_DBC_PATH_ROCE | type;
|
||||
key <<= 32;
|
||||
key |= (info->hwq->cons & DBC_DBC_INDEX_MASK);
|
||||
if (type == DBC_DBC_TYPE_CQ_ARMALL ||
|
||||
type == DBC_DBC_TYPE_CQ_ARMSE)
|
||||
toggle = info->toggle;
|
||||
|
||||
indx = (info->hwq->cons & DBC_DBC_INDEX_MASK) |
|
||||
((info->flags & BNXT_QPLIB_FLAG_EPOCH_CONS_MASK) <<
|
||||
BNXT_QPLIB_DB_EPOCH_CONS_SHIFT);
|
||||
|
||||
key = BNXT_QPLIB_INIT_DBHDR(info->xid, type, indx, toggle);
|
||||
writeq(key, info->db);
|
||||
}
|
||||
|
||||
@ -468,10 +489,12 @@ static inline void bnxt_qplib_ring_prod_db(struct bnxt_qplib_db_info *info,
|
||||
u32 type)
|
||||
{
|
||||
u64 key = 0;
|
||||
u32 indx;
|
||||
|
||||
key = (info->xid & DBC_DBC_XID_MASK) | DBC_DBC_PATH_ROCE | type;
|
||||
key <<= 32;
|
||||
key |= ((info->hwq->prod / info->max_slot)) & DBC_DBC_INDEX_MASK;
|
||||
indx = (((info->hwq->prod / info->max_slot) & DBC_DBC_INDEX_MASK) |
|
||||
((info->flags & BNXT_QPLIB_FLAG_EPOCH_PROD_MASK) <<
|
||||
BNXT_QPLIB_DB_EPOCH_PROD_SHIFT));
|
||||
key = BNXT_QPLIB_INIT_DBHDR(info->xid, type, indx, 0);
|
||||
writeq(key, info->db);
|
||||
}
|
||||
|
||||
@ -479,9 +502,12 @@ static inline void bnxt_qplib_armen_db(struct bnxt_qplib_db_info *info,
|
||||
u32 type)
|
||||
{
|
||||
u64 key = 0;
|
||||
u8 toggle = 0;
|
||||
|
||||
key = (info->xid & DBC_DBC_XID_MASK) | DBC_DBC_PATH_ROCE | type;
|
||||
key <<= 32;
|
||||
if (type == DBC_DBC_TYPE_CQ_ARMENA || type == DBC_DBC_TYPE_SRQ_ARMENA)
|
||||
toggle = info->toggle;
|
||||
/* Index always at 0 */
|
||||
key = BNXT_QPLIB_INIT_DBHDR(info->xid, type, 0, toggle);
|
||||
writeq(key, info->priv_db);
|
||||
}
|
||||
|
||||
@ -490,9 +516,7 @@ static inline void bnxt_qplib_srq_arm_db(struct bnxt_qplib_db_info *info,
|
||||
{
|
||||
u64 key = 0;
|
||||
|
||||
key = (info->xid & DBC_DBC_XID_MASK) | DBC_DBC_PATH_ROCE | th;
|
||||
key <<= 32;
|
||||
key |= th & DBC_DBC_INDEX_MASK;
|
||||
key = BNXT_QPLIB_INIT_DBHDR(info->xid, DBC_DBC_TYPE_SRQ_ARM, th, info->toggle);
|
||||
writeq(key, info->priv_db);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user