net/bnxt: cache address of doorbell to subsequent access
While creating TX, Rx, CQ rings use cached DB address instead of getting it from the PCI memory resource. Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
This commit is contained in:
parent
3a14b29bff
commit
e3d8f1e6a6
@ -208,6 +208,7 @@ struct bnxt {
|
||||
struct rte_eth_dev *eth_dev;
|
||||
struct rte_eth_rss_conf rss_conf;
|
||||
struct rte_pci_device *pdev;
|
||||
void *doorbell_base;
|
||||
|
||||
uint32_t flags;
|
||||
#define BNXT_FLAG_REGISTERED (1 << 0)
|
||||
|
@ -144,7 +144,7 @@ int bnxt_alloc_def_cp_ring(struct bnxt *bp)
|
||||
HWRM_NA_SIGNATURE);
|
||||
if (rc)
|
||||
goto err_out;
|
||||
cpr->cp_doorbell = bp->pdev->mem_resource[2].addr;
|
||||
cpr->cp_doorbell = (char *)bp->doorbell_base;
|
||||
B_CP_DIS_DB(cpr, cpr->cp_raw_cons);
|
||||
if (BNXT_PF(bp))
|
||||
rc = bnxt_hwrm_func_cfg_def_cp(bp);
|
||||
|
@ -3095,11 +3095,23 @@ static int bnxt_init_board(struct rte_eth_dev *eth_dev)
|
||||
rc = -ENOMEM;
|
||||
goto init_err_release;
|
||||
}
|
||||
|
||||
if (!pci_dev->mem_resource[2].addr) {
|
||||
PMD_DRV_LOG(ERR,
|
||||
"Cannot find PCI device BAR 2 address, aborting\n");
|
||||
rc = -ENODEV;
|
||||
goto init_err_release;
|
||||
} else {
|
||||
bp->doorbell_base = (void *)pci_dev->mem_resource[2].addr;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
init_err_release:
|
||||
if (bp->bar0)
|
||||
bp->bar0 = NULL;
|
||||
if (bp->doorbell_base)
|
||||
bp->doorbell_base = NULL;
|
||||
|
||||
init_err_disable:
|
||||
|
||||
|
@ -261,7 +261,6 @@ int bnxt_alloc_rings(struct bnxt *bp, uint16_t qidx,
|
||||
*/
|
||||
int bnxt_alloc_hwrm_rings(struct bnxt *bp)
|
||||
{
|
||||
struct rte_pci_device *pci_dev = bp->pdev;
|
||||
unsigned int i;
|
||||
int rc = 0;
|
||||
|
||||
@ -283,8 +282,7 @@ int bnxt_alloc_hwrm_rings(struct bnxt *bp)
|
||||
HWRM_NA_SIGNATURE);
|
||||
if (rc)
|
||||
goto err_out;
|
||||
cpr->cp_doorbell = (char *)pci_dev->mem_resource[2].addr +
|
||||
idx * 0x80;
|
||||
cpr->cp_doorbell = (char *)bp->doorbell_base + idx * 0x80;
|
||||
bp->grp_info[i].cp_fw_ring_id = cp_ring->fw_ring_id;
|
||||
B_CP_DIS_DB(cpr, cpr->cp_raw_cons);
|
||||
|
||||
@ -296,8 +294,7 @@ int bnxt_alloc_hwrm_rings(struct bnxt *bp)
|
||||
if (rc)
|
||||
goto err_out;
|
||||
rxr->rx_prod = 0;
|
||||
rxr->rx_doorbell = (char *)pci_dev->mem_resource[2].addr +
|
||||
idx * 0x80;
|
||||
rxr->rx_doorbell = (char *)bp->doorbell_base + idx * 0x80;
|
||||
bp->grp_info[i].rx_fw_ring_id = ring->fw_ring_id;
|
||||
B_RX_DB(rxr->rx_doorbell, rxr->rx_prod);
|
||||
|
||||
@ -316,9 +313,7 @@ int bnxt_alloc_hwrm_rings(struct bnxt *bp)
|
||||
goto err_out;
|
||||
PMD_DRV_LOG(DEBUG, "Alloc AGG Done!\n");
|
||||
rxr->ag_prod = 0;
|
||||
rxr->ag_doorbell =
|
||||
(char *)pci_dev->mem_resource[2].addr +
|
||||
map_idx * 0x80;
|
||||
rxr->ag_doorbell = (char *)bp->doorbell_base + map_idx * 0x80;
|
||||
bp->grp_info[i].ag_fw_ring_id = ring->fw_ring_id;
|
||||
B_RX_DB(rxr->ag_doorbell, rxr->ag_prod);
|
||||
|
||||
@ -350,8 +345,7 @@ int bnxt_alloc_hwrm_rings(struct bnxt *bp)
|
||||
if (rc)
|
||||
goto err_out;
|
||||
|
||||
cpr->cp_doorbell = (char *)pci_dev->mem_resource[2].addr +
|
||||
idx * 0x80;
|
||||
cpr->cp_doorbell = (char *)bp->doorbell_base + idx * 0x80;
|
||||
B_CP_DIS_DB(cpr, cpr->cp_raw_cons);
|
||||
|
||||
/* Tx ring */
|
||||
@ -362,8 +356,7 @@ int bnxt_alloc_hwrm_rings(struct bnxt *bp)
|
||||
if (rc)
|
||||
goto err_out;
|
||||
|
||||
txr->tx_doorbell = (char *)pci_dev->mem_resource[2].addr +
|
||||
idx * 0x80;
|
||||
txr->tx_doorbell = (char *)bp->doorbell_base + idx * 0x80;
|
||||
txq->index = idx;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user