mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-03 09:37:17 +00:00
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: Mahipal Challa <mchalla@marvell.com> Signed-off-by: Srujana Challa <schalla@marvell.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
e0183b974d
commit
de2854c87c
@ -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 {
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
{
|
{
|
||||||
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) &&
|
||||||
|
Loading…
Reference in New Issue
Block a user