Commit de2854c8 authored by Srujana Challa's avatar Srujana Challa Committed by Jakub Kicinski

octeontx2-af: Mailbox changes for 98xx CPT block

This patch changes CPT mailbox message format to
support new block CPT1 in 98xx silicon.

cpt_rd_wr_reg ->
    Modify cpt_rd_wr_reg mailbox and its handler to
    accommodate new block CPT1.
cpt_lf_alloc ->
    Modify cpt_lf_alloc mailbox and its handler to
    configure LFs from a block address out of multiple
    blocks of same type. If a PF/VF needs to configure
    LFs from both the blocks then this mbox should be
    called twice.
Signed-off-by: default avatarMahipal Challa <mchalla@marvell.com>
Signed-off-by: default avatarSrujana Challa <schalla@marvell.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent e0183b97
...@@ -1073,6 +1073,7 @@ struct cpt_rd_wr_reg_msg { ...@@ -1073,6 +1073,7 @@ struct cpt_rd_wr_reg_msg {
u64 *ret_val; u64 *ret_val;
u64 val; u64 val;
u8 is_write; u8 is_write;
int blkaddr;
}; };
struct cpt_lf_alloc_req_msg { struct cpt_lf_alloc_req_msg {
...@@ -1080,6 +1081,7 @@ struct cpt_lf_alloc_req_msg { ...@@ -1080,6 +1081,7 @@ struct cpt_lf_alloc_req_msg {
u16 nix_pf_func; u16 nix_pf_func;
u16 sso_pf_func; u16 sso_pf_func;
u16 eng_grpmsk; u16 eng_grpmsk;
int blkaddr;
}; };
#endif /* MBOX_H */ #endif /* MBOX_H */
...@@ -65,13 +65,13 @@ int rvu_mbox_handler_cpt_lf_alloc(struct rvu *rvu, ...@@ -65,13 +65,13 @@ int rvu_mbox_handler_cpt_lf_alloc(struct rvu *rvu,
int num_lfs, slot; int num_lfs, slot;
u64 val; u64 val;
blkaddr = req->blkaddr ? req->blkaddr : BLKADDR_CPT0;
if (blkaddr != BLKADDR_CPT0 && blkaddr != BLKADDR_CPT1)
return -ENODEV;
if (req->eng_grpmsk == 0x0) if (req->eng_grpmsk == 0x0)
return CPT_AF_ERR_GRP_INVALID; return CPT_AF_ERR_GRP_INVALID;
blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_CPT, 0);
if (blkaddr < 0)
return blkaddr;
block = &rvu->hw->block[blkaddr]; block = &rvu->hw->block[blkaddr];
num_lfs = rvu_get_rsrc_mapcount(rvu_get_pfvf(rvu, pcifunc), num_lfs = rvu_get_rsrc_mapcount(rvu_get_pfvf(rvu, pcifunc),
block->addr); block->addr);
...@@ -114,23 +114,17 @@ int rvu_mbox_handler_cpt_lf_alloc(struct rvu *rvu, ...@@ -114,23 +114,17 @@ int rvu_mbox_handler_cpt_lf_alloc(struct rvu *rvu,
return 0; return 0;
} }
int rvu_mbox_handler_cpt_lf_free(struct rvu *rvu, struct msg_req *req, static int cpt_lf_free(struct rvu *rvu, struct msg_req *req, int blkaddr)
struct msg_rsp *rsp)
{ {
u16 pcifunc = req->hdr.pcifunc; u16 pcifunc = req->hdr.pcifunc;
int num_lfs, cptlf, slot;
struct rvu_block *block; struct rvu_block *block;
int cptlf, blkaddr;
int num_lfs, slot;
blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_CPT, 0);
if (blkaddr < 0)
return blkaddr;
block = &rvu->hw->block[blkaddr]; block = &rvu->hw->block[blkaddr];
num_lfs = rvu_get_rsrc_mapcount(rvu_get_pfvf(rvu, pcifunc), num_lfs = rvu_get_rsrc_mapcount(rvu_get_pfvf(rvu, pcifunc),
block->addr); block->addr);
if (!num_lfs) if (!num_lfs)
return CPT_AF_ERR_LF_INVALID; return 0;
for (slot = 0; slot < num_lfs; slot++) { for (slot = 0; slot < num_lfs; slot++) {
cptlf = rvu_get_lf(rvu, block, pcifunc, slot); cptlf = rvu_get_lf(rvu, block, pcifunc, slot);
...@@ -146,6 +140,21 @@ int rvu_mbox_handler_cpt_lf_free(struct rvu *rvu, struct msg_req *req, ...@@ -146,6 +140,21 @@ int rvu_mbox_handler_cpt_lf_free(struct rvu *rvu, struct msg_req *req,
return 0; return 0;
} }
int rvu_mbox_handler_cpt_lf_free(struct rvu *rvu, struct msg_req *req,
struct msg_rsp *rsp)
{
int ret;
ret = cpt_lf_free(rvu, req, BLKADDR_CPT0);
if (ret)
return ret;
if (is_block_implemented(rvu->hw, BLKADDR_CPT1))
ret = cpt_lf_free(rvu, req, BLKADDR_CPT1);
return ret;
}
static bool is_valid_offset(struct rvu *rvu, struct cpt_rd_wr_reg_msg *req) static bool is_valid_offset(struct rvu *rvu, struct cpt_rd_wr_reg_msg *req)
{ {
u64 offset = req->reg_offset; u64 offset = req->reg_offset;
...@@ -208,9 +217,9 @@ int rvu_mbox_handler_cpt_rd_wr_register(struct rvu *rvu, ...@@ -208,9 +217,9 @@ int rvu_mbox_handler_cpt_rd_wr_register(struct rvu *rvu,
{ {
int blkaddr; int blkaddr;
blkaddr = rvu_get_blkaddr(rvu, BLKTYPE_CPT, 0); blkaddr = req->blkaddr ? req->blkaddr : BLKADDR_CPT0;
if (blkaddr < 0) if (blkaddr != BLKADDR_CPT0 && blkaddr != BLKADDR_CPT1)
return blkaddr; return -ENODEV;
/* This message is accepted only if sent from CPT PF/VF */ /* This message is accepted only if sent from CPT PF/VF */
if (!is_cpt_pf(rvu, req->hdr.pcifunc) && if (!is_cpt_pf(rvu, req->hdr.pcifunc) &&
......
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