qed: Set the doorbell address correctly
In 100g mode the doorbell bar is united for both engines. Set the correct offset in the hwfn so that the doorbell returned for RoCE is in the affined hwfn. Signed-off-by: Ariel Elior <ariel.elior@marvell.com> Signed-off-by: Denis Bolotin <denis.bolotin@marvell.com> Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
443473d2f3
commit
8366d52001
|
@ -4426,6 +4426,7 @@ static void qed_nvm_info_free(struct qed_hwfn *p_hwfn)
|
|||
static int qed_hw_prepare_single(struct qed_hwfn *p_hwfn,
|
||||
void __iomem *p_regview,
|
||||
void __iomem *p_doorbells,
|
||||
u64 db_phys_addr,
|
||||
enum qed_pci_personality personality)
|
||||
{
|
||||
struct qed_dev *cdev = p_hwfn->cdev;
|
||||
|
@ -4434,6 +4435,7 @@ static int qed_hw_prepare_single(struct qed_hwfn *p_hwfn,
|
|||
/* Split PCI bars evenly between hwfns */
|
||||
p_hwfn->regview = p_regview;
|
||||
p_hwfn->doorbells = p_doorbells;
|
||||
p_hwfn->db_phys_addr = db_phys_addr;
|
||||
|
||||
if (IS_VF(p_hwfn->cdev))
|
||||
return qed_vf_hw_prepare(p_hwfn);
|
||||
|
@ -4529,7 +4531,9 @@ int qed_hw_prepare(struct qed_dev *cdev,
|
|||
/* Initialize the first hwfn - will learn number of hwfns */
|
||||
rc = qed_hw_prepare_single(p_hwfn,
|
||||
cdev->regview,
|
||||
cdev->doorbells, personality);
|
||||
cdev->doorbells,
|
||||
cdev->db_phys_addr,
|
||||
personality);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
|
@ -4538,22 +4542,25 @@ int qed_hw_prepare(struct qed_dev *cdev,
|
|||
/* Initialize the rest of the hwfns */
|
||||
if (cdev->num_hwfns > 1) {
|
||||
void __iomem *p_regview, *p_doorbell;
|
||||
u8 __iomem *addr;
|
||||
u64 db_phys_addr;
|
||||
u32 offset;
|
||||
|
||||
/* adjust bar offset for second engine */
|
||||
addr = cdev->regview +
|
||||
qed_hw_bar_size(p_hwfn, p_hwfn->p_main_ptt,
|
||||
BAR_ID_0) / 2;
|
||||
p_regview = addr;
|
||||
offset = qed_hw_bar_size(p_hwfn, p_hwfn->p_main_ptt,
|
||||
BAR_ID_0) / 2;
|
||||
p_regview = cdev->regview + offset;
|
||||
|
||||
addr = cdev->doorbells +
|
||||
qed_hw_bar_size(p_hwfn, p_hwfn->p_main_ptt,
|
||||
BAR_ID_1) / 2;
|
||||
p_doorbell = addr;
|
||||
offset = qed_hw_bar_size(p_hwfn, p_hwfn->p_main_ptt,
|
||||
BAR_ID_1) / 2;
|
||||
|
||||
p_doorbell = cdev->doorbells + offset;
|
||||
|
||||
db_phys_addr = cdev->db_phys_addr + offset;
|
||||
|
||||
/* prepare second hw function */
|
||||
rc = qed_hw_prepare_single(&cdev->hwfns[1], p_regview,
|
||||
p_doorbell, personality);
|
||||
p_doorbell, db_phys_addr,
|
||||
personality);
|
||||
|
||||
/* in case of error, need to free the previously
|
||||
* initiliazed hwfn 0.
|
||||
|
|
|
@ -803,7 +803,7 @@ static int qed_rdma_add_user(void *rdma_cxt,
|
|||
dpi_start_offset +
|
||||
((out_params->dpi) * p_hwfn->dpi_size));
|
||||
|
||||
out_params->dpi_phys_addr = p_hwfn->cdev->db_phys_addr +
|
||||
out_params->dpi_phys_addr = p_hwfn->db_phys_addr +
|
||||
dpi_start_offset +
|
||||
((out_params->dpi) * p_hwfn->dpi_size);
|
||||
|
||||
|
|
Loading…
Reference in New Issue