Skip to content

Commit a432a45

Browse files
Michael Chankuba-moo
authored andcommitted
bnxt_en: Define basic P7 macros
Repurpose the BNXT_FLAG_CHIP_SR2 flag by renaming it to BNXT_FLAG_CHIP_P7 since the SR2 chip never went to production. The SR2 statictics structure is also renamed for the P7 chip. Define the basic P7 doorbell bits (Epoch. Toggle, etc) and implement the Epoch bit logic. The next higher bit beyond the legal doorbell mask is the Epoch bit used for doorbells on P7 chips. This bit is used by the chip to detect dropped doorbells. The 57608 chip ID belonging to the P7 family is also defined. Note that the PCI ID is not added until the last patch in the series. Signed-off-by: Michael Chan <michael.chan@broadcom.com> Link: https://lore.kernel.org/r/20231201223924.26955-4-michael.chan@broadcom.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 397d44b commit a432a45

File tree

3 files changed

+48
-15
lines changed

3 files changed

+48
-15
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt.c

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,10 @@ static bool bnxt_vf_pciid(enum board_idx idx)
260260
bnxt_writeq(bp, (db)->db_key64 | DBR_TYPE_NQ | DB_RING_IDX(db, idx),\
261261
(db)->doorbell)
262262

263+
#define BNXT_DB_NQ_P7(db, idx) \
264+
bnxt_writeq(bp, (db)->db_key64 | DBR_TYPE_NQ_MASK | \
265+
DB_RING_IDX(db, idx), (db)->doorbell)
266+
263267
#define BNXT_DB_CQ_ARM(db, idx) \
264268
writel(DB_CP_REARM_FLAGS | DB_RING_IDX(db, idx), (db)->doorbell)
265269

@@ -269,7 +273,9 @@ static bool bnxt_vf_pciid(enum board_idx idx)
269273

270274
static void bnxt_db_nq(struct bnxt *bp, struct bnxt_db_info *db, u32 idx)
271275
{
272-
if (bp->flags & BNXT_FLAG_CHIP_P5_PLUS)
276+
if (bp->flags & BNXT_FLAG_CHIP_P7)
277+
BNXT_DB_NQ_P7(db, idx);
278+
else if (bp->flags & BNXT_FLAG_CHIP_P5_PLUS)
273279
BNXT_DB_NQ_P5(db, idx);
274280
else
275281
BNXT_DB_CQ(db, idx);
@@ -5784,7 +5790,7 @@ static int bnxt_hwrm_vnic_qcaps(struct bnxt *bp)
57845790
if (BNXT_CHIP_P5(bp))
57855791
bp->hw_ring_stats_size = BNXT_RING_STATS_SIZE_P5;
57865792
else
5787-
bp->hw_ring_stats_size = BNXT_RING_STATS_SIZE_P5_SR2;
5793+
bp->hw_ring_stats_size = BNXT_RING_STATS_SIZE_P7;
57885794
}
57895795
}
57905796
hwrm_req_drop(bp, req);
@@ -6015,6 +6021,10 @@ static void bnxt_set_db_mask(struct bnxt *bp, struct bnxt_db_info *db,
60156021
db->db_ring_mask = bp->cp_ring_mask;
60166022
break;
60176023
}
6024+
if (bp->flags & BNXT_FLAG_CHIP_P7) {
6025+
db->db_epoch_mask = db->db_ring_mask + 1;
6026+
db->db_epoch_shift = DBR_EPOCH_SFT - ilog2(db->db_epoch_mask);
6027+
}
60186028
}
60196029

