mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 06:41:39 -04:00
octeontx2-af: npc: cn20k: Fix MCAM actions read
npc_cn20k_read_mcam_entry() always reloaded action and vtag_action from
bank 0 after programming the CAM words. Use the bank returned by
npc_get_bank() for the ACTION reads as well, and read those registers once
up front so both X2 and X4 paths share the same metadata.
Return directly from the X2 keyword path now that the action fields are
already populated.
Cc: Suman Ghosh <sumang@marvell.com>
Fixes: 6d1e70282f ("octeontx2-af: npc: cn20k: Use common APIs")
Signed-off-by: Ratheesh Kannoth <rkannoth@marvell.com>
Link: https://patch.msgid.link/20260429022722.1110289-8-rkannoth@marvell.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
2b6d6bb728
commit
f6803eb070
@@ -1219,6 +1219,18 @@ int npc_cn20k_read_mcam_entry(struct rvu *rvu, int blkaddr, u16 index,
|
||||
bank = npc_get_bank(mcam, index);
|
||||
index &= (mcam->banksize - 1);
|
||||
|
||||
cfg = rvu_read64(rvu, blkaddr,
|
||||
NPC_AF_CN20K_MCAMEX_BANKX_ACTIONX_EXT(index, bank, 0));
|
||||
entry->action = cfg;
|
||||
|
||||
cfg = rvu_read64(rvu, blkaddr,
|
||||
NPC_AF_CN20K_MCAMEX_BANKX_ACTIONX_EXT(index, bank, 1));
|
||||
entry->vtag_action = cfg;
|
||||
|
||||
cfg = rvu_read64(rvu, blkaddr,
|
||||
NPC_AF_CN20K_MCAMEX_BANKX_ACTIONX_EXT(index, bank, 2));
|
||||
entry->action2 = cfg;
|
||||
|
||||
cfg = rvu_read64(rvu, blkaddr,
|
||||
NPC_AF_CN20K_MCAMEX_BANKX_CAMX_INTF_EXT(index,
|
||||
bank, 1)) & 3;
|
||||
@@ -1268,7 +1280,7 @@ int npc_cn20k_read_mcam_entry(struct rvu *rvu, int blkaddr, u16 index,
|
||||
bank,
|
||||
0));
|
||||
npc_cn20k_fill_entryword(entry, kw + 3, cam0, cam1);
|
||||
goto read_action;
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (bank = 0; bank < mcam->banks_per_entry; bank++, kw = kw + 4) {
|
||||
@@ -1313,18 +1325,6 @@ int npc_cn20k_read_mcam_entry(struct rvu *rvu, int blkaddr, u16 index,
|
||||
npc_cn20k_fill_entryword(entry, kw + 3, cam0, cam1);
|
||||
}
|
||||
|
||||
read_action:
|
||||
/* 'action' is set to same value for both bank '0' and '1'.
|
||||
* Hence, reading bank '0' should be enough.
|
||||
*/
|
||||
cfg = rvu_read64(rvu, blkaddr,
|
||||
NPC_AF_CN20K_MCAMEX_BANKX_ACTIONX_EXT(index, 0, 0));
|
||||
entry->action = cfg;
|
||||
|
||||
cfg = rvu_read64(rvu, blkaddr,
|
||||
NPC_AF_CN20K_MCAMEX_BANKX_ACTIONX_EXT(index, 0, 1));
|
||||
entry->vtag_action = cfg;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user