* [net PATCH 0/2] octeontx2-af: APR Mapping Fixes @ 2025-05-21 6:08 Geetha sowjanya 2025-05-21 6:08 ` [net PATCH 1/2] octeontx2-af: Set LMT_ENA bit for APR table entries Geetha sowjanya ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Geetha sowjanya @ 2025-05-21 6:08 UTC (permalink / raw) To: netdev, linux-kernel Cc: kuba, davem, pabeni, edumazet, andrew+netdev, sgoutham, gakula, sbhatta, hkelam This patch series includes fixes related to APR (LMT) mapping and debugfs support. Changes include: Patch 1:Set LMT_ENA bit for APR table entries. Enables the LMT line for each PF/VF by setting the LMT_ENA bit in the APR_LMT_MAP_ENTRY_S structure. Patch-2:Fix APR entry in debugfs The APR table was previously mapped using a fixed size, which could lead to incorrect mappings when the number of PFs and VFs differed from the assumed value. This patch updates the logic to calculate the APR table size dynamically, based on values from the APR_LMT_CFG register, ensuring correct representation in debugfs. Geetha sowjanya (1): octeontx2-af: Fix APR entry mapping based on APR_LMT_CFG Subbaraya Sundeep (1): octeontx2-af: Set LMT_ENA bit for APR table entries .../ethernet/marvell/octeontx2/af/rvu_cn10k.c | 24 +++++++++++++++---- .../marvell/octeontx2/af/rvu_debugfs.c | 11 ++++++--- 2 files changed, 27 insertions(+), 8 deletions(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [net PATCH 1/2] octeontx2-af: Set LMT_ENA bit for APR table entries 2025-05-21 6:08 [net PATCH 0/2] octeontx2-af: APR Mapping Fixes Geetha sowjanya @ 2025-05-21 6:08 ` Geetha sowjanya 2025-05-21 8:39 ` Michal Swiatkowski 2025-05-21 6:08 ` [net PATCH 2/2] octeontx2-af: Fix APR entry mapping based on APR_LMT_CFG Geetha sowjanya 2025-05-22 10:40 ` [net PATCH 0/2] octeontx2-af: APR Mapping Fixes patchwork-bot+netdevbpf 2 siblings, 1 reply; 9+ messages in thread From: Geetha sowjanya @ 2025-05-21 6:08 UTC (permalink / raw) To: netdev, linux-kernel Cc: kuba, davem, pabeni, edumazet, andrew+netdev, sgoutham, gakula, sbhatta, hkelam From: Subbaraya Sundeep <sbhatta@marvell.com> This patch enables the LMT line for a PF/VF by setting the LMT_ENA bit in the APR_LMT_MAP_ENTRY_S structure. Additionally, it simplifies the logic for calculating the LMTST table index by consistently using the maximum number of hw supported VFs (i.e., 256). Fixes: 873a1e3d207a ("octeontx2-af: cn10k: Setting up lmtst map table"). Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com> Signed-off-by: Geetha sowjanya <gakula@marvell.com> --- .../net/ethernet/marvell/octeontx2/af/rvu_cn10k.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c index 7fa98aeb3663..3838c04b78c2 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c @@ -15,13 +15,17 @@ #define LMT_TBL_OP_WRITE 1 #define LMT_MAP_TABLE_SIZE (128 * 1024) #define LMT_MAPTBL_ENTRY_SIZE 16 +#define LMT_MAX_VFS 256 + +#define LMT_MAP_ENTRY_ENA BIT_ULL(20) +#define LMT_MAP_ENTRY_LINES GENMASK_ULL(18, 16) /* Function to perform operations (read/write) on lmtst map table */ static int lmtst_map_table_ops(struct rvu *rvu, u32 index, u64 *val, int lmt_tbl_op) { void __iomem *lmt_map_base; - u64 tbl_base; + u64 tbl_base, cfg; tbl_base = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_MAP_BASE); @@ -35,6 +39,13 @@ static int lmtst_map_table_ops(struct rvu *rvu, u32 index, u64 *val, *val = readq(lmt_map_base + index); } else { writeq((*val), (lmt_map_base + index)); + + cfg = FIELD_PREP(LMT_MAP_ENTRY_ENA, 0x1); + /* 2048 LMTLINES */ + cfg |= FIELD_PREP(LMT_MAP_ENTRY_LINES, 0x6); + + writeq(cfg, (lmt_map_base + (index + 8))); + /* Flushing the AP interceptor cache to make APR_LMT_MAP_ENTRY_S * changes effective. Write 1 for flush and read is being used as a * barrier and sets up a data dependency. Write to 0 after a write @@ -52,7 +63,7 @@ static int lmtst_map_table_ops(struct rvu *rvu, u32 index, u64 *val, #define LMT_MAP_TBL_W1_OFF 8 static u32 rvu_get_lmtst_tbl_index(struct rvu *rvu, u16 pcifunc) { - return ((rvu_get_pf(pcifunc) * rvu->hw->total_vfs) + + return ((rvu_get_pf(pcifunc) * LMT_MAX_VFS) + (pcifunc & RVU_PFVF_FUNC_MASK)) * LMT_MAPTBL_ENTRY_SIZE; } -- 2.25.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [net PATCH 1/2] octeontx2-af: Set LMT_ENA bit for APR table entries 2025-05-21 6:08 ` [net PATCH 1/2] octeontx2-af: Set LMT_ENA bit for APR table entries Geetha sowjanya @ 2025-05-21 8:39 ` Michal Swiatkowski 2025-05-21 12:00 ` Geethasowjanya Akula 0 siblings, 1 reply; 9+ messages in thread From: Michal Swiatkowski @ 2025-05-21 8:39 UTC (permalink / raw) To: Geetha sowjanya Cc: netdev, linux-kernel, kuba, davem, pabeni, edumazet, andrew+netdev, sgoutham, sbhatta, hkelam On Wed, May 21, 2025 at 11:38:33AM +0530, Geetha sowjanya wrote: > From: Subbaraya Sundeep <sbhatta@marvell.com> > > This patch enables the LMT line for a PF/VF by setting the > LMT_ENA bit in the APR_LMT_MAP_ENTRY_S structure. > > Additionally, it simplifies the logic for calculating the > LMTST table index by consistently using the maximum > number of hw supported VFs (i.e., 256). > > Fixes: 873a1e3d207a ("octeontx2-af: cn10k: Setting up lmtst map table"). > Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com> > Signed-off-by: Geetha sowjanya <gakula@marvell.com> > --- > .../net/ethernet/marvell/octeontx2/af/rvu_cn10k.c | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c > index 7fa98aeb3663..3838c04b78c2 100644 > --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c > +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c > @@ -15,13 +15,17 @@ > #define LMT_TBL_OP_WRITE 1 > #define LMT_MAP_TABLE_SIZE (128 * 1024) > #define LMT_MAPTBL_ENTRY_SIZE 16 > +#define LMT_MAX_VFS 256 > + > +#define LMT_MAP_ENTRY_ENA BIT_ULL(20) > +#define LMT_MAP_ENTRY_LINES GENMASK_ULL(18, 16) > > /* Function to perform operations (read/write) on lmtst map table */ > static int lmtst_map_table_ops(struct rvu *rvu, u32 index, u64 *val, > int lmt_tbl_op) > { > void __iomem *lmt_map_base; > - u64 tbl_base; > + u64 tbl_base, cfg; > > tbl_base = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_MAP_BASE); > > @@ -35,6 +39,13 @@ static int lmtst_map_table_ops(struct rvu *rvu, u32 index, u64 *val, > *val = readq(lmt_map_base + index); > } else { > writeq((*val), (lmt_map_base + index)); > + > + cfg = FIELD_PREP(LMT_MAP_ENTRY_ENA, 0x1); > + /* 2048 LMTLINES */ > + cfg |= FIELD_PREP(LMT_MAP_ENTRY_LINES, 0x6); > + > + writeq(cfg, (lmt_map_base + (index + 8))); Is this 8 LMT_MAP_TBL_W1_OFF? It isn't obvious for me why +8, but I don't know the driver, so maybe it should. > + > /* Flushing the AP interceptor cache to make APR_LMT_MAP_ENTRY_S > * changes effective. Write 1 for flush and read is being used as a > * barrier and sets up a data dependency. Write to 0 after a write > @@ -52,7 +63,7 @@ static int lmtst_map_table_ops(struct rvu *rvu, u32 index, u64 *val, > #define LMT_MAP_TBL_W1_OFF 8 > static u32 rvu_get_lmtst_tbl_index(struct rvu *rvu, u16 pcifunc) > { > - return ((rvu_get_pf(pcifunc) * rvu->hw->total_vfs) + > + return ((rvu_get_pf(pcifunc) * LMT_MAX_VFS) + > (pcifunc & RVU_PFVF_FUNC_MASK)) * LMT_MAPTBL_ENTRY_SIZE; Just nit/question, patch looks fine Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > } > > -- > 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [net PATCH 1/2] octeontx2-af: Set LMT_ENA bit for APR table entries 2025-05-21 8:39 ` Michal Swiatkowski @ 2025-05-21 12:00 ` Geethasowjanya Akula 0 siblings, 0 replies; 9+ messages in thread From: Geethasowjanya Akula @ 2025-05-21 12:00 UTC (permalink / raw) To: Michal Swiatkowski Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, kuba@kernel.org, davem@davemloft.net, pabeni@redhat.com, edumazet@google.com, andrew+netdev@lunn.ch, Sunil Kovvuri Goutham, Subbaraya Sundeep Bhatta, Hariprasad Kelam >-----Original Message----- >From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> >Sent: Wednesday, May 21, 2025 2:10 PM >To: Geethasowjanya Akula <gakula@marvell.com> >Cc: netdev@vger.kernel.org; linux-kernel@vger.kernel.org; kuba@kernel.org; >davem@davemloft.net; pabeni@redhat.com; edumazet@google.com; >andrew+netdev@lunn.ch; Sunil Kovvuri Goutham <sgoutham@marvell.com>; >Subbaraya Sundeep Bhatta <sbhatta@marvell.com>; Hariprasad Kelam ><hkelam@marvell.com> >Subject: [EXTERNAL] Re: [net PATCH 1/2] octeontx2-af: Set LMT_ENA bit for APR >table entries > >On Wed, May 21, 2025 at 11:38:33AM +0530, Geetha sowjanya wrote: >> From: Subbaraya Sundeep <sbhatta@marvell.com> >> >> This patch enables the LMT line for a PF/VF by setting the LMT_ENA bit >> in the APR_LMT_MAP_ENTRY_S structure. >> >> Additionally, it simplifies the logic for calculating the LMTST table >> index by consistently using the maximum number of hw supported VFs >> (i.e., 256). >> >> Fixes: 873a1e3d207a ("octeontx2-af: cn10k: Setting up lmtst map table"). >> Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com> >> Signed-off-by: Geetha sowjanya <gakula@marvell.com> >> --- >> .../net/ethernet/marvell/octeontx2/af/rvu_cn10k.c | 15 >> +++++++++++++-- >> 1 file changed, 13 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c >> b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c >> index 7fa98aeb3663..3838c04b78c2 100644 >> --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c >> +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c >> @@ -15,13 +15,17 @@ >> #define LMT_TBL_OP_WRITE 1 >> #define LMT_MAP_TABLE_SIZE (128 * 1024) >> #define LMT_MAPTBL_ENTRY_SIZE 16 >> +#define LMT_MAX_VFS 256 >> + >> +#define LMT_MAP_ENTRY_ENA BIT_ULL(20) >> +#define LMT_MAP_ENTRY_LINES GENMASK_ULL(18, 16) >> >> /* Function to perform operations (read/write) on lmtst map table */ >> static int lmtst_map_table_ops(struct rvu *rvu, u32 index, u64 *val, >> int lmt_tbl_op) >> { >> void __iomem *lmt_map_base; >> - u64 tbl_base; >> + u64 tbl_base, cfg; >> >> tbl_base = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_MAP_BASE); >> >> @@ -35,6 +39,13 @@ static int lmtst_map_table_ops(struct rvu *rvu, u32 >index, u64 *val, >> *val = readq(lmt_map_base + index); >> } else { >> writeq((*val), (lmt_map_base + index)); >> + >> + cfg = FIELD_PREP(LMT_MAP_ENTRY_ENA, 0x1); >> + /* 2048 LMTLINES */ >> + cfg |= FIELD_PREP(LMT_MAP_ENTRY_LINES, 0x6); >> + >> + writeq(cfg, (lmt_map_base + (index + 8))); >Is this 8 LMT_MAP_TBL_W1_OFF? It isn't obvious for me why +8, but I don't >know the driver, so maybe it should. The APR table entry is 16B wide. The ENTRY_ENA and ENTRY_LINES fields falls in upper 8B. Hence doing +8. Thanks, Geetha. > >> + >> /* Flushing the AP interceptor cache to make >APR_LMT_MAP_ENTRY_S >> * changes effective. Write 1 for flush and read is being used as >a >> * barrier and sets up a data dependency. Write to 0 after a >write >> @@ -52,7 +63,7 @@ static int lmtst_map_table_ops(struct rvu *rvu, u32 >> index, u64 *val, #define LMT_MAP_TBL_W1_OFF 8 static u32 >> rvu_get_lmtst_tbl_index(struct rvu *rvu, u16 pcifunc) { >> - return ((rvu_get_pf(pcifunc) * rvu->hw->total_vfs) + >> + return ((rvu_get_pf(pcifunc) * LMT_MAX_VFS) + >> (pcifunc & RVU_PFVF_FUNC_MASK)) * >LMT_MAPTBL_ENTRY_SIZE; > >Just nit/question, patch looks fine >Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > >> } >> >> -- >> 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [net PATCH 2/2] octeontx2-af: Fix APR entry mapping based on APR_LMT_CFG 2025-05-21 6:08 [net PATCH 0/2] octeontx2-af: APR Mapping Fixes Geetha sowjanya 2025-05-21 6:08 ` [net PATCH 1/2] octeontx2-af: Set LMT_ENA bit for APR table entries Geetha sowjanya @ 2025-05-21 6:08 ` Geetha sowjanya 2025-05-21 8:36 ` Michal Swiatkowski 2025-05-22 10:40 ` [net PATCH 0/2] octeontx2-af: APR Mapping Fixes patchwork-bot+netdevbpf 2 siblings, 1 reply; 9+ messages in thread From: Geetha sowjanya @ 2025-05-21 6:08 UTC (permalink / raw) To: netdev, linux-kernel Cc: kuba, davem, pabeni, edumazet, andrew+netdev, sgoutham, gakula, sbhatta, hkelam The current implementation maps the APR table using a fixed size, which can lead to incorrect mapping when the number of PFs and VFs varies. This patch corrects the mapping by calculating the APR table size dynamically based on the values configured in the APR_LMT_CFG register, ensuring accurate representation of APR entries in debugfs. Fixes: 0daa55d033b0 ("octeontx2-af: cn10k: debugfs for dumping LMTST map table"). Signed-off-by: Geetha sowjanya <gakula@marvell.com> --- drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c | 9 ++++++--- .../net/ethernet/marvell/octeontx2/af/rvu_debugfs.c | 11 ++++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c index 3838c04b78c2..4a3370a40dd8 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c @@ -13,7 +13,6 @@ /* RVU LMTST */ #define LMT_TBL_OP_READ 0 #define LMT_TBL_OP_WRITE 1 -#define LMT_MAP_TABLE_SIZE (128 * 1024) #define LMT_MAPTBL_ENTRY_SIZE 16 #define LMT_MAX_VFS 256 @@ -26,10 +25,14 @@ static int lmtst_map_table_ops(struct rvu *rvu, u32 index, u64 *val, { void __iomem *lmt_map_base; u64 tbl_base, cfg; + int pfs, vfs; tbl_base = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_MAP_BASE); + cfg = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_CFG); + vfs = 1 << (cfg & 0xF); + pfs = 1 << ((cfg >> 4) & 0x7); - lmt_map_base = ioremap_wc(tbl_base, LMT_MAP_TABLE_SIZE); + lmt_map_base = ioremap_wc(tbl_base, pfs * vfs * LMT_MAPTBL_ENTRY_SIZE); if (!lmt_map_base) { dev_err(rvu->dev, "Failed to setup lmt map table mapping!!\n"); return -ENOMEM; @@ -80,7 +83,7 @@ static int rvu_get_lmtaddr(struct rvu *rvu, u16 pcifunc, mutex_lock(&rvu->rsrc_lock); rvu_write64(rvu, BLKADDR_RVUM, RVU_AF_SMMU_ADDR_REQ, iova); - pf = rvu_get_pf(pcifunc) & 0x1F; + pf = rvu_get_pf(pcifunc) & RVU_PFVF_PF_MASK; val = BIT_ULL(63) | BIT_ULL(14) | BIT_ULL(13) | pf << 8 | ((pcifunc & RVU_PFVF_FUNC_MASK) & 0xFF); rvu_write64(rvu, BLKADDR_RVUM, RVU_AF_SMMU_TXN_REQ, val); diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c index a1f9ec03c2ce..c827da626471 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c @@ -553,6 +553,7 @@ static ssize_t rvu_dbg_lmtst_map_table_display(struct file *filp, u64 lmt_addr, val, tbl_base; int pf, vf, num_vfs, hw_vfs; void __iomem *lmt_map_base; + int apr_pfs, apr_vfs; int buf_size = 10240; size_t off = 0; int index = 0; @@ -568,8 +569,12 @@ static ssize_t rvu_dbg_lmtst_map_table_display(struct file *filp, return -ENOMEM; tbl_base = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_MAP_BASE); + val = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_CFG); + apr_vfs = 1 << (val & 0xF); + apr_pfs = 1 << ((val >> 4) & 0x7); - lmt_map_base = ioremap_wc(tbl_base, 128 * 1024); + lmt_map_base = ioremap_wc(tbl_base, apr_pfs * apr_vfs * + LMT_MAPTBL_ENTRY_SIZE); if (!lmt_map_base) { dev_err(rvu->dev, "Failed to setup lmt map table mapping!!\n"); kfree(buf); @@ -591,7 +596,7 @@ static ssize_t rvu_dbg_lmtst_map_table_display(struct file *filp, off += scnprintf(&buf[off], buf_size - 1 - off, "PF%d \t\t\t", pf); - index = pf * rvu->hw->total_vfs * LMT_MAPTBL_ENTRY_SIZE; + index = pf * apr_vfs * LMT_MAPTBL_ENTRY_SIZE; off += scnprintf(&buf[off], buf_size - 1 - off, " 0x%llx\t\t", (tbl_base + index)); lmt_addr = readq(lmt_map_base + index); @@ -604,7 +609,7 @@ static ssize_t rvu_dbg_lmtst_map_table_display(struct file *filp, /* Reading num of VFs per PF */ rvu_get_pf_numvfs(rvu, pf, &num_vfs, &hw_vfs); for (vf = 0; vf < num_vfs; vf++) { - index = (pf * rvu->hw->total_vfs * 16) + + index = (pf * apr_vfs * LMT_MAPTBL_ENTRY_SIZE) + ((vf + 1) * LMT_MAPTBL_ENTRY_SIZE); off += scnprintf(&buf[off], buf_size - 1 - off, "PF%d:VF%d \t\t", pf, vf); -- 2.25.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [net PATCH 2/2] octeontx2-af: Fix APR entry mapping based on APR_LMT_CFG 2025-05-21 6:08 ` [net PATCH 2/2] octeontx2-af: Fix APR entry mapping based on APR_LMT_CFG Geetha sowjanya @ 2025-05-21 8:36 ` Michal Swiatkowski 2025-05-21 12:07 ` Geethasowjanya Akula 0 siblings, 1 reply; 9+ messages in thread From: Michal Swiatkowski @ 2025-05-21 8:36 UTC (permalink / raw) To: Geetha sowjanya Cc: netdev, linux-kernel, kuba, davem, pabeni, edumazet, andrew+netdev, sgoutham, sbhatta, hkelam On Wed, May 21, 2025 at 11:38:34AM +0530, Geetha sowjanya wrote: > The current implementation maps the APR table using a fixed size, > which can lead to incorrect mapping when the number of PFs and VFs > varies. > This patch corrects the mapping by calculating the APR table > size dynamically based on the values configured in the > APR_LMT_CFG register, ensuring accurate representation > of APR entries in debugfs. > > Fixes: 0daa55d033b0 ("octeontx2-af: cn10k: debugfs for dumping LMTST map table"). > Signed-off-by: Geetha sowjanya <gakula@marvell.com> > --- > drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c | 9 ++++++--- > .../net/ethernet/marvell/octeontx2/af/rvu_debugfs.c | 11 ++++++++--- > 2 files changed, 14 insertions(+), 6 deletions(-) > > diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c > index 3838c04b78c2..4a3370a40dd8 100644 > --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c > +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c > @@ -13,7 +13,6 @@ > /* RVU LMTST */ > #define LMT_TBL_OP_READ 0 > #define LMT_TBL_OP_WRITE 1 > -#define LMT_MAP_TABLE_SIZE (128 * 1024) > #define LMT_MAPTBL_ENTRY_SIZE 16 > #define LMT_MAX_VFS 256 > > @@ -26,10 +25,14 @@ static int lmtst_map_table_ops(struct rvu *rvu, u32 index, u64 *val, > { > void __iomem *lmt_map_base; > u64 tbl_base, cfg; > + int pfs, vfs; > > tbl_base = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_MAP_BASE); > + cfg = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_CFG); > + vfs = 1 << (cfg & 0xF); > + pfs = 1 << ((cfg >> 4) & 0x7); > > - lmt_map_base = ioremap_wc(tbl_base, LMT_MAP_TABLE_SIZE); > + lmt_map_base = ioremap_wc(tbl_base, pfs * vfs * LMT_MAPTBL_ENTRY_SIZE); > if (!lmt_map_base) { > dev_err(rvu->dev, "Failed to setup lmt map table mapping!!\n"); > return -ENOMEM; > @@ -80,7 +83,7 @@ static int rvu_get_lmtaddr(struct rvu *rvu, u16 pcifunc, > > mutex_lock(&rvu->rsrc_lock); > rvu_write64(rvu, BLKADDR_RVUM, RVU_AF_SMMU_ADDR_REQ, iova); > - pf = rvu_get_pf(pcifunc) & 0x1F; > + pf = rvu_get_pf(pcifunc) & RVU_PFVF_PF_MASK; > val = BIT_ULL(63) | BIT_ULL(14) | BIT_ULL(13) | pf << 8 | > ((pcifunc & RVU_PFVF_FUNC_MASK) & 0xFF); > rvu_write64(rvu, BLKADDR_RVUM, RVU_AF_SMMU_TXN_REQ, val); > diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c > index a1f9ec03c2ce..c827da626471 100644 > --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c > +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c > @@ -553,6 +553,7 @@ static ssize_t rvu_dbg_lmtst_map_table_display(struct file *filp, > u64 lmt_addr, val, tbl_base; > int pf, vf, num_vfs, hw_vfs; > void __iomem *lmt_map_base; > + int apr_pfs, apr_vfs; > int buf_size = 10240; > size_t off = 0; > int index = 0; > @@ -568,8 +569,12 @@ static ssize_t rvu_dbg_lmtst_map_table_display(struct file *filp, > return -ENOMEM; > > tbl_base = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_MAP_BASE); > + val = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_CFG); > + apr_vfs = 1 << (val & 0xF); > + apr_pfs = 1 << ((val >> 4) & 0x7); > > - lmt_map_base = ioremap_wc(tbl_base, 128 * 1024); > + lmt_map_base = ioremap_wc(tbl_base, apr_pfs * apr_vfs * > + LMT_MAPTBL_ENTRY_SIZE); As it is the same as in lmtst_map_table_ops() I think you can move whole to a new function. rvu_ioremap_wc(rvu, base, size); or sth like that. It isn't strong opinion. Rest looks fine, thanks. > if (!lmt_map_base) { > dev_err(rvu->dev, "Failed to setup lmt map table mapping!!\n"); > kfree(buf); > @@ -591,7 +596,7 @@ static ssize_t rvu_dbg_lmtst_map_table_display(struct file *filp, > off += scnprintf(&buf[off], buf_size - 1 - off, "PF%d \t\t\t", > pf); > > - index = pf * rvu->hw->total_vfs * LMT_MAPTBL_ENTRY_SIZE; > + index = pf * apr_vfs * LMT_MAPTBL_ENTRY_SIZE; > off += scnprintf(&buf[off], buf_size - 1 - off, " 0x%llx\t\t", > (tbl_base + index)); > lmt_addr = readq(lmt_map_base + index); > @@ -604,7 +609,7 @@ static ssize_t rvu_dbg_lmtst_map_table_display(struct file *filp, > /* Reading num of VFs per PF */ > rvu_get_pf_numvfs(rvu, pf, &num_vfs, &hw_vfs); > for (vf = 0; vf < num_vfs; vf++) { > - index = (pf * rvu->hw->total_vfs * 16) + > + index = (pf * apr_vfs * LMT_MAPTBL_ENTRY_SIZE) + > ((vf + 1) * LMT_MAPTBL_ENTRY_SIZE); > off += scnprintf(&buf[off], buf_size - 1 - off, > "PF%d:VF%d \t\t", pf, vf); > -- > 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [net PATCH 2/2] octeontx2-af: Fix APR entry mapping based on APR_LMT_CFG 2025-05-21 8:36 ` Michal Swiatkowski @ 2025-05-21 12:07 ` Geethasowjanya Akula 2025-05-22 10:15 ` Paolo Abeni 0 siblings, 1 reply; 9+ messages in thread From: Geethasowjanya Akula @ 2025-05-21 12:07 UTC (permalink / raw) To: Michal Swiatkowski Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, kuba@kernel.org, davem@davemloft.net, pabeni@redhat.com, edumazet@google.com, andrew+netdev@lunn.ch, Sunil Kovvuri Goutham, Subbaraya Sundeep Bhatta, Hariprasad Kelam >-----Original Message----- >From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> >Sent: Wednesday, May 21, 2025 2:06 PM >To: Geethasowjanya Akula <gakula@marvell.com> >Cc: netdev@vger.kernel.org; linux-kernel@vger.kernel.org; kuba@kernel.org; >davem@davemloft.net; pabeni@redhat.com; edumazet@google.com; >andrew+netdev@lunn.ch; Sunil Kovvuri Goutham <sgoutham@marvell.com>; >Subbaraya Sundeep Bhatta <sbhatta@marvell.com>; Hariprasad Kelam ><hkelam@marvell.com> >Subject: [EXTERNAL] Re: [net PATCH 2/2] octeontx2-af: Fix APR entry mapping >based on APR_LMT_CFG >On Wed, May 21, 2025 at 11:38:34AM +0530, Geetha sowjanya wrote: >> The current implementation maps the APR table using a fixed size, >> which can lead to incorrect mapping when the number of PFs and VFs >> varies. >> This patch corrects the mapping by calculating the APR table size >> dynamically based on the values configured in the APR_LMT_CFG >> register, ensuring accurate representation of APR entries in debugfs. >> >> Fixes: 0daa55d033b0 ("octeontx2-af: cn10k: debugfs for dumping LMTST >map table"). >> Signed-off-by: Geetha sowjanya <gakula@marvell.com> >> --- >> drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c | 9 ++++++--- >> .../net/ethernet/marvell/octeontx2/af/rvu_debugfs.c | 11 ++++++++--- >> 2 files changed, 14 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c >> b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c >> index 3838c04b78c2..4a3370a40dd8 100644 >> --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c >> +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c >> @@ -13,7 +13,6 @@ >> /* RVU LMTST */ >> #define LMT_TBL_OP_READ 0 >> #define LMT_TBL_OP_WRITE 1 >> -#define LMT_MAP_TABLE_SIZE (128 * 1024) >> #define LMT_MAPTBL_ENTRY_SIZE 16 >> #define LMT_MAX_VFS 256 >> >> @@ -26,10 +25,14 @@ static int lmtst_map_table_ops(struct rvu *rvu, >> u32 index, u64 *val, { >> void __iomem *lmt_map_base; >> u64 tbl_base, cfg; >> + int pfs, vfs; >> >> tbl_base = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_MAP_BASE); >> + cfg = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_CFG); >> + vfs = 1 << (cfg & 0xF); >> + pfs = 1 << ((cfg >> 4) & 0x7); >> >> - lmt_map_base = ioremap_wc(tbl_base, LMT_MAP_TABLE_SIZE); >> + lmt_map_base = ioremap_wc(tbl_base, pfs * vfs * >> +LMT_MAPTBL_ENTRY_SIZE); >> if (!lmt_map_base) { >> dev_err(rvu->dev, "Failed to setup lmt map table >mapping!!\n"); >> return -ENOMEM; >> @@ -80,7 +83,7 @@ static int rvu_get_lmtaddr(struct rvu *rvu, u16 >> pcifunc, >> >> mutex_lock(&rvu->rsrc_lock); >> rvu_write64(rvu, BLKADDR_RVUM, RVU_AF_SMMU_ADDR_REQ, iova); >> - pf = rvu_get_pf(pcifunc) & 0x1F; >> + pf = rvu_get_pf(pcifunc) & RVU_PFVF_PF_MASK; >> val = BIT_ULL(63) | BIT_ULL(14) | BIT_ULL(13) | pf << 8 | >> ((pcifunc & RVU_PFVF_FUNC_MASK) & 0xFF); >> rvu_write64(rvu, BLKADDR_RVUM, RVU_AF_SMMU_TXN_REQ, val); >diff --git >> a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c >> b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c >> index a1f9ec03c2ce..c827da626471 100644 >> --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c >> +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c >> @@ -553,6 +553,7 @@ static ssize_t >rvu_dbg_lmtst_map_table_display(struct file *filp, >> u64 lmt_addr, val, tbl_base; >> int pf, vf, num_vfs, hw_vfs; >> void __iomem *lmt_map_base; >> + int apr_pfs, apr_vfs; >> int buf_size = 10240; >> size_t off = 0; >> int index = 0; >> @@ -568,8 +569,12 @@ static ssize_t >rvu_dbg_lmtst_map_table_display(struct file *filp, >> return -ENOMEM; >> >> tbl_base = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_MAP_BASE); >> + val = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_CFG); >> + apr_vfs = 1 << (val & 0xF); >> + apr_pfs = 1 << ((val >> 4) & 0x7); >> >> - lmt_map_base = ioremap_wc(tbl_base, 128 * 1024); >> + lmt_map_base = ioremap_wc(tbl_base, apr_pfs * apr_vfs * >> + LMT_MAPTBL_ENTRY_SIZE); > >As it is the same as in lmtst_map_table_ops() I think you can move whole to a >new function. > >rvu_ioremap_wc(rvu, base, size); > >or sth like that. It isn't strong opinion. Rest looks fine, thanks. Will address your suggestion in new patch along with other code enhancement. Thanks for the feedback. Geetha. > >> if (!lmt_map_base) { >> dev_err(rvu->dev, "Failed to setup lmt map table >mapping!!\n"); >> kfree(buf); >> @@ -591,7 +596,7 @@ static ssize_t >rvu_dbg_lmtst_map_table_display(struct file *filp, >> off += scnprintf(&buf[off], buf_size - 1 - off, "PF%d \t\t\t", >> pf); >> >> - index = pf * rvu->hw->total_vfs * LMT_MAPTBL_ENTRY_SIZE; >> + index = pf * apr_vfs * LMT_MAPTBL_ENTRY_SIZE; >> off += scnprintf(&buf[off], buf_size - 1 - off, " 0x%llx\t\t", >> (tbl_base + index)); >> lmt_addr = readq(lmt_map_base + index); @@ -604,7 +609,7 >@@ static >> ssize_t rvu_dbg_lmtst_map_table_display(struct file *filp, >> /* Reading num of VFs per PF */ >> rvu_get_pf_numvfs(rvu, pf, &num_vfs, &hw_vfs); >> for (vf = 0; vf < num_vfs; vf++) { >> - index = (pf * rvu->hw->total_vfs * 16) + >> + index = (pf * apr_vfs * LMT_MAPTBL_ENTRY_SIZE) + >> ((vf + 1) * LMT_MAPTBL_ENTRY_SIZE); >> off += scnprintf(&buf[off], buf_size - 1 - off, >> "PF%d:VF%d \t\t", pf, vf); >> -- >> 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [net PATCH 2/2] octeontx2-af: Fix APR entry mapping based on APR_LMT_CFG 2025-05-21 12:07 ` Geethasowjanya Akula @ 2025-05-22 10:15 ` Paolo Abeni 0 siblings, 0 replies; 9+ messages in thread From: Paolo Abeni @ 2025-05-22 10:15 UTC (permalink / raw) To: Geethasowjanya Akula, Michal Swiatkowski Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, kuba@kernel.org, davem@davemloft.net, edumazet@google.com, andrew+netdev@lunn.ch, Sunil Kovvuri Goutham, Subbaraya Sundeep Bhatta, Hariprasad Kelam On 5/21/25 2:07 PM, Geethasowjanya Akula wrote: >> -----Original Message----- >> From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> >> Sent: Wednesday, May 21, 2025 2:06 PM >>> @@ -568,8 +569,12 @@ static ssize_t >> rvu_dbg_lmtst_map_table_display(struct file *filp, >>> return -ENOMEM; >>> >>> tbl_base = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_MAP_BASE); >>> + val = rvu_read64(rvu, BLKADDR_APR, APR_AF_LMT_CFG); >>> + apr_vfs = 1 << (val & 0xF); >>> + apr_pfs = 1 << ((val >> 4) & 0x7); >>> >>> - lmt_map_base = ioremap_wc(tbl_base, 128 * 1024); >>> + lmt_map_base = ioremap_wc(tbl_base, apr_pfs * apr_vfs * >>> + LMT_MAPTBL_ENTRY_SIZE); >> >> As it is the same as in lmtst_map_table_ops() I think you can move whole to a >> new function. >> >> rvu_ioremap_wc(rvu, base, size); >> >> or sth like that. It isn't strong opinion. Rest looks fine, thanks. > Will address your suggestion in new patch along with other code enhancement. FTR, I'm fine with a net-next follow-up. Cheers, Paolo ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [net PATCH 0/2] octeontx2-af: APR Mapping Fixes 2025-05-21 6:08 [net PATCH 0/2] octeontx2-af: APR Mapping Fixes Geetha sowjanya 2025-05-21 6:08 ` [net PATCH 1/2] octeontx2-af: Set LMT_ENA bit for APR table entries Geetha sowjanya 2025-05-21 6:08 ` [net PATCH 2/2] octeontx2-af: Fix APR entry mapping based on APR_LMT_CFG Geetha sowjanya @ 2025-05-22 10:40 ` patchwork-bot+netdevbpf 2 siblings, 0 replies; 9+ messages in thread From: patchwork-bot+netdevbpf @ 2025-05-22 10:40 UTC (permalink / raw) To: Geethasowjanya Akula Cc: netdev, linux-kernel, kuba, davem, pabeni, edumazet, andrew+netdev, sgoutham, sbhatta, hkelam Hello: This series was applied to netdev/net.git (main) by Paolo Abeni <pabeni@redhat.com>: On Wed, 21 May 2025 11:38:32 +0530 you wrote: > This patch series includes fixes related to APR (LMT) > mapping and debugfs support. > > Changes include: > > Patch 1:Set LMT_ENA bit for APR table entries. > Enables the LMT line for each PF/VF by setting > the LMT_ENA bit in the APR_LMT_MAP_ENTRY_S > structure. > > [...] Here is the summary with links: - [net,1/2] octeontx2-af: Set LMT_ENA bit for APR table entries https://git.kernel.org/netdev/net/c/0eefa27b4933 - [net,2/2] octeontx2-af: Fix APR entry mapping based on APR_LMT_CFG https://git.kernel.org/netdev/net/c/a6ae7129819a You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-05-22 10:39 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-05-21 6:08 [net PATCH 0/2] octeontx2-af: APR Mapping Fixes Geetha sowjanya 2025-05-21 6:08 ` [net PATCH 1/2] octeontx2-af: Set LMT_ENA bit for APR table entries Geetha sowjanya 2025-05-21 8:39 ` Michal Swiatkowski 2025-05-21 12:00 ` Geethasowjanya Akula 2025-05-21 6:08 ` [net PATCH 2/2] octeontx2-af: Fix APR entry mapping based on APR_LMT_CFG Geetha sowjanya 2025-05-21 8:36 ` Michal Swiatkowski 2025-05-21 12:07 ` Geethasowjanya Akula 2025-05-22 10:15 ` Paolo Abeni 2025-05-22 10:40 ` [net PATCH 0/2] octeontx2-af: APR Mapping Fixes patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).