Commit bc35e28a authored by Nithin Dabilpuram's avatar Nithin Dabilpuram Committed by David S. Miller

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: ae454086 ("octeontx2-af: add mailbox interface for CPT")
Signed-off-by: default avatarNithin Dabilpuram <ndabilpuram@marvell.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8b9b59e2
...@@ -696,7 +696,8 @@ int rvu_mbox_handler_cpt_rd_wr_register(struct rvu *rvu, ...@@ -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, ...@@ -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;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment