]> www.infradead.org Git - linux.git/commitdiff
octeontx2-af: mcs: Config parser to skip 8B header
authorGeetha sowjanya <gakula@marvell.com>
Wed, 26 Apr 2023 06:25:22 +0000 (11:55 +0530)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 27 Apr 2023 10:38:11 +0000 (12:38 +0200)
When ptp timestamp is enabled in RPM, RPM will append 8B
timestamp header for all RX traffic. MCS need to skip these
8 bytes header while parsing the packet header, so that
correct tcam key is created for lookup.
This patch fixes the mcs parser configuration to skip this
8B header for ptp packets.

Fixes: ca7f49ff8846 ("octeontx2-af: cn10k: Introduce driver for macsec block.")
Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
Signed-off-by: Geetha sowjanya <gakula@marvell.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/marvell/octeontx2/af/mcs_reg.h
drivers/net/ethernet/marvell/octeontx2/af/mcs_rvu_if.c
drivers/net/ethernet/marvell/octeontx2/af/rvu.h
drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c

index c95a8b8f5eaf7c50513e1c7592bcc1080637c8a2..7427e3b1490f419c14c7af7daa320298449ad15e 100644 (file)
@@ -97,6 +97,7 @@
 #define MCSX_PEX_TX_SLAVE_VLAN_CFGX(a)          (0x46f8ull + (a) * 0x8ull)
 #define MCSX_PEX_TX_SLAVE_CUSTOM_TAG_REL_MODE_SEL(a)   (0x788ull + (a) * 0x8ull)
 #define MCSX_PEX_TX_SLAVE_PORT_CONFIG(a)               (0x4738ull + (a) * 0x8ull)
+#define MCSX_PEX_RX_SLAVE_PORT_CFGX(a)         (0x3b98ull + (a) * 0x8ull)
 #define MCSX_PEX_RX_SLAVE_RULE_ETYPE_CFGX(a) ({        \
        u64 offset;                                     \
                                                        \
index eb25e458266ca7b7934e41795fdf98b49723d023..dfd23580e3b8e1fc88e3597e3eaf04832ad18dc7 100644 (file)
@@ -11,6 +11,7 @@
 
 #include "mcs.h"
 #include "rvu.h"
+#include "mcs_reg.h"
 #include "lmac_common.h"
 
 #define M(_name, _id, _fn_name, _req_type, _rsp_type)                  \
@@ -32,6 +33,42 @@ static struct _req_type __maybe_unused                                       \
 MBOX_UP_MCS_MESSAGES
 #undef M
 
+void rvu_mcs_ptp_cfg(struct rvu *rvu, u8 rpm_id, u8 lmac_id, bool ena)
+{
+       struct mcs *mcs;
+       u64 cfg;
+       u8 port;
+
+       if (!rvu->mcs_blk_cnt)
+               return;
+
+       /* When ptp is enabled, RPM appends 8B header for all
+        * RX packets. MCS PEX need to configure to skip 8B
+        * during packet parsing.
+        */
+
+       /* CNF10K-B */
+       if (rvu->mcs_blk_cnt > 1) {
+               mcs = mcs_get_pdata(rpm_id);
+               cfg = mcs_reg_read(mcs, MCSX_PEX_RX_SLAVE_PEX_CONFIGURATION);
+               if (ena)
+                       cfg |= BIT_ULL(lmac_id);
+               else
+                       cfg &= ~BIT_ULL(lmac_id);
+               mcs_reg_write(mcs, MCSX_PEX_RX_SLAVE_PEX_CONFIGURATION, cfg);
+               return;
+       }
+       /* CN10KB */
+       mcs = mcs_get_pdata(0);
+       port = (rpm_id * rvu->hw->lmac_per_cgx) + lmac_id;
+       cfg = mcs_reg_read(mcs, MCSX_PEX_RX_SLAVE_PORT_CFGX(port));
+       if (ena)
+               cfg |= BIT_ULL(0);
+       else
+               cfg &= ~BIT_ULL(0);
+       mcs_reg_write(mcs, MCSX_PEX_RX_SLAVE_PORT_CFGX(port), cfg);
+}
+
 int rvu_mbox_handler_mcs_set_lmac_mode(struct rvu *rvu,
                                       struct mcs_set_lmac_mode *req,
                                       struct msg_rsp *rsp)
index ef721caeac49b1b9872cdf2aebbdc67515c9ad6d..d655bf04a483dd3d3513ad7e2d092241d5bdb804 100644 (file)
@@ -920,6 +920,7 @@ int rvu_get_hwvf(struct rvu *rvu, int pcifunc);
 /* CN10K MCS */
 int rvu_mcs_init(struct rvu *rvu);
 int rvu_mcs_flr_handler(struct rvu *rvu, u16 pcifunc);
+void rvu_mcs_ptp_cfg(struct rvu *rvu, u8 rpm_id, u8 lmac_id, bool ena);
 void rvu_mcs_exit(struct rvu *rvu);
 
 #endif /* RVU_H */
index 438b212fb54a7e2318c998811c21f501ec5262b4..83b342fa8d753cd880ffd6a29bf8e82d1775b9ba 100644 (file)
@@ -773,6 +773,8 @@ static int rvu_cgx_ptp_rx_cfg(struct rvu *rvu, u16 pcifunc, bool enable)
        /* This flag is required to clean up CGX conf if app gets killed */
        pfvf->hw_rx_tstamp_en = enable;
 
+       /* Inform MCS about 8B RX header */
+       rvu_mcs_ptp_cfg(rvu, cgx_id, lmac_id, enable);
        return 0;
 }