60206030
static void bnxt_set_db(struct bnxt *bp, struct bnxt_db_info *db, u32 ring_type,
@@ -6041,6 +6051,9 @@ static void bnxt_set_db(struct bnxt *bp, struct bnxt_db_info *db, u32 ring_type,
60416051
break;
60426052
}
60436053
db->db_key64 |= (u64)xid << DBR_XID_SFT;
6054+
6055+
if (bp->flags & BNXT_FLAG_CHIP_P7)
6056+
db->db_key64 |= DBR_VALID;
60446057
} else {
60456058
db->doorbell = bp->bar1 + map_idx * 0x80;
60466059
switch (ring_type) {
@@ -14014,8 +14027,8 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1401414027

1401514028
if (BNXT_CHIP_P5_PLUS(bp)) {
1401614029
bp->flags |= BNXT_FLAG_CHIP_P5_PLUS;
14017-
if (BNXT_CHIP_SR2(bp))
14018-
bp->flags |= BNXT_FLAG_CHIP_SR2;
14030+
if (BNXT_CHIP_P7(bp))
14031+
bp->flags |= BNXT_FLAG_CHIP_P7;
1401914032
}
1402014033

1402114034
rc = bnxt_alloc_rss_indir_tbl(bp);

drivers/net/ethernet/broadcom/bnxt/bnxt.h

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,8 @@ struct nqe_cn {
541541
#define NQ_CN_TYPE_SFT 0
542542
#define NQ_CN_TYPE_CQ_NOTIFICATION 0x30UL
543543
#define NQ_CN_TYPE_LAST NQ_CN_TYPE_CQ_NOTIFICATION
544+
#define NQ_CN_TOGGLE_MASK 0xc0UL
545+
#define NQ_CN_TOGGLE_SFT 6
544546
__le16 reserved16;
545547
__le32 cq_handle_low;
546548
__le32 v;
@@ -561,6 +563,10 @@ struct nqe_cn {
561563
#define BNXT_SET_NQ_HDL(cpr) \
562564
(((cpr)->cp_ring_type << BNXT_NQ_HDL_TYPE_SHIFT) | (cpr)->cp_idx)
563565

566+
#define NQE_CN_TYPE(type) ((type) & NQ_CN_TYPE_MASK)
567+
#define NQE_CN_TOGGLE(type) (((type) & NQ_CN_TOGGLE_MASK) >> \
568+
NQ_CN_TOGGLE_SFT)
569+
564570
#define DB_IDX_MASK 0xffffff
565571
#define DB_IDX_VALID (0x1 << 26)
566572
#define DB_IRQ_DIS (0x1 << 27)
@@ -576,9 +582,14 @@ struct nqe_cn {
576582

577583
/* 64-bit doorbell */
578584
#define DBR_INDEX_MASK 0x0000000000ffffffULL
585+
#define DBR_EPOCH_MASK 0x01000000UL
586+
#define DBR_EPOCH_SFT 24
587+
#define DBR_TOGGLE_MASK 0x06000000UL
588+
#define DBR_TOGGLE_SFT 25
579589
#define DBR_XID_MASK 0x000fffff00000000ULL
580590
#define DBR_XID_SFT 32
581591
#define DBR_PATH_L2 (0x1ULL << 56)
592+
#define DBR_VALID (0x1ULL << 58)
582593
#define DBR_TYPE_SQ (0x0ULL << 60)
583594
#define DBR_TYPE_RQ (0x1ULL << 60)
584595
#define DBR_TYPE_SRQ (0x2ULL << 60)
@@ -591,6 +602,7 @@ struct nqe_cn {
591602
#define DBR_TYPE_CQ_CUTOFF_ACK (0x9ULL << 60)
592603
#define DBR_TYPE_NQ (0xaULL << 60)
593604
#define DBR_TYPE_NQ_ARM (0xbULL << 60)
605+
#define DBR_TYPE_NQ_MASK (0xeULL << 60)
594606
#define DBR_TYPE_NULL (0xfULL << 60)
595607

596608
#define DB_PF_OFFSET_P5 0x10000
@@ -819,9 +831,17 @@ struct bnxt_db_info {
819831
u32 db_key32;
820832
};
821833
u32 db_ring_mask;
834+
u32 db_epoch_mask;
835+
u8 db_epoch_shift;
822836
};
823837

824-
#define DB_RING_IDX(db, idx) ((idx) & (db)->db_ring_mask)
838+
#define DB_EPOCH(db, idx) (((idx) & (db)->db_epoch_mask) << \
839+
((db)->db_epoch_shift))
840+
841+
#define DB_TOGGLE(tgl) ((tgl) << DBR_TOGGLE_SFT)
842+
843+
#define DB_RING_IDX(db, idx) (((idx) & (db)->db_ring_mask) | \
844+
DB_EPOCH(db, idx))
825845

826846
struct bnxt_tx_ring_info {
827847
struct bnxt_napi *bnapi;
@@ -1803,14 +1823,14 @@ struct bnxt {
18031823
#define CHIP_NUM_57504 0x1751
18041824
#define CHIP_NUM_57502 0x1752
18051825

1826+
#define CHIP_NUM_57608 0x1760
1827+
18061828
#define CHIP_NUM_58802 0xd802
18071829
#define CHIP_NUM_58804 0xd804
18081830
#define CHIP_NUM_58808 0xd808
18091831

18101832
u8 chip_rev;
18111833

1812-
#define CHIP_NUM_58818 0xd818
1813-
18141834
#define BNXT_CHIP_NUM_5730X(chip_num) \
18151835
((chip_num) >= CHIP_NUM_57301 && \
18161836
(chip_num) <= CHIP_NUM_57304)
@@ -1888,7 +1908,7 @@ struct bnxt {
18881908
BNXT_FLAG_ROCEV2_CAP)
18891909
#define BNXT_FLAG_NO_AGG_RINGS 0x20000
18901910
#define BNXT_FLAG_RX_PAGE_MODE 0x40000
1891-
#define BNXT_FLAG_CHIP_SR2 0x80000
1911+
#define BNXT_FLAG_CHIP_P7 0x80000
18921912
#define BNXT_FLAG_MULTI_HOST 0x100000
18931913
#define BNXT_FLAG_DSN_VALID 0x200000
18941914
#define BNXT_FLAG_DOUBLE_DB 0x400000
@@ -1918,8 +1938,8 @@ struct bnxt {
19181938
(bp)->max_tpa_v2) && !is_kdump_kernel())
19191939
#define BNXT_RX_JUMBO_MODE(bp) ((bp)->flags & BNXT_FLAG_JUMBO)
19201940

1921-
#define BNXT_CHIP_SR2(bp) \
1922-
((bp)->chip_num == CHIP_NUM_58818)
1941+
#define BNXT_CHIP_P7(bp) \
1942+
((bp)->chip_num == CHIP_NUM_57608)
19231943

19241944
#define BNXT_CHIP_P5(bp) \
19251945
((bp)->chip_num == CHIP_NUM_57508 || \
@@ -1928,7 +1948,7 @@ struct bnxt {
19281948

19291949
/* Chip class phase 5 */
19301950
#define BNXT_CHIP_P5_PLUS(bp) \
1931-
(BNXT_CHIP_P5(bp) || BNXT_CHIP_SR2(bp))
1951+
(BNXT_CHIP_P5(bp) || BNXT_CHIP_P7(bp))
19321952

19331953
/* Chip class phase 4.x */
19341954
#define BNXT_CHIP_P4(bp) \
@@ -2272,15 +2292,15 @@ struct bnxt {
22722292
#define BNXT_NUM_TX_RING_STATS 8
22732293
#define BNXT_NUM_TPA_RING_STATS 4
22742294
#define BNXT_NUM_TPA_RING_STATS_P5 5
2275-
#define BNXT_NUM_TPA_RING_STATS_P5_SR2 6
2295+
#define BNXT_NUM_TPA_RING_STATS_P7 6
22762296

22772297
#define BNXT_RING_STATS_SIZE_P5 \
22782298
((BNXT_NUM_RX_RING_STATS + BNXT_NUM_TX_RING_STATS + \
22792299
BNXT_NUM_TPA_RING_STATS_P5) * 8)
22802300

2281-
#define BNXT_RING_STATS_SIZE_P5_SR2 \
2301+
#define BNXT_RING_STATS_SIZE_P7 \
22822302
((BNXT_NUM_RX_RING_STATS + BNXT_NUM_TX_RING_STATS + \
2283-
BNXT_NUM_TPA_RING_STATS_P5_SR2) * 8)
2303+
BNXT_NUM_TPA_RING_STATS_P7) * 8)
22842304

22852305
#define BNXT_GET_RING_STATS64(sw, counter) \
22862306
(*((sw) + offsetof(struct ctx_hw_stats, counter) / 8))

drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ static int bnxt_get_num_tpa_ring_stats(struct bnxt *bp)
513513
if (bp->max_tpa_v2) {
514514
if (BNXT_CHIP_P5(bp))
515515
return BNXT_NUM_TPA_RING_STATS_P5;
516-
return BNXT_NUM_TPA_RING_STATS_P5_SR2;
516+
return BNXT_NUM_TPA_RING_STATS_P7;
517517
}
518518
return BNXT_NUM_TPA_RING_STATS;
519519
}

0 commit comments

Comments
 (0)