octeontx2-af: replace cpt slot with lf id on reg write
Replace slot id with global CPT lf id on reg read/write as
CPTPF/VF driver would send slot number instead of global
lf id in the reg offset. And also update the mailbox response
with the global lf's register offset.
Fixes: ae454086e3
("octeontx2-af: add mailbox interface for CPT")
Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8b9b59e27a
commit
bc35e28af7
1 changed files with 16 additions and 7 deletions
|
@ -696,7 +696,8 @@ int rvu_mbox_handler_cpt_rd_wr_register(struct rvu *rvu,
|
||||||
struct cpt_rd_wr_reg_msg *req,
|
struct cpt_rd_wr_reg_msg *req,
|
||||||
struct cpt_rd_wr_reg_msg *rsp)
|
struct cpt_rd_wr_reg_msg *rsp)
|
||||||
{
|
{
|
||||||
int blkaddr;
|
u64 offset = req->reg_offset;
|
||||||
|
int blkaddr, lf;
|
||||||
|
|
||||||
blkaddr = validate_and_get_cpt_blkaddr(req->blkaddr);
|
blkaddr = validate_and_get_cpt_blkaddr(req->blkaddr);
|
||||||
if (blkaddr < 0)
|
if (blkaddr < 0)
|
||||||
|
@ -707,17 +708,25 @@ int rvu_mbox_handler_cpt_rd_wr_register(struct rvu *rvu,
|
||||||
!is_cpt_vf(rvu, req->hdr.pcifunc))
|
!is_cpt_vf(rvu, req->hdr.pcifunc))
|
||||||
return CPT_AF_ERR_ACCESS_DENIED;
|
return CPT_AF_ERR_ACCESS_DENIED;
|
||||||
|
|
||||||
rsp->reg_offset = req->reg_offset;
|
|
||||||
rsp->ret_val = req->ret_val;
|
|
||||||
rsp->is_write = req->is_write;
|
|
||||||
|
|
||||||
if (!is_valid_offset(rvu, req))
|
if (!is_valid_offset(rvu, req))
|
||||||
return CPT_AF_ERR_ACCESS_DENIED;
|
return CPT_AF_ERR_ACCESS_DENIED;
|
||||||
|
|
||||||
|
/* Translate local LF used by VFs to global CPT LF */
|
||||||
|
lf = rvu_get_lf(rvu, &rvu->hw->block[blkaddr], req->hdr.pcifunc,
|
||||||
|
(offset & 0xFFF) >> 3);
|
||||||
|
|
||||||
|
/* Translate local LF's offset to global CPT LF's offset */
|
||||||
|
offset &= 0xFF000;
|
||||||
|
offset += lf << 3;
|
||||||
|
|
||||||
|
rsp->reg_offset = offset;
|
||||||
|
rsp->ret_val = req->ret_val;
|
||||||
|
rsp->is_write = req->is_write;
|
||||||
|
|
||||||
if (req->is_write)
|
if (req->is_write)
|
||||||
rvu_write64(rvu, blkaddr, req->reg_offset, req->val);
|
rvu_write64(rvu, blkaddr, offset, req->val);
|
||||||
else
|
else
|
||||||
rsp->val = rvu_read64(rvu, blkaddr, req->reg_offset);
|
rsp->val = rvu_read64(rvu, blkaddr, offset);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